[petsc-users] PCBJACOBI behaves weirdly
Matthew Knepley
knepley at gmail.com
Sun May 3 06:35:30 CDT 2020
On Sun, May 3, 2020 at 12:34 AM Zhuo Chen <chenzhuotj at gmail.com> wrote:
> Dear Petsc users,
>
> My name is Zhuo Chen. I am very new to Petsc.
>
> I have encountered a very weird problem. I try to use Petsc to solve a 2D
> diffusion problem (https://en.wikipedia.org/wiki/Heat_equation). When I
> use PCLU, the solution looks very good. Then, I change to PCJACOBI because
> I plan to use MPI in the future. If I treat the whole matrix as a single
> block and set the preconditioner of the "sub-matrix" with PCLU, the
> solution is exactly the same as the PCLU setting. However, if I increase
> the number of blocks, the result becomes worse. I attached the solution of
> a 2D diffusion simulation I have done. The red dots are the analytic
> solution and the blue circles are the solution from Petsc with 8 blocks.
> The size of the computational domain is 300*8. The result with PCLU only is
> very close to the analytic solution so I do not include it here.
>
> Then I implemented the same problem with Matlab
> with x=gmres(mat,rhs,10,tol,maxit,p), where mat is the same as the one in
> my Petsc code, and p is the block Jacobi matrix (8 blocks). The result from
> Matlab is very good, though it is slow. I attach the Matlab result to this
> email as well.
>
The default tolerance for KSP is 1e-5. If you make it lower, you will get
what you want,
-ksp_rtol 1e-10
However, BJACOBI is a terrible way to solve the diffusion equation. You
should use multigrid, for example
-pc_type gamg
or Hypre/BoomerAMG or ML.
Thanks,
Matt
> I would like to paste a part of my Petsc code here as well.
>
> 179 call KSPSetOperators(ksp,A,A,ierr);CHKERRQ(ierr)
> 180 call KSPGetPC(ksp,pc,ierr);CHKERRQ(ierr)
> 181 tol=1d-6
> 182 call
> KSPSetTolerances(ksp,tol,PETSC_DEFAULT_REAL,PETSC_DEFAULT_REAL,PETSC_DEFAULT_INTEGER,ierr);CHKERRQ(ierr)
> 183 call PCSetType(pc,PCBJACOBI,ierr);CHKERRQ(ierr)
> 184 nblks=8
> 185 allocate(blks(nblks))
> 186 blks=Ntot/nblks
> 187 call PCBJacobiSetTotalBlocks(pc,nblks,blks,ierr);CHKERRQ(ierr)
> 188 deallocate(blks)
> 189 call KSPsetup(ksp,ierr)
> 190 call PCBJacobiGetSubKSP(pc,nlocal,first,PETSC_NULL_KSP,ierr)
> 191 allocate(subksp(nlocal))
> 192 call PCBJacobiGetSubKSP(pc,nlocal,first,subksp,ierr)
> 193 do i=0,nlocal-1
> 194 call KSPGetPC(subksp(i+1),subpc,ierr)
> 195 call PCSetType(subpc,PCLU,ierr); CHKERRA(ierr)
> 196 call KSPSetType(subksp(i+1),KSPGMRES,ierr); CHKERRA(ierr)
> 197 tol=1d-6
> 198 call
> KSPSetTolerances(subksp(i+1),tol,PETSC_DEFAULT_REAL,PETSC_DEFAULT_REAL,PETSC_DEFAULT_INTEGER,ierr);CHKERRQ(ierr)
> 199 end do
> 200 deallocate(subksp)
>
> It would be great if anyone can help me with this issue. Many thanks!
>
> --
> Zhuo Chen
> Department of Physics
> University of Alberta
> Edmonton Alberta, Canada T6G 2E1
> http://www.pas.rochester.edu/~zchen25/
>
--
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their
experiments lead.
-- Norbert Wiener
https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20200503/cead1385/attachment.html>
More information about the petsc-users
mailing list