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?  I interpreted this as though I had to build by convergence 
test based on those values.

-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] 
> <mailto:[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/SNESGetFunction.html>
> 
> http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/SNES/SNESGetSolution.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] 
>> <mailto:[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] 
>>> <mailto:[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