Lines Matching refs:snes

40 static PetscErrorCode SNESNewtonALCheckArcLength(SNES snes, Vec XStep, PetscReal lambdaStep, PetscR…  in SNESNewtonALCheckArcLength()  argument
43 SNES_NEWTONAL *al = (SNES_NEWTONAL *)snes->data; in SNESNewtonALCheckArcLength()
50 …if (arcLengthError > PETSC_SQRT_MACHINE_EPSILON) PetscCall(PetscInfo(snes, "Arc length differs fro… in SNESNewtonALCheckArcLength()
64 static PetscErrorCode SNESNewtonALSetCorrectionType_NEWTONAL(SNES snes, SNESNewtonALCorrectionType … in SNESNewtonALSetCorrectionType_NEWTONAL() argument
66 SNES_NEWTONAL *al = (SNES_NEWTONAL *)snes->data; in SNESNewtonALSetCorrectionType_NEWTONAL()
89 PetscErrorCode SNESNewtonALSetCorrectionType(SNES snes, SNESNewtonALCorrectionType ctype) in SNESNewtonALSetCorrectionType() argument
92 PetscValidHeaderSpecific(snes, SNES_CLASSID, 1); in SNESNewtonALSetCorrectionType()
93 PetscValidLogicalCollectiveEnum(snes, ctype, 2); in SNESNewtonALSetCorrectionType()
94 …PetscTryMethod(snes, "SNESNewtonALSetCorrectionType_C", (SNES, SNESNewtonALCorrectionType), (snes,… in SNESNewtonALSetCorrectionType()
98 static PetscErrorCode SNESNewtonALSetFunction_NEWTONAL(SNES snes, SNESFunctionFn *func, PetscCtx ct… in SNESNewtonALSetFunction_NEWTONAL() argument
100 SNES_NEWTONAL *al = (SNES_NEWTONAL *)snes->data; in SNESNewtonALSetFunction_NEWTONAL()
129 PetscErrorCode SNESNewtonALSetFunction(SNES snes, SNESFunctionFn *func, PetscCtx ctx) in SNESNewtonALSetFunction() argument
132 PetscValidHeaderSpecific(snes, SNES_CLASSID, 1); in SNESNewtonALSetFunction()
133 …PetscTryMethod(snes, "SNESNewtonALSetFunction_C", (SNES, SNESFunctionFn *, void *), (snes, func, c… in SNESNewtonALSetFunction()
137 static PetscErrorCode SNESNewtonALGetFunction_NEWTONAL(SNES snes, SNESFunctionFn **func, PetscCtxRt… in SNESNewtonALGetFunction_NEWTONAL() argument
139 SNES_NEWTONAL *al = (SNES_NEWTONAL *)snes->data; in SNESNewtonALGetFunction_NEWTONAL()
161 PetscErrorCode SNESNewtonALGetFunction(SNES snes, SNESFunctionFn **func, PetscCtxRt ctx) in SNESNewtonALGetFunction() argument
164 PetscValidHeaderSpecific(snes, SNES_CLASSID, 1); in SNESNewtonALGetFunction()
165 …PetscUseMethod(snes, "SNESNewtonALGetFunction_C", (SNES, SNESFunctionFn **, PetscCtxRt), (snes, fu… in SNESNewtonALGetFunction()
169 static PetscErrorCode SNESNewtonALGetLoadParameter_NEWTONAL(SNES snes, PetscReal *lambda) in SNESNewtonALGetLoadParameter_NEWTONAL() argument
174 al = (SNES_NEWTONAL *)snes->data; in SNESNewtonALGetLoadParameter_NEWTONAL()
201 PetscErrorCode SNESNewtonALGetLoadParameter(SNES snes, PetscReal *lambda) in SNESNewtonALGetLoadParameter() argument
204 PetscValidHeaderSpecific(snes, SNES_CLASSID, 1); in SNESNewtonALGetLoadParameter()
206 PetscUseMethod(snes, "SNESNewtonALGetLoadParameter_C", (SNES, PetscReal *), (snes, lambda)); in SNESNewtonALGetLoadParameter()
210 static PetscErrorCode SNESNewtonALComputeFunction_NEWTONAL(SNES snes, Vec X, Vec Q) in SNESNewtonALComputeFunction_NEWTONAL() argument
217 al = (SNES_NEWTONAL *)snes->data; in SNESNewtonALComputeFunction_NEWTONAL()
218 PetscCall(SNESNewtonALGetFunction(snes, &computealfunction, &ctx)); in SNESNewtonALComputeFunction_NEWTONAL()
221 …PetscCheck(computealfunction || (snes->vec_rhs && al->scale_rhs), PETSC_COMM_SELF, PETSC_ERR_ARG_W… in SNESNewtonALComputeFunction_NEWTONAL()
224 …PetscCallBack("SNES callback NewtonAL tangent load function", (*computealfunction)(snes, X, Q, ctx… in SNESNewtonALComputeFunction_NEWTONAL()
227 if (al->scale_rhs && snes->vec_rhs) { in SNESNewtonALComputeFunction_NEWTONAL()
229 if (!al->vec_rhs_orig) PetscCall(VecDuplicate(snes->vec_rhs, &al->vec_rhs_orig)); in SNESNewtonALComputeFunction_NEWTONAL()
231 PetscCall(VecCopy(snes->vec_rhs, al->vec_rhs_orig)); in SNESNewtonALComputeFunction_NEWTONAL()
234 PetscCall(VecAXPBY(snes->vec_rhs, al->lambda, 0.0, al->vec_rhs_orig)); in SNESNewtonALComputeFunction_NEWTONAL()
260 PetscErrorCode SNESNewtonALComputeFunction(SNES snes, Vec X, Vec Q) in SNESNewtonALComputeFunction() argument
263 PetscValidHeaderSpecific(snes, SNES_CLASSID, 1); in SNESNewtonALComputeFunction()
266 PetscCheckSameComm(snes, 1, X, 2); in SNESNewtonALComputeFunction()
267 PetscCheckSameComm(snes, 1, Q, 3); in SNESNewtonALComputeFunction()
269 PetscCall(PetscLogEventBegin(SNES_NewtonALEval, snes, X, Q, 0)); in SNESNewtonALComputeFunction()
270 PetscTryMethod(snes, "SNESNewtonALComputeFunction_C", (SNES, Vec, Vec), (snes, X, Q)); in SNESNewtonALComputeFunction()
271 PetscCall(PetscLogEventEnd(SNES_NewtonALEval, snes, X, Q, 0)); in SNESNewtonALComputeFunction()
283 static PetscErrorCode SNESSolve_NEWTONAL(SNES snes) in SNESSolve_NEWTONAL() argument
285 SNES_NEWTONAL *data = (SNES_NEWTONAL *)snes->data; in SNESSolve_NEWTONAL()
291snes->xl && !snes->xu && !snes->ops->computevariablebounds, PetscObjectComm((PetscObject)snes), PE… in SNESSolve_NEWTONAL()
304 snes->numFailures = 0; in SNESSolve_NEWTONAL()
305 snes->numLinearSolveFailures = 0; in SNESSolve_NEWTONAL()
306 snes->reason = SNES_CONVERGED_ITERATING; in SNESSolve_NEWTONAL()
307 snes->iter = 0; in SNESSolve_NEWTONAL()
309 maxits = snes->max_its; /* maximum number of iterations */ in SNESSolve_NEWTONAL()
311 X = snes->vec_sol; /* solution vector */ in SNESSolve_NEWTONAL()
312 R = snes->vec_func; /* residual vector */ in SNESSolve_NEWTONAL()
313 Q = snes->work[0]; /* tangent load vector */ in SNESSolve_NEWTONAL()
314 deltaX_Q = snes->work[1]; /* variation of X with respect to lambda */ in SNESSolve_NEWTONAL()
315 deltaX_R = snes->work[2]; /* linearized error correction */ in SNESSolve_NEWTONAL()
316 DeltaX = snes->work[3]; /* step from equilibrium */ in SNESSolve_NEWTONAL()
317 deltaX = snes->vec_sol_update; /* full newton step */ in SNESSolve_NEWTONAL()
323 snes->max_its = maxits * maxincs; in SNESSolve_NEWTONAL()
329 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_NEWTONAL()
330 snes->norm = 0.0; in SNESSolve_NEWTONAL()
331 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_NEWTONAL()
332 PetscCall(SNESNewtonALComputeFunction(snes, X, Q)); in SNESSolve_NEWTONAL()
333 PetscCall(SNESComputeFunction(snes, X, R)); in SNESSolve_NEWTONAL()
336 SNESCheckFunctionDomainError(snes, fnorm); in SNESSolve_NEWTONAL()
339 PetscCall(SNESConverged(snes, snes->iter, 0.0, 0.0, fnorm)); in SNESSolve_NEWTONAL()
340 PetscCall(SNESMonitor(snes, snes->iter, fnorm)); in SNESSolve_NEWTONAL()
341 if (i == 0 && snes->reason) break; in SNESSolve_NEWTONAL()
346 PetscTryTypeMethod(snes, update, snes->iter); in SNESSolve_NEWTONAL()
348 PetscCall(SNESComputeJacobian(snes, X, snes->jacobian, snes->jacobian_pre)); in SNESSolve_NEWTONAL()
349 SNESCheckJacobianDomainError(snes); in SNESSolve_NEWTONAL()
350 PetscCall(KSPSetOperators(snes->ksp, snes->jacobian, snes->jacobian_pre)); in SNESSolve_NEWTONAL()
352 PetscCall(KSPSolve(snes->ksp, Q, deltaX_Q)); in SNESSolve_NEWTONAL()
353 SNESCheckKSPSolve(snes); in SNESSolve_NEWTONAL()
354 PetscCall(KSPGetIterationNumber(snes->ksp, &lits)); in SNESSolve_NEWTONAL()
355 …PetscCall(PetscInfo(snes, "iter=%" PetscInt_FMT ", tangent load linear solve iterations=%" PetscIn… in SNESSolve_NEWTONAL()
372 PetscCall(KSPSolve(snes->ksp, R, deltaX_R)); in SNESSolve_NEWTONAL()
373 SNESCheckKSPSolve(snes); in SNESSolve_NEWTONAL()
374 PetscCall(KSPGetIterationNumber(snes->ksp, &lits)); in SNESSolve_NEWTONAL()
375 …PetscCall(PetscInfo(snes, "iter=%" PetscInt_FMT ", residual linear solve iterations=%" PetscInt_FM… in SNESSolve_NEWTONAL()
439 …tscCall(PetscInfo(snes, "iter=%" PetscInt_FMT ", discriminant=%18.16e < 0, shrinking residual upda… in SNESSolve_NEWTONAL()
450 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_NEWTONAL()
465 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_NEWTONAL()
466 …PetscCall(PetscInfo(snes, "iter=%" PetscInt_FMT ", lambda=%18.16e, lambda_update=%18.16e\n", snes-… in SNESSolve_NEWTONAL()
478 PetscCall(SNESNewtonALComputeFunction(snes, X, Q)); in SNESSolve_NEWTONAL()
480 PetscCall(SNESComputeFunction(snes, X, R)); in SNESSolve_NEWTONAL()
487 SNESCheckFunctionDomainError(snes, fnorm); in SNESSolve_NEWTONAL()
488 …if (PetscLogPrintInfo) PetscCall(SNESNewtonALCheckArcLength(snes, DeltaX, data->lambda_update, ste… in SNESSolve_NEWTONAL()
491 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_NEWTONAL()
492 snes->iter++; in SNESSolve_NEWTONAL()
493 snes->norm = fnorm; in SNESSolve_NEWTONAL()
494 snes->ynorm = ynorm; in SNESSolve_NEWTONAL()
495 snes->xnorm = xnorm; in SNESSolve_NEWTONAL()
496 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_NEWTONAL()
497 PetscCall(SNESLogConvergenceHistory(snes, snes->norm, lits)); in SNESSolve_NEWTONAL()
498 PetscCall(SNESConverged(snes, snes->iter, xnorm, ynorm, fnorm)); in SNESSolve_NEWTONAL()
499 PetscCall(SNESMonitor(snes, snes->iter, snes->norm)); in SNESSolve_NEWTONAL()
500 if (!snes->reason && j == maxits - 1) snes->reason = SNES_DIVERGED_MAX_IT; in SNESSolve_NEWTONAL()
501 if (snes->reason) break; in SNESSolve_NEWTONAL()
503 if (snes->reason < 0) break; in SNESSolve_NEWTONAL()
507 snes->reason = SNES_DIVERGED_MAX_IT; in SNESSolve_NEWTONAL()
510 snes->reason = SNES_CONVERGED_ITERATING; in SNESSolve_NEWTONAL()
515 PetscCall(VecCopy(data->vec_rhs_orig, snes->vec_rhs)); in SNESSolve_NEWTONAL()
518 snes->max_its = maxits; /* reset snes->max_its */ in SNESSolve_NEWTONAL()
532 static PetscErrorCode SNESSetUp_NEWTONAL(SNES snes) in SNESSetUp_NEWTONAL() argument
535 PetscCall(SNESSetWorkVecs(snes, 4)); in SNESSetUp_NEWTONAL()
536 PetscCall(SNESSetUpMatrices(snes)); in SNESSetUp_NEWTONAL()
548 static PetscErrorCode SNESSetFromOptions_NEWTONAL(SNES snes, PetscOptionItems PetscOptionsObject) in SNESSetFromOptions_NEWTONAL() argument
550 SNES_NEWTONAL *data = (SNES_NEWTONAL *)snes->data; in SNESSetFromOptions_NEWTONAL()
562 PetscCall(SNESNewtonALSetCorrectionType(snes, correction_type)); in SNESSetFromOptions_NEWTONAL()
567 static PetscErrorCode SNESReset_NEWTONAL(SNES snes) in SNESReset_NEWTONAL() argument
569 SNES_NEWTONAL *al = (SNES_NEWTONAL *)snes->data; in SNESReset_NEWTONAL()
585 static PetscErrorCode SNESDestroy_NEWTONAL(SNES snes) in SNESDestroy_NEWTONAL() argument
588 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNewtonALSetCorrectionType_C", NULL)); in SNESDestroy_NEWTONAL()
589 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNewtonALGetLoadParameter_C", NULL)); in SNESDestroy_NEWTONAL()
590 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNewtonALSetFunction_C", NULL)); in SNESDestroy_NEWTONAL()
591 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNewtonALGetFunction_C", NULL)); in SNESDestroy_NEWTONAL()
592 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNewtonALComputeFunction_C", NULL)); in SNESDestroy_NEWTONAL()
593 PetscCall(PetscFree(snes->data)); in SNESDestroy_NEWTONAL()
617 PETSC_EXTERN PetscErrorCode SNESCreate_NEWTONAL(SNES snes) in SNESCreate_NEWTONAL() argument
622 snes->ops->setup = SNESSetUp_NEWTONAL; in SNESCreate_NEWTONAL()
623 snes->ops->solve = SNESSolve_NEWTONAL; in SNESCreate_NEWTONAL()
624 snes->ops->destroy = SNESDestroy_NEWTONAL; in SNESCreate_NEWTONAL()
625 snes->ops->setfromoptions = SNESSetFromOptions_NEWTONAL; in SNESCreate_NEWTONAL()
626 snes->ops->reset = SNESReset_NEWTONAL; in SNESCreate_NEWTONAL()
628 snes->usesksp = PETSC_TRUE; in SNESCreate_NEWTONAL()
629 snes->usesnpc = PETSC_FALSE; in SNESCreate_NEWTONAL()
631 PetscCall(SNESParametersInitialize(snes)); in SNESCreate_NEWTONAL()
632 PetscObjectParameterSetDefault(snes, max_funcs, 30000); in SNESCreate_NEWTONAL()
633 PetscObjectParameterSetDefault(snes, max_its, 50); in SNESCreate_NEWTONAL()
635 snes->alwayscomputesfinalresidual = PETSC_TRUE; in SNESCreate_NEWTONAL()
647 snes->data = (void *)arclengthParameters; in SNESCreate_NEWTONAL()
649 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNewtonALSetCorrectionType_C", SNESNew… in SNESCreate_NEWTONAL()
650 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNewtonALGetLoadParameter_C", SNESNewt… in SNESCreate_NEWTONAL()
651 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNewtonALSetFunction_C", SNESNewtonALS… in SNESCreate_NEWTONAL()
652 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNewtonALGetFunction_C", SNESNewtonALG… in SNESCreate_NEWTONAL()
653 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNewtonALComputeFunction_C", SNESNewto… in SNESCreate_NEWTONAL()