Lines Matching refs:snes
3 static PetscErrorCode SNESDestroy_NRichardson(SNES snes) in SNESDestroy_NRichardson() argument
6 PetscCall(PetscFree(snes->data)); in SNESDestroy_NRichardson()
10 static PetscErrorCode SNESSetUp_NRichardson(SNES snes) in SNESSetUp_NRichardson() argument
13 …PetscCheck(snes->npcside != PC_RIGHT, PETSC_COMM_SELF, PETSC_ERR_ARG_WRONGSTATE, "NRichardson only… in SNESSetUp_NRichardson()
14 if (snes->functype == SNES_FUNCTION_DEFAULT) snes->functype = SNES_FUNCTION_UNPRECONDITIONED; in SNESSetUp_NRichardson()
18 static PetscErrorCode SNESSetFromOptions_NRichardson(SNES snes, PetscOptionItems PetscOptionsObject) in SNESSetFromOptions_NRichardson() argument
26 static PetscErrorCode SNESSolve_NRichardson(SNES snes) in SNESSolve_NRichardson() argument
34 …snes->xl && !snes->xu && !snes->ops->computevariablebounds, PetscObjectComm((PetscObject)snes), PE… in SNESSolve_NRichardson()
36 snes->reason = SNES_CONVERGED_ITERATING; in SNESSolve_NRichardson()
38 maxits = snes->max_its; /* maximum number of iterations */ in SNESSolve_NRichardson()
39 X = snes->vec_sol; /* X^n */ in SNESSolve_NRichardson()
40 Y = snes->vec_sol_update; /* \tilde X */ in SNESSolve_NRichardson()
41 F = snes->vec_func; /* residual vector */ in SNESSolve_NRichardson()
43 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_NRichardson()
44 snes->iter = 0; in SNESSolve_NRichardson()
45 snes->norm = 0.; in SNESSolve_NRichardson()
46 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_NRichardson()
48 if (snes->npc && snes->functype == SNES_FUNCTION_PRECONDITIONED) { in SNESSolve_NRichardson()
49 PetscCall(SNESApplyNPC(snes, X, NULL, F)); in SNESSolve_NRichardson()
50 PetscCall(SNESGetConvergedReason(snes->npc, &reason)); in SNESSolve_NRichardson()
52 snes->reason = SNES_DIVERGED_INNER; in SNESSolve_NRichardson()
57 if (!snes->vec_func_init_set) PetscCall(SNESComputeFunction(snes, X, F)); in SNESSolve_NRichardson()
58 else snes->vec_func_init_set = PETSC_FALSE; in SNESSolve_NRichardson()
61 SNESCheckFunctionDomainError(snes, fnorm); in SNESSolve_NRichardson()
63 if (snes->npc && snes->functype == SNES_FUNCTION_UNPRECONDITIONED) { in SNESSolve_NRichardson()
64 PetscCall(SNESApplyNPC(snes, X, F, Y)); in SNESSolve_NRichardson()
65 PetscCall(SNESGetConvergedReason(snes->npc, &reason)); in SNESSolve_NRichardson()
67 snes->reason = SNES_DIVERGED_INNER; in SNESSolve_NRichardson()
74 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_NRichardson()
75 snes->norm = fnorm; in SNESSolve_NRichardson()
76 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_NRichardson()
77 PetscCall(SNESLogConvergenceHistory(snes, fnorm, 0)); in SNESSolve_NRichardson()
80 PetscCall(SNESConverged(snes, 0, 0.0, 0.0, fnorm)); in SNESSolve_NRichardson()
81 PetscCall(SNESMonitor(snes, 0, fnorm)); in SNESSolve_NRichardson()
82 if (snes->reason) PetscFunctionReturn(PETSC_SUCCESS); in SNESSolve_NRichardson()
85 PetscTryTypeMethod(snes, update, snes->iter); in SNESSolve_NRichardson()
88 PetscCall(SNESLineSearchApply(snes->linesearch, X, F, &fnorm, Y)); in SNESSolve_NRichardson()
89 if (snes->reason) break; in SNESSolve_NRichardson()
90 SNESCheckLineSearchFailure(snes); in SNESSolve_NRichardson()
91 PetscCall(SNESLineSearchGetNorms(snes->linesearch, &xnorm, &fnorm, &ynorm)); in SNESSolve_NRichardson()
92 if (snes->nfuncs >= snes->max_funcs && snes->max_funcs >= 0) { in SNESSolve_NRichardson()
93 snes->reason = SNES_DIVERGED_FUNCTION_COUNT; in SNESSolve_NRichardson()
98 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_NRichardson()
99 snes->iter = i; in SNESSolve_NRichardson()
100 snes->norm = fnorm; in SNESSolve_NRichardson()
101 snes->xnorm = xnorm; in SNESSolve_NRichardson()
102 snes->ynorm = ynorm; in SNESSolve_NRichardson()
103 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_NRichardson()
104 PetscCall(SNESLogConvergenceHistory(snes, snes->norm, 0)); in SNESSolve_NRichardson()
106 PetscCall(SNESConverged(snes, snes->iter, xnorm, ynorm, fnorm)); in SNESSolve_NRichardson()
107 PetscCall(SNESMonitor(snes, snes->iter, snes->norm)); in SNESSolve_NRichardson()
108 if (snes->reason) break; in SNESSolve_NRichardson()
111 PetscTryTypeMethod(snes, update, snes->iter); in SNESSolve_NRichardson()
113 if (snes->npc) { in SNESSolve_NRichardson()
114 if (snes->functype == SNES_FUNCTION_PRECONDITIONED) { in SNESSolve_NRichardson()
115 PetscCall(SNESApplyNPC(snes, X, NULL, Y)); in SNESSolve_NRichardson()
119 PetscCall(SNESApplyNPC(snes, X, F, Y)); in SNESSolve_NRichardson()
121 PetscCall(SNESGetConvergedReason(snes->npc, &reason)); in SNESSolve_NRichardson()
123 snes->reason = SNES_DIVERGED_INNER; in SNESSolve_NRichardson()
131 …PetscCall(PetscInfo(snes, "Maximum number of iterations has been reached: %" PetscInt_FMT "\n", ma… in SNESSolve_NRichardson()
132 if (!snes->reason) snes->reason = SNES_DIVERGED_MAX_IT; in SNESSolve_NRichardson()
163 PETSC_EXTERN PetscErrorCode SNESCreate_NRichardson(SNES snes) in SNESCreate_NRichardson() argument
169 snes->ops->destroy = SNESDestroy_NRichardson; in SNESCreate_NRichardson()
170 snes->ops->setup = SNESSetUp_NRichardson; in SNESCreate_NRichardson()
171 snes->ops->setfromoptions = SNESSetFromOptions_NRichardson; in SNESCreate_NRichardson()
172 snes->ops->solve = SNESSolve_NRichardson; in SNESCreate_NRichardson()
174 snes->usesksp = PETSC_FALSE; in SNESCreate_NRichardson()
175 snes->usesnpc = PETSC_TRUE; in SNESCreate_NRichardson()
177 snes->npcside = PC_LEFT; in SNESCreate_NRichardson()
179 PetscCall(SNESGetLineSearch(snes, &linesearch)); in SNESCreate_NRichardson()
182 snes->alwayscomputesfinalresidual = PETSC_TRUE; in SNESCreate_NRichardson()
184 PetscCall(SNESParametersInitialize(snes)); in SNESCreate_NRichardson()
185 PetscObjectParameterSetDefault(snes, max_funcs, 30000); in SNESCreate_NRichardson()
186 PetscObjectParameterSetDefault(snes, max_its, 10000); in SNESCreate_NRichardson()
187 PetscObjectParameterSetDefault(snes, stol, 1e-20); in SNESCreate_NRichardson()
190 snes->data = (void *)neP; in SNESCreate_NRichardson()