Lines Matching refs:snes
3 static PetscErrorCode SNESSetFromOptions_Anderson(SNES snes, PetscOptionItems PetscOptionsObject) in SNESSetFromOptions_Anderson() argument
5 SNES_NGMRES *ngmres = (SNES_NGMRES *)snes->data; in SNESSetFromOptions_Anderson()
16 if (monitor) ngmres->monitor = PETSC_VIEWER_STDOUT_(PetscObjectComm((PetscObject)snes)); in SNESSetFromOptions_Anderson()
21 static PetscErrorCode SNESSolve_Anderson(SNES snes) in SNESSolve_Anderson() argument
23 SNES_NGMRES *ngmres = (SNES_NGMRES *)snes->data; in SNESSolve_Anderson()
39 …snes->xl && !snes->xu && !snes->ops->computevariablebounds, PetscObjectComm((PetscObject)snes), PE… in SNESSolve_Anderson()
43 snes->reason = SNES_CONVERGED_ITERATING; in SNESSolve_Anderson()
44 X = snes->vec_sol; in SNESSolve_Anderson()
45 F = snes->vec_func; in SNESSolve_Anderson()
46 B = snes->vec_rhs; in SNESSolve_Anderson()
47 XA = snes->work[2]; in SNESSolve_Anderson()
48 FA = snes->work[0]; in SNESSolve_Anderson()
49 D = snes->work[1]; in SNESSolve_Anderson()
52 XM = snes->work[3]; in SNESSolve_Anderson()
53 FM = snes->work[4]; in SNESSolve_Anderson()
55 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_Anderson()
56 snes->iter = 0; in SNESSolve_Anderson()
57 snes->norm = 0.; in SNESSolve_Anderson()
58 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_Anderson()
64 if (snes->npc && snes->npcside == PC_LEFT) { in SNESSolve_Anderson()
65 PetscCall(SNESApplyNPC(snes, X, NULL, F)); in SNESSolve_Anderson()
66 PetscCall(SNESGetConvergedReason(snes->npc, &reason)); in SNESSolve_Anderson()
68 snes->reason = SNES_DIVERGED_INNER; in SNESSolve_Anderson()
73 if (!snes->vec_func_init_set) PetscCall(SNESComputeFunction(snes, X, F)); in SNESSolve_Anderson()
74 else snes->vec_func_init_set = PETSC_FALSE; in SNESSolve_Anderson()
77 SNESCheckFunctionDomainError(snes, fnorm); in SNESSolve_Anderson()
81 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_Anderson()
82 snes->norm = fnorm; in SNESSolve_Anderson()
83 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_Anderson()
84 PetscCall(SNESLogConvergenceHistory(snes, fnorm, 0)); in SNESSolve_Anderson()
85 PetscCall(SNESConverged(snes, 0, 0.0, 0.0, fnorm)); in SNESSolve_Anderson()
86 PetscCall(SNESMonitor(snes, 0, fnorm)); in SNESSolve_Anderson()
87 if (snes->reason) PetscFunctionReturn(PETSC_SUCCESS); in SNESSolve_Anderson()
88 PetscCall(SNESNGMRESUpdateSubspace_Private(snes, 0, 0, F, fnorm, X)); in SNESSolve_Anderson()
93 for (k = 1; k < snes->max_its + 1; k++) { in SNESSolve_Anderson()
95 PetscTryTypeMethod(snes, update, snes->iter); in SNESSolve_Anderson()
98 if (snes->npc && snes->npcside == PC_RIGHT) { in SNESSolve_Anderson()
100 PetscCall(SNESSetInitialFunction(snes->npc, F)); in SNESSolve_Anderson()
102 PetscCall(PetscLogEventBegin(SNES_NPCSolve, snes->npc, XM, B, 0)); in SNESSolve_Anderson()
103 PetscCall(SNESSolve(snes->npc, B, XM)); in SNESSolve_Anderson()
104 PetscCall(PetscLogEventEnd(SNES_NPCSolve, snes->npc, XM, B, 0)); in SNESSolve_Anderson()
106 PetscCall(SNESGetConvergedReason(snes->npc, &reason)); in SNESSolve_Anderson()
108 snes->reason = SNES_DIVERGED_INNER; in SNESSolve_Anderson()
111 PetscCall(SNESGetNPCFunction(snes, FM, &fMnorm)); in SNESSolve_Anderson()
119 PetscCall(SNESNGMRESFormCombinedSolution_Private(snes, ivec, l, XM, FM, fMnorm, X, XA, FA)); in SNESSolve_Anderson()
122 …PetscCall(SNESNGMRESNorms_Private(snes, l, X, F, XM, FM, XA, FA, D, &dnorm, &dminnorm, NULL, NULL,… in SNESSolve_Anderson()
123 …PetscCall(SNESNGMRESSelectRestart_Private(snes, l, snes->norm, fMnorm, fnorm, dnorm, fminnorm, dmi… in SNESSolve_Anderson()
128 …PetscCall(SNESNGMRESNorms_Private(snes, l, X, F, XM, FM, XA, FA, D, NULL, NULL, NULL, NULL, NULL, … in SNESSolve_Anderson()
134 …PetscCall(SNESNGMRESNorms_Private(snes, l, X, F, XM, FM, XA, FA, D, NULL, NULL, NULL, NULL, NULL, … in SNESSolve_Anderson()
146 PetscCall(SNESNGMRESUpdateSubspace_Private(snes, ivec, l, FM, fnorm, XM)); in SNESSolve_Anderson()
155 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_Anderson()
156 snes->iter = k; in SNESSolve_Anderson()
157 snes->norm = fnorm; in SNESSolve_Anderson()
158 snes->xnorm = xnorm; in SNESSolve_Anderson()
159 snes->ynorm = ynorm; in SNESSolve_Anderson()
160 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_Anderson()
161 PetscCall(SNESLogConvergenceHistory(snes, snes->norm, snes->iter)); in SNESSolve_Anderson()
162 PetscCall(SNESConverged(snes, snes->iter, xnorm, ynorm, fnorm)); in SNESSolve_Anderson()
163 PetscCall(SNESMonitor(snes, snes->iter, snes->norm)); in SNESSolve_Anderson()
164 if (snes->reason) PetscFunctionReturn(PETSC_SUCCESS); in SNESSolve_Anderson()
166 snes->reason = SNES_DIVERGED_MAX_IT; in SNESSolve_Anderson()
196 PETSC_EXTERN PetscErrorCode SNESCreate_Anderson(SNES snes) in SNESCreate_Anderson() argument
202 snes->ops->destroy = SNESDestroy_NGMRES; in SNESCreate_Anderson()
203 snes->ops->setup = SNESSetUp_NGMRES; in SNESCreate_Anderson()
204 snes->ops->setfromoptions = SNESSetFromOptions_Anderson; in SNESCreate_Anderson()
205 snes->ops->view = SNESView_NGMRES; in SNESCreate_Anderson()
206 snes->ops->solve = SNESSolve_Anderson; in SNESCreate_Anderson()
207 snes->ops->reset = SNESReset_NGMRES; in SNESCreate_Anderson()
209 snes->usesnpc = PETSC_TRUE; in SNESCreate_Anderson()
210 snes->usesksp = PETSC_FALSE; in SNESCreate_Anderson()
211 snes->npcside = PC_RIGHT; in SNESCreate_Anderson()
213 snes->alwayscomputesfinalresidual = PETSC_TRUE; in SNESCreate_Anderson()
216 snes->data = (void *)ngmres; in SNESCreate_Anderson()
219 PetscCall(SNESParametersInitialize(snes)); in SNESCreate_Anderson()
220 PetscObjectParameterSetDefault(snes, max_funcs, 30000); in SNESCreate_Anderson()
221 PetscObjectParameterSetDefault(snes, max_its, 10000); in SNESCreate_Anderson()
223 PetscCall(SNESGetLineSearch(snes, &linesearch)); in SNESCreate_Anderson()