Lines Matching refs:linesearch

19 PetscErrorCode SNESLineSearchBTSetAlpha(SNESLineSearch linesearch, PetscReal alpha)  in SNESLineSearchBTSetAlpha()  argument
21 SNESLineSearch_BT *bt = (SNESLineSearch_BT *)linesearch->data; in SNESLineSearchBTSetAlpha()
25 PetscValidHeaderSpecific(linesearch, SNESLINESEARCH_CLASSID, 1); in SNESLineSearchBTSetAlpha()
26 PetscCall(PetscObjectTypeCompare((PetscObject)linesearch, SNESLINESEARCHBT, &isbt)); in SNESLineSearchBTSetAlpha()
44 PetscErrorCode SNESLineSearchBTGetAlpha(SNESLineSearch linesearch, PetscReal *alpha) in SNESLineSearchBTGetAlpha() argument
46 SNESLineSearch_BT *bt = (SNESLineSearch_BT *)linesearch->data; in SNESLineSearchBTGetAlpha()
50 PetscValidHeaderSpecific(linesearch, SNESLINESEARCH_CLASSID, 1); in SNESLineSearchBTGetAlpha()
51 PetscCall(PetscObjectTypeCompare((PetscObject)linesearch, SNESLINESEARCHBT, &isbt)); in SNESLineSearchBTGetAlpha()
52 …heck(isbt, PetscObjectComm((PetscObject)linesearch), PETSC_ERR_USER, "Not for type %s", ((PetscObj… in SNESLineSearchBTGetAlpha()
57 static PetscErrorCode SNESLineSearchApply_BT(SNESLineSearch linesearch) in SNESLineSearchApply_BT() argument
59 SNESLineSearch_BT *bt = (SNESLineSearch_BT *)linesearch->data; in SNESLineSearchApply_BT()
75 PetscCall(SNESLineSearchGetVecs(linesearch, &X, &F, &Y, &W, &G)); in SNESLineSearchApply_BT()
76 PetscCall(SNESLineSearchGetNorms(linesearch, NULL, &fnorm, NULL)); in SNESLineSearchApply_BT()
77 PetscCall(SNESLineSearchGetLambda(linesearch, &lambda)); in SNESLineSearchApply_BT()
78 PetscCall(SNESLineSearchGetSNES(linesearch, &snes)); in SNESLineSearchApply_BT()
79 PetscCall(SNESLineSearchGetDefaultMonitor(linesearch, &monitor)); in SNESLineSearchApply_BT()
80 PetscCall(SNESLineSearchGetTolerances(linesearch, &minlambda, NULL, NULL, NULL, NULL, &max_it)); in SNESLineSearchApply_BT()
86 …PetscCheck(jac || objective, PetscObjectComm((PetscObject)linesearch), PETSC_ERR_USER, "SNESLineSe… in SNESLineSearchApply_BT()
88 PetscCall(SNESLineSearchPreCheck(linesearch, X, Y, &changed_y)); in SNESLineSearchApply_BT()
89 PetscCall(SNESLineSearchSetReason(linesearch, SNES_LINESEARCH_SUCCEEDED)); in SNESLineSearchApply_BT()
98 PetscCall(PetscViewerASCIIAddTab(monitor, ((PetscObject)linesearch)->tablevel)); in SNESLineSearchApply_BT()
100 PetscCall(PetscViewerASCIISubtractTab(monitor, ((PetscObject)linesearch)->tablevel)); in SNESLineSearchApply_BT()
104 PetscCall(SNESLineSearchSetNorms(linesearch, xnorm, fnorm, ynorm)); in SNESLineSearchApply_BT()
105 PetscCall(SNESLineSearchSetReason(linesearch, SNES_LINESEARCH_FAILED_REDUCT)); in SNESLineSearchApply_BT()
132 if (linesearch->ops->viproject) PetscCall((*linesearch->ops->viproject)(snes, W)); in SNESLineSearchApply_BT()
136 PetscCall(SNESLineSearchSetReason(linesearch, SNES_LINESEARCH_FAILED_FUNCTION)); in SNESLineSearchApply_BT()
143 PetscCall((*linesearch->ops->snesfunc)(snes, W, G)); in SNESLineSearchApply_BT()
144 if (linesearch->ops->vinorm) { in SNESLineSearchApply_BT()
146 PetscCall((*linesearch->ops->vinorm)(snes, G, W, &gnorm)); in SNESLineSearchApply_BT()
152 PetscCall(SNESLineSearchMonitor(linesearch)); in SNESLineSearchApply_BT()
156 PetscCall(PetscViewerASCIIAddTab(monitor, ((PetscObject)linesearch)->tablevel)); in SNESLineSearchApply_BT()
158 PetscCall(PetscViewerASCIISubtractTab(monitor, ((PetscObject)linesearch)->tablevel)); in SNESLineSearchApply_BT()
167 PetscCall(PetscViewerASCIIAddTab(monitor, ((PetscObject)linesearch)->tablevel)); in SNESLineSearchApply_BT()
173 PetscCall(PetscViewerASCIISubtractTab(monitor, ((PetscObject)linesearch)->tablevel)); in SNESLineSearchApply_BT()
178 PetscCall(SNESLineSearchSetNorms(linesearch, xnorm, fnorm, ynorm)); in SNESLineSearchApply_BT()
179 PetscCall(SNESLineSearchSetReason(linesearch, SNES_LINESEARCH_SUCCEEDED)); in SNESLineSearchApply_BT()
181 PetscCall(PetscViewerASCIIAddTab(monitor, ((PetscObject)linesearch)->tablevel)); in SNESLineSearchApply_BT()
183 PetscCall(PetscViewerASCIISubtractTab(monitor, ((PetscObject)linesearch)->tablevel)); in SNESLineSearchApply_BT()
190 if (linesearch->order != SNES_LINESEARCH_ORDER_LINEAR) { in SNESLineSearchApply_BT()
196 if (linesearch->ops->viproject) PetscCall((*linesearch->ops->viproject)(snes, W)); in SNESLineSearchApply_BT()
200 PetscCall(SNESLineSearchSetReason(linesearch, SNES_LINESEARCH_FAILED_FUNCTION)); in SNESLineSearchApply_BT()
207 PetscCall((*linesearch->ops->snesfunc)(snes, W, G)); in SNESLineSearchApply_BT()
208 if (linesearch->ops->vinorm) { in SNESLineSearchApply_BT()
210 PetscCall((*linesearch->ops->vinorm)(snes, G, W, &gnorm)); in SNESLineSearchApply_BT()
214 SNESLineSearchCheckFunctionDomainError(snes, linesearch, gnorm); in SNESLineSearchApply_BT()
218 PetscCall(SNESLineSearchSetReason(linesearch, SNES_LINESEARCH_FAILED_NANORINF)); in SNESLineSearchApply_BT()
223 PetscCall(PetscViewerASCIIAddTab(monitor, ((PetscObject)linesearch)->tablevel)); in SNESLineSearchApply_BT()
229 PetscCall(PetscViewerASCIISubtractTab(monitor, ((PetscObject)linesearch)->tablevel)); in SNESLineSearchApply_BT()
232 …if (linesearch->order != SNES_LINESEARCH_ORDER_LINEAR && g <= f + lambda * alpha * initslope) { /*… in SNESLineSearchApply_BT()
234 PetscCall(PetscViewerASCIIAddTab(monitor, ((PetscObject)linesearch)->tablevel)); in SNESLineSearchApply_BT()
236 PetscCall(PetscViewerASCIISubtractTab(monitor, ((PetscObject)linesearch)->tablevel)); in SNESLineSearchApply_BT()
242 PetscCall(PetscViewerASCIIAddTab(monitor, ((PetscObject)linesearch)->tablevel)); in SNESLineSearchApply_BT()
249 PetscCall(PetscViewerASCIISubtractTab(monitor, ((PetscObject)linesearch)->tablevel)); in SNESLineSearchApply_BT()
251 PetscCall(SNESLineSearchSetReason(linesearch, SNES_LINESEARCH_FAILED_REDUCT)); in SNESLineSearchApply_BT()
254 if (linesearch->order == SNES_LINESEARCH_ORDER_CUBIC) { in SNESLineSearchApply_BT()
264 } else if (linesearch->order == SNES_LINESEARCH_ORDER_QUADRATIC) { in SNESLineSearchApply_BT()
266 } else if (linesearch->order == SNES_LINESEARCH_ORDER_LINEAR) { /* Just backtrack */ in SNESLineSearchApply_BT()
268 …RQ(PetscObjectComm((PetscObject)linesearch), PETSC_ERR_SUP, "Line search order %" PetscInt_FMT " f… in SNESLineSearchApply_BT()
274 if (linesearch->ops->viproject) PetscCall((*linesearch->ops->viproject)(snes, W)); in SNESLineSearchApply_BT()
278 PetscCall(SNESLineSearchSetReason(linesearch, SNES_LINESEARCH_FAILED_FUNCTION)); in SNESLineSearchApply_BT()
286 PetscCall((*linesearch->ops->snesfunc)(snes, W, G)); in SNESLineSearchApply_BT()
287 if (linesearch->ops->vinorm) { in SNESLineSearchApply_BT()
289 PetscCall((*linesearch->ops->vinorm)(snes, G, W, &gnorm)); in SNESLineSearchApply_BT()
293 SNESLineSearchCheckFunctionDomainError(snes, linesearch, gnorm); in SNESLineSearchApply_BT()
298 PetscCall(PetscViewerASCIIAddTab(monitor, ((PetscObject)linesearch)->tablevel)); in SNESLineSearchApply_BT()
300 … Line search: %s step, current gnorm %14.12e lambda=%18.16e\n", ordStr[linesearch->order - 1], (do… in SNESLineSearchApply_BT()
301 PetscCall(PetscViewerASCIISubtractTab(monitor, ((PetscObject)linesearch)->tablevel)); in SNESLineSearchApply_BT()
303 …itor, " Line search: %s step, obj %14.12e lambda=%18.16e\n", ordStr[linesearch->order - 1], (do… in SNESLineSearchApply_BT()
304 PetscCall(PetscViewerASCIISubtractTab(monitor, ((PetscObject)linesearch)->tablevel)); in SNESLineSearchApply_BT()
309 PetscCall(PetscViewerASCIIAddTab(monitor, ((PetscObject)linesearch)->tablevel)); in SNESLineSearchApply_BT()
311 …ood, shrinking lambda, current gnorm %12.12e lambda=%18.16e\n", ordStr[linesearch->order - 1], (do… in SNESLineSearchApply_BT()
312 PetscCall(PetscViewerASCIISubtractTab(monitor, ((PetscObject)linesearch)->tablevel)); in SNESLineSearchApply_BT()
314 … step no good, shrinking lambda, obj %12.12e lambda=%18.16e\n", ordStr[linesearch->order - 1], (do… in SNESLineSearchApply_BT()
315 PetscCall(PetscViewerASCIISubtractTab(monitor, ((PetscObject)linesearch)->tablevel)); in SNESLineSearchApply_BT()
323 PetscCall(SNESLineSearchSetLambda(linesearch, lambda)); in SNESLineSearchApply_BT()
324 PetscCall(SNESLineSearchPostCheck(linesearch, X, Y, W, &changed_y, &changed_w)); in SNESLineSearchApply_BT()
327 if (linesearch->ops->viproject) PetscCall((*linesearch->ops->viproject)(snes, W)); in SNESLineSearchApply_BT()
330 PetscCall((*linesearch->ops->snesfunc)(snes, W, G)); in SNESLineSearchApply_BT()
331 if (linesearch->ops->vinorm) { in SNESLineSearchApply_BT()
333 PetscCall((*linesearch->ops->vinorm)(snes, G, W, &gnorm)); in SNESLineSearchApply_BT()
337 SNESLineSearchCheckFunctionDomainError(snes, linesearch, gnorm); in SNESLineSearchApply_BT()
345 PetscCall(SNESLineSearchSetNorms(linesearch, xnorm, gnorm, ynorm)); in SNESLineSearchApply_BT()
349 static PetscErrorCode SNESLineSearchView_BT(SNESLineSearch linesearch, PetscViewer viewer) in SNESLineSearchView_BT() argument
352 SNESLineSearch_BT *bt = (SNESLineSearch_BT *)linesearch->data; in SNESLineSearchView_BT()
357 if (linesearch->order == SNES_LINESEARCH_ORDER_CUBIC) { in SNESLineSearchView_BT()
359 } else if (linesearch->order == SNES_LINESEARCH_ORDER_QUADRATIC) { in SNESLineSearchView_BT()
367 static PetscErrorCode SNESLineSearchDestroy_BT(SNESLineSearch linesearch) in SNESLineSearchDestroy_BT() argument
370 PetscCall(PetscFree(linesearch->data)); in SNESLineSearchDestroy_BT()
374 static PetscErrorCode SNESLineSearchSetFromOptions_BT(SNESLineSearch linesearch, PetscOptionItems P… in SNESLineSearchSetFromOptions_BT() argument
376 SNESLineSearch_BT *bt = (SNESLineSearch_BT *)linesearch->data; in SNESLineSearchSetFromOptions_BT()
407 PETSC_EXTERN PetscErrorCode SNESLineSearchCreate_BT(SNESLineSearch linesearch) in SNESLineSearchCreate_BT() argument
412 linesearch->ops->apply = SNESLineSearchApply_BT; in SNESLineSearchCreate_BT()
413 linesearch->ops->destroy = SNESLineSearchDestroy_BT; in SNESLineSearchCreate_BT()
414 linesearch->ops->setfromoptions = SNESLineSearchSetFromOptions_BT; in SNESLineSearchCreate_BT()
415 linesearch->ops->reset = NULL; in SNESLineSearchCreate_BT()
416 linesearch->ops->view = SNESLineSearchView_BT; in SNESLineSearchCreate_BT()
417 linesearch->ops->setup = NULL; in SNESLineSearchCreate_BT()
421 linesearch->data = (void *)bt; in SNESLineSearchCreate_BT()
422 linesearch->max_it = 40; in SNESLineSearchCreate_BT()
423 linesearch->order = SNES_LINESEARCH_ORDER_CUBIC; in SNESLineSearchCreate_BT()