[petsc-users] SNESQN number of past states
Bikash Kanungo
bikash at umich.edu
Thu Feb 15 02:48:25 CST 2018
Thanks again Barry. I figured it out. My SNESView was called before
SNESSetFromOptions and hence was showing the default value.
Regards,
Bikash
On Wed, Feb 14, 2018 at 11:28 PM, Smith, Barry F. <bsmith at mcs.anl.gov>
wrote:
>
> I stuck the line
>
> PetscOptionsSetValue(NULL,"-snes_qn_m", "50");
>
> in src/snes/examples/tutorials/ex19.c
>
> and called it with
>
> -da_refine 2 -snes_monitor -snes_type qn -snes_view
>
> and the results showed
>
> Stored subspace size: 50
>
> so I am afraid it is something unique to exactly your code that is causing
> it to be not used. If you can send us a complete code that reproduces the
> problem we can track it down and fix it but without a reproducing code we
> can't do anything to resolve the problem.
>
> Barry
>
>
> > On Feb 14, 2018, at 9:15 PM, Bikash Kanungo <bikash at umich.edu> wrote:
> >
> > Thanks Barry and Matthew.
> >
> > @Barry: I'm following the same procedure as you've mentioned -
> PetscOptionsSetValue() precede SNESSetFromOptions. Here's the snippet for
> my code:
> >
> > ------------------------------------------------------------
> -----------------------------------------------
> >
> > error = SNESCreate(PETSC_COMM_WORLD,&snes);
> > checkPETScError(error,
> > "SNESCreate failed.");
> >
> > error = SNESSetType(snes, SNESQN);
> > checkPETScError(error,
> > "SNESSetType failed.");
> >
> > error = SNESQNSetType(snes, SNES_QN_LBFGS);
> > checkPETScError(error,
> > "SNESQNSetType failed.");
> >
> > error = SNESQNSetScaleType(snes, SNES_QN_SCALE_SHANNO);
> > checkPETScError(error,
> > "SNESQNSetScaleType failed.");
> >
> > error = SNESQNSetRestartType(snes, SNES_QN_RESTART_PERIODIC);
> > checkPETScError(error,
> > "SNESQNSetRestartType failed.");
> >
> > error = PetscOptionsSetValue("-snes_qn_m","500");
> > checkPETScError(error,
> > "PETScOptionsSetValue failed.");
> >
> > SNESLineSearch linesearch;
> > error = SNESGetLineSearch(snes,&linesearch);
> > checkPETScError(error,
> > "SNESGetLineSearch failed.");
> >
> > error = SNESLineSearchSetType(linesearch,SNESLINESEARCHCP);
> > checkPETScError(error,
> > "SNESLineSearchSetType failed.");
> >
> > error = PetscOptionsSetValue("-snes_linesearch_max_it", "1");
> > checkPETScError(error,
> > "PetscOptionsSetValue failed.");
> >
> > error = SNESLineSearchView(linesearch, PETSC_VIEWER_STDOUT_WORLD);
> > checkPETScError(error,
> > "SNESLineSearchView failed.");
> >
> > error =SNESLineSearchSetMonitor(linesearch,
> > PETSC_TRUE);
> > checkPETScError(error,
> > "SNESLineSearchSet Monitor failed.");
> >
> > error = SNESLineSearchSetFromOptions(linesearch);
> > checkPETScError(error,
> > "SNESLineSearchSetFromOptions failed.");
> >
> > SNESLineSearchReason lineSearchReason;
> > error = SNESLineSearchGetReason(linesearch, &lineSearchReason);
> > checkPETScError(error,
> > "SNESLineSearchGetReason failed.");
> >
> > error = SNESSetFunction(snes,r,FormFunction,&petscData);
> > checkPETScError(error,
> > "SNESSetFunction failed.");
> >
> > //
> > // Customize KSP
> > //
> > error = SNESGetKSP(snes,&ksp);
> > checkPETScError(error,
> > "SNESGetKSP failed.");
> >
> > error = KSPSetType(ksp,KSPGMRES);
> > checkPETScError(error,
> > "KSPSetType failed.");
> >
> > error = KSPGMRESSetRestart(ksp,300);
> > checkPETScError(error,
> > "KSPGMRESSetRestart failed.");
> >
> > error = KSPSetInitialGuessNonzero(ksp,PETSC_TRUE);
> > checkPETScError(error,
> > "KSPSetInitialGuessNonzero failed.");
> >
> > error = KSPGetPC(ksp,&pc);
> > checkPETScError(error,
> > "KSPGetPC failed.");
> >
> > error = PCSetType(pc,PCJACOBI);
> > checkPETScError(error,
> > "PCSetType failed.");
> >
> > error = PCSetReusePreconditioner(pc,PETSC_TRUE);
> > checkPETScError(error,
> > "PCSetReusePreconditioner failed.");
> >
> > error = KSPSetTolerances(ksp,
> > PETSC_DEFAULT,
> > 1e-15,
> > 1e7,
> > 10000);
> > checkPETScError(error,
> > "KSPSetTolerances failed.");
> >
> > error = KSPSetFromOptions(ksp);
> > checkPETScError(error,
> > "Call to KSPSetFromOptions() failed.");
> >
> > //
> > //get reason for non-convergence
> > //
> > KSPConvergedReason kspReason;
> > error = KSPGetConvergedReason(ksp, &kspReason);
> > checkPETScError(error,
> > "Call to KSPGetConvergedReason() failed.");
> >
> > if(kspReason < 0)
> > {
> > if(debugLevel != 0)
> > std::cout<<"Other kind of divergence in SNES-KSP : "<<
> kspReason <<std::endl;
> >
> > }
> >
> > PetscInt lag = 1;
> > error = SNESSetLagPreconditioner(snes,
> > lag);
> > checkPETScError(error,
> > "Call to SNESSetLagPreconditioner() failed.");
> >
> > PetscInt maxFails = 2;
> > error = SNESSetMaxLinearSolveFailures(snes,maxFails);
> > checkPETScError(error,
> > "Call to SNESSetMaxLinearSolveFailures() failed.");
> >
> > PetscReal abstol = 1e-13; // absolute convergence tolerance
> > PetscInt maxit = 100000;
> > error = SNESSetTolerances(snes,
> > abstol,
> > PETSC_DEFAULT,
> > PETSC_DEFAULT,
> > maxit,
> > maxit);
> > checkPETScError(error,
> > "SNESSetTolerances failed.");
> >
> > error = SNESView(snes,
> > PETSC_VIEWER_STDOUT_WORLD);
> > checkPETScError(error,
> > "Call to SNESView() failed.");
> >
> > error = SNESMonitorSet(snes,SNESMonitorDefault,PETSC_NULL,
> PETSC_NULL);
> > checkPETScError(error,
> > "Call to SNESMonitorSet() failed.");
> >
> > error = SNESSetFromOptions(snes);
> > checkPETScError(error,
> > "Call to SNESSetFromOptions() failed.");
> >
> >
> > //
> > // Solve the system
> > //
> > error = SNESSolve(snes,PETSC_NULL,x);
> > checkPETScError(error,
> > "Call to SNESSolve() failed.");
> >
> > SNESConvergedReason reason;
> > error = SNESGetConvergedReason(snes,&reason);
> > checkPETScError(error,
> > "Call to SNESGetConvergedReason() failed.");
> >
> > ------------------------------------------------------------
> ------------------------------------------------------------------------
> >
> > Also, I didn't find any SNESQN examples in my snes/examples folder
> (using petsc-3.6.3).
> > Moreover, the Powell descent condition seems to be only declared and
> then assigned a value through the PetscOptionsReal call. Beyond that I
> didn't find any other mention of it. I was grepping for powell_downhill
> variable. (Note: powell_downhill features in 3.6.3 and not in 3.7 version).
> >
> > Thanks,
> > Bikash
> >
> >
> > On Wed, Feb 14, 2018 at 7:02 PM, Matthew Knepley <knepley at gmail.com>
> wrote:
> > On Wed, Feb 14, 2018 at 6:43 PM, Smith, Barry F. <bsmith at mcs.anl.gov>
> wrote:
> >
> > Hmm,
> >
> > 1) make sure you call PetscOptionsSetValue() before you call to
> SNESSetFromOptions()
> >
> > 2) make sure you call SNESSetFromOptions()
> >
> > 3) did you add a prefix to the SNES object? If so make sure you include
> it in the PetscOptionsSetValue() call.
> >
> > I can't see a reason why it won't work. Does it work with the PETSc
> examples for you or not?
> >
> > Regarding the Powell descent option, I'm afraid you'll need to
> examine the code for exact details. src/snes/impls/qn/qn.c
> >
> > Here is the description
> >
> > https://bitbucket.org/petsc/petsc/src/939b553f045c5ba32242d0d49e80e4
> 934ed3bf76/src/snes/impls/qn/qn.c?at=master&fileviewer=
> file-view-default#qn.c-451
> >
> > Thanks,
> >
> > Matt
> >
> >
> > Barry
> >
> >
> > > On Feb 14, 2018, at 5:25 PM, Bikash Kanungo <bikash at umich.edu> wrote:
> > >
> > > Hi,
> > >
> > > I'm using the L-BFGS QN solver. In order to set the number of past
> states (also the restart size if I use Periodic restart), to say 50, I'm
> using PetscOptionsSetValue("-snes_qn_m", "50"). However while running, it
> still shows "Stored subspace size: 10", i.e., the default value of 10 is
> not overwritten.
> > >
> > > Additionally, I would like to know more about the the
> -snes_qn_powell_descent option. For Powell restart, one uses a gamma
> parameter which I believe is defined by the -snes_qn_powell_gamma option.
> What exactly does the descent condition do? It would be useful if there are
> good references to it.
> > >
> > > Thanks,
> > > Biksah
> > >
> > > --
> > > Bikash S. Kanungo
> > > PhD Student
> > > Computational Materials Physics Group
> > > Mechanical Engineering
> > > University of Michigan
> > >
> >
> >
> >
> >
> > --
> > 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/
> >
> >
> >
> > --
> > Bikash S. Kanungo
> > PhD Student
> > Computational Materials Physics Group
> > Mechanical Engineering
> > University of Michigan
>
>
--
Bikash S. Kanungo
PhD Student
Computational Materials Physics Group
Mechanical Engineering
University of Michigan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20180215/94862d51/attachment-0001.html>
More information about the petsc-users
mailing list