[petsc-users] convergence problem in spherical coordinates

Patrick Alken patrick.alken at Colorado.EDU
Mon Feb 20 16:52:29 CST 2012


Hello all,

   I am having great difficulty solving a 3D finite difference equation 
in spherical coordinates. I am solving the equation in a spherical shell 
region S(a,b), with the boundary conditions being that the function is 0 
on both boundaries (r = a and r = b). I haven't imposed any boundary 
conditions on theta or phi which may be a reason its not converging. The 
phi boundary condition would be that the function is periodic in phi, 
but I don't know if this needs to be put into the matrix somehow?

I nondimensionalized the equation before solving which helped a little 
bit. I've also scaled the matrix and RHS vectors by their maximum 
element to make all entries <= 1.

I've tried both direct and iterative solvers. The direct solvers give a 
fairly accurate solution for small grids but seem unstable for larger 
grids. The PETSc iterative solvers converge for very small grids but for 
medium to large grids don't converge at all.

When running with the command (for a small grid):

*> ./main -ksp_converged_reason -ksp_monitor_true_residual -pc_type svd 
-pc_svd_monitor*

I get the output:

     SVD: condition number 5.929088512946e+03, 0 of 1440 singular values 
are (nearly) zero
     SVD: smallest singular values: 2.742809162118e-04 
2.807446554985e-04 1.548488288425e-03 1.852332719983e-03 2.782708934678e-03
     SVD: largest singular values : 1.590835571953e+00 
1.593368145758e+00 1.595771695877e+00 1.623691828398e+00 1.626235829632e+00
   0 KSP preconditioned resid norm 2.154365616645e+03 true resid norm 
8.365589263063e+00 ||r(i)||/||b|| 1.000000000000e+00
   1 KSP preconditioned resid norm 4.832753933427e-10 true resid norm 
4.587845792963e-12 ||r(i)||/||b|| 5.484187244549e-13
Linear solve converged due to CONVERGED_RTOL iterations 1

When plotting the output of this SVD solution, it looks pretty good, but 
svd isn't practical for larger grids.

Using the command (on the same grid):

*> ./main -ksp_converged_reason -ksp_monitor_true_residual 
-ksp_compute_eigenvalues -ksp_gmres_restart 1000 -pc_type none*

The output is attached. There do not appear to be any 0 eigenvalues. The 
solution here is much less accurate than the SVD case since it didn't 
converge.

I've also tried the -ksp_diagonal_scale -ksp_diagonal_scale_fix options 
which don't help very much.

Any advice on how to trouble shoot this would be greatly appreciated.

Some things I've checked already:

1) there aren't any 0 rows in the matrix
2) using direct solvers on very small grids seems to give decent solutions
3) there don't appear to be any 0 singular values or eigenvalues

Perhaps the matrix has a null space, but I don't know how I would find 
out what the null space is? Is there a tutorial on how to do this?

Thanks in advance!

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120220/81ed5c46/attachment.htm>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: output.txt
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120220/81ed5c46/attachment.txt>


More information about the petsc-users mailing list