Lines Matching refs:snes
236 static PetscErrorCode SNESMSStep_3Sstar(SNES snes, Vec X, Vec F) in SNESMSStep_3Sstar() argument
238 SNES_MS *ms = (SNES_MS *)snes->data; in SNESMSStep_3Sstar()
242 …Vec S1 = X, S2 = snes->work[1], S3 = snes->work[2], Y = snes->work[0], S1copy = snes-… in SNESMSStep_3Sstar()
252 if (i > 0) PetscCall(SNESComputeFunction(snes, S1, F)); in SNESMSStep_3Sstar()
253 PetscCall(KSPSolve(snes->ksp, F, Y)); in SNESMSStep_3Sstar()
264 static PetscErrorCode SNESMSStep_Basic(SNES snes, Vec X, Vec F) in SNESMSStep_Basic() argument
266 SNES_MS *ms = (SNES_MS *)snes->data; in SNESMSStep_Basic()
270 Vec X0 = snes->work[0]; in SNESMSStep_Basic()
275 if (i > 0) PetscCall(SNESComputeFunction(snes, X, F)); in SNESMSStep_Basic()
276 PetscCall(KSPSolve(snes->ksp, F, X)); in SNESMSStep_Basic()
282 static PetscErrorCode SNESMSStep_Step(SNES snes, Vec X, Vec F) in SNESMSStep_Step() argument
284 SNES_MS *ms = (SNES_MS *)snes->data; in SNESMSStep_Step()
289 PetscCall(SNESMSStep_3Sstar(snes, X, F)); in SNESMSStep_Step()
291 PetscCall(SNESMSStep_Basic(snes, X, F)); in SNESMSStep_Step()
296 static PetscErrorCode SNESMSStep_Norms(SNES snes, PetscInt iter, Vec F) in SNESMSStep_Norms() argument
301 if (SNESNeedNorm_Private(snes, iter)) { in SNESMSStep_Norms()
303 SNESCheckFunctionDomainError(snes, fnorm); in SNESMSStep_Norms()
305 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESMSStep_Norms()
306 snes->iter = iter; in SNESMSStep_Norms()
307 snes->norm = fnorm; in SNESMSStep_Norms()
308 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESMSStep_Norms()
309 PetscCall(SNESLogConvergenceHistory(snes, snes->norm, 0)); in SNESMSStep_Norms()
311 PetscCall(SNESConverged(snes, snes->iter, 0.0, 0.0, fnorm)); in SNESMSStep_Norms()
312 PetscCall(SNESMonitor(snes, snes->iter, snes->norm)); in SNESMSStep_Norms()
314 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESMSStep_Norms()
315 snes->iter = iter; in SNESMSStep_Norms()
316 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESMSStep_Norms()
321 static PetscErrorCode SNESSolve_MS(SNES snes) in SNESSolve_MS() argument
323 Vec X = snes->vec_sol, F = snes->vec_func; in SNESSolve_MS()
327 …snes->xl && !snes->xu && !snes->ops->computevariablebounds, PetscObjectComm((PetscObject)snes), PE… in SNESSolve_MS()
330 snes->reason = SNES_CONVERGED_ITERATING; in SNESSolve_MS()
331 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_MS()
332 snes->iter = 0; in SNESSolve_MS()
333 snes->norm = 0; in SNESSolve_MS()
334 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_MS()
336 if (!snes->vec_func_init_set) PetscCall(SNESComputeFunction(snes, X, F)); in SNESSolve_MS()
337 else snes->vec_func_init_set = PETSC_FALSE; in SNESSolve_MS()
339 PetscCall(SNESMSStep_Norms(snes, 0, F)); in SNESSolve_MS()
340 if (snes->reason) PetscFunctionReturn(PETSC_SUCCESS); in SNESSolve_MS()
342 for (i = 0; i < snes->max_its; i++) { in SNESSolve_MS()
344 PetscTryTypeMethod(snes, update, snes->iter); in SNESSolve_MS()
346 if (i == 0 && snes->jacobian) { in SNESSolve_MS()
348 PetscCall(SNESComputeJacobian(snes, snes->vec_sol, snes->jacobian, snes->jacobian_pre)); in SNESSolve_MS()
349 SNESCheckJacobianDomainError(snes); in SNESSolve_MS()
350 PetscCall(KSPSetOperators(snes->ksp, snes->jacobian, snes->jacobian_pre)); in SNESSolve_MS()
353 PetscCall(SNESMSStep_Step(snes, X, F)); in SNESSolve_MS()
355 …if (i < snes->max_its - 1 || SNESNeedNorm_Private(snes, i + 1)) PetscCall(SNESComputeFunction(snes… in SNESSolve_MS()
357 PetscCall(SNESMSStep_Norms(snes, i + 1, F)); in SNESSolve_MS()
358 if (snes->reason) PetscFunctionReturn(PETSC_SUCCESS); in SNESSolve_MS()
363 static PetscErrorCode SNESSetUp_MS(SNES snes) in SNESSetUp_MS() argument
365 SNES_MS *ms = (SNES_MS *)snes->data; in SNESSetUp_MS()
371 PetscCall(SNESSetWorkVecs(snes, nwork)); in SNESSetUp_MS()
372 PetscCall(SNESSetUpMatrices(snes)); in SNESSetUp_MS()
376 static PetscErrorCode SNESDestroy_MS(SNES snes) in SNESDestroy_MS() argument
379 PetscCall(PetscFree(snes->data)); in SNESDestroy_MS()
380 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESMSGetType_C", NULL)); in SNESDestroy_MS()
381 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESMSSetType_C", NULL)); in SNESDestroy_MS()
382 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESMSGetDamping_C", NULL)); in SNESDestroy_MS()
383 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESMSSetDamping_C", NULL)); in SNESDestroy_MS()
387 static PetscErrorCode SNESView_MS(SNES snes, PetscViewer viewer) in SNESView_MS() argument
390 SNES_MS *ms = (SNES_MS *)snes->data; in SNESView_MS()
399 static PetscErrorCode SNESSetFromOptions_MS(SNES snes, PetscOptionItems PetscOptionsObject) in SNESSetFromOptions_MS() argument
412 PetscCall(SNESMSGetType(snes, &mstype)); in SNESSetFromOptions_MS()
417 if (flg) PetscCall(SNESMSSetType(snes, namelist[choice])); in SNESSetFromOptions_MS()
419 PetscCall(SNESMSGetDamping(snes, &damping)); in SNESSetFromOptions_MS()
421 if (flg) PetscCall(SNESMSSetDamping(snes, damping)); in SNESSetFromOptions_MS()
426 if (norms) PetscCall(SNESSetNormSchedule(snes, SNES_NORM_ALWAYS)); in SNESSetFromOptions_MS()
432 static PetscErrorCode SNESMSGetType_MS(SNES snes, SNESMSType *mstype) in SNESMSGetType_MS() argument
434 SNES_MS *ms = (SNES_MS *)snes->data; in SNESMSGetType_MS()
442 static PetscErrorCode SNESMSSetType_MS(SNES snes, SNESMSType mstype) in SNESMSSetType_MS() argument
444 SNES_MS *ms = (SNES_MS *)snes->data; in SNESMSSetType_MS()
457 if (snes->setupcalled) PetscCall(SNESSetUp_MS(snes)); in SNESMSSetType_MS()
461 …SETERRQ(PetscObjectComm((PetscObject)snes), PETSC_ERR_ARG_UNKNOWN_TYPE, "Could not find '%s'", mst… in SNESMSSetType_MS()
479 PetscErrorCode SNESMSGetType(SNES snes, SNESMSType *mstype) in SNESMSGetType() argument
482 PetscValidHeaderSpecific(snes, SNES_CLASSID, 1); in SNESMSGetType()
484 PetscUseMethod(snes, "SNESMSGetType_C", (SNES, SNESMSType *), (snes, mstype)); in SNESMSGetType()
501 PetscErrorCode SNESMSSetType(SNES snes, SNESMSType mstype) in SNESMSSetType() argument
504 PetscValidHeaderSpecific(snes, SNES_CLASSID, 1); in SNESMSSetType()
506 PetscTryMethod(snes, "SNESMSSetType_C", (SNES, SNESMSType), (snes, mstype)); in SNESMSSetType()
510 static PetscErrorCode SNESMSGetDamping_MS(SNES snes, PetscReal *damping) in SNESMSGetDamping_MS() argument
512 SNES_MS *ms = (SNES_MS *)snes->data; in SNESMSGetDamping_MS()
519 static PetscErrorCode SNESMSSetDamping_MS(SNES snes, PetscReal damping) in SNESMSSetDamping_MS() argument
521 SNES_MS *ms = (SNES_MS *)snes->data; in SNESMSSetDamping_MS()
543 PetscErrorCode SNESMSGetDamping(SNES snes, PetscReal *damping) in SNESMSGetDamping() argument
546 PetscValidHeaderSpecific(snes, SNES_CLASSID, 1); in SNESMSGetDamping()
548 PetscUseMethod(snes, "SNESMSGetDamping_C", (SNES, PetscReal *), (snes, damping)); in SNESMSGetDamping()
565 PetscErrorCode SNESMSSetDamping(SNES snes, PetscReal damping) in SNESMSSetDamping() argument
568 PetscValidHeaderSpecific(snes, SNES_CLASSID, 1); in SNESMSSetDamping()
569 PetscValidLogicalCollectiveReal(snes, damping, 2); in SNESMSSetDamping()
570 PetscTryMethod(snes, "SNESMSSetDamping_C", (SNES, PetscReal), (snes, damping)); in SNESMSSetDamping()
597 PETSC_EXTERN PetscErrorCode SNESCreate_MS(SNES snes) in SNESCreate_MS() argument
604 snes->ops->setup = SNESSetUp_MS; in SNESCreate_MS()
605 snes->ops->solve = SNESSolve_MS; in SNESCreate_MS()
606 snes->ops->destroy = SNESDestroy_MS; in SNESCreate_MS()
607 snes->ops->setfromoptions = SNESSetFromOptions_MS; in SNESCreate_MS()
608 snes->ops->view = SNESView_MS; in SNESCreate_MS()
610 snes->usesnpc = PETSC_FALSE; in SNESCreate_MS()
611 snes->usesksp = PETSC_TRUE; in SNESCreate_MS()
613 snes->alwayscomputesfinalresidual = PETSC_FALSE; in SNESCreate_MS()
615 PetscCall(SNESParametersInitialize(snes)); in SNESCreate_MS()
618 snes->data = (void *)ms; in SNESCreate_MS()
621 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESMSGetType_C", SNESMSGetType_MS)); in SNESCreate_MS()
622 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESMSSetType_C", SNESMSSetType_MS)); in SNESCreate_MS()
623 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESMSGetDamping_C", SNESMSGetDamping_MS)… in SNESCreate_MS()
624 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESMSSetDamping_C", SNESMSSetDamping_MS)… in SNESCreate_MS()
626 PetscCall(SNESMSSetType(snes, SNESMSDefault)); in SNESCreate_MS()