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

Alexander Grayver agrayver at gfz-potsdam.de
Thu Sep 22 04:01:50 CDT 2011


Barry,

Unfortunately, the problem is still there. Even though I put 
zitfuncf90.c into src/ksp/ksp/interface/ftn-custom, modified makefile 
there and made configure/make from scratch.
When are you going to release new patch?

Regards,
Alexander

On 21.09.2011 21:58, Barry Smith wrote:
>     Alexander,
>
>      Yes, a problem with trying to handle C pointers on the Fortran side. It will be fixed in the next patch release. You can drop the attached file into src/ksp/ksp/interface/ftn-custom run make in that directory and then relink your program and it should work.
>
>      Barry
> [see attached file: zitfuncf90.c]
> On Sep 21, 2011, at 11:00 AM, Alexander Grayver wrote:
>
>> Barry,
>>
>> I think the error is related to this
>>
>> PetscFortranAddr cctx
>>
>> definition. Speaking in terms of C++ notation, it seems that PETSc takes&cctx as KSPDefaultConvergedCtx, however real KSPDefaultConvergedCtx is *cctx.
>> Not sure if I'm clear now, but it's easy to see if you trace code like that:
>>
>>   PetscFortranAddr      cctx
>>   KSP  ksp
>>
>>   call KSPCreate(MPI_COMM_WORLD,ksp,ierr)
>>   call KSPSetType(ksp,KSPLSQR,ierr)
>>   call KSPDefaultConvergedCreate(cctx,ierr)
>>   call KSPSetConvergenceTest(ksp,KSPDefaultConverged,cctx,PETSC_NULL_FUNCTION,ierr)
>>   call KSPDestroy(ksp,ierr)
>>
>> I guess the error should be reproducible from the code above.
>>
>> Regards,
>> Alexander
>>
>> On 21.09.2011 17:17, Alexander Grayver wrote:
>>> 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