solverpre
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
solverpre [2018/06/22 17:07] – jeferson | solverpre [2021/03/22 20:07] (current) – jeferson | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== ATUALIZAÇÃO - 22/03/2021 ====== | ||
+ | |||
+ | Nos testes realizados mais recentemente, | ||
+ | |||
+ | Observações: | ||
+ | |||
+ | Pré-condicionador: | ||
+ | |||
+ | Solver: Tanto o GMRES quanto suas variantes (FGMRES, DGMRES etc) não pareceram apresentar muita diferença na convergência. O método BiCGSTAB também funcionou bem, inclusive sendo um pouco mais rápido do que o GMRES. | ||
+ | |||
+ | SNES: O problema foi resolvido dentro do paradigma SNES do PETSc, bastante recomendado pois, embora aumente levemente o tempo de processamento devido à integração separada da matriz jacobiana e do vetor RHS, proporciona uma convergência muito maior do que o Newton-Raphson puro (especialmente para o campo de pressão). | ||
+ | |||
Problema: -Hélice 2D | Problema: -Hélice 2D | ||
Line 26: | Line 38: | ||
Para o problema da hélice 2d resolvendo pelo método Arlequin o solver DGMRES sem precondicionamento ficou excelente. Converge em cerca de 30 a 90 iterações (um pouco mais nos primeiros passos de tempo), porém demanda um limite maior de iterações dentro do Newton-Raphson (utilizei em torno de 5). | Para o problema da hélice 2d resolvendo pelo método Arlequin o solver DGMRES sem precondicionamento ficou excelente. Converge em cerca de 30 a 90 iterações (um pouco mais nos primeiros passos de tempo), porém demanda um limite maior de iterações dentro do Newton-Raphson (utilizei em torno de 5). | ||
- | < | + | < |
ierr = KSPCreate(PETSC_COMM_WORLD,& | ierr = KSPCreate(PETSC_COMM_WORLD,& | ||
ierr = KSPSetOperators(ksp, | ierr = KSPSetOperators(ksp, | ||
Line 41: | Line 53: | ||
O [[http:// | O [[http:// | ||
- | < | + | < |
ierr = KSPCreate(PETSC_COMM_WORLD,& | ierr = KSPCreate(PETSC_COMM_WORLD,& | ||
ierr = KSPSetOperators(ksp, | ierr = KSPSetOperators(ksp, | ||
Line 56: | Line 68: | ||
No entanto, alguns erros podem acontecer durante a execução do MUMPs. Para monitorálos é importante ler o seu [[http:// | No entanto, alguns erros podem acontecer durante a execução do MUMPs. Para monitorálos é importante ler o seu [[http:// | ||
- | < | + | < |
- | irrr = PCFactorSetMatSolverType(pc, | + | ierr = PCFactorSetMatSolverType(pc, |
ierr = PCFactorSetUpMatSolverType(pc); | ierr = PCFactorSetUpMatSolverType(pc); | ||
ierr = PCFactorGetMatrix(pc,& | ierr = PCFactorGetMatrix(pc,& | ||
Line 66: | Line 78: | ||
Assim, para acessar a flag INFO(1) utiliza-se o seguinte comando: | Assim, para acessar a flag INFO(1) utiliza-se o seguinte comando: | ||
- | < | + | < |
PetscInt info1; | PetscInt info1; | ||
ierr = MatMumpsGetInfo(F, | ierr = MatMumpsGetInfo(F, | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | info1); | ||
</ | </ | ||
Line 77: | Line 93: | ||
Em um determinado problema obteve-se, por exemplo, a flag INFO(1) = -9. Segundo o [[http:// | Em um determinado problema obteve-se, por exemplo, a flag INFO(1) = -9. Segundo o [[http:// | ||
- | < | + | < |
#if defined(PETSC_HAVE_MUMPS) | #if defined(PETSC_HAVE_MUMPS) | ||
ierr = KSPSetType(ksp, | ierr = KSPSetType(ksp, | ||
Line 107: | Line 123: | ||
Note que a última parte do código é construída para monitorar os valores de INFO(1), INFO(2) e ICNTL(14). É fortemente recomendado que pelo menos INFO(1) e INFO(2) sejam monitorados a cada chamada do MUMPS para facilitar o diagnóstico de possíveis //bugs// ou erros de execução. | Note que a última parte do código é construída para monitorar os valores de INFO(1), INFO(2) e ICNTL(14). É fortemente recomendado que pelo menos INFO(1) e INFO(2) sejam monitorados a cada chamada do MUMPS para facilitar o diagnóstico de possíveis //bugs// ou erros de execução. | ||
+ | ====== | ||
solverpre.1529687246.txt.gz · Last modified: by jeferson