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 >
