Particionamento de Domínio¶
Quando uma malha de grande escala é analisada em paralelo utilizando vários processos, a malha de domínio único tem primeiro de ser dividida em subdomínios e as informações necessárias para atribuir cada processo e para a comunicação entre domínios têm de ser geradas antecipadamente. Esta etapa de pré-processamento denomina-se particionamento de domínio.
No cálculo paralelo do FrontISTR, hecmw_part1 particiona uma malha de domínio único em subdomínios e cria dados de malha distribuída. Os dados de malha distribuída gerados são lidos pelo fistr1 paralelo e utilizados pelo solver paralelo juntamente com as informações necessárias para a comunicação entre domínios.
Esta página descreve o tipo de particionamento, o método de particionamento, a profundidade de sobreposição e o tratamento dos pontos de contacto selecionados para o particionamento de domínio. Para o procedimento de execução de hecmw_part1, a sintaxe específica do ficheiro de controlo e as mensagens de erro, consulte os tópicos relacionados.
Visão geral¶
O particionamento de domínio é o processo de dividir uma malha de domínio único em vários subdomínios. O FrontISTR cria dados de malha distribuída combinando um tipo de particionamento, um método de particionamento, um número de domínios e uma profundidade de sobreposição.
| Critério de seleção | Opções principais | Função |
|---|---|---|
| Tipo de particionamento | Particionamento baseado em nós, particionamento baseado em elementos | Determina se a propriedade é atribuída por nó ou por elemento. |
| Método de particionamento | RCB, METIS (pMETIS / kMETIS) | Determina como são criadas as fronteiras dos domínios. |
| Número de domínios | Qualquer número inteiro positivo (\(2^n\) para RCB) | Determina o número de subdomínios nos dados de malha distribuída. Normalmente, corresponde ao número de processos MPI. |
| Profundidade de sobreposição | Número inteiro igual ou superior a 1 | Determina o intervalo retido redundantemente pelos domínios vizinhos. É especificada para o particionamento baseado em nós. |
| Tabelas de comunicação | Informações de importação/exportação, informações partilhadas | Define a troca de dados necessária entre subdomínios vizinhos. Gerada automaticamente durante o particionamento de domínio. |
Como as tabelas de comunicação estão incluídas nos dados de malha distribuída, normalmente os utilizadores não precisam de as editar diretamente. O fistr1 paralelo lê os dados de malha distribuída e resolve as equações lineares utilizando um método direto paralelo, como MUMPS, ou um método iterativo.
Escolha da configuração de particionamento de domínio¶
Para análises estruturais e de condução de calor comuns, deve geralmente considerar-se primeiro o particionamento baseado em nós. O particionamento baseado em nós simplifica a comunicação dos valores nodais necessária na análise paralela por elementos finitos e permite também especificar a profundidade de sobreposição. O particionamento baseado em elementos é uma opção para aplicações, como análises acopladas, em que a informação particionada deve ser tratada principalmente por elemento.
Escolha o método de particionamento com base na geometria e no número de domínios. Para geometrias simples em que o número de domínios pode ser \(2^n\), RCB é uma escolha simples e estável. Para geometrias complexas ou quando é necessário um número arbitrário de domínios, METIS, baseado em particionamento de grafos, é uma opção.
| Características do problema | Escolha recomendada |
|---|---|
| Análise estrutural ou de condução de calor paralela padrão | Particionamento baseado em nós |
| Aplicações que utilizam informação distribuída centrada nos elementos, como análises acopladas | Particionamento baseado em elementos |
| Geometria simples próxima de um sólido retangular, com \(2^n\) domínios | RCB |
| Geometria complexa ou número arbitrário de domínios | METIS |
| Problemas de contacto ou com restrições MPC que utilizem o pré-condicionador SAINV | Utilize particionamento baseado em nós com uma profundidade de sobreposição igual ou superior a 2 |
O número de domínios corresponde normalmente ao número de processos MPI. Para o procedimento de execução em paralelo e a especificação do número de processos, consulte Análise Paralela. Para a relação entre o pré-condicionador SAINV e a profundidade de sobreposição, consulte também Solver e Pré-condicionadores.
Tipos de particionamento¶
O tipo de particionamento determina a entidade da malha à qual é atribuída propriedade exclusiva por um subdomínio. O particionamento baseado em nós atribui propriedade aos nós, enquanto o particionamento baseado em elementos atribui propriedade aos elementos. Em ambos os casos, as informações necessárias ao cálculo com subdomínios vizinhos são retidas como dados de sobreposição.
Particionamento baseado em nós¶
No particionamento baseado em nós, cada nó é atribuído exatamente a um subdomínio proprietário. Os elementos são retidos com sobreposição nos subdomínios vizinhos. Na entrada, isto é especificado com !PARTITION, TYPE=NODE-BASED.

Cada subdomínio retém os seus nós internos, os elementos que contêm esses nós internos e os nós que constituem esses elementos.

As tabelas de comunicação do particionamento baseado em nós contêm as seguintes informações.
- Nós importados: Nós utilizados num subdomínio que pertencem a outro subdomínio.
- Nós exportados: Nós internos que são nós importados de outro subdomínio.
- Elementos partilhados: Elementos partilhados com outros subdomínios.



Particionamento baseado em elementos¶
No particionamento baseado em elementos, cada elemento é atribuído exatamente a um subdomínio proprietário. Os nós são retidos com sobreposição nos subdomínios vizinhos. Na entrada, isto é especificado com !PARTITION, TYPE=ELEMENT-BASED.

Cada subdomínio retém os seus elementos internos, os nós que constituem esses elementos internos e os elementos que contêm esses nós.

As tabelas de comunicação do particionamento baseado em elementos contêm as seguintes informações.
- Elementos importados: Elementos utilizados num subdomínio que pertencem a outro subdomínio.
- Elementos exportados: Elementos internos que são elementos importados de outro subdomínio.
- Nós partilhados: Nós partilhados com outros subdomínios.



Para qualquer dos tipos de particionamento, hecmw_part1 gera automaticamente as tabelas de comunicação e escreve-as nos dados de malha distribuída. Por conseguinte, normalmente os utilizadores não precisam de criar diretamente as informações de importação/exportação.
Métodos de particionamento¶
O método de particionamento determina como são criadas as fronteiras dos subdomínios. O FrontISTR suporta RCB baseado em coordenadas e METIS baseado em particionamento de grafos.
| Método de particionamento | Características | Principais restrições e notas |
|---|---|---|
| RCB | Bissecta recursivamente a malha com base nos valores das coordenadas. Permite um particionamento rápido para geometrias simples. | O número de domínios está limitado a \(2^n\). Têm de ser especificados os eixos de particionamento. |
| pMETIS | Utiliza particionamento de grafos tendo em conta a conectividade entre domínios. | Disponível em compilações com METIS ativado. |
| kMETIS | Utiliza particionamento de grafos multiway, sendo adequado à criação de fronteiras de domínio em geometrias complexas. | Disponível em compilações com METIS ativado. |
RCB significa Recursive Coordinate Bisection e bissecta repetidamente a malha ao longo dos eixos de coordenadas. É adequado quando o número de domínios pode ser \(2^n\) e é fácil de utilizar em geometrias simples, semelhantes a uma caixa.
METIS trata a conectividade da malha como um grafo e cria subdomínios por particionamento do grafo. É uma opção para geometrias complexas ou quando o número de domínios não deve ficar limitado a \(2^n\). Para utilizar METIS, a biblioteca METIS tem de estar ativada no momento da compilação. Para o tratamento das dependências, consulte Dependências Obrigatórias e Opcionais.
Profundidade de sobreposição¶
A profundidade de sobreposição é o número de camadas no intervalo retido redundantemente pelos subdomínios vizinhos. Para o particionamento baseado em nós, !PARTITION permite especificar um número inteiro igual ou superior a 1 através do parâmetro DEPTH. A profundidade de sobreposição predefinida é 1.
Para uma análise paralela comum, DEPTH=1 é suficiente. No entanto, quando é utilizado um pré-condicionador da família SAI, como SAINV, num problema de contacto ou num problema com restrições MPC, aumentar a profundidade de sobreposição para 2 ou mais pode melhorar a qualidade do pré-condicionador.
Também é necessária uma profundidade de sobreposição igual ou superior a 2 quando a formulação de suavização seletiva por arestas/nós (FORM341=SELECTIVE_ESNS) é utilizada com o elemento tetraédrico de primeira ordem 341 em cálculo paralelo MPI. A suavização baseada em arestas e em nós calcula médias das grandezas sobre elementos adjacentes ao elemento alvo, pelo que a montagem da rigidez dentro de um subdomínio requer informações de elementos afastados duas camadas de adjacência; com o valor predefinido DEPTH=1, a suavização junto às fronteiras dos domínios é insuficiente. Para detalhes sobre a formulação do elemento, consulte Biblioteca de Elementos.
Aumentar a profundidade de sobreposição aumenta o número de nós e elementos retidos pelos subdomínios vizinhos, aumentando assim tanto a utilização de memória como o volume de comunicação. Defina-a equilibrando a melhoria da convergência com o aumento do custo computacional. Para a seleção do pré-condicionador, consulte Solver e Pré-condicionadores.
Tratamento dos pontos de contacto¶
Ao particionar uma malha que contém pares de contacto, !PARTITION permite utilizar o parâmetro CONTACT para especificar a política de colocação dos pontos de contacto nos domínios. A colocação dos pontos de contacto afeta a estabilidade e o volume de comunicação das análises paralelas que envolvem pesquisa de contacto e restrições de contacto.
| Valor | Função |
|---|---|
DEFAULT |
Utiliza a política de colocação padrão. |
SIMPLE |
Utiliza uma colocação próxima do particionamento comum, sem atribuir pesos especiais aos pontos de contacto. |
AGGREGATE |
Efetua o particionamento de forma a tender a agrupar os nós associados aos pares de contacto. |
DISTRIBUTE |
Efetua o particionamento de modo a reduzir a probabilidade de os nós de contacto do lado master se concentrarem em determinados subdomínios. |
Para malhas sem contacto, o parâmetro CONTACT geralmente não requer atenção. Se a convergência ou o balanceamento de carga forem problemáticos numa análise paralela que envolva contacto, reveja a política de colocação dos pontos de contacto. Para detalhes sobre a sintaxe de entrada, consulte !PARTITION.
Saída de uma imagem do particionamento de domínio¶
Com !PARTITION, a especificação do parâmetro UCD produz um ficheiro UCD para verificar o resultado do particionamento. O ficheiro UCD pode ser utilizado com ferramentas de visualização, como o MicroAVS, para inspecionar os números dos domínios e as fronteiras das partições.
Depois de alterar o número de domínios, o método de particionamento ou a profundidade de sobreposição, é importante verificar se existe desequilíbrio entre os domínios particionados ou fragmentação anómala. A saída UCD é uma função auxiliar para verificar a validade do particionamento antes de executar a análise paralela.
Tópicos relacionados¶
- Análise Paralela — Procedimento de execução de
hecmw_part1, ficheiros de entrada e verificação da saída dos dados de malha distribuída. - Solver e Pré-condicionadores — Solvers paralelos, pré-condicionadores e relação entre SAINV e a profundidade de sobreposição.
- Lista de Mensagens de Erro — Mensagens de erro representativas de
hecmw_part1efistr1. - Método dos Elementos Finitos Paralelo — Fundamentos teóricos da decomposição de domínio e dos métodos dos elementos finitos paralelos.
- !PARTITION — Sintaxe de entrada dos dados de controlo do utilitário de particionamento de domínio.