Randy,

   Thanks for pointing out this problem. I was generating the wrong C stubs for 
arguments such as PetscViewerAndFormat, that is arguments that are C structs 
but treated as FortranAddr in Fortran because the C struct is too complex to be 
directly represented in Fortran.

  This is fixed in 
https://urldefense.us/v3/__https://gitlab.com/petsc/petsc/-/merge_requests/8563__;!!G_uCfscf7eWS!ZJ2LzM36kh8gWYIb5xKHC93lz7AjKZEaJaTVb7JIHJ2VZQ6psyGi7AKwT6E6zu-TflxcNJEnP0zppaV27SmvFCo$
  and should allow you to do what you previously had done. In the MR you will 
see I have modified ex2f.F to do essentially what your test code is doing.

  Barry


> On Jun 23, 2025, at 2:46 PM, Randall Mackie <rlmackie...@gmail.com> wrote:
> 
> In previous versions of PETSc we use to be able to call 
> KSPMonitorTrueResidual from within our custom KSPMonitor, using an approach 
> that is now commented out in the example found at 
> https://urldefense.us/v3/__https://petsc.org/release/src/ksp/ksp/tutorials/ex2f.F90.html__;!!G_uCfscf7eWS!ZJ2LzM36kh8gWYIb5xKHC93lz7AjKZEaJaTVb7JIHJ2VZQ6psyGi7AKwT6E6zu-TflxcNJEnP0zppaV2RnCwvyM$
>  : 
> <https://urldefense.us/v3/__https://petsc.org/release/src/ksp/ksp/tutorials/ex2f.F90.html:__;!!G_uCfscf7eWS!ft8A0uxwHvTcBa5FwETVQYcImMgoOOueBeZT-7zP9jlaLFCDZ6ApRkBFUgoUzMRWCLbyU1FcxTgFoYMm8twVYS6KDQ$>
> 
> !
> 214:  <>!     Cannot also use the default KSP 
> <https://urldefense.us/v3/__https://petsc.org/release/manualpages/KSP/KSP/__;!!G_uCfscf7eWS!ft8A0uxwHvTcBa5FwETVQYcImMgoOOueBeZT-7zP9jlaLFCDZ6ApRkBFUgoUzMRWCLbyU1FcxTgFoYMm8tx3EWnatA$>
>  monitor routine showing how it may be used from Fortran
> 215:  <>!     since the Fortran compiler thinks the calling arguments are 
> different in the two cases
> 216:  <>!
> 217:  <>!        PetscCallA 
> <https://urldefense.us/v3/__https://petsc.org/release/manualpages/Sys/PetscCallA/__;!!G_uCfscf7eWS!ft8A0uxwHvTcBa5FwETVQYcImMgoOOueBeZT-7zP9jlaLFCDZ6ApRkBFUgoUzMRWCLbyU1FcxTgFoYMm8tzA4vLgOQ$>(PetscViewerAndFormatCreate
>  
> <https://urldefense.us/v3/__https://petsc.org/release/manualpages/Viewer/PetscViewerAndFormatCreate/__;!!G_uCfscf7eWS!ft8A0uxwHvTcBa5FwETVQYcImMgoOOueBeZT-7zP9jlaLFCDZ6ApRkBFUgoUzMRWCLbyU1FcxTgFoYMm8tykmBKBfg$>(PETSC_VIEWER_STDOUT_WORLD
>  
> <https://urldefense.us/v3/__https://petsc.org/release/manualpages/Viewer/PETSC_VIEWER_STDOUT_WORLD/__;!!G_uCfscf7eWS!ft8A0uxwHvTcBa5FwETVQYcImMgoOOueBeZT-7zP9jlaLFCDZ6ApRkBFUgoUzMRWCLbyU1FcxTgFoYMm8tw_EZkgfA$>,PETSC_VIEWER_DEFAULT
>  
> <https://urldefense.us/v3/__https://petsc.org/release/manualpages/Viewer/PetscViewerFormat/__;!!G_uCfscf7eWS!ft8A0uxwHvTcBa5FwETVQYcImMgoOOueBeZT-7zP9jlaLFCDZ6ApRkBFUgoUzMRWCLbyU1FcxTgFoYMm8tyZ_k-1Uw$>,vf,ierr))
> 218:  <>!        PetscCallA 
> <https://urldefense.us/v3/__https://petsc.org/release/manualpages/Sys/PetscCallA/__;!!G_uCfscf7eWS!ft8A0uxwHvTcBa5FwETVQYcImMgoOOueBeZT-7zP9jlaLFCDZ6ApRkBFUgoUzMRWCLbyU1FcxTgFoYMm8tzA4vLgOQ$>(KSPMonitorSet
>  
> <https://urldefense.us/v3/__https://petsc.org/release/manualpages/KSP/KSPMonitorSet/__;!!G_uCfscf7eWS!ft8A0uxwHvTcBa5FwETVQYcImMgoOOueBeZT-7zP9jlaLFCDZ6ApRkBFUgoUzMRWCLbyU1FcxTgFoYMm8tx6T8FJsA$>(ksp,KSPMonitorResidual
>  
> <https://urldefense.us/v3/__https://petsc.org/release/manualpages/KSP/KSPMonitorResidual/__;!!G_uCfscf7eWS!ft8A0uxwHvTcBa5FwETVQYcImMgoOOueBeZT-7zP9jlaLFCDZ6ApRkBFUgoUzMRWCLbyU1FcxTgFoYMm8txdiRZPSg$>,vf,PetscViewerAndFormatDestroy
>  
> <https://urldefense.us/v3/__https://petsc.org/release/manualpages/Viewer/PetscViewerAndFormatDestroy/__;!!G_uCfscf7eWS!ft8A0uxwHvTcBa5FwETVQYcImMgoOOueBeZT-7zP9jlaLFCDZ6ApRkBFUgoUzMRWCLbyU1FcxTgFoYMm8tzN4PpBPA$>,ierr))
> 
> Instead, that example uses:
> 
> 210:  <>      if (flg) then
> 211:  <>        vzero = 0
> 212:  <>        PetscCallA 
> <https://urldefense.us/v3/__https://petsc.org/release/manualpages/Sys/PetscCallA/__;!!G_uCfscf7eWS!ft8A0uxwHvTcBa5FwETVQYcImMgoOOueBeZT-7zP9jlaLFCDZ6ApRkBFUgoUzMRWCLbyU1FcxTgFoYMm8tzA4vLgOQ$>(KSPMonitorSet
>  
> <https://urldefense.us/v3/__https://petsc.org/release/manualpages/KSP/KSPMonitorSet/__;!!G_uCfscf7eWS!ft8A0uxwHvTcBa5FwETVQYcImMgoOOueBeZT-7zP9jlaLFCDZ6ApRkBFUgoUzMRWCLbyU1FcxTgFoYMm8tx6T8FJsA$>(ksp,MyKSPMonitor,vzero,PETSC_NULL_FUNCTION,ierr))
> 213:  <>!
> Regardless of which of these approaches I try, I cannot use 
> KSPMonitorTrueResidual in the MyKSPMonitor routine.
> I get the following error:
> 
> [0]PETSC ERROR: --------------------- Error Message 
> --------------------------------------------------------------
> [0]PETSC ERROR: Null argument, when expecting valid pointer
> [0]PETSC ERROR: Null Pointer: Parameter # 4
> [0]PETSC ERROR: See 
> https://urldefense.us/v3/__https://petsc.org/release/faq/__;!!G_uCfscf7eWS!ZJ2LzM36kh8gWYIb5xKHC93lz7AjKZEaJaTVb7JIHJ2VZQ6psyGi7AKwT6E6zu-TflxcNJEnP0zppaV2eUazhhw$
>   
> <https://urldefense.us/v3/__https://petsc.org/release/faq/__;!!G_uCfscf7eWS!ft8A0uxwHvTcBa5FwETVQYcImMgoOOueBeZT-7zP9jlaLFCDZ6ApRkBFUgoUzMRWCLbyU1FcxTgFoYMm8tzxt44McA$>
>  for trouble shooting.
> [0]PETSC ERROR: PETSc Release Version 3.23.3, May 30, 2025
> [0]PETSC ERROR: ./test with 2 MPI process(es) and PETSC_ARCH 
> linux-gfortran-complex-debug on rmackie-VirtualBox-2024 by rmackie Mon Jun 23 
> 11:34:04 2025
> [0]PETSC ERROR: Configure options: --with-clean=1 --with-scalar-type=complex 
> --with-debugging=1 --with-fortran=1 --download-mpich=1
> [0]PETSC ERROR: #1 KSPMonitorTrueResidual() at 
> /home/rmackie/PETSc/petsc-3.23.3/src/ksp/ksp/interface/iterativ.c:400
> [0]PETSC ERROR: #2 test.F90:303
> 
> 
> I attach a slightly modified version of the example that demonstrates this 
> behavior.
> 
> 
> Thanks for the help,
> 
> Randy
> 
> <test.F90>
>  

Reply via email to