The code will not work as written because KSPConvergedDefault() requires a context created with KSPConvergedDefaultCreate().
Here is a starting point for what you need, in main
integer*8 defaultctx
extern MyKSPConverged, KSPConvergedDefaultDestroy
KSPDefaultConvergedCreate(defaultctx,ierr)
subroutine MyKSPConverged(ksp,n,rnorm,flag,defaultctx,ierr)
KSP ksp
PetscErrorCode ierr
PetscInt n
integer*8 defaultctx
KSPConvergedReason flag
PetscReal rnorm
if (n>1) then
call KSPConvergedDefault(ksp, n, rnorm, flag,defaultctx, ierr)
else
flag = 0
endif
ierr = 0
end subroutine MyKSPConverged
On May 7, 2023, at 10:09 AM, Matthew Knepley <knepley@gmail.com> wrote:
Thanks,
Is this a reasonable thing to do if I want to replicate what KSP is doing by default?
Yes. The other option is to pass along 'dummy'
Thanks,
Matt
-- What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.
-- Norbert Wiener