This is an old revision of the document!
Problema: -Hélice 2D
SetUp 1: GMRES+PCASM
ierr = KSPCreate(PETSC_COMM_WORLD,&ksp);CHKERRQ(ierr);ierr = KSPSetOperators(ksp,A,A);CHKERRQ(ierr); ierr = KSPSetTolerances(ksp,1.e-10,PETSC_DEFAULT,PETSC_DEFAULT, 500);CHKERRQ(ierr); ierr = KSPSetFromOptions(ksp);CHKERRQ(ierr); ierr = KSPGetPC(ksp,&pc); ierr = PCSetType(pc,PCASM); ierr = KSPSetType(ksp,KSPGMRES); CHKERRQ(ierr); ierr = KSPGMRESSetRestart(ksp, 500); CHKERRQ(ierr); ierr = KSPSolve(ksp,b,u);CHKERRQ(ierr);
Não converge a parte nao linear. O solver linear fica com erros relativamente pequenos.
Aumentando para 5000 iterações e 5 GMRES restart o não linear converge mas de forma diferente a cada nova simulação e o solver linear fica com erros grandes.
Mantendo 5000 iterações e aumentando para 50 GMRES o erro do solver linear diminui um pouco mas o não linear não converge bem, mas se ajusta com o passar do tempo.
Mantendo 5000 iterações e aumentando para 500 GMRES o erro do solver linear diminui mas a convergencia ainda é ruim, devendo se acertar com o processo dinâmico, eu espero.
- SetUp 2: DGMRES + PCNONE
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,&ksp);CHKERRQ(ierr); ierr = KSPSetOperators(ksp,A,A);CHKERRQ(ierr); ierr = KSPSetTolerances(ksp,1.e-10,PETSC_DEFAULT,PETSC_DEFAULT, 5000); CHKERRQ(ierr); ierr = KSPSetFromOptions(ksp);CHKERRQ(ierr); ierr = KSPGetPC(ksp,&pc); ierr = PCSetType(pc,PCNONE); ierr = KSPSetType(ksp,KSPDGMRES); CHKERRQ(ierr); ierr = KSPGMRESSetRestart(ksp, 1000); CHKERRQ(ierr); ierr = KSPSolve(ksp,b,u);CHKERRQ(ierr);
- MUMPS:
ierr = KSPCreate(PETSC_COMM_WORLD,&ksp);CHKERRQ(ierr); ierr = KSPSetOperators(ksp,A,A);CHKERRQ(ierr); #if defined(PETSC_HAVE_MUMPS) ierr = KSPSetType(ksp,KSPPREONLY); ierr = KSPGetPC(ksp,&pc); ierr = PCSetType(pc, PCLU); #endif ierr = KSPSetFromOptions(ksp);CHKERRQ(ierr); ierr = KSPSetUp(ksp); ierr = KSPSolve(ksp,b,u);CHKERRQ(ierr);