Particionamento de malha¶
Ao analisar em paralelo uma malha de grande escala usando vários processos, é necessário dividir previamente a malha de domínio único em subdomínios e gerar as informações necessárias para a região atribuída a cada processo e para a comunicação entre domínios. Esse pré-processamento é denominado particionamento de malha.
Na computação paralela do FrontISTR, hecmw_part1 divide 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 em paralelo e usados 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 contato selecionados no particionamento da malha. Para o procedimento de execução de hecmw_part1, a sintaxe específica do arquivo de controle e as mensagens de erro, consulte os tópicos relacionados.
Visão geral das funções¶
O particionamento de malha é o processo de dividir uma malha de domínio único em vários subdomínios. O FrontISTR cria dados de malha distribuída combinando o tipo de particionamento, o método de particionamento, o número de domínios e a profundidade de sobreposição.
| Eixo de seleção | Principais opções | Função |
|---|---|---|
| Tipo de particionamento | Baseado em nós, baseado em elementos | Determina se a atribuição de propriedade é feita por nó ou por elemento. |
| Método de particionamento | RCB, METIS (pMETIS / kMETIS) | Determina como os limites dos domínios são criados. |
| Número de domínios | Qualquer inteiro positivo (\(2^n\) no RCB) | Determina o número de subdomínios nos dados de malha distribuída. Normalmente é igualado ao número de processos MPI. |
| Profundidade de sobreposição | Inteiro igual ou superior a 1 | Determina a extensão mantida de forma redundante pelos domínios vizinhos. Especificada no particionamento baseado em nós. |
| Tabelas de comunicação | Informações de importação/exportação, informações compartilhadas | Define a troca de dados necessária entre subdomínios vizinhos. Geradas automaticamente durante o particionamento da malha. |
Como as tabelas de comunicação estão incluídas nos dados de malha distribuída, normalmente o usuário não precisa editá-las diretamente. O fistr1 em paralelo lê esses dados de malha distribuída e resolve as equações lineares usando um método direto paralelo, como MUMPS, ou um método iterativo.
Como escolher a configuração de particionamento da malha¶
Para análises estruturais e de condução térmica comuns, deve-se considerar primeiro o particionamento baseado em nós. Ele facilita o tratamento da comunicação dos valores nodais necessária na análise paralela por elementos finitos e também permite especificar a profundidade de sobreposição. O particionamento baseado em elementos é uma opção para aplicações, como análises acopladas, nas quais se deseja tratar as informações após o particionamento principalmente por elemento.
Escolha o método de particionamento de acordo com a geometria e o número de domínios. Para geometrias simples em que o número de domínios pode ser \(2^n\), o RCB é uma opção simples e estável. Para geometrias complexas ou quando se deseja um número arbitrário de domínios, o METIS, baseado em particionamento de grafos, é uma opção.
| Características do problema | Escolha recomendada |
|---|---|
| Análise paralela estrutural ou de condução térmica padrão | Particionamento baseado em nós |
| Aplicações que usam informações distribuídas centradas em elementos, como análises acopladas | Particionamento baseado em elementos |
| Geometria simples próxima de um paralelepípedo, com \(2^n\) domínios | RCB |
| Geometria complexa ou número arbitrário de domínios | METIS |
| Problemas de contato ou com restrições MPC usando o pré-condicionador SAINV | Usar particionamento baseado em nós com profundidade de sobreposição igual ou superior a 2 |
O número de domínios normalmente é igualado ao número de processos MPI. Para o procedimento de execução paralela 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é-condicionamento.
Tipos de particionamento¶
O tipo de particionamento determina a qual entidade da malha será atribuída a propriedade exclusiva de um subdomínio. No particionamento baseado em nós, a propriedade é atribuída aos nós; no particionamento baseado em elementos, aos elementos. Em ambos os casos, as informações necessárias para o cálculo com subdomínios vizinhos são mantidas como dados de sobreposição.
Particionamento baseado em nós¶
No particionamento baseado em nós, cada nó é atribuído a exatamente um subdomínio proprietário. Nos subdomínios vizinhos, os elementos são mantidos com sobreposição. Na entrada, isso é especificado por !PARTITION, TYPE=NODE-BASED.

Cada subdomínio mantém 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 em um subdomínio que pertencem a outro subdomínio.
- Nós exportados: nós internos que são nós importados por outro subdomínio.
- Elementos compartilhados: elementos compartilhados com outros subdomínios.



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

Cada subdomínio mantém 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 em um subdomínio que pertencem a outro subdomínio.
- Elementos exportados: elementos internos que são elementos importados por outro subdomínio.
- Nós compartilhados: nós compartilhados com outros subdomínios.



Para qualquer um dos tipos de particionamento, hecmw_part1 gera automaticamente as tabelas de comunicação e as grava nos dados de malha distribuída. Portanto, normalmente o usuário não precisa criar diretamente as informações de importação/exportação.
Métodos de particionamento¶
O método de particionamento determina como os limites dos subdomínios são criados. O FrontISTR disponibiliza o RCB baseado em coordenadas e o METIS baseado em particionamento de grafos.
| Método de particionamento | Características | Principais restrições e observações |
|---|---|---|
| RCB | Divide recursivamente a malha em duas partes com base nos valores das coordenadas. Permite particionamento rápido para geometrias simples. | O número de domínios é limitado a \(2^n\). É necessário especificar os eixos de particionamento. |
| pMETIS | Usa particionamento de grafos considerando a conectividade entre domínios. | Disponível em builds com METIS habilitado. |
| kMETIS | Usa particionamento de grafos em múltiplas partes, facilitando a criação de limites de domínios em geometrias complexas. | Disponível em builds com METIS habilitado. |
RCB é a sigla de Recursive Coordinate Bisection e divide repetidamente a malha em duas partes ao longo dos eixos de coordenadas. É adequado quando o número de domínios pode ser \(2^n\) e é fácil de usar em geometrias simples semelhantes a paralelepípedos.
O METIS trata a conectividade da malha como um grafo e cria subdomínios por particionamento de grafos. É uma opção para geometrias complexas ou quando não se deseja limitar o número de domínios a \(2^n\). Para usar METIS, a biblioteca METIS deve estar habilitada durante o build. 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 da região mantida de forma redundante pelos subdomínios vizinhos. No particionamento baseado em nós, em !PARTITION, o parâmetro DEPTH permite especificar um inteiro igual ou superior a 1. A profundidade de sobreposição padrão é 1.
Em uma análise paralela comum, DEPTH=1 é suficiente. Entretanto, quando um pré-condicionador da família SAI, como SAINV, é usado em um problema de contato ou com restrições MPC, aumentar a profundidade de sobreposição para 2 ou mais pode melhorar a qualidade do pré-condicionamento.
Também é necessário usar uma profundidade de sobreposição igual ou superior a 2 quando a formulação seletiva de suavização de arestas/nós (FORM341=SELECTIVE_ESNS) é usada com o elemento tetraédrico linear 341 em paralelo com MPI. A suavização baseada em arestas ou nós calcula médias de grandezas nos elementos adjacentes ao elemento-alvo; por isso, para montar a rigidez dentro de um subdomínio são necessárias informações de elementos a duas camadas de adjacência, e com o padrão DEPTH=1 a suavização próxima aos limites dos domínios é insuficiente. Para detalhes da formulação do elemento, consulte Biblioteca de elementos.
Aumentar a profundidade de sobreposição aumenta o número de nós e elementos mantidos pelos subdomínios vizinhos e, consequentemente, o uso de memória e o volume de comunicação. Defina esse valor ponderando a melhoria da convergência contra o aumento do custo computacional. Para a seleção do pré-condicionador, consulte Solver e pré-condicionamento.
Tratamento dos pontos de contato¶
Ao decompor uma malha que contém pares de contato, em !PARTITION, o parâmetro CONTACT permite especificar a política de alocação dos pontos de contato entre os domínios. A alocação dos pontos de contato afeta a estabilidade e o volume de comunicação de análises paralelas que envolvem busca de contato e restrições de contato.
| Valor | Função |
|---|---|
DEFAULT | Usa a política de alocação padrão. |
SIMPLE | Usa uma alocação próxima ao particionamento comum, sem atribuir pesos especiais aos pontos de contato. |
AGGREGATE | Particiona de modo a tender a agrupar os nós associados aos pares de contato. |
DISTRIBUTE | Particiona de modo que os nós do lado mestre do contato tenham menor tendência a se concentrar em subdomínios específicos. |
Em malhas sem contato, normalmente não é necessário considerar o parâmetro CONTACT. Se houver problemas de convergência ou balanceamento de carga em uma análise paralela com contato, revise a política de alocação dos pontos de contato. Para detalhes da sintaxe de entrada, consulte !PARTITION.
Independentemente disso, o parâmetro CONTACT_OWNER permite selecionar o esquema de propriedade do contato paralelo. Enquanto CONTACT especifica “como particionar”, CONTACT_OWNER especifica “qual lado fica responsável após o particionamento”.
| Valor | Função |
|---|---|
MASTER | Esquema de propriedade do mestre (padrão). A superfície mestre é particionada pelos domínios proprietários dos elementos, e os nós escravos são replicados em cada domínio proprietário do mestre. |
SLAVE | Esquema de propriedade do escravo. Cada nó escravo é mantido apenas em seu domínio proprietário, e toda a superfície mestre é colocada nesse domínio. |
No deslizamento finito (!CONTACT com INTERACTION=FSLID), quando um nó escravo atravessa uma fronteira de particionamento da malha na superfície mestre, no esquema MASTER a busca de adjacência pode ser interrompida na fronteira, fazendo com que o estado de contato e o histórico de atrito sejam perdidos e que a solução dependa do número de domínios. O esquema SLAVE evita esse problema. Ele só pode ser especificado quando TYPE=NODE-BASED; o uso de memória aumenta nos domínios que possuem nós escravos.
Saída de imagem do particionamento da malha¶
Ao especificar em !PARTITION o parâmetro UCD, é possível gerar um arquivo UCD para verificar o resultado do particionamento. O arquivo UCD pode ser usado com ferramentas de visualização, como MicroAVS, para verificar os números dos domínios e os limites do particionamento.
Depois de alterar o número de domínios, o método de particionamento ou a profundidade de sobreposição, é importante verificar se há desequilíbrio entre os domínios particionados ou fragmentação artificial. A saída UCD é uma função auxiliar para verificar a adequação do particionamento antes de executar a análise paralela.
Tópicos relacionados¶
- Análise paralela — Procedimento de execução de
hecmw_part1, arquivos de entrada e verificação da saída dos dados de malha distribuída. - Solver e pré-condicionamento — 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 do método dos elementos finitos em paralelo.
- !PARTITION — Sintaxe de entrada dos dados de controle do utilitário de particionamento de malha.