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 >
