Do a MatView() on A before the solve (remove the -da_refine 4) so it is small. Is the 0,0 entry 0? If the matrix has zero on the diagonals you cannot us Gauss-Seidel as the smoother. You can start with -mg_levels_pc_type jacobi -mg_levels_ksp_type chebychev -mg_levels_ksp_chebyshev_estimate_eigenvalues
Is the matrix a Stokes-like matrix? If so then different preconditioners are in order. Barry On Aug 1, 2013, at 5:21 PM, Michele Rosso <mro...@uci.edu> wrote: > Barry, > > here it is the fraction of code where I set the rhs term and the matrix. > > ! Create matrix > call form_matrix( A , qrho, lsf, head ) > call MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY,ierr) > call MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY,ierr) > > ! Create rhs term > call form_rhs(work, qrho, lsf, b , head) > > ! Solve system > call KSPSetFromOptions(ksp,ierr) > call KSPSetUp(ksp,ierr) > call KSPSolve(ksp,b,x,ierr) > call KSPGetIterationNumber(ksp, iiter ,ierr) > > The subroutine form_matrix returns the Mat object A that is filled by using > MatSetValuesStencil. > qrho, lsf and head are additional arguments that are needed to compute the > matrix value. > > > Michele > > > > On 08/01/2013 03:11 PM, Barry Smith wrote: >> Where are you putting the values into the matrix? It seems the matrix has >> no values in it? The code is stopping because in the Gauss-Seidel smoothing >> it has detected zero diagonals. >> >> Barry >> >> >> On Aug 1, 2013, at 4:47 PM, Michele Rosso <mro...@uci.edu> wrote: >> >>> Barry, >>> >>> I run with : -pc_type mg -pc_mg_galerkin -da_refine 4 -ksp_view >>> -options_left >>> >>> For the test I use a 64^3 grid and 4 processors. >>> >>> The output is: >>> >>> [2]PETSC ERROR: --------------------- Error Message >>> ------------------------------------ >>> [2]PETSC ERROR: Arguments are incompatible! >>> [2]PETSC ERROR: Zero diagonal on row 0! >>> [2]PETSC ERROR: >>> ------------------------------------------------------------------------ >>> [2]PETSC ERROR: Petsc Release Version 3.4.2, Jul, 02, 2013 >>> [2]PETSC ERROR: See docs/changes/index.html for recent updates. >>> [2]PETSC ERROR: See docs/faq.html for hints about trouble shooting. >>> [2]PETSC ERROR: See docs/index.html for manual pages. >>> [2]PETSC ERROR: >>> ------------------------------------------------------------------------ >>> [2]PETSC ERROR: ./test on a linux-gnu-dbg named enterprise-A by mic Thu Aug >>> 1 14:44:04 2013 >>> [0]PETSC ERROR: [2]PETSC ERROR: Libraries linked from >>> /opt/petsc/petsc-3.4.2/linux-gnu-dbg/lib >>> [2]PETSC ERROR: Configure run at Thu Aug 1 12:01:44 2013 >>> [2]PETSC ERROR: Configure options >>> [2]PETSC ERROR: >>> ------------------------------------------------------------------------ >>> [2]PETSC ERROR: MatInvertDiagonal_SeqAIJ() line 1457 in >>> src/mat/impls/aij/seq/aij.c >>> [2]PETSC ERROR: MatSOR_SeqAIJ() line 1489 in src/mat/impls/aij/seq/aij.c >>> --------------------- Error Message ------------------------------------ >>> [2]PETSC ERROR: MatSOR_MPIAIJ() line 1623 in src/mat/impls/aij/mpi/mpiaij.c >>> [2]PETSC ERROR: MatSOR() line 3649 in src/mat/interface/matrix.c >>> [2]PETSC ERROR: [0]PETSC ERROR: PCApply_SOR() line 35 in >>> src/ksp/pc/impls/sor/sor.c >>> [2]PETSC ERROR: PCApply() line 442 in src/ksp/pc/interface/precon.c >>> [2]PETSC ERROR: KSP_PCApply() line 227 in >>> src/ksp/ksp/interface//opt/petsc/petsc-3.4.2/include/petsc-private/kspimpl.h >>> Arguments are incompatible! >>> [2]PETSC ERROR: KSPInitialResidual() line 64 in >>> src/ksp/ksp/interface/itres.c >>> [2]PETSC ERROR: KSPSolve_GMRES() line 239 in src/ksp/ksp/impls/gmres/gmres.c >>> [2]PETSC ERROR: KSPSolve() line 441 in src/ksp/ksp/interface/itfunc.c >>> [2]PETSC ERROR: [0]PETSC ERROR: KSPSolve_Chebyshev() line 409 in >>> src/ksp/ksp/impls/cheby/cheby.c >>> [2]PETSC ERROR: KSPSolve() line 441 in src/ksp/ksp/interface/itfunc.c >>> [2]PETSC ERROR: PCMGMCycle_Private() line 19 in src/ksp/pc/impls/mg/mg.c >>> Zero diagonal on row 0! >>> [2]PETSC ERROR: PCApply_MG() line 330 in src/ksp/pc/impls/mg/mg.c >>> [2]PETSC ERROR: PCApply() line 442 in src/ksp/pc/interface/precon.c >>> [0]PETSC ERROR: [2]PETSC ERROR: KSP_PCApply() line 227 in >>> src/ksp/ksp/impls/cg//opt/petsc/petsc-3.4.2/include/petsc-private/kspimpl.h >>> [2]PETSC ERROR: KSPSolve_CG() line 175 in src/ksp/ksp/impls/cg/cg.c >>> ------------------------------------------------------------------------ >>> [2]PETSC ERROR: KSPSolve() line 441 in src/ksp/ksp/interface/itfunc.c >>> [0]PETSC ERROR: Petsc Release Version 3.4.2, Jul, 02, 2013 >>> [0]PETSC ERROR: See docs/changes/index.html for recent updates. >>> [3]PETSC ERROR: [0]PETSC ERROR: See docs/faq.html for hints about trouble >>> shooting. >>> [0]PETSC ERROR: --------------------- Error Message >>> ------------------------------------ >>> [3]PETSC ERROR: Arguments are incompatible! >>> [3]PETSC ERROR: Zero diagonal on row 0! >>> [3]PETSC ERROR: >>> ------------------------------------------------------------------------ >>> [3]PETSC ERROR: Petsc Release Version 3.4.2, Jul, 02, 2013 >>> [3]PETSC ERROR: See docs/changes/index.html for recent updates. >>> [3]PETSC ERROR: See docs/faq.html for hints about trouble shooting. >>> [3]PETSC ERROR: See docs/index.html for manual pages. >>> [3]PETSC ERROR: >>> ------------------------------------------------------------------------ >>> See docs/index.html for manual pages. >>> [3]PETSC ERROR: ./test on a linux-gnu-dbg named enterprise-A by mic Thu Aug >>> 1 14:44:04 2013 >>> [3]PETSC ERROR: Libraries linked from >>> /opt/petsc/petsc-3.4.2/linux-gnu-dbg/lib >>> [1]PETSC ERROR: [3]PETSC ERROR: Configure run at Thu Aug 1 12:01:44 2013 >>> [3]PETSC ERROR: Configure options >>> [3]PETSC ERROR: >>> ------------------------------------------------------------------------ >>> [3]PETSC ERROR: --------------------- Error Message >>> ------------------------------------ >>> MatInvertDiagonal_SeqAIJ() line 1457 in src/mat/impls/aij/seq/aij.c >>> [3]PETSC ERROR: MatSOR_SeqAIJ() line 1489 in src/mat/impls/aij/seq/aij.c >>> [3]PETSC ERROR: [0]PETSC ERROR: MatSOR_MPIAIJ() line 1623 in >>> src/mat/impls/aij/mpi/mpiaij.c >>> [1]PETSC ERROR: Arguments are incompatible! >>> [1]PETSC ERROR: Zero diagonal on row 0! >>> [1]PETSC ERROR: >>> ------------------------------------------------------------------------ >>> [1]PETSC ERROR: Petsc Release Version 3.4.2, Jul, 02, 2013 >>> [1]PETSC ERROR: See docs/changes/index.html for recent updates. >>> [1]PETSC ERROR: See docs/faq.html for hints about trouble shooting. >>> [1]PETSC ERROR: See docs/index.html for manual pages. >>> [1]PETSC ERROR: >>> ------------------------------------------------------------------------ >>> [1]PETSC ERROR: ./test on a linux-gnu-dbg named enterprise-A by mic Thu Aug >>> 1 14:44:04 2013 >>> [1]PETSC ERROR: Libraries linked from >>> /opt/petsc/petsc-3.4.2/linux-gnu-dbg/lib >>> [1]PETSC ERROR: Configure run at Thu Aug 1 12:01:44 2013 >>> [1]PETSC ERROR: Configure options >>> [1]PETSC ERROR: >>> ------------------------------------------------------------------------ >>> [1]PETSC ERROR: MatInvertDiagonal_SeqAIJ() line 1457 in >>> src/mat/impls/aij/seq/aij.c >>> [1]PETSC ERROR: [3]PETSC ERROR: MatSOR() line 3649 in >>> src/mat/interface/matrix.c >>> [3]PETSC ERROR: PCApply_SOR() line 35 in src/ksp/pc/impls/sor/sor.c >>> [3]PETSC ERROR: PCApply() line 442 in src/ksp/pc/interface/precon.c >>> [3]PETSC ERROR: KSP_PCApply() line 227 in >>> src/ksp/ksp/interface//opt/petsc/petsc-3.4.2/include/petsc-private/kspimpl.h >>> [3]PETSC ERROR: KSPInitialResidual() line 64 in >>> src/ksp/ksp/interface/itres.c >>> [3]PETSC ERROR: KSPSolve_GMRES() line 239 in src/ksp/ksp/impls/gmres/gmres.c >>> [3]PETSC ERROR: KSPSolve() line 441 in src/ksp/ksp/interface/itfunc.c >>> [3]PETSC ERROR: KSPSolve_Chebyshev() line 409 in >>> src/ksp/ksp/impls/cheby/cheby.c >>> [3]PETSC ERROR: KSPSolve() line 441 in src/ksp/ksp/interface/itfunc.c >>> [3]PETSC ERROR: PCMGMCycle_Private() line 19 in src/ksp/pc/impls/mg/mg.c >>> [3]PETSC ERROR: PCApply_MG() line 330 in src/ksp/pc/impls/mg/mg.c >>> [3]PETSC ERROR: PCApply() line 442 in src/ksp/pc/interface/precon.c >>> [3]PETSC ERROR: KSP_PCApply() line 227 in >>> src/ksp/ksp/impls/cg//opt/petsc/petsc-3.4.2/include/petsc-private/kspimpl.h >>> [3]PETSC ERROR: KSPSolve_CG() line 175 in src/ksp/ksp/impls/cg/cg.c >>> [3]PETSC ERROR: KSPSolve() line 441 in src/ksp/ksp/interface/itfunc.c >>> MatSOR_SeqAIJ() line 1489 in src/mat/impls/aij/seq/aij.c >>> [1]PETSC ERROR: MatSOR_MPIAIJ() line 1623 in src/mat/impls/aij/mpi/mpiaij.c >>> [1]PETSC ERROR: MatSOR() line 3649 in src/mat/interface/matrix.c >>> [1]PETSC ERROR: PCApply_SOR() line 35 in src/ksp/pc/impls/sor/sor.c >>> [1]PETSC ERROR: PCApply() line 442 in src/ksp/pc/interface/precon.c >>> [1]PETSC ERROR: KSP_PCApply() line 227 in >>> src/ksp/ksp/interface//opt/petsc/petsc-3.4.2/include/petsc-private/kspimpl.h >>> [1]PETSC ERROR: KSPInitialResidual() line 64 in >>> src/ksp/ksp/interface/itres.c >>> [1]PETSC ERROR: KSPSolve_GMRES() line 239 in src/ksp/ksp/impls/gmres/gmres.c >>> [1]PETSC ERROR: KSPSolve() line 441 in src/ksp/ksp/interface/itfunc.c >>> [1]PETSC ERROR: KSPSolve_Chebyshev() line 409 in >>> src/ksp/ksp/impls/cheby/cheby.c >>> [1]PETSC ERROR: KSPSolve() line 441 in src/ksp/ksp/interface/itfunc.c >>> [1]PETSC ERROR: PCMGMCycle_Private() line 19 in src/ksp/pc/impls/mg/mg.c >>> [1]PETSC ERROR: PCApply_MG() line 330 in src/ksp/pc/impls/mg/mg.c >>> [1]PETSC ERROR: PCApply() line 442 in src/ksp/pc/interface/precon.c >>> [1]PETSC ERROR: KSP_PCApply() line 227 in >>> src/ksp/ksp/impls/cg//opt/petsc/petsc-3.4.2/include/petsc-private/kspimpl.h >>> [1]PETSC ERROR: KSPSolve_CG() line 175 in src/ksp/ksp/impls/cg/cg.c >>> [1]PETSC ERROR: KSPSolve() line 441 in src/ksp/ksp/interface/itfunc.c >>> ------------------------------------------------------------------------ >>> [0]PETSC ERROR: ./test on a linux-gnu-dbg named enterprise-A by mic Thu Aug >>> 1 14:44:04 2013 >>> [0]PETSC ERROR: Libraries linked from >>> /opt/petsc/petsc-3.4.2/linux-gnu-dbg/lib >>> [0]PETSC ERROR: Configure run at Thu Aug 1 12:01:44 2013 >>> [0]PETSC ERROR: Configure options >>> [0]PETSC ERROR: >>> ------------------------------------------------------------------------ >>> [0]PETSC ERROR: MatInvertDiagonal_SeqAIJ() line 1457 in >>> src/mat/impls/aij/seq/aij.c >>> [0]PETSC ERROR: MatSOR_SeqAIJ() line 1489 in src/mat/impls/aij/seq/aij.c >>> [0]PETSC ERROR: MatSOR_MPIAIJ() line 1623 in src/mat/impls/aij/mpi/mpiaij.c >>> [0]PETSC ERROR: MatSOR() line 3649 in src/mat/interface/matrix.c >>> [0]PETSC ERROR: PCApply_SOR() line 35 in src/ksp/pc/impls/sor/sor.c >>> [0]PETSC ERROR: PCApply() line 442 in src/ksp/pc/interface/precon.c >>> [0]PETSC ERROR: KSP_PCApply() line 227 in >>> src/ksp/ksp/interface//opt/petsc/petsc-3.4.2/include/petsc-private/kspimpl.h >>> [0]PETSC ERROR: KSPInitialResidual() line 64 in >>> src/ksp/ksp/interface/itres.c >>> [0]PETSC ERROR: KSPSolve_GMRES() line 239 in src/ksp/ksp/impls/gmres/gmres.c >>> [0]PETSC ERROR: KSPSolve() line 441 in src/ksp/ksp/interface/itfunc.c >>> [0]PETSC ERROR: KSPSolve_Chebyshev() line 409 in >>> src/ksp/ksp/impls/cheby/cheby.c >>> [0]PETSC ERROR: KSPSolve() line 441 in src/ksp/ksp/interface/itfunc.c >>> [0]PETSC ERROR: PCMGMCycle_Private() line 19 in src/ksp/pc/impls/mg/mg.c >>> [0]PETSC ERROR: PCApply_MG() line 330 in src/ksp/pc/impls/mg/mg.c >>> [0]PETSC ERROR: PCApply() line 442 in src/ksp/pc/interface/precon.c >>> [0]PETSC ERROR: KSP_PCApply() line 227 in >>> src/ksp/ksp/impls/cg//opt/petsc/petsc-3.4.2/include/petsc-private/kspimpl.h >>> [0]PETSC ERROR: KSPSolve_CG() line 175 in src/ksp/ksp/impls/cg/cg.c >>> [0]PETSC ERROR: KSPSolve() line 441 in src/ksp/ksp/interface/itfunc.c >>> #PETSc Option Table entries: >>> -da_refine 4 >>> -ksp_view >>> -options_left >>> -pc_mg_galerkin >>> -pc_type mg >>> #End of PETSc Option Table entries >>> There is one unused database option. It is: >>> Option left: name:-da_refine value: 4 >>> >>> >>> Here is the code I use to setup DMDA and KSP: >>> >>> call DMDACreate3d( PETSC_COMM_WORLD , & >>> & DMDA_BOUNDARY_PERIODIC , DMDA_BOUNDARY_PERIODIC, & >>> & DMDA_BOUNDARY_PERIODIC , DMDA_STENCIL_STAR, & >>> & N_Z , N_Y , N_X , N_B3 , N_B2 , 1_ip, 1_ip , 1_ip , & >>> & int(NNZ,ip) ,int(NNY,ip) , NNX, da , ierr) >>> ! Create Global Vectors >>> call DMCreateGlobalVector(da,b,ierr) >>> call VecDuplicate(b,x,ierr) >>> ! Set initial guess for first use of the module to 0 >>> call VecSet(x,0.0_rp,ierr) >>> ! Create matrix >>> call DMCreateMatrix(da,MATMPIAIJ,A,ierr) >>> ! Create solver >>> call KSPCreate(PETSC_COMM_WORLD,ksp,ierr) >>> call KSPSetDM(ksp,da,ierr) >>> call KSPSetOperators(ksp,A,A,DIFFERENT_NONZERO_PATTERN,ierr) >>> ! call KSPSetOperators(ksp,A,A,SAME_NONZERO_PATTERN,ierr) >>> call KSPSetType(ksp,KSPCG,ierr) >>> call KSPSetNormType(ksp,KSP_NORM_UNPRECONDITIONED,ierr) ! Real residual >>> call KSPSetInitialGuessNonzero(ksp,PETSC_TRUE,ierr) >>> call KSPSetTolerances(ksp, tol ,PETSC_DEFAULT_DOUBLE_PRECISION,& >>> & PETSC_DEFAULT_DOUBLE_PRECISION,PETSC_DEFAULT_INTEGER,ierr) >>> >>> ! To allow using option from command line >>> call KSPSetFromOptions(ksp,ierr) >>> >>> >>> Michele >>> >>> >>> >>> >>> On 08/01/2013 01:04 PM, Barry Smith wrote: >>>> You can use the option -pc_mg_galerkin and then MG will compute the >>>> coarser matrices with a sparse matrix matrix matrix product so you should >>>> not need to change your code to try it out. You still need to use the >>>> KSPSetDM() and -da_refine n to get it working >>>> >>>> If it doesn't work, send us all the output. >>>> >>>> Barry >>>> >>>> >>>> On Aug 1, 2013, at 2:47 PM, Michele Rosso >>>> <mro...@uci.edu> >>>> wrote: >>>> >>>> >>>>> Barry, >>>>> you are correct, I did not use it. I think I get now where is the >>>>> problem. Correct me if I am wrong, but for the >>>>> geometric multigrid to work, ksp must be provided with subroutines to >>>>> compute the matrix and the rhs at any level through >>>>> KSPSetComputeOperators and KSPSetComputeRHS. >>>>> I do not do that, I simply build a rhs vector and a matrix and then I >>>>> solve the system. >>>>> If you confirm what I just wrote, I will try to modify my code >>>>> accordingly and get back to you. >>>>> Thank you, >>>>> Michele >>>>> On 08/01/2013 11:48 AM, Barry Smith wrote: >>>>> >>>>>> Do you use KSPSetDM(ksp,da); ? See >>>>>> src/ksp/ksp/examples/tutorials/ex19.c >>>>>> >>>>>> Barry >>>>>> >>>>>> On Aug 1, 2013, at 1:35 PM, Michele Rosso >>>>>> >>>>>> <mro...@uci.edu> >>>>>> >>>>>> wrote: >>>>>> >>>>>> >>>>>> >>>>>>> Barry, >>>>>>> >>>>>>> I am using a finite difference Cartesian uniform grid and DMDA and so >>>>>>> far it has not given me any problem. >>>>>>> I am using a ksp solver (not snes). In a previous thread, I was told an >>>>>>> odd number of grid points was needed for the geometric multigrid, is >>>>>>> that correct? >>>>>>> I tried to run my case with >>>>>>> >>>>>>> >>>>>>> -pc_type mg -da_refine 4 >>>>>>> >>>>>>> >>>>>>> >>>>>>> but it does not seem to use the -da_refine option: >>>>>>> >>>>>>> mpiexec -np 4 ./test -pc_type mg -da_refine 4 -ksp_view >>>>>>> -options_left >>>>>>> >>>>>>> >>>>>>> KSP Object: 4 MPI processes >>>>>>> type: cg >>>>>>> maximum iterations=10000 >>>>>>> tolerances: relative=1e-08, absolute=1e-50, divergence=10000 >>>>>>> left preconditioning >>>>>>> using nonzero initial guess >>>>>>> using UNPRECONDITIONED norm type for convergence test >>>>>>> PC Object: 4 MPI processes >>>>>>> type: mg >>>>>>> MG: type is MULTIPLICATIVE, levels=1 cycles=v >>>>>>> Cycles per PCApply=1 >>>>>>> Not using Galerkin computed coarse grid matrices >>>>>>> Coarse grid solver -- level ------------------------------- >>>>>>> KSP Object: (mg_levels_0_) 4 MPI processes >>>>>>> type: chebyshev >>>>>>> Chebyshev: eigenvalue estimates: min = 0.134543, max = 1.47998 >>>>>>> Chebyshev: estimated using: [0 0.1; 0 1.1] >>>>>>> KSP Object: (mg_levels_0_est_) 4 MPI processes >>>>>>> type: gmres >>>>>>> GMRES: restart=30, using Classical (unmodified) Gram-Schmidt >>>>>>> Orthogonalization with no iterative refinement >>>>>>> GMRES: happy breakdown tolerance 1e-30 >>>>>>> maximum iterations=10, initial guess is zero >>>>>>> tolerances: relative=1e-05, absolute=1e-50, divergence=10000 >>>>>>> left preconditioning >>>>>>> using NONE norm type for convergence test >>>>>>> PC Object: (mg_levels_0_) 4 MPI processes >>>>>>> type: sor >>>>>>> SOR: type = local_symmetric, iterations = 1, local >>>>>>> iterations = 1, omega = 1 >>>>>>> linear system matrix = precond matrix: >>>>>>> Matrix Object: 4 MPI processes >>>>>>> type: mpiaij >>>>>>> rows=262144, cols=262144 >>>>>>> total: nonzeros=1835008, allocated nonzeros=1835008 >>>>>>> total number of mallocs used during MatSetValues calls =0 >>>>>>> maximum iterations=1, initial guess is zero >>>>>>> tolerances: relative=1e-05, absolute=1e-50, divergence=10000 >>>>>>> left preconditioning >>>>>>> using NONE norm type for convergence test >>>>>>> PC Object: (mg_levels_0_) 4 MPI processes >>>>>>> type: sor >>>>>>> SOR: type = local_symmetric, iterations = 1, local iterations = >>>>>>> 1, omega = 1 >>>>>>> linear system matrix = precond matrix: >>>>>>> Matrix Object: 4 MPI processes >>>>>>> type: mpiaij >>>>>>> rows=262144, cols=262144 >>>>>>> total: nonzeros=1835008, allocated nonzeros=1835008 >>>>>>> total number of mallocs used during MatSetValues calls =0 >>>>>>> linear system matrix = precond matrix: >>>>>>> Matrix Object: 4 MPI processes >>>>>>> type: mpiaij >>>>>>> rows=262144, cols=262144 >>>>>>> total: nonzeros=1835008, allocated nonzeros=1835008 >>>>>>> total number of mallocs used during MatSetValues calls =0 >>>>>>> Solution = 1.53600013 sec >>>>>>> #PETSc Option Table entries: >>>>>>> -da_refine 4 >>>>>>> -ksp_view >>>>>>> -options_left >>>>>>> -pc_type mg >>>>>>> #End of PETSc Option Table entries >>>>>>> There is one unused database option. It is: >>>>>>> Option left: name:-da_refine value: 4 >>>>>>> >>>>>>> Michele >>>>>>> >>>>>>> On 08/01/2013 11:21 AM, Barry Smith wrote: >>>>>>> >>>>>>> >>>>>>>> What kind of mesh are you using? Are you using DMDA? If you are >>>>>>>> using DMDA (and have written your code to use it "correctly") then it >>>>>>>> should be trivial to run with geometric multigrid and geometric >>>>>>>> multigrid should be a bit faster. >>>>>>>> >>>>>>>> For example on src/snes/examples/tutorials/ex19.c I run with >>>>>>>> ./ex19 -pc_type mg -da_refine 4 and it refines the original DMDA 4 >>>>>>>> times and uses geometric multigrid with 5 levels. >>>>>>>> >>>>>>>> >>>>>>>> Barry >>>>>>>> >>>>>>>> >>>>>>>> On Aug 1, 2013, at 1:14 PM, Michele Rosso >>>>>>>> >>>>>>>> <mro...@uci.edu> >>>>>>>> >>>>>>>> wrote: >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>>> Hi, >>>>>>>>> >>>>>>>>> I am successfully using PETSc (v3.4.2) to solve a 3D Poisson's >>>>>>>>> equation with CG + GAMG as I was suggested to do in a previous thread. >>>>>>>>> So far I am using GAMG with the default settings, i.e. >>>>>>>>> >>>>>>>>> -pc_type gamg -pc_gamg_agg_nsmooths 1 >>>>>>>>> >>>>>>>>> The speed of the solution is satisfactory, but I would like to know >>>>>>>>> if you have any suggestions to further speed it up, particularly >>>>>>>>> if there is any parameters worth looking into to achieve an even >>>>>>>>> faster solution, for example number of levels and so on. >>>>>>>>> So far I am using Dirichlet's BCs for my test case, but I will soon >>>>>>>>> have periodic conditions: in this case, does GAMG require particular >>>>>>>>> settings? >>>>>>>>> Finally, I did not try geometric multigrid: do you think it is worth >>>>>>>>> a shot? >>>>>>>>> >>>>>>>>> Here are my current settings: >>>>>>>>> >>>>>>>>> I run with >>>>>>>>> >>>>>>>>> -pc_type gamg -pc_gamg_agg_nsmooths 1 -ksp_view -options_left >>>>>>>>> >>>>>>>>> and the output is: >>>>>>>>> >>>>>>>>> KSP Object: 4 MPI processes >>>>>>>>> type: cg >>>>>>>>> maximum iterations=10000 >>>>>>>>> tolerances: relative=1e-08, absolute=1e-50, divergence=10000 >>>>>>>>> left preconditioning >>>>>>>>> using nonzero initial guess >>>>>>>>> using UNPRECONDITIONED norm type for convergence test >>>>>>>>> PC Object: 4 MPI processes >>>>>>>>> type: gamg >>>>>>>>> MG: type is MULTIPLICATIVE, levels=3 cycles=v >>>>>>>>> Cycles per PCApply=1 >>>>>>>>> Using Galerkin computed coarse grid matrices >>>>>>>>> Coarse grid solver -- level ------------------------------- >>>>>>>>> KSP Object: (mg_coarse_) 4 MPI processes >>>>>>>>> type: preonly >>>>>>>>> maximum iterations=1, initial guess is zero >>>>>>>>> tolerances: relative=1e-05, absolute=1e-50, divergence=10000 >>>>>>>>> left preconditioning >>>>>>>>> using NONE norm type for convergence test >>>>>>>>> PC Object: (mg_coarse_) 4 MPI processes >>>>>>>>> type: bjacobi >>>>>>>>> block Jacobi: number of blocks = 4 >>>>>>>>> Local solve info for each block is in the following KSP and >>>>>>>>> PC objects: >>>>>>>>> [0] number of local blocks = 1, first local block number = 0 >>>>>>>>> [0] local block number 0 >>>>>>>>> KSP Object: (mg_coarse_sub_) 1 MPI processes >>>>>>>>> type: preonly >>>>>>>>> maximum iterations=1, initial guess is zero >>>>>>>>> tolerances: relative=1e-05, absolute=1e-50, >>>>>>>>> divergence=10000 >>>>>>>>> KSP Object: (mg_coarse_sub_) left preconditioning >>>>>>>>> using NONE norm type for convergence test >>>>>>>>> PC Object: (mg_coarse_sub_) 1 MPI processes >>>>>>>>> type: preonly >>>>>>>>> 1 MPI processes >>>>>>>>> type: lu >>>>>>>>> maximum iterations=1, initial guess is zero >>>>>>>>> tolerances: relative=1e-05, absolute=1e-50, >>>>>>>>> divergence=10000 >>>>>>>>> LU: out-of-place factorization >>>>>>>>> left preconditioning >>>>>>>>> using NONE norm type for convergence test >>>>>>>>> PC Object: (mg_coarse_sub_) 1 MPI processes >>>>>>>>> type: lu >>>>>>>>> tolerance for zero pivot 2.22045e-14 >>>>>>>>> using diagonal shift on blocks to prevent zero pivot >>>>>>>>> matrix ordering: nd >>>>>>>>> LU: out-of-place factorization >>>>>>>>> tolerance for zero pivot 2.22045e-14 >>>>>>>>> using diagonal shift on blocks to prevent zero pivot >>>>>>>>> matrix ordering: nd >>>>>>>>> factor fill ratio given 5, needed 0 >>>>>>>>> Factored matrix follows: >>>>>>>>> factor fill ratio given 5, needed 4.13207 >>>>>>>>> Factored matrix follows: >>>>>>>>> Matrix Object: Matrix Object: >>>>>>>>> 1 MPI processes >>>>>>>>> type: seqaij >>>>>>>>> rows=395, cols=395 >>>>>>>>> package used to perform factorization: petsc >>>>>>>>> total: nonzeros=132379, allocated nonzeros=132379 >>>>>>>>> total number of mallocs used during MatSetValues >>>>>>>>> calls =0 >>>>>>>>> not using I-node routines >>>>>>>>> 1 MPI processes >>>>>>>>> type: seqaij >>>>>>>>> linear system matrix = precond matrix: >>>>>>>>> rows=0, cols=0 >>>>>>>>> package used to perform factorization: petsc >>>>>>>>> total: nonzeros=1, allocated nonzeros=1 >>>>>>>>> total number of mallocs used during MatSetValues >>>>>>>>> calls =0 >>>>>>>>> not using I-node routines >>>>>>>>> linear system matrix = precond matrix: >>>>>>>>> Matrix Object: 1 MPI processes >>>>>>>>> type: seqaij >>>>>>>>> Matrix Object:KSP Object: 1 MPI processes >>>>>>>>> type: seqaij >>>>>>>>> rows=0, cols=0 >>>>>>>>> total: nonzeros=0, allocated nonzeros=0 >>>>>>>>> total number of mallocs used during MatSetValues calls =0 >>>>>>>>> not using I-node routines >>>>>>>>> rows=395, cols=395 >>>>>>>>> total: nonzeros=32037, allocated nonzeros=32037 >>>>>>>>> total number of mallocs used during MatSetValues calls =0 >>>>>>>>> not using I-node routines >>>>>>>>> - - - - - - - - - - - - - - - - - - >>>>>>>>> KSP Object: (mg_coarse_sub_) 1 MPI processes >>>>>>>>> type: preonly >>>>>>>>> maximum iterations=1, initial guess is zero >>>>>>>>> tolerances: relative=1e-05, absolute=1e-50, >>>>>>>>> divergence=10000 >>>>>>>>> left preconditioning >>>>>>>>> using NONE norm type for convergence test >>>>>>>>> PC Object: (mg_coarse_sub_) 1 MPI processes >>>>>>>>> type: lu >>>>>>>>> LU: out-of-place factorization >>>>>>>>> tolerance for zero pivot 2.22045e-14 >>>>>>>>> using diagonal shift on blocks to prevent zero pivot >>>>>>>>> matrix ordering: nd >>>>>>>>> factor fill ratio given 5, needed 0 >>>>>>>>> Factored matrix follows: >>>>>>>>> Matrix Object: 1 MPI processes >>>>>>>>> type: seqaij >>>>>>>>> rows=0, cols=0 >>>>>>>>> package used to perform factorization: petsc >>>>>>>>> total: nonzeros=1, allocated nonzeros=1 >>>>>>>>> total number of mallocs used during MatSetValues >>>>>>>>> calls =0 >>>>>>>>> not using I-node routines >>>>>>>>> linear system matrix = precond matrix: >>>>>>>>> Matrix Object: 1 MPI processes >>>>>>>>> type: seqaij >>>>>>>>> rows=0, cols=0 >>>>>>>>> total: nonzeros=0, allocated nonzeros=0 >>>>>>>>> total number of mallocs used during MatSetValues calls =0 >>>>>>>>> not using I-node routines >>>>>>>>> (mg_coarse_sub_) 1 MPI processes >>>>>>>>> type: preonly >>>>>>>>> maximum iterations=1, initial guess is zero >>>>>>>>> tolerances: relative=1e-05, absolute=1e-50, >>>>>>>>> divergence=10000 >>>>>>>>> left preconditioning >>>>>>>>> using NONE norm type for convergence test >>>>>>>>> PC Object: (mg_coarse_sub_) 1 MPI processes >>>>>>>>> type: lu >>>>>>>>> LU: out-of-place factorization >>>>>>>>> tolerance for zero pivot 2.22045e-14 >>>>>>>>> using diagonal shift on blocks to prevent zero pivot >>>>>>>>> matrix ordering: nd >>>>>>>>> factor fill ratio given 5, needed 0 >>>>>>>>> Factored matrix follows: >>>>>>>>> Matrix Object: 1 MPI processes >>>>>>>>> type: seqaij >>>>>>>>> rows=0, cols=0 >>>>>>>>> package used to perform factorization: petsc >>>>>>>>> total: nonzeros=1, allocated nonzeros=1 >>>>>>>>> total number of mallocs used during MatSetValues >>>>>>>>> calls =0 >>>>>>>>> not using I-node routines >>>>>>>>> linear system matrix = precond matrix: >>>>>>>>> Matrix Object: 1 MPI processes >>>>>>>>> type: seqaij >>>>>>>>> rows=0, cols=0 >>>>>>>>> total: nonzeros=0, allocated nonzeros=0 >>>>>>>>> total number of mallocs used during MatSetValues calls =0 >>>>>>>>> not using I-node routines >>>>>>>>> [1] number of local blocks = 1, first local block number = 1 >>>>>>>>> [1] local block number 0 >>>>>>>>> - - - - - - - - - - - - - - - - - - >>>>>>>>> [2] number of local blocks = 1, first local block number = 2 >>>>>>>>> [2] local block number 0 >>>>>>>>> - - - - - - - - - - - - - - - - - - >>>>>>>>> [3] number of local blocks = 1, first local block number = 3 >>>>>>>>> [3] local block number 0 >>>>>>>>> - - - - - - - - - - - - - - - - - - >>>>>>>>> linear system matrix = precond matrix: >>>>>>>>> Matrix Object: 4 MPI processes >>>>>>>>> type: mpiaij >>>>>>>>> rows=395, cols=395 >>>>>>>>> total: nonzeros=32037, allocated nonzeros=32037 >>>>>>>>> total number of mallocs used during MatSetValues calls =0 >>>>>>>>> not using I-node (on process 0) routines >>>>>>>>> Down solver (pre-smoother) on level 1 >>>>>>>>> ------------------------------- >>>>>>>>> KSP Object: (mg_levels_1_) 4 MPI processes >>>>>>>>> type: chebyshev >>>>>>>>> Chebyshev: eigenvalue estimates: min = 0.0636225, max = >>>>>>>>> 1.33607 >>>>>>>>> maximum iterations=2 >>>>>>>>> tolerances: relative=1e-05, absolute=1e-50, divergence=10000 >>>>>>>>> left preconditioning >>>>>>>>> using nonzero initial guess >>>>>>>>> using NONE norm type for convergence test >>>>>>>>> PC Object: (mg_levels_1_) 4 MPI processes >>>>>>>>> type: jacobi >>>>>>>>> linear system matrix = precond matrix: >>>>>>>>> Matrix Object: 4 MPI processes >>>>>>>>> type: mpiaij >>>>>>>>> rows=23918, cols=23918 >>>>>>>>> total: nonzeros=818732, allocated nonzeros=818732 >>>>>>>>> total number of mallocs used during MatSetValues calls =0 >>>>>>>>> not using I-node (on process 0) routines >>>>>>>>> Up solver (post-smoother) same as down solver (pre-smoother) >>>>>>>>> Down solver (pre-smoother) on level 2 >>>>>>>>> ------------------------------- >>>>>>>>> KSP Object: (mg_levels_2_) 4 MPI processes >>>>>>>>> type: chebyshev >>>>>>>>> Chebyshev: eigenvalue estimates: min = 0.0971369, max = >>>>>>>>> 2.03987 >>>>>>>>> maximum iterations=2 >>>>>>>>> tolerances: relative=1e-05, absolute=1e-50, divergence=10000 >>>>>>>>> left preconditioning >>>>>>>>> using nonzero initial guess >>>>>>>>> using NONE norm type for convergence test >>>>>>>>> PC Object: (mg_levels_2_) 4 MPI processes >>>>>>>>> type: jacobi >>>>>>>>> linear system matrix = precond matrix: >>>>>>>>> Matrix Object: 4 MPI processes >>>>>>>>> type: mpiaij >>>>>>>>> rows=262144, cols=262144 >>>>>>>>> total: nonzeros=1835008, allocated nonzeros=1835008 >>>>>>>>> total number of mallocs used during MatSetValues calls =0 >>>>>>>>> Up solver (post-smoother) same as down solver (pre-smoother) >>>>>>>>> linear system matrix = precond matrix: >>>>>>>>> Matrix Object: 4 MPI processes >>>>>>>>> type: mpiaij >>>>>>>>> rows=262144, cols=262144 >>>>>>>>> total: nonzeros=1835008, allocated nonzeros=1835008 >>>>>>>>> total number of mallocs used during MatSetValues calls =0 >>>>>>>>> #PETSc Option Table entries: >>>>>>>>> -ksp_view >>>>>>>>> -options_left >>>>>>>>> -pc_gamg_agg_nsmooths 1 >>>>>>>>> -pc_type gamg >>>>>>>>> #End of PETSc Option Table entries >>>>>>>>> There are no unused options. >>>>>>>>> >>>>>>>>> >>>>>>>>> Thank you, >>>>>>>>> Michele >>>>>>>>> >>>>>>>>> >> >