On Sun, May 11, 2025 at 4:00 PM Barry Smith <bsm...@petsc.dev> wrote:
> > I suppose we could call the postcheck even on failure. Then your first > check in your postcheck would be on SNESLineSearchReason. What line search > are you using? You could add the postcheck to all the early > PetscFunctionReturns() in the line search routine. > As I said, I don't think I agree with PostCheck in this scenario. Matt > On May 11, 2025, at 11:50 AM, Matthew Knepley <knep...@gmail.com> wrote: > > On Sun, May 11, 2025 at 11:39 AM hj2000--- via petsc-users < > petsc-users@mcs.anl.gov> wrote: > >> Dear Developer: >> >> I am a user of PETSc, and I am using SNESLineSearchSetPostCheck to >> perform some actions when the line search fails. >> >> However, it seems that this function is only called when the line search >> is successful. Why is that? >> > PostCheck is intended to work on the solution found by the line search. > > >> Do I need to do something else? >> > Yes. We do not have a specific hook for failure, because that would make > it a different line search (one which may not obey the advertised > properties). Thus we would want your scheme to be its own line search. > > Thanks, > > Matt > > >> My PETSc version is 3.18.6. Below is my code. >> >> >> >> auto LineSearchPostCheck = []( SNESLineSearch ls, Vec x, Vec y, >> Vec w, PetscBool* changed_Y, >> >> PetscBool* changed_W, void* ) { >> >> SNESLineSearchReason lscnv; >> >> SNESLineSearchGetReason( ls, &lscnv ); >> >> SNES snes = nullptr; >> >> SNESLineSearchGetSNES( ls, &snes ); >> >> SNESConvergedReason cnv; >> >> SNESGetConvergedReason( snes, &cnv ); >> >> double lambda = 0.0; >> >> SNESLineSearchGetLambda( ls, &lambda ); >> >> PetscPrintf( MPI_COMM_WORLD, "lambda=%lf\n", lambda ); >> >> if ( lscnv != SNES_LINESEARCH_SUCCEEDED || lambda < 1e-4 ) >> >> { >> >> VecWAXPY( w, -0.1, y, x ); >> >> SNESLineSearchSetReason( ls, SNES_LINESEARCH_SUCCEEDED ); >> >> *changed_W = PETSC_TRUE; >> >> } >> >> return 0; >> >> }; >> >> SNESLineSearchSetPostCheck( ls, LineSearchPostCheck, nullptr); >> >> >> > > -- > 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://urldefense.us/v3/__https://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!deFm6anFdsGG0BfyGak4ewySR2Mh9Pquul08gXi74TZ_mScnmYbiUZXpoeJy_vLlOyZxW0yM2vZTz5m24eDN$ > > <https://urldefense.us/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!Y6XIK823eTx-iRg60ThDREJsmpqY4jNxIxr-y3_Li6lAA2rs8JvxNjeeUrgfpgbcSCSaRzhBaYiBH_soe98y$> > > > -- 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://urldefense.us/v3/__https://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!deFm6anFdsGG0BfyGak4ewySR2Mh9Pquul08gXi74TZ_mScnmYbiUZXpoeJy_vLlOyZxW0yM2vZTz5m24eDN$ <https://urldefense.us/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!deFm6anFdsGG0BfyGak4ewySR2Mh9Pquul08gXi74TZ_mScnmYbiUZXpoeJy_vLlOyZxW0yM2vZTz334Wg26$ >