[petsc-users] Custom KSP monitor changes in PETSc 3.7
Miorelli, Federico
Federico.Miorelli at CGG.COM
Wed May 4 07:26:49 CDT 2016
Barry,
Thanks for your answer, implementing everything in Fortran solved the problem.
Regards,
Federico
______ ______ ______
Federico Miorelli
Senior R&D Geophysicist
Subsurface Imaging - General Geophysics Italy
CGG Electromagnetics (Italy) Srl
cgg.com
-----Original Message-----
From: Barry Smith [mailto:bsmith at mcs.anl.gov]
Sent: martedì 3 maggio 2016 22:29
To: Miorelli, Federico
Cc: petsc-users at mcs.anl.gov
Subject: Re: [petsc-users] Custom KSP monitor changes in PETSc 3.7
Federico,
Sorry for the delay in responding. I think the problem is due to setting the monitor from Fortran but having the monitor written in C.
To make your life simpler I think you should be able to write the ShellKSPMonitor in Fortran. (no C code at all)
If that fails please send us a complete (trivial) code that we can build that exhibits the problem and we'll see what is going on.
Barry
> On May 2, 2016, at 7:48 AM, Miorelli, Federico <Federico.Miorelli at CGG.COM> wrote:
>
> Dear All,
>
> I am having some issues upgrading to PETSc 3.7 due to some changes in the KSPMonitor routines.
> I need to configure my KSP solver to output its convergence log to an existing ASCII viewer through a custom monitor, printing only one every 10 iterations.
> The calling code is Fortran, we wrote a small C code that just calls the default monitor every 10 iterations, passing the viewer as last argument. If I understood correctly it is now necessary to set up a PetscViewerAndFormat structure and pass that as last argument to the monitor routine.
>
> I tried to create one with PetscViewerAndFormatCreate but I'm getting a runtime error (see below).
> Could you please help me understand what I did wrong?
>
> Thanks in advance,
>
> Federico
>
>
>
> Error:
>
> [1]PETSC ERROR: #1 PetscViewerPushFormat() line 149 in
> /PETSc/petsc-3.7.0/src/sys/classes/viewer/interface/viewa.c
> Error Message
> --------------------------------------------------------------
> [8]PETSC ERROR: Argument out of range
> [8]PETSC ERROR: Too many PetscViewerPushFormat(), perhaps you forgot PetscViewerPopFormat()?
>
>
> Fortran code:
>
> PetscViewer :: viewer
> PetscViewerAndFormat :: vf
> external ShellKSPMonitor
> ...
> call PetscViewerAndFormatCreate(viewer, PETSC_VIEWER_DEFAULT, vf,ierr)
> call KSPMonitorSet(ksp, ShellKSPMonitor, vf,
> PetscViewerAndFormatDestroy, ierr)
>
>
>
> C code:
> PetscErrorCode shellkspmonitor_(KSP *ksp, PetscInt *n, PetscReal
> *rnorm, void *ptr) {
> PetscErrorCode ierr=0;
> if (*n % 10 == 0) {
> ierr = KSPMonitorTrueResidualNorm(*ksp,*n,*rnorm,(PetscViewerAndFormat*)ptr);CHKERRQ(ierr);
> }
> return ierr;
> }
>
>
>
>
> ______ ______ ______
> Federico Miorelli
> Senior R&D Geophysicist
> Subsurface Imaging - General Geophysics Italy
>
>
>
> This email and any accompanying attachments are confidential. If you
> received this email by mistake, please delete it from your system. Any review, disclosure, copying, distribution, or use of the email by others is strictly prohibited.
This email and any accompanying attachments are confidential. If you received this email by mistake, please delete
it from your system. Any review, disclosure, copying, distribution, or use of the email by others is strictly prohibited.
More information about the petsc-users
mailing list