Do I have to manually code in the divergence criteria too?

> On Jan 12, 2016, at 8:37 AM, Dave May <[email protected]> wrote:
> 
> 
> 
>> On 12 January 2016 at 14:33, Gideon Simpson <[email protected]> wrote:
>> I’m just a bit confused by the documentation for 
>> SNESConvergenceTestFunction.  the arguments for the xnorm, gnorm, and f are 
>> passed in, at the current iterate, correct?
> 
> Yes, but nothing requires you to use them :D
>  
>>  I interpreted this as though I had to build by convergence test based on 
>> those values.
> 
> This is a misinterpretation. You can ignore all of xnorm, gnorm and fnorm and 
> define any crazy stopping condition you like. 
> 
> xnorm, gnorm and fnorm are commonly required for many stopping conditions and 
> are computed by the snes methods. As such, are readily available and for 
> efficiency and convenience they are provided to the user (e.g. to avoid you 
> having to re-compute norms).
> 
> Cheers,
>   Dave
>  
>> 
>> -gideon
>> 
>>> On Jan 12, 2016, at 8:24 AM, Dave May <[email protected]> wrote:
>>> 
>>> 
>>> 
>>> On 12 January 2016 at 14:14, Gideon Simpson <[email protected]> 
>>> wrote:
>>>> That seems to to allow for me to cook up a convergence test in terms of 
>>>> the 2 norm.  
>>> 
>>> While you are only provided the 2 norm of F, you are also given access to 
>>> the SNES object. Thus inside your user convergence test function, you can 
>>> call SNESGetFunction() and SNESGetSolution(), then you can compute your 
>>> convergence criteria and set the converged reason to what ever you want.
>>> 
>>> See 
>>> 
>>> http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/SNES/SNESGetFunction.html
>>> 
>>> http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/SNES/SNESGetSolution.html
>>> 
>>> Cheers,
>>>   Dave
>>> 
>>> 
>>> 
>>>  
>>>> What I’m really looking for is the ability to change things to be 
>>>> something like the 2 norm of the vector with elements
>>>> 
>>>> F_i/|x_i|
>>>> 
>>>> where I am looking for a root of F(x).  I can just build that scaling into 
>>>> the form function, but is there a way to do it without rewriting that 
>>>> piece of the code?
>>>> 
>>>> 
>>>> -gideon
>>>> 
>>>>> On Jan 12, 2016, at 12:14 AM, Barry Smith <[email protected]> wrote:
>>>>> 
>>>>> 
>>>>>   You can use SNESSetConvergenceTest() to use whatever test you want to 
>>>>> decide on convergence.
>>>>> 
>>>>> Barry
>>>>> 
>>>>>> On Jan 11, 2016, at 3:26 PM, Gideon Simpson <[email protected]> 
>>>>>> wrote:
>>>>>> 
>>>>>> I’m solving nonlinear problem for a complex valued function which is 
>>>>>> decomposed into real and imaginary parts, Q = u + i v.  What I’m finding 
>>>>>> is that where |Q| is small, the numerical phase errors tend to be 
>>>>>> larger.  I suspect this is because it’s using the 2-norm for convergence 
>>>>>> in the SNES, so, where the solution is already, the phase errors are 
>>>>>> seen as small too.  Is there a way to use something more like an 
>>>>>> infinity norm with SNES, to get more point wise control?
>>>>>> 
>>>>>> -gideon
> 

Reply via email to