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)
KSPSetConvergenceTest 
<https://petsc.org/main/manualpages/KSP/KSPSetConvergenceTest/>(ksp,MyKSPConverged,defaultctx,KSPConvergedDefaultDestroy,
 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 <[email protected]> wrote:
> 
> On Sun, May 7, 2023 at 10:02 AM Edoardo alinovi <[email protected] 
> <mailto:[email protected]>> 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
> 
> https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>

Reply via email to