Lines Matching refs:snes
4 static PetscErrorCode SNESDestroy_NCG(SNES snes) in SNESDestroy_NCG() argument
7 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNCGSetType_C", NULL)); in SNESDestroy_NCG()
8 PetscCall(PetscFree(snes->data)); in SNESDestroy_NCG()
12 static PetscErrorCode SNESSetUp_NCG(SNES snes) in SNESSetUp_NCG() argument
15 PetscCall(SNESSetWorkVecs(snes, 2)); in SNESSetUp_NCG()
16 …PetscCheck(snes->npcside != PC_RIGHT, PetscObjectComm((PetscObject)snes), PETSC_ERR_ARG_WRONGSTATE… in SNESSetUp_NCG()
17 if (snes->functype == SNES_FUNCTION_DEFAULT) snes->functype = SNES_FUNCTION_UNPRECONDITIONED; in SNESSetUp_NCG()
25 SNES snes; in SNESLineSearchApply_NCGLinear() local
29 PetscCall(SNESLineSearchGetSNES(linesearch, &snes)); in SNESLineSearchApply_NCGLinear()
38 if (!snes->jacobian) PetscCall(SNESSetUpMatrices(snes)); in SNESLineSearchApply_NCGLinear()
44 PetscCall(SNESComputeJacobian(snes, X, snes->jacobian, snes->jacobian_pre)); in SNESLineSearchApply_NCGLinear()
45 SNESLineSearchCheckJacobianDomainError(snes, linesearch); in SNESLineSearchApply_NCGLinear()
48 PetscCall(MatMult(snes->jacobian, Y, W)); in SNESLineSearchApply_NCGLinear()
52 PetscCall(SNESComputeFunction(snes, X, F)); in SNESLineSearchApply_NCGLinear()
55 SNESLineSearchCheckFunctionDomainError(snes, linesearch, *fnorm); in SNESLineSearchApply_NCGLinear()
89 static PetscErrorCode SNESSetFromOptions_NCG(SNES snes, PetscOptionItems PetscOptionsObject) in SNESSetFromOptions_NCG() argument
91 SNES_NCG *ncg = (SNES_NCG *)snes->data; in SNESSetFromOptions_NCG()
99 if (debug) ncg->monitor = PETSC_VIEWER_STDOUT_(PetscObjectComm((PetscObject)snes)); in SNESSetFromOptions_NCG()
101 PetscCall(SNESNCGSetType(snes, ncgtype)); in SNESSetFromOptions_NCG()
103 if (!snes->linesearch) { in SNESSetFromOptions_NCG()
104 PetscCall(SNESGetLineSearch(snes, &linesearch)); in SNESSetFromOptions_NCG()
106 if (!snes->npc) { in SNESSetFromOptions_NCG()
116 static PetscErrorCode SNESView_NCG(SNES snes, PetscViewer viewer) in SNESView_NCG() argument
118 SNES_NCG *ncg = (SNES_NCG *)snes->data; in SNESView_NCG()
149 PetscErrorCode SNESNCGSetType(SNES snes, SNESNCGType btype) in SNESNCGSetType() argument
152 PetscValidHeaderSpecific(snes, SNES_CLASSID, 1); in SNESNCGSetType()
153 PetscTryMethod(snes, "SNESNCGSetType_C", (SNES, SNESNCGType), (snes, btype)); in SNESNCGSetType()
157 static PetscErrorCode SNESNCGSetType_NCG(SNES snes, SNESNCGType btype) in SNESNCGSetType_NCG() argument
159 SNES_NCG *ncg = (SNES_NCG *)snes->data; in SNESNCGSetType_NCG()
177 static PetscErrorCode SNESSolve_NCG(SNES snes) in SNESSolve_NCG() argument
179 SNES_NCG *ncg = (SNES_NCG *)snes->data; in SNESSolve_NCG()
188 …snes->xl && !snes->xu && !snes->ops->computevariablebounds, PetscObjectComm((PetscObject)snes), PE… in SNESSolve_NCG()
191 snes->reason = SNES_CONVERGED_ITERATING; in SNESSolve_NCG()
193 maxits = snes->max_its; /* maximum number of iterations */ in SNESSolve_NCG()
194 X = snes->vec_sol; /* X^n */ in SNESSolve_NCG()
195 dXold = snes->work[0]; /* The previous iterate of X */ in SNESSolve_NCG()
196 dX = snes->work[1]; /* the preconditioned direction */ in SNESSolve_NCG()
197 lX = snes->vec_sol_update; /* the conjugate direction */ in SNESSolve_NCG()
198 F = snes->vec_func; /* residual vector */ in SNESSolve_NCG()
200 PetscCall(SNESGetLineSearch(snes, &linesearch)); in SNESSolve_NCG()
202 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_NCG()
203 snes->iter = 0; in SNESSolve_NCG()
204 snes->norm = 0.; in SNESSolve_NCG()
205 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_NCG()
209 if (snes->npc && snes->functype == SNES_FUNCTION_PRECONDITIONED) { in SNESSolve_NCG()
210 PetscCall(SNESApplyNPC(snes, X, NULL, dX)); in SNESSolve_NCG()
211 PetscCall(SNESGetConvergedReason(snes->npc, &reason)); in SNESSolve_NCG()
213 snes->reason = SNES_DIVERGED_INNER; in SNESSolve_NCG()
219 if (!snes->vec_func_init_set) PetscCall(SNESComputeFunction(snes, X, F)); in SNESSolve_NCG()
220 else snes->vec_func_init_set = PETSC_FALSE; in SNESSolve_NCG()
224 SNESCheckFunctionDomainError(snes, fnorm); in SNESSolve_NCG()
227 if (snes->npc) { in SNESSolve_NCG()
228 if (snes->functype == SNES_FUNCTION_UNPRECONDITIONED) { in SNESSolve_NCG()
229 PetscCall(SNESApplyNPC(snes, X, F, dX)); in SNESSolve_NCG()
230 PetscCall(SNESGetConvergedReason(snes->npc, &reason)); in SNESSolve_NCG()
232 snes->reason = SNES_DIVERGED_INNER; in SNESSolve_NCG()
240 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_NCG()
241 snes->norm = fnorm; in SNESSolve_NCG()
242 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_NCG()
243 PetscCall(SNESLogConvergenceHistory(snes, fnorm, 0)); in SNESSolve_NCG()
246 PetscCall(SNESConverged(snes, 0, 0.0, 0.0, fnorm)); in SNESSolve_NCG()
247 PetscCall(SNESMonitor(snes, 0, fnorm)); in SNESSolve_NCG()
248 if (snes->reason) PetscFunctionReturn(PETSC_SUCCESS); in SNESSolve_NCG()
251 PetscTryTypeMethod(snes, update, snes->iter); in SNESSolve_NCG()
259 if (snes->reason) PetscFunctionReturn(PETSC_SUCCESS); in SNESSolve_NCG()
261 SNESCheckLineSearchFailure(snes); in SNESSolve_NCG()
262 if (snes->nfuncs >= snes->max_funcs && snes->max_funcs >= 0) { in SNESSolve_NCG()
263 snes->reason = SNES_DIVERGED_FUNCTION_COUNT; in SNESSolve_NCG()
267 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_NCG()
268 snes->iter = i; in SNESSolve_NCG()
269 snes->norm = fnorm; in SNESSolve_NCG()
270 snes->xnorm = xnorm; in SNESSolve_NCG()
271 snes->ynorm = ynorm; in SNESSolve_NCG()
272 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_NCG()
273 PetscCall(SNESLogConvergenceHistory(snes, snes->norm, 0)); in SNESSolve_NCG()
276 PetscCall(SNESConverged(snes, snes->iter, xnorm, ynorm, fnorm)); in SNESSolve_NCG()
277 PetscCall(SNESMonitor(snes, snes->iter, snes->norm)); in SNESSolve_NCG()
278 if (snes->reason) PetscFunctionReturn(PETSC_SUCCESS); in SNESSolve_NCG()
281 PetscTryTypeMethod(snes, update, snes->iter); in SNESSolve_NCG()
282 if (snes->npc) { in SNESSolve_NCG()
283 if (snes->functype == SNES_FUNCTION_PRECONDITIONED) { in SNESSolve_NCG()
284 PetscCall(SNESApplyNPC(snes, X, NULL, dX)); in SNESSolve_NCG()
285 PetscCall(SNESGetConvergedReason(snes->npc, &reason)); in SNESSolve_NCG()
287 snes->reason = SNES_DIVERGED_INNER; in SNESSolve_NCG()
292 PetscCall(SNESApplyNPC(snes, X, F, dX)); in SNESSolve_NCG()
293 PetscCall(SNESGetConvergedReason(snes->npc, &reason)); in SNESSolve_NCG()
295 snes->reason = SNES_DIVERGED_INNER; in SNESSolve_NCG()
375 PETSC_EXTERN PetscErrorCode SNESCreate_NCG(SNES snes) in SNESCreate_NCG() argument
380 snes->ops->destroy = SNESDestroy_NCG; in SNESCreate_NCG()
381 snes->ops->setup = SNESSetUp_NCG; in SNESCreate_NCG()
382 snes->ops->setfromoptions = SNESSetFromOptions_NCG; in SNESCreate_NCG()
383 snes->ops->view = SNESView_NCG; in SNESCreate_NCG()
384 snes->ops->solve = SNESSolve_NCG; in SNESCreate_NCG()
386 snes->usesksp = PETSC_FALSE; in SNESCreate_NCG()
387 snes->usesnpc = PETSC_TRUE; in SNESCreate_NCG()
388 snes->npcside = PC_LEFT; in SNESCreate_NCG()
390 snes->alwayscomputesfinalresidual = PETSC_TRUE; in SNESCreate_NCG()
392 PetscCall(SNESParametersInitialize(snes)); in SNESCreate_NCG()
393 PetscObjectParameterSetDefault(snes, max_funcs, 30000); in SNESCreate_NCG()
394 PetscObjectParameterSetDefault(snes, max_its, 10000); in SNESCreate_NCG()
395 PetscObjectParameterSetDefault(snes, stol, 1e-20); in SNESCreate_NCG()
398 snes->data = (void *)neP; in SNESCreate_NCG()
401 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNCGSetType_C", SNESNCGSetType_NCG)); in SNESCreate_NCG()