Lines Matching refs:snes

8 PetscErrorCode SNESReset_NGMRES(SNES snes)  in SNESReset_NGMRES()  argument
10 SNES_NGMRES *ngmres = (SNES_NGMRES *)snes->data; in SNESReset_NGMRES()
19 PetscErrorCode SNESDestroy_NGMRES(SNES snes) in SNESDestroy_NGMRES() argument
21 SNES_NGMRES *ngmres = (SNES_NGMRES *)snes->data; in SNESDestroy_NGMRES()
24 PetscCall(SNESReset_NGMRES(snes)); in SNESDestroy_NGMRES()
31 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNGMRESSetSelectType_C", NULL)); in SNESDestroy_NGMRES()
32 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNGMRESSetRestartType_C", NULL)); in SNESDestroy_NGMRES()
33 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNGMRESSetRestartFmRise_C", NULL)); in SNESDestroy_NGMRES()
34 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNGMRESGetRestartFmRise_C", NULL)); in SNESDestroy_NGMRES()
35 PetscCall(PetscFree(snes->data)); in SNESDestroy_NGMRES()
39 PetscErrorCode SNESSetUp_NGMRES(SNES snes) in SNESSetUp_NGMRES() argument
41 SNES_NGMRES *ngmres = (SNES_NGMRES *)snes->data; in SNESSetUp_NGMRES()
46 …PetscCheck(!snes->npc || snes->npcside != PC_LEFT || snes->functype != SNES_FUNCTION_UNPRECONDITIO… in SNESSetUp_NGMRES()
47 …if (snes->npcside == PC_LEFT && snes->functype == SNES_FUNCTION_DEFAULT) snes->functype = SNES_FUN… in SNESSetUp_NGMRES()
48 PetscCall(SNESSetWorkVecs(snes, 5)); in SNESSetUp_NGMRES()
50 if (!snes->vec_sol) { in SNESSetUp_NGMRES()
51 PetscCall(SNESGetDM(snes, &dm)); in SNESSetUp_NGMRES()
52 PetscCall(DMCreateGlobalVector(dm, &snes->vec_sol)); in SNESSetUp_NGMRES()
55 if (!ngmres->Xdot) PetscCall(VecDuplicateVecs(snes->vec_sol, ngmres->msize, &ngmres->Xdot)); in SNESSetUp_NGMRES()
56 if (!ngmres->Fdot) PetscCall(VecDuplicateVecs(snes->vec_sol, ngmres->msize, &ngmres->Fdot)); in SNESSetUp_NGMRES()
78 static PetscErrorCode SNESSetFromOptions_NGMRES(SNES snes, PetscOptionItems PetscOptionsObject) in SNESSetFromOptions_NGMRES() argument
80 SNES_NGMRES *ngmres = (SNES_NGMRES *)snes->data; in SNESSetFromOptions_NGMRES()
93 if (debug) ngmres->monitor = PETSC_VIEWER_STDOUT_(PetscObjectComm((PetscObject)snes)); in SNESSetFromOptions_NGMRES()
102 PetscCall(SNESNGMRESGetAdditiveLineSearch_Private(snes, &ngmres->additive_linesearch)); in SNESSetFromOptions_NGMRES()
108 PetscErrorCode SNESView_NGMRES(SNES snes, PetscViewer viewer) in SNESView_NGMRES() argument
110 SNES_NGMRES *ngmres = (SNES_NGMRES *)snes->data; in SNESView_NGMRES()
130 static PetscErrorCode SNESSolve_NGMRES(SNES snes) in SNESSolve_NGMRES() argument
132 SNES_NGMRES *ngmres = (SNES_NGMRES *)snes->data; in SNESSolve_NGMRES()
151snes->xl && !snes->xu && !snes->ops->computevariablebounds, PetscObjectComm((PetscObject)snes), PE… in SNESSolve_NGMRES()
155 snes->reason = SNES_CONVERGED_ITERATING; in SNESSolve_NGMRES()
156 X = snes->vec_sol; in SNESSolve_NGMRES()
157 F = snes->vec_func; in SNESSolve_NGMRES()
158 B = snes->vec_rhs; in SNESSolve_NGMRES()
159 XA = snes->work[2]; in SNESSolve_NGMRES()
160 FA = snes->work[0]; in SNESSolve_NGMRES()
161 D = snes->work[1]; in SNESSolve_NGMRES()
164 Y = snes->vec_sol_update; in SNESSolve_NGMRES()
165 XM = snes->work[3]; in SNESSolve_NGMRES()
166 FM = snes->work[4]; in SNESSolve_NGMRES()
168 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_NGMRES()
169 snes->iter = 0; in SNESSolve_NGMRES()
170 snes->norm = 0.; in SNESSolve_NGMRES()
171 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_NGMRES()
175 if (snes->npc && snes->npcside == PC_LEFT) { in SNESSolve_NGMRES()
176 PetscCall(SNESApplyNPC(snes, X, NULL, F)); in SNESSolve_NGMRES()
177 PetscCall(SNESGetConvergedReason(snes->npc, &reason)); in SNESSolve_NGMRES()
179 snes->reason = SNES_DIVERGED_INNER; in SNESSolve_NGMRES()
183 if (!snes->vec_func_init_set) PetscCall(SNESComputeFunction(snes, X, F)); in SNESSolve_NGMRES()
184 else snes->vec_func_init_set = PETSC_FALSE; in SNESSolve_NGMRES()
187 SNESCheckFunctionDomainError(snes, fnorm); in SNESSolve_NGMRES()
188 PetscCall(SNESGetObjective(snes, &objective, NULL)); in SNESSolve_NGMRES()
191 PetscCall(SNESComputeObjective(snes, X, &objmin)); in SNESSolve_NGMRES()
192 SNESCheckObjectiveDomainError(snes, objmin); in SNESSolve_NGMRES()
196 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_NGMRES()
197 snes->norm = fnorm; in SNESSolve_NGMRES()
198 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_NGMRES()
199 PetscCall(SNESLogConvergenceHistory(snes, fnorm, 0)); in SNESSolve_NGMRES()
200 PetscCall(SNESConverged(snes, 0, 0.0, 0.0, fnorm)); in SNESSolve_NGMRES()
201 PetscCall(SNESMonitor(snes, 0, fnorm)); in SNESSolve_NGMRES()
202 if (snes->reason) PetscFunctionReturn(PETSC_SUCCESS); in SNESSolve_NGMRES()
203 PetscCall(SNESNGMRESUpdateSubspace_Private(snes, 0, 0, F, fnorm, X)); in SNESSolve_NGMRES()
208 for (k = 1; k < snes->max_its + 1; k++) { in SNESSolve_NGMRES()
210 PetscTryTypeMethod(snes, update, snes->iter); in SNESSolve_NGMRES()
213 if (snes->npc && snes->npcside == PC_RIGHT) { in SNESSolve_NGMRES()
215 PetscCall(SNESSetInitialFunction(snes->npc, F)); in SNESSolve_NGMRES()
217 PetscCall(PetscLogEventBegin(SNES_NPCSolve, snes->npc, XM, B, 0)); in SNESSolve_NGMRES()
218 PetscCall(SNESSolve(snes->npc, B, XM)); in SNESSolve_NGMRES()
219 PetscCall(PetscLogEventEnd(SNES_NPCSolve, snes->npc, XM, B, 0)); in SNESSolve_NGMRES()
221 PetscCall(SNESGetConvergedReason(snes->npc, &reason)); in SNESSolve_NGMRES()
223 snes->reason = SNES_DIVERGED_INNER; in SNESSolve_NGMRES()
226 PetscCall(SNESGetNPCFunction(snes, FM, &fMnorm)); in SNESSolve_NGMRES()
235 PetscCall(SNESLineSearchApply(snes->linesearch, XM, FM, &fMnorm, Y)); in SNESSolve_NGMRES()
236 if (snes->reason) PetscFunctionReturn(PETSC_SUCCESS); in SNESSolve_NGMRES()
239 PetscCall(SNESComputeObjective(snes, XM, &objM)); in SNESSolve_NGMRES()
240 SNESCheckObjectiveDomainError(snes, objM); in SNESSolve_NGMRES()
244 PetscCall(SNESNGMRESFormCombinedSolution_Private(snes, ivec, l, XM, FM, fMnorm, X, XA, FA)); in SNESSolve_NGMRES()
248 …PetscCall(SNESNGMRESNorms_Private(snes, l, X, F, XM, FM, XA, FA, D, &dnorm, &dminnorm, &xMnorm, NU… in SNESSolve_NGMRES()
250 …PetscCall(SNESNGMRESNorms_Private(snes, l, X, F, XM, FM, XA, FA, D, NULL, NULL, &xMnorm, NULL, &yM… in SNESSolve_NGMRES()
252 SNESCheckFunctionDomainError(snes, fnorm); in SNESSolve_NGMRES()
254 PetscCall(SNESComputeObjective(snes, XA, &objA)); in SNESSolve_NGMRES()
255 SNESCheckObjectiveDomainError(snes, objA); in SNESSolve_NGMRES()
259 …PetscCall(SNESNGMRESSelect_Private(snes, k_restart, XM, FM, xMnorm, fMnorm, yMnorm, objM, XA, FA, … in SNESSolve_NGMRES()
260 SNESCheckFunctionDomainError(snes, fnorm); in SNESSolve_NGMRES()
262 PetscCall(SNESComputeObjective(snes, X, &obj)); in SNESSolve_NGMRES()
263 SNESCheckObjectiveDomainError(snes, obj); in SNESSolve_NGMRES()
268 …PetscCall(SNESNGMRESSelectRestart_Private(snes, l, obj, objM, objA, dnorm, objmin, dminnorm, &sele… in SNESSolve_NGMRES()
290 PetscCall(SNESNGMRESUpdateSubspace_Private(snes, 0, 0, FM, fMnorm, XM)); in SNESSolve_NGMRES()
298 PetscCall(SNESNGMRESUpdateSubspace_Private(snes, ivec, l, FM, fMnorm, XM)); in SNESSolve_NGMRES()
301 PetscCall(SNESNGMRESUpdateSubspace_Private(snes, ivec, l, F, fnorm, X)); in SNESSolve_NGMRES()
305 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_NGMRES()
306 snes->iter = k; in SNESSolve_NGMRES()
307 snes->norm = fnorm; in SNESSolve_NGMRES()
308 snes->ynorm = ynorm; in SNESSolve_NGMRES()
309 snes->xnorm = xnorm; in SNESSolve_NGMRES()
310 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_NGMRES()
311 PetscCall(SNESLogConvergenceHistory(snes, snes->norm, snes->iter)); in SNESSolve_NGMRES()
312 PetscCall(SNESConverged(snes, snes->iter, 0, 0, fnorm)); in SNESSolve_NGMRES()
313 PetscCall(SNESMonitor(snes, snes->iter, snes->norm)); in SNESSolve_NGMRES()
314 if (snes->reason) PetscFunctionReturn(PETSC_SUCCESS); in SNESSolve_NGMRES()
316 snes->reason = SNES_DIVERGED_MAX_IT; in SNESSolve_NGMRES()
340 PetscErrorCode SNESNGMRESSetRestartFmRise(SNES snes, PetscBool flg) in SNESNGMRESSetRestartFmRise() argument
345 PetscCall(PetscObjectQueryFunction((PetscObject)snes, "SNESNGMRESSetRestartFmRise_C", &f)); in SNESNGMRESSetRestartFmRise()
346 if (f) PetscCall((f)(snes, flg)); in SNESNGMRESSetRestartFmRise()
350 static PetscErrorCode SNESNGMRESSetRestartFmRise_NGMRES(SNES snes, PetscBool flg) in SNESNGMRESSetRestartFmRise_NGMRES() argument
352 SNES_NGMRES *ngmres = (SNES_NGMRES *)snes->data; in SNESNGMRESSetRestartFmRise_NGMRES()
359 PetscErrorCode SNESNGMRESGetRestartFmRise(SNES snes, PetscBool *flg) in SNESNGMRESGetRestartFmRise() argument
364 PetscCall(PetscObjectQueryFunction((PetscObject)snes, "SNESNGMRESGetRestartFmRise_C", &f)); in SNESNGMRESGetRestartFmRise()
365 if (f) PetscCall((f)(snes, flg)); in SNESNGMRESGetRestartFmRise()
369 static PetscErrorCode SNESNGMRESGetRestartFmRise_NGMRES(SNES snes, PetscBool *flg) in SNESNGMRESGetRestartFmRise_NGMRES() argument
371 SNES_NGMRES *ngmres = (SNES_NGMRES *)snes->data; in SNESNGMRESGetRestartFmRise_NGMRES()
396 PetscErrorCode SNESNGMRESSetRestartType(SNES snes, SNESNGMRESRestartType rtype) in SNESNGMRESSetRestartType() argument
399 PetscValidHeaderSpecific(snes, SNES_CLASSID, 1); in SNESNGMRESSetRestartType()
400 PetscTryMethod(snes, "SNESNGMRESSetRestartType_C", (SNES, SNESNGMRESRestartType), (snes, rtype)); in SNESNGMRESSetRestartType()
425 PetscErrorCode SNESNGMRESSetSelectType(SNES snes, SNESNGMRESSelectType stype) in SNESNGMRESSetSelectType() argument
428 PetscValidHeaderSpecific(snes, SNES_CLASSID, 1); in SNESNGMRESSetSelectType()
429 PetscTryMethod(snes, "SNESNGMRESSetSelectType_C", (SNES, SNESNGMRESSelectType), (snes, stype)); in SNESNGMRESSetSelectType()
433 static PetscErrorCode SNESNGMRESSetSelectType_NGMRES(SNES snes, SNESNGMRESSelectType stype) in SNESNGMRESSetSelectType_NGMRES() argument
435 SNES_NGMRES *ngmres = (SNES_NGMRES *)snes->data; in SNESNGMRESSetSelectType_NGMRES()
442 static PetscErrorCode SNESNGMRESSetRestartType_NGMRES(SNES snes, SNESNGMRESRestartType rtype) in SNESNGMRESSetRestartType_NGMRES() argument
444 SNES_NGMRES *ngmres = (SNES_NGMRES *)snes->data; in SNESNGMRESSetRestartType_NGMRES()
489 PETSC_EXTERN PetscErrorCode SNESCreate_NGMRES(SNES snes) in SNESCreate_NGMRES() argument
495 snes->ops->destroy = SNESDestroy_NGMRES; in SNESCreate_NGMRES()
496 snes->ops->setup = SNESSetUp_NGMRES; in SNESCreate_NGMRES()
497 snes->ops->setfromoptions = SNESSetFromOptions_NGMRES; in SNESCreate_NGMRES()
498 snes->ops->view = SNESView_NGMRES; in SNESCreate_NGMRES()
499 snes->ops->solve = SNESSolve_NGMRES; in SNESCreate_NGMRES()
500 snes->ops->reset = SNESReset_NGMRES; in SNESCreate_NGMRES()
502 snes->usesnpc = PETSC_TRUE; in SNESCreate_NGMRES()
503 snes->usesksp = PETSC_FALSE; in SNESCreate_NGMRES()
504 snes->npcside = PC_RIGHT; in SNESCreate_NGMRES()
506 snes->alwayscomputesfinalresidual = PETSC_TRUE; in SNESCreate_NGMRES()
509 snes->data = (void *)ngmres; in SNESCreate_NGMRES()
512 PetscCall(SNESParametersInitialize(snes)); in SNESCreate_NGMRES()
513 PetscObjectParameterSetDefault(snes, max_funcs, 30000); in SNESCreate_NGMRES()
514 PetscObjectParameterSetDefault(snes, max_its, 10000); in SNESCreate_NGMRES()
518 PetscCall(SNESGetLineSearch(snes, &linesearch)); in SNESCreate_NGMRES()
534 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNGMRESSetSelectType_C", SNESNGMRESSet… in SNESCreate_NGMRES()
535 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNGMRESSetRestartType_C", SNESNGMRESSe… in SNESCreate_NGMRES()
536 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNGMRESSetRestartFmRise_C", SNESNGMRES… in SNESCreate_NGMRES()
537 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNGMRESGetRestartFmRise_C", SNESNGMRES… in SNESCreate_NGMRES()