[petsc-users] [petsc-3.2] LSQR new convergence test

Alexander Grayver agrayver at gfz-potsdam.de
Wed Sep 21 10:17:35 CDT 2011


Thanks Barry, I added your code and solver works well now, but when I 
call KSPDestroy afterward it crashes:

[8]PETSC ERROR: --------------------- Error Message 
------------------------------------
[8]PETSC ERROR: Invalid argument!
[8]PETSC ERROR: Wrong type of object: Parameter # 1!
[8]PETSC ERROR: 
------------------------------------------------------------------------
[8]PETSC ERROR: Petsc Release Version 3.2.0, Patch 2, Fri Sep 16 
10:10:45 CDT 2011
[8]PETSC ERROR: See docs/changes/index.html for recent updates.
[8]PETSC ERROR: See docs/faq.html for hints about trouble shooting.
[8]PETSC ERROR: See docs/index.html for manual pages.
[8]PETSC ERROR: 
------------------------------------------------------------------------
[8]PETSC ERROR: /home/test on a openmpi-i named node226 by user Wed Sep 
21 17:01:23 2011
[8]PETSC ERROR: Libraries linked from 
/home/lib/petsc-3.2-p2/openmpi-intel-complex-debug-f/lib
[8]PETSC ERROR: Configure run at Tue Sep 20 09:28:29 2011
[8]PETSC ERROR: Configure options 
--with-petsc-arch=openmpi-intel-complex-debug-f 
--with-fortran-interfaces=1 --with-mpi-dir=/opt/mpi/intel/openmpi-1.4.2 
--with-scalar-type=complex 
--with-blas-lapack-dir=/opt/intel/Compiler/11.1/072/mkl/lib/em64t 
--with-precision=double --with-x=0
[8]PETSC ERROR: 
------------------------------------------------------------------------
[8]PETSC ERROR: VecDestroy() line 566 in 
/home/lib/petsc-3.2-p2/src/vec/vec/interface/vector.c
[8]PETSC ERROR: KSPDefaultConvergedDestroy() line 669 in 
/home/lib/petsc-3.2-p2/src/ksp/ksp/interface/iterativ.c
[8]PETSC ERROR: KSPDestroy() line 758 in 
/home/lib/petsc-3.2-p2/src/ksp/ksp/interface/itfunc.c

Is it my fault?

Regards,
Alexander

On 21.09.2011 15:36, Barry Smith wrote:
> On Sep 21, 2011, at 2:39 AM, Alexander Grayver wrote:
>
>> Hong, Barry,
>>
>> Thanks! Sorry for not to be clear, but Barry right, my question was how to get back to DefaultConvergenceTest in case of LSQR solver.
>>
>> Barry, yes, both versions give the same two norms.
>>
>> Can you clarify please how to implement that in Fortran:
>> void *cctx;
>> KSPDefaultConvergedCreate(&cctx);
>> KSPSetConvergenceTest(ksp,KSPDefaultConverged,cctx);
>     It should be almost the same
>
>      PetscFortranAddr cctx
>
>      call KSPDefaultConvergedCreate(cctx,ierr)
>      call KSPSetConvergenceTest(ksp,KSPDefaultConverged,cctx,PETSC_NULL_FUNCTION,ierr)
>
>     Barry
>
>
>> I'm a little bit confused about cctx parameter.
>>
>> Regards,
>> Alexander
>>
>>
>> On 21.09.2011 01:10, Barry Smith wrote:
>>> It has its own monitor that provides additional information  -ksp_monitor_lsqr
>>>
>>> You can also remove the new convergence test and get back the old one with code like
>>>
>>> void *cctx;
>>> KSPDefaultConvergedCreate(&cctx);
>>> KSPSetConvergenceTest(ksp,KSPDefaultConverged,cctx);
>>>
>>> after the KSPType is set to LSQR. So if you are happy with the old test.
>>>
>>>
>>>    Do both versions give the same first two norms?
>>>
>>>> 0 KSP Residual norm 9.386670021557e-17
>>>>   1 KSP Residual norm 8.258308650175e-17
>>>    Barry
>>>
>>>
>>> On Sep 20, 2011, at 4:40 AM, Alexander Grayver wrote:
>>>
>>>> Hello,
>>>>
>>>> In comparison with petsc-3.1-p7 in the latest petsc LSQR solver behaves differently.
>>>>
>>>> In petsc31 I had:
>>>>
>>>>   0 KSP Residual norm 9.386670021557e-17
>>>> ...
>>>> 95 KSP Residual norm 9.341367317075e-18
>>>> Linear solve converged due to CONVERGED_RTOL iterations 95
>>>> KSP Object:
>>>>   type: lsqr
>>>>   maximum iterations=200, initial guess is zero
>>>>   tolerances:  relative=0.1, absolute=1e-50, divergence=10000
>>>>   left preconditioning
>>>>   using PRECONDITIONED norm type for convergence test
>>>> PC Object:
>>>>   type: none
>>>>   linear system matrix = precond matrix:
>>>>   Matrix Object:
>>>>     type=shell, rows=19584, cols=19584
>>>>
>>>> relative residual norm =    0.9951737192872134E-01
>>>>
>>>> Now, with petsc32 I have:
>>>>
>>>>   0 KSP Residual norm 9.386670021557e-17
>>>>   1 KSP Residual norm 8.258308650175e-17
>>>> Linear solve converged due to CONVERGED_RTOL_NORMAL iterations 1
>>>> KSP Object: 12 MPI processes
>>>>   type: lsqr
>>>>   maximum iterations=200, initial guess is zero
>>>>   tolerances:  relative=0.1, absolute=1e-50, divergence=10000
>>>>   left preconditioning
>>>>   using UNPRECONDITIONED norm type for convergence test
>>>> PC Object: 12 MPI processes
>>>>   type: none
>>>>   linear system matrix = precond matrix:
>>>>   Matrix Object:   12 MPI processes
>>>>     type: shell
>>>>     rows=19584, cols=19584
>>>> relative residual norm =    0.8797910900468064E+00
>>>>
>>>> So I found new convergence test here which sets CONVERGED_RTOL_NORMAL:
>>>> http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manualpages/KSP/KSPLSQRDefaultConverged.html
>>>>
>>>> The question is, how to interpret this new test and make it works properly for me?
>>>> Thanks in advance.
>>>>
>>>> Regards,
>>>> Alexander



More information about the petsc-users mailing list