Thanks Barry!


> On Jul 17, 2025, at 8:58 PM, Barry Smith <bsm...@petsc.dev> wrote:
> 
> 
>   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!cpFnpAAfsY4pLNBenaae5toN0iiU6tx2ilGtp9nukqV_fjZQXlneIci6mh96yqnVRvaPr38SO2VFxIQnXb8sQdBftA$
>   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!cpFnpAAfsY4pLNBenaae5toN0iiU6tx2ilGtp9nukqV_fjZQXlneIci6mh96yqnVRvaPr38SO2VFxIQnXb_bSiflJw$
>>  : 
>> <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!cpFnpAAfsY4pLNBenaae5toN0iiU6tx2ilGtp9nukqV_fjZQXlneIci6mh96yqnVRvaPr38SO2VFxIQnXb8J5-MKxg$
>>   
>> <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