[petsc-users] difference between solns for np=1 and np>1.
(Rebecca) Xuefei YUAN
xy2102 at columbia.edu
Thu Mar 18 13:18:03 CDT 2010
Dear Jed,
I reran the code adding one option -snes_mf, then np=2 gives the same
result as in np=1.
So I think the bug is in the Jacobian matrix.
Here are steps I used to check on the Jacobian matrix:
1) After final assemble the Jacobian, output the matrix to Matlab
files and compare the .m files for both np=1 and np=2:
ierr = MatAssemblyBegin(jac,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);//book15page37
ierr = MatAssemblyEnd(jac,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
PetscViewer viewer;
char fileName[128];
PetscInt p;
ierr = MPI_Comm_size(MPI_COMM_WORLD, &p);CHKERRQ(ierr);
PetscInt its;
ierr = SNESGetIterationNumber(snes,&its);CHKERRQ(ierr);
sprintf(fileName, "twvggt_matrix_tx%i_ty%i_p%i_its%i.m",info1.mx,
info1.my,p,its);
ierr = PetscViewerASCIIOpen(PETSC_COMM_WORLD,fileName,&viewer);CHKERRQ(ierr);
ierr = PetscViewerSetFormat(viewer,PETSC_VIEWER_ASCII_MATLAB);CHKERRQ(ierr);
ierr = MatView (jac, viewer); CHKERRQ (ierr);
PetscViewerDestroy(viewer);
2) in such a way, after each nonlinear iteration, there is a file for
the corresponding Jacobian, I found these J_np1 and J_np2 have
different nonzero structures, for example, for a (7X6+1,7X6+1) matrix,
standard five-pt scheme with stencil width = 1, (the other 1 after 42
is a scalar in DMComposite)
J_np1 has
% Size = 43 43
% Nonzeros = 367
zzz = zeros(367,3);
and J_np2 has
% Size = 43 43
% Nonzeros = 576
zzz = zeros(576,3);
I checked the different nonzero structure in J_np1 and J_np2, the
different spots in J_np2 are all zeros.
3) The null space in this case is a single vector has first 7X6
elements being a scale, and the last element being zero. I confirmed
by comparing v = null(Mat_0) in Matlab with VecView in C, they are the
same.
Will this be enough to confirm the J_np1, J_np2 and the null vector?
Thanks very much!
Rebecca
Quoting Jed Brown <jed at 59A2.org>:
> On Thu, 18 Mar 2010 13:50:32 -0400, "(Rebecca) Xuefei YUAN"
> <xy2102 at columbia.edu> wrote:
>> Dear Jed,
>>
>> I excluded the bug from CreateNullSpace(), but still have different
>> convergence history for np=1 and np=2, both with -pc_type none, and
>> -pc_type jacobi.
>>
>> The convergence history for np=1, -pc_type none is
>>
>>
>> 0 SNES Function norm 3.277654936380e+02
>> Linear solve converged due to CONVERGED_RTOL iterations 1
>> 1 SNES Function norm 1.010694930474e+01
>> Linear solve converged due to CONVERGED_RTOL iterations 9
>> 2 SNES Function norm 1.456202001578e+00
>> Linear solve converged due to CONVERGED_RTOL iterations 23
>> 3 SNES Function norm 6.670544108392e-02
>> Linear solve converged due to CONVERGED_RTOL iterations 28
>> 4 SNES Function norm 1.924506428876e-04
>> Linear solve did not converge due to DIVERGED_ITS iterations 10000
>> 5 SNES Function norm 3.554534723246e-05
>> Linear solve did not converge due to DIVERGED_ITS iterations 10000
>> 6 SNES Function norm 3.554534511905e-05
>> Linear solve did not converge due to DIVERGED_ITS iterations 10000
>> 7 SNES Function norm 3.554534511895e-05
>> Nonlinear solve converged due to CONVERGED_PNORM_RELATIVE
>
> It looks like this has stagnated. You said you have checked that the
> matrices are the same, what did you do to confirm this? How did you
> check that the null spaces are the same? What do the unpreconditioned
> residuals look like (e.g. -ksp_type fgmres or -ksp_type lgmres
> -ksp_right_pc)? If you are working in unpreconditioned residuals, then
> how are you implementing boundary conditions?
>
> Jed
>
>
--
(Rebecca) Xuefei YUAN
Department of Applied Physics and Applied Mathematics
Columbia University
Tel:917-399-8032
www.columbia.edu/~xy2102
More information about the petsc-users
mailing list