Ir para o conteúdo

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.

Conceito de particionamento baseado em nós

Figura 10.1 Conceito de particionamento baseado em nós

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.

Nós e elementos mantidos por cada subdomínio no particionamento baseado em nós

Figura 10.2 Nós e elementos mantidos por cada subdomínio no particionamento baseado em nós

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.

Nós importados no particionamento baseado em nós

Figura 10.3 Nós importados no particionamento baseado em nós

Nós exportados no particionamento baseado em nós

Figura 10.4 Nós exportados no particionamento baseado em nós

Elementos compartilhados no particionamento baseado em nós

Figura 10.5 Elementos compartilhados no particionamento baseado em nós

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.

Conceito de particionamento baseado em elementos

Figura 10.6 Conceito de particionamento baseado em elementos

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.

Nós e elementos mantidos por cada subdomínio no particionamento baseado em elementos

Figura 10.7 Nós e elementos mantidos por cada subdomínio no particionamento baseado em elementos

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.

Elementos importados no particionamento baseado em elementos

Figura 10.8 Elementos importados no particionamento baseado em elementos

Elementos exportados no particionamento baseado em elementos

Figura 10.9 Elementos exportados no particionamento baseado em elementos

Nós compartilhados no particionamento baseado em elementos

Figura 10.10 Nós compartilhados no particionamento baseado em elementos

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_part1 e fistr1.
  • 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.