[petsc-users] [petsc-3.2] LSQR new convergence test
Barry Smith
bsmith at mcs.anl.gov
Wed Sep 21 14:58:13 CDT 2011
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
>>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: zitfuncf90.c
Type: application/octet-stream
Size: 603 bytes
Desc: not available
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20110921/30974a87/attachment-0001.obj>
More information about the petsc-users
mailing list