[petsc-users] Setting SNESVI

Smith, Barry F. bsmith at mcs.anl.gov
Sat Aug 18 10:42:06 CDT 2018


   -snes_monitor -snes_linesearch_monitor -pc_type lu 

 produces what?

   Barry

The line search failing means that the direction computed is not a descent direction which could be due to a bad Jacobian or inconsistent constraints.


> On Aug 17, 2018, at 11:56 PM, Amir <mhbaghaei at mail.sjtu.edu.cn> wrote:
> 
> Hi
> I need to apply constraint to primitive variables. I am troubling to set up SNESVI. After running the code, I feel SNES is not actually solving. After one iteration of SNES, I got DIVERGED_LINESEARCH, with NO changing in function norm.
> I think the way I set VI maybe wrong. Sorry for my simple explanation.
> Very thankful for your time.
> Amir
> SNESCreate(PETSC_COMM_WORLD,&snes);
> SNESSetApplicationContext(snes,&user);
> SNESSetDM(snes,user.dm);
> SNESSetFunction(snes,NULL,FormFunction,&user);
> FormInitialSolution(user.X,&user);
> SNESSetSolution(snes,user.X);
> SNESMonitorSet(snes,MySNESMonitor,&user,NULL);
> SNESSetType(snes,SNESVINEWTONSSLS);
> SNESSetNormSchedule(snes, SNES_NORM_ALWAYS);
> SNESVISetVariableBounds(snes,user.XLOWER,user.XUPPER);
> SNESGetLineSearch(snes,&linesearch);
> SNESLineSearchSetType(linesearch,SNESLINESEARCHBT);
> SNESLineSearchSetVIFunctions(linesearch, NULL, SNESNormFunction);
> SNESSetFromOptions(snes);
> SNESSolve(snes,NULL,user.X);
> 



More information about the petsc-users mailing list