!SOLVER¶
Controle do solver
Dados de controle obrigatórios.
Parâmetros¶
METHOD = Método de solução (CG, BiCGSTAB, GMRES, GPBiCG, CR, DIRECT, DIRECTmkl, MUMPS)
DIRECT : Método direto, exceto para análise de contato (somente processamento serial) (atualmente indisponível)
DIRECTmkl : Método direto usando Intel MKL
MUMPS : Método direto usando MUMPS
Quando um método direto é selecionado, as linhas de dados são ignoradas.
Métodos iterativos para problemas com 3 DOFs oferecem execução paralela por threads com OpenMP
PRECOND = Método de pré-condicionamento para solvers iterativos (1, 2, 3, 5, 10, 11, 12, 22)
1, 2 : SSOR (em bloco) (com ordenação multicolor somente para problemas com 3 DOFs)
3 : Escalonamento diagonal (em bloco)
5 : AMG usando o pacote de pré-condicionamento multigrid ML
10 : ILU(0) em bloco
11 : ILU(1) em bloco
12 : ILU(2) em bloco
22 : AMG usando o SA-AMG integrado ao HEC-MW (AMG por agregação suavizada)
10, 11 e 12 estão disponíveis somente para problemas com 3 DOFs
22 está disponível somente em compilações com LAPACK habilitado
Para execução paralela por threads OpenMP, recomenda-se SSOR, escalonamento diagonal, ML ou SA-AMG
ITERLOG = Se o histórico de convergência do solver iterativo deve ser gerado (YES/NO)(padrão: NO)
TIMELOG = Se o tempo de cálculo do solver deve ser gerado (YES/NO/VERBOSE)(padrão: NO)
LOGLEVEL = Nível de saída das informações de diagnóstico do pré-condicionador (inteiro)(padrão: sem saída)
Especificado independentemente de ITERLOG e TIMELOG
Com valor 1 ou maior, gera a estrutura hierárquica e outras informações dos pré-condicionadores AMG (PRECOND=5,22)
Com valor 2 ou maior, gera informações mais detalhadas (como uso de memória)
USEJAD = Se deve ser usada ordenação para processadores vetoriais (YES/NO)(padrão: NO)
Válido somente quando um método iterativo é usado para um problema com 3 DOFs
SCALING = Se a matriz deve ser escalonada de modo que as entradas diagonais sejam 1 (YES/NO)(padrão: NO)
Válido somente quando um método iterativo é usado para um problema com 3 DOFs
DUMPTYPE = Formato de dump da matriz (NONE, MM, CSR, BSR) (principalmente para depuração)
NONE : Não gerar dump (padrão)
MM : Formato Matrix Market
CSR : Formato Compressed Sparse Row (CSR)
BSR : Formato CSR em blocos
DUMPEXIT = Encerra o programa imediatamente após o dump da matriz (YES/NO)(padrão: NO)
MPCMETHOD = Método de tratamento de restrições multiponto (1, 3)
1: Método da penalidade (padrão ao usar um método direto)
3: Eliminação explícita de DOFs (padrão ao usar um método iterativo)
O método MPC-CG (2) foi removido. Se 2 for especificado, um aviso será emitido e o método padrão será usado.
ESTCOND = Frequência de estimativa do número de condição (experimental)
Estima o número de condição a cada intervalo de iterações especificado e ao final das iterações
Nenhuma estimativa é realizada quando 0 é especificado
RECOMPUTE_RESIDUAL = Frequência de recálculo do vetor de resíduo
Válido somente quando CG, BiCGSTAB, GPBiCG ou PipeCG é especificado para METHOD
Os métodos iterativos atualizam o vetor de resíduo por uma relação de recorrência, acumulando erros de arredondamento
A cada intervalo de iterações especificado, o vetor de resíduo é recalculado a partir de {b}-[A]{x}
Quando 0 é especificado, usa-se o valor padrão de cada método (CG: 50, BiCGSTAB: 100, GPBiCG: 20, PipeCG: 50)
Quando um valor negativo é especificado, não é realizado recálculo periódico
O recálculo para confirmar a convergência quando o critério de convergência é satisfeito é sempre realizado, independentemente deste parâmetro
Um intervalo curto demais não só aumenta o número de produtos matriz-vetor,
como também pode piorar a convergência ou até impedir que ela seja alcançada
Se o valor padrão for alterado, verifique o histórico de convergência e o resíduo relativo final
METHOD2 = Método de solução secundário (BiCGSTAB, GMRES, GPBiCG) (experimental)
Válido somente quando CG é especificado para METHOD
Se CG divergir, muda automaticamente para o método secundário e continua a solução
Os mesmos valores são usados para os demais parâmetros e linhas de dados
CONTACT_ELIM = Especifica se a eliminação de DOFs é realizada na análise de contato (0,1)
0: Realiza a eliminação de DOFs somente ao usar um método iterativo (padrão)
1: Sempre realiza a eliminação de DOFs (inclusive ao usar um método direto)
** 2ª linha e seguintes **
| Variável | Tipo | Descrição |
|---|---|---|
| NITER | I | Número de iterações (padrão: 100) |
| iterPREmax | I | Número de iterações do pré-condicionamento Additive Schwarz (padrão: 1) (Valor recomendado: 1; 2 pode ser eficaz em alguns cálculos paralelos) |
| NREST | I | Tamanho do subespaço de Krylov (padrão: 10) (Válido somente quando GMRES é selecionado como método de solução) |
| NCOLOR_IN | I | Número-alvo de cores para ordenação multicolor (padrão: 10) (Válido somente quando o número de threads OpenMP é 2 ou maior) |
| RECYCLEPRE | I | Número de vezes que as informações de configuração do pré-condicionador são reutilizadas (padrão: 3) (Válido somente em análise não linear) |
| Variável | Tipo | Descrição |
|---|---|---|
| RESID | R | Erro de truncamento (padrão: 1.0e-8) |
| SIGMA_DIAG | R | Fator de escala aplicado às entradas diagonais ao calcular a matriz de pré-condicionamento (padrão: 1.0) (Se ocorrer divisão por zero ou divergência com pré-condicionamento ILU, o problema poderá convergir quando for especificado um valor maior que 1.0) |
| SIGMA | R | Não utilizado (padrão: 0.0) |
Quando PRECOND=5 (opcional)¶
Se for especificado para PRECOND um valor que não seja 5 nem 22, a 4ª linha será ignorada.
| Variável | Tipo | Descrição |
|---|---|---|
| ML_CoarseSolver | I | Solver da malha grossa para ML (1: usar smoother, 2: KLU (método direto serial), 3: MUMPS (método direto paralelo)) (padrão: 1) (Recomendado: 3 ou 2 para problemas difíceis, 1 para problemas comuns) |
| ML_Smoother | I | Smoother do ML (1: Chebyshev, 2: SymBlockGaussSeidel, 3: Jacobi) (padrão: 1) (Recomendado: 1) |
| ML_MGCycle | I | Ciclo multigrid do ML (1: ciclo V, 2: ciclo W, 3: ciclo Full-V) (padrão: 1) (Recomendado: 2 para problemas difíceis, 1 para problemas comuns) |
| ML_MaxLevels | I | Número máximo de níveis do ML (padrão: 10) (Para problemas particularmente difíceis, use um solver direto na malha grossa e 2 níveis (ou 3 se a memória for insuficiente); para problemas comuns, recomenda-se 10) |
| ML_CoarseningScheme | I | Esquema de coarsening do ML (1: UncoupledMIS, 2: METIS, 4: Zoltan, 5: DD) (padrão: 1) (Recomendado: 1 ou 5) |
| ML_NumSweep | I | Número de sweeps do smoother do ML (grau do polinômio para Chebyshev) (padrão: 2) (Recomendado: 2 para Chebyshev, 1 para SymBlockGaussSeidel) |
Quando PRECOND=22 (opcional)¶
Se for especificado para PRECOND um valor diferente de 22, a 5ª linha será ignorada. A 4ª e a 5ª linhas podem ser omitidas por completo, e também é possível omitir os itens finais de qualquer uma delas. O valor padrão será usado para qualquer item especificado como 0.
Os itens 1 a 7 da 4ª linha são dispostos na mesma ordem da linha de opções de PRECOND=5 (ML), portanto a linha de opções do ML pode ser reutilizada sem alterações. Os itens 8 a 10 são específicos do SA-AMG.
(4ª linha) SA_CoarseSolver, SA_Smoother, SA_MGCycle, SA_MaxLevels, (não utilizado), SA_ChebyDegree, SA_CoarseSize, SA_MaxAggSize, SA_GalerkinLowMem, (não utilizado)
| Variável | Tipo | Descrição |
|---|---|---|
| SA_CoarseSolver | I | Solver da malha grossa (0: automático, 1: usar smoother, 2: método direto para matriz densa, 3: MUMPS (método direto paralelo)) (padrão: 0) (No modo automático, MUMPS é usado em compilações com MUMPS habilitado; caso contrário, usa-se o método direto para matriz densa) |
| SA_Smoother | I | Smoother (0 ou 1: Chebyshev) (padrão: 0) (Somente Chebyshev é suportado. Se outro valor for especificado, um aviso será gerado e Chebyshev será usado) |
| SA_MGCycle | I | Ciclo multigrid (0: padrão (ciclo W), 1: ciclo V, 2: ciclo W) (padrão: 0) (O ciclo Full-V não é suportado) |
| SA_MaxLevels | I | Número máximo de níveis (padrão: 20) |
| (não utilizado) | I | Posição correspondente ao esquema de coarsening do ML. Como o SA-AMG sempre usa agregação desacoplada, um valor diferente de 0 gera um aviso e é ignorado |
| SA_ChebyDegree | I | Grau do polinômio do smoother de Chebyshev (padrão: 2) |
| SA_CoarseSize | I | Tamanho de corte da malha grossa (padrão: 50000 quando MUMPS é usado como solver da malha grossa; caso contrário, 100) |
| SA_MaxAggSize | I | Tamanho máximo do agregado (padrão: 96) |
| SA_GalerkinLowMem | I | Método de cálculo da matriz da malha grossa (0: normal (prioriza a velocidade), valor positivo: economia de memória) (padrão: 0) (Especifique um valor positivo se a memória for insuficiente durante a configuração) |
| (não utilizado) | I | Reservado para extensões futuras |
A 5ª linha é específica do SA-AMG e não é lida pelo ML.
(5ª linha) SA_Theta, SA_ChebyAlpha, SA_Safety, SA_TaperK, SA_AggOrder, SA_MinAggSize, SA_Verify, SA_DumpVTK
| Variável | Tipo | Descrição |
|---|---|---|
| SA_Theta | R | Limiar para determinar conexões fortes (padrão: 0.0) (Com 0.0, a estrutura não nula da matriz é usada diretamente como grafo) |
| SA_ChebyAlpha | R | Razão que determina o limite inferior do intervalo de autovalores considerado pelo smoother de Chebyshev (padrão: 20.0) |
| SA_Safety | R | Fator de segurança aplicado ao autovalor máximo estimado (padrão: 1.1) |
| SA_TaperK | R | Coeficiente K de atenuação do coarsening (padrão: 100) (A partir do nível 2, o coarsening se torna mais gradual para que permaneçam pelo menos aproximadamente K agregados. Um valor negativo desabilita a atenuação) |
| SA_AggOrder | R | Ordem de varredura da agregação (0: padrão (ordem BFS), 1: ordem BFS, 2: ordem de hash dos números dos nós (experimental), 3: ordem crescente do grau (experimental), 4: ordem decrescente do grau (experimental), valor negativo: ordem por número do nó) (padrão: 0) |
| SA_MinAggSize | R | Tamanho mínimo do agregado (padrão: 3) |
| SA_Verify | R | Se deve ser executada uma autoverificação durante a configuração (0: não, valor positivo: sim) (padrão: 0) (principalmente para depuração) |
| SA_DumpVTK | R | Se a agregação do nível mais alto deve ser gerada em formato VTK (0: sem saída, valor positivo: saída) (padrão: 0) (principalmente para depuração) |
Exemplo¶
Usar CG com pré-condicionamento SSOR e definir o número máximo de iterações como 10000 e o erro de truncamento como 1.0e-8
Usar GMRES com pré-condicionamento SSOR e definir o tamanho do subespaço de Krylov como 40 e o número-alvo de cores para ordenação multicolor como 100
Usar CG com pré-condicionamento ILU(0) e definir como 1.1 o fator de escala aplicado às entradas diagonais ao calcular a matriz de pré-condicionamento
Usar AMG por ML como pré-condicionador do CG
Usar AMG por ML como pré-condicionador do CG e MUMPS como solver da malha grossa (para problemas difíceis)
Usar AMG por ML como pré-condicionador do CG e ciclo W como ciclo multigrid (para problemas difíceis)
Usar AMG por ML como pré-condicionador do CG, MUMPS como solver da malha grossa e definir o número máximo de níveis como 2 (para problemas muito difíceis)
Usar o SA-AMG integrado ao HEC-MW como pré-condicionador do CG
Usar SA-AMG como pré-condicionador do CG e MUMPS como solver da malha grossa
Em uma análise de contato com atrito, usar BiCGSTAB com pré-condicionamento SA-AMG e gerar a hierarquia do pré-condicionador AMG