Working example in 
  https://gitlab.com/petsc/petsc/-/merge_requests/6430

> On May 7, 2023, at 11:47 AM, Barry Smith <[email protected]> wrote:
> 
> 
>   Note, you must call the default test on iteration 0. This is how it 
> determines the initial residual for relative residual tests etc. 
> 
>   I recommend not having the if () test at all. Instead, always call the 
> default convergence test first and then change the flag value it provides if 
> needed before doing any custom checking.
> 
>> On May 7, 2023, at 11:38 AM, Barry Smith <[email protected]> wrote:
>> 
>> 
>>    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