Lines Matching refs:snes
6 static PetscErrorCode SNESReset_FAS(SNES snes) in SNESReset_FAS() argument
8 SNES_FAS *fas = (SNES_FAS *)snes->data; in SNESReset_FAS()
23 static PetscErrorCode SNESDestroy_FAS(SNES snes) in SNESDestroy_FAS() argument
25 SNES_FAS *fas = (SNES_FAS *)snes->data; in SNESDestroy_FAS()
29 PetscCall(SNESReset_FAS(snes)); in SNESDestroy_FAS()
35 static PetscErrorCode SNESFASSetUpLineSearch_Private(SNES snes, SNES smooth) in SNESFASSetUpLineSearch_Private() argument
44 if (!snes->linesearch) PetscFunctionReturn(PETSC_SUCCESS); in SNESFASSetUpLineSearch_Private()
45 PetscCall(SNESGetLineSearch(snes, &linesearch)); in SNESFASSetUpLineSearch_Private()
55 static PetscErrorCode SNESFASCycleSetUpSmoother_Private(SNES snes, SNES smooth) in SNESFASCycleSetUpSmoother_Private() argument
57 SNES_FAS *fas = (SNES_FAS *)snes->data; in SNESFASCycleSetUpSmoother_Private()
60 PetscCall(PetscObjectCopyFortranFunctionPointers((PetscObject)snes, (PetscObject)smooth)); in SNESFASCycleSetUpSmoother_Private()
62 PetscCall(SNESFASSetUpLineSearch_Private(snes, smooth)); in SNESFASCycleSetUpSmoother_Private()
64 PetscCall(PetscObjectReference((PetscObject)snes->vec_sol)); in SNESFASCycleSetUpSmoother_Private()
65 PetscCall(PetscObjectReference((PetscObject)snes->vec_sol_update)); in SNESFASCycleSetUpSmoother_Private()
66 PetscCall(PetscObjectReference((PetscObject)snes->vec_func)); in SNESFASCycleSetUpSmoother_Private()
67 smooth->vec_sol = snes->vec_sol; in SNESFASCycleSetUpSmoother_Private()
68 smooth->vec_sol_update = snes->vec_sol_update; in SNESFASCycleSetUpSmoother_Private()
69 smooth->vec_func = snes->vec_func; in SNESFASCycleSetUpSmoother_Private()
77 static PetscErrorCode SNESSetUp_FAS(SNES snes) in SNESSetUp_FAS() argument
79 SNES_FAS *fas = (SNES_FAS *)snes->data; in SNESSetUp_FAS()
85 PetscCall(SNESFASCycleIsFine(snes, &isFine)); in SNESSetUp_FAS()
87 PetscCall(DMGetRefineLevel(snes->dm, &dm_levels)); in SNESSetUp_FAS()
91 PetscCall(SNESFASSetLevels(snes, dm_levels, NULL)); in SNESSetUp_FAS()
92 PetscCall(SNESSetFromOptions(snes)); in SNESSetUp_FAS()
95 PetscCall(SNESFASCycleGetCorrection(snes, &next)); in SNESSetUp_FAS()
96 if (!isFine) snes->gridsequence = 0; /* no grid sequencing inside the multigrid hierarchy! */ in SNESSetUp_FAS()
98 PetscCall(SNESSetWorkVecs(snes, 2)); /* work vectors used for intergrid transfers */ in SNESSetUp_FAS()
101 if (!fas->smoothd) PetscCall(SNESFASCycleCreateSmoother_Private(snes, &fas->smoothd)); in SNESSetUp_FAS()
103 if (snes->dm) { in SNESSetUp_FAS()
105 if (fas->smoothu) PetscCall(SNESSetDM(fas->smoothu, snes->dm)); in SNESSetUp_FAS()
106 PetscCall(SNESSetDM(fas->smoothd, snes->dm)); in SNESSetUp_FAS()
111 PetscCall(DMCoarsen(snes->dm, PetscObjectComm((PetscObject)next), &next->dm)); in SNESSetUp_FAS()
116 PetscCall(DMCreateInterpolation(next->dm, snes->dm, &fas->interpolate, &fas->rscale)); in SNESSetUp_FAS()
121 PetscCall(DMCreateRestriction(next->dm, snes->dm, &fas->restrct)); in SNESSetUp_FAS()
131 if (hasCreateInjection) PetscCall(DMCreateInjection(next->dm, snes->dm, &fas->inject)); in SNESSetUp_FAS()
139 …->levels - 1) PetscCall(SNESSetFunction(fas->smoothd, NULL, SNESFASGalerkinFunctionDefault, snes)); in SNESSetUp_FAS()
140 …->levels - 1) PetscCall(SNESSetFunction(fas->smoothu, NULL, SNESFASGalerkinFunctionDefault, snes)); in SNESSetUp_FAS()
150 PetscCall(SNESFASCycleSetUpSmoother_Private(snes, fas->smoothd)); in SNESSetUp_FAS()
160 PetscCall(SNESFASCycleSetUpSmoother_Private(snes, fas->smoothu)); in SNESSetUp_FAS()
165 if (!next->vec_sol) PetscCall(SNESFASCreateCoarseVec(snes, &next->vec_sol)); in SNESSetUp_FAS()
166 if (!next->vec_rhs) PetscCall(SNESFASCreateCoarseVec(snes, &next->vec_rhs)); in SNESSetUp_FAS()
167 PetscCall(PetscObjectCopyFortranFunctionPointers((PetscObject)snes, (PetscObject)next)); in SNESSetUp_FAS()
168 PetscCall(SNESFASSetUpLineSearch_Private(snes, next)); in SNESSetUp_FAS()
174 PetscCall(VecDuplicate(snes->vec_sol, &fas->Xg)); in SNESSetUp_FAS()
175 PetscCall(VecDuplicate(snes->vec_sol, &fas->Fg)); in SNESSetUp_FAS()
180 static PetscErrorCode SNESSetFromOptions_FAS(SNES snes, PetscOptionItems PetscOptionsObject) in SNESSetFromOptions_FAS() argument
182 SNES_FAS *fas = (SNES_FAS *)snes->data; in SNESSetFromOptions_FAS()
193 PetscCall(SNESFASCycleIsFine(snes, &isFine)); in SNESSetFromOptions_FAS()
199 if (!flg && snes->dm) { in SNESSetFromOptions_FAS()
200 PetscCall(DMGetRefineLevel(snes->dm, &levels)); in SNESSetFromOptions_FAS()
204 PetscCall(SNESFASSetLevels(snes, levels, NULL)); in SNESSetFromOptions_FAS()
207 if (flg) PetscCall(SNESFASSetType(snes, fastype)); in SNESSetFromOptions_FAS()
209 PetscCall(SNESGetOptionsPrefix(snes, &optionsprefix)); in SNESSetFromOptions_FAS()
211 if (flg) PetscCall(SNESFASSetCycles(snes, m)); in SNESSetFromOptions_FAS()
213 if (flg) PetscCall(SNESFASSetContinuation(snes, continuationflg)); in SNESSetFromOptions_FAS()
216 if (flg) PetscCall(SNESFASSetGalerkin(snes, galerkinflg)); in SNESSetFromOptions_FAS()
220 if (flg) PetscCall(SNESFASFullSetDownSweep(snes, fas->full_downsweep)); in SNESSetFromOptions_FAS()
222 if (flg) PetscCall(SNESFASFullSetTotal(snes, fas->full_total)); in SNESSetFromOptions_FAS()
232 …OptionsCreateViewer(PetscObjectComm((PetscObject)snes), ((PetscObject)snes)->options, ((PetscObjec… in SNESSetFromOptions_FAS()
237 PetscCall(SNESFASSetMonitor(snes, vf, PETSC_TRUE)); in SNESSetFromOptions_FAS()
243 if (flg) PetscCall(SNESFASSetLog(snes, monflg)); in SNESSetFromOptions_FAS()
249 if (upflg) PetscCall(SNESFASSetNumberSmoothUp(snes, n_up)); in SNESSetFromOptions_FAS()
250 if (downflg) PetscCall(SNESFASSetNumberSmoothDown(snes, n_down)); in SNESSetFromOptions_FAS()
254 if (!snes->linesearch) { in SNESSetFromOptions_FAS()
255 PetscCall(SNESGetLineSearch(snes, &linesearch)); in SNESSetFromOptions_FAS()
261 PetscCall(SNESFASCycleGetCorrection(snes, &next)); in SNESSetFromOptions_FAS()
267 static PetscErrorCode SNESView_FAS(SNES snes, PetscViewer viewer) in SNESView_FAS() argument
269 SNES_FAS *fas = (SNES_FAS *)snes->data; in SNESView_FAS()
275 PetscCall(SNESFASCycleIsFine(snes, &isFine)); in SNESView_FAS()
287 PetscCall(SNESFASGetCycleSNES(snes, i, &levelsnes)); in SNESView_FAS()
350 static PetscErrorCode SNESFASDownSmooth_Private(SNES snes, Vec B, Vec X, Vec F, PetscReal *fnorm) in SNESFASDownSmooth_Private() argument
356 SNES_FAS *fas = (SNES_FAS *)snes->data; in SNESFASDownSmooth_Private()
359 PetscCall(SNESFASCycleGetSmootherDown(snes, &smoothd)); in SNESFASDownSmooth_Private()
367 snes->reason = SNES_DIVERGED_INNER; in SNESFASDownSmooth_Private()
377 SNESCheckFunctionDomainError(snes, *fnorm); in SNESFASDownSmooth_Private()
385 static PetscErrorCode SNESFASUpSmooth_Private(SNES snes, Vec B, Vec X, Vec F, PetscReal *fnorm) in SNESFASUpSmooth_Private() argument
391 SNES_FAS *fas = (SNES_FAS *)snes->data; in SNESFASUpSmooth_Private()
394 PetscCall(SNESFASCycleGetSmootherUp(snes, &smoothu)); in SNESFASUpSmooth_Private()
401 snes->reason = SNES_DIVERGED_INNER; in SNESFASUpSmooth_Private()
410 SNESCheckFunctionDomainError(snes, *fnorm); in SNESFASUpSmooth_Private()
430 PetscErrorCode SNESFASCreateCoarseVec(SNES snes, Vec *Xcoarse) in SNESFASCreateCoarseVec() argument
435 PetscValidHeaderSpecificType(snes, SNES_CLASSID, 1, SNESFAS); in SNESFASCreateCoarseVec()
437 fas = (SNES_FAS *)snes->data; in SNESFASCreateCoarseVec()
442 …} else SETERRQ(PetscObjectComm((PetscObject)snes), PETSC_ERR_ARG_WRONGSTATE, "Must set rscale or i… in SNESFASCreateCoarseVec()
487 static PetscErrorCode SNESFASInterpolatedCoarseSolution(SNES snes, Vec X, Vec X_new) in SNESFASInterpolatedCoarseSolution() argument
496 PetscCall(SNESFASCycleGetCorrection(snes, &next)); in SNESFASInterpolatedCoarseSolution()
500 PetscCall(SNESFASCycleGetRestriction(snes, &restrct)); in SNESFASInterpolatedCoarseSolution()
501 PetscCall(SNESFASCycleGetInterpolation(snes, &interpolate)); in SNESFASInterpolatedCoarseSolution()
505 …if (fasc->eventinterprestrict) PetscCall(PetscLogEventBegin(fasc->eventinterprestrict, snes, 0, 0,… in SNESFASInterpolatedCoarseSolution()
507 PetscCall(SNESFASRestrict(snes, X, X_c)); in SNESFASInterpolatedCoarseSolution()
509 if (snes->vec_rhs) { in SNESFASInterpolatedCoarseSolution()
511 PetscCall(MatRestrict(restrct, snes->vec_rhs, B_c)); in SNESFASInterpolatedCoarseSolution()
515 …if (fasc->eventinterprestrict) PetscCall(PetscLogEventEnd(fasc->eventinterprestrict, snes, 0, 0, 0… in SNESFASInterpolatedCoarseSolution()
520 snes->reason = SNES_DIVERGED_INNER; in SNESFASInterpolatedCoarseSolution()
527 PetscCall(SNESGetDM(snes, &dmf)); in SNESFASInterpolatedCoarseSolution()
528 …if (fasc->eventinterprestrict) PetscCall(PetscLogEventBegin(fasc->eventinterprestrict, snes, 0, 0,… in SNESFASInterpolatedCoarseSolution()
530 …if (fasc->eventinterprestrict) PetscCall(PetscLogEventEnd(fasc->eventinterprestrict, snes, 0, 0, 0… in SNESFASInterpolatedCoarseSolution()
547 static PetscErrorCode SNESFASCoarseCorrection(SNES snes, Vec X, Vec F, Vec X_new) in SNESFASCoarseCorrection() argument
556 PetscCall(SNESFASCycleGetCorrection(snes, &next)); in SNESFASCoarseCorrection()
560 PetscCall(SNESFASCycleGetRestriction(snes, &restrct)); in SNESFASCoarseCorrection()
561 PetscCall(SNESFASCycleGetInterpolation(snes, &interpolate)); in SNESFASCoarseCorrection()
568 …if (fasc->eventinterprestrict) PetscCall(PetscLogEventBegin(fasc->eventinterprestrict, snes, 0, 0,… in SNESFASCoarseCorrection()
569 PetscCall(SNESFASRestrict(snes, X, Xo_c)); in SNESFASCoarseCorrection()
572 …if (fasc->eventinterprestrict) PetscCall(PetscLogEventEnd(fasc->eventinterprestrict, snes, 0, 0, 0… in SNESFASCoarseCorrection()
591 snes->reason = SNES_DIVERGED_INNER; in SNESFASCoarseCorrection()
597 …if (fasc->eventinterprestrict) PetscCall(PetscLogEventBegin(fasc->eventinterprestrict, snes, 0, 0,… in SNESFASCoarseCorrection()
599 …if (fasc->eventinterprestrict) PetscCall(PetscLogEventEnd(fasc->eventinterprestrict, snes, 0, 0, 0… in SNESFASCoarseCorrection()
619 static PetscErrorCode SNESFASCycle_Additive(SNES snes, Vec X) in SNESFASCycle_Additive() argument
627 SNES_FAS *fas = (SNES_FAS *)snes->data, *fasc; in SNESFASCycle_Additive()
630 PetscCall(SNESFASCycleGetCorrection(snes, &next)); in SNESFASCycle_Additive()
631 F = snes->vec_func; in SNESFASCycle_Additive()
632 B = snes->vec_rhs; in SNESFASCycle_Additive()
633 Xhat = snes->work[1]; in SNESFASCycle_Additive()
638 PetscCall(SNESFASCycleGetRestriction(snes, &restrct)); in SNESFASCycle_Additive()
639 PetscCall(SNESFASCycleGetInterpolation(snes, &interpolate)); in SNESFASCycle_Additive()
640 if (fas->eventresidual) PetscCall(PetscLogEventBegin(fas->eventresidual, snes, 0, 0, 0)); in SNESFASCycle_Additive()
641 PetscCall(SNESComputeFunction(snes, Xhat, F)); in SNESFASCycle_Additive()
642 if (fas->eventresidual) PetscCall(PetscLogEventEnd(fas->eventresidual, snes, 0, 0, 0)); in SNESFASCycle_Additive()
644 SNESCheckFunctionDomainError(snes, fnorm); in SNESFASCycle_Additive()
650 PetscCall(SNESFASRestrict(snes, Xhat, Xo_c)); in SNESFASCycle_Additive()
669 PetscCall(SNESFASDownSmooth_Private(snes, B, X, F, &fnorm)); in SNESFASCycle_Additive()
673 snes->reason = SNES_DIVERGED_INNER; in SNESFASCycle_Additive()
682 PetscCall(SNESLineSearchApply(snes->linesearch, X, F, &fnorm, Xhat)); in SNESFASCycle_Additive()
683 PetscCall(SNESLineSearchGetNorms(snes->linesearch, &xnorm, &snes->norm, &ynorm)); in SNESFASCycle_Additive()
684 SNESCheckLineSearchFailure(snes); in SNESFASCycle_Additive()
686 PetscCall(SNESFASDownSmooth_Private(snes, B, X, F, &snes->norm)); in SNESFASCycle_Additive()
703 static PetscErrorCode SNESFASCycle_Multiplicative(SNES snes, Vec X) in SNESFASCycle_Multiplicative() argument
709 F = snes->vec_func; in SNESFASCycle_Multiplicative()
710 B = snes->vec_rhs; in SNESFASCycle_Multiplicative()
712 PetscCall(SNESFASCycleGetCorrection(snes, &next)); in SNESFASCycle_Multiplicative()
713 PetscCall(SNESFASDownSmooth_Private(snes, B, X, F, &snes->norm)); in SNESFASCycle_Multiplicative()
715 PetscCall(SNESFASCoarseCorrection(snes, X, F, X)); in SNESFASCycle_Multiplicative()
716 PetscCall(SNESFASUpSmooth_Private(snes, B, X, F, &snes->norm)); in SNESFASCycle_Multiplicative()
721 static PetscErrorCode SNESFASCycleSetupPhase_Full(SNES snes) in SNESFASCycleSetupPhase_Full() argument
724 SNES_FAS *fas = (SNES_FAS *)snes->data; in SNESFASCycleSetupPhase_Full()
729 PetscCall(SNESFASCycleIsFine(snes, &isFine)); in SNESFASCycleSetupPhase_Full()
730 PetscCall(SNESFASCycleGetCorrection(snes, &next)); in SNESFASCycleSetupPhase_Full()
736 static PetscErrorCode SNESFASCycle_Full(SNES snes, Vec X) in SNESFASCycle_Full() argument
739 SNES_FAS *fas = (SNES_FAS *)snes->data; in SNESFASCycle_Full()
744 F = snes->vec_func; in SNESFASCycle_Full()
745 B = snes->vec_rhs; in SNESFASCycle_Full()
746 PetscCall(SNESFASCycleIsFine(snes, &isFine)); in SNESFASCycle_Full()
747 PetscCall(SNESFASCycleGetCorrection(snes, &next)); in SNESFASCycle_Full()
749 if (isFine) PetscCall(SNESFASCycleSetupPhase_Full(snes)); in SNESFASCycle_Full()
755 if (fas->full_downsweep) PetscCall(SNESFASDownSmooth_Private(snes, B, X, F, &snes->norm)); in SNESFASCycle_Full()
757 if (fas->full_total) PetscCall(SNESFASInterpolatedCoarseSolution(snes, X, X)); in SNESFASCycle_Full()
758 else PetscCall(SNESFASCoarseCorrection(snes, X, F, X)); in SNESFASCycle_Full()
760 PetscCall(SNESFASUpSmooth_Private(snes, B, X, F, &snes->norm)); in SNESFASCycle_Full()
764 PetscCall(SNESFASDownSmooth_Private(snes, B, X, F, &snes->norm)); in SNESFASCycle_Full()
768 if (snes->iter == 0) PetscCall(SNESFASDownSmooth_Private(snes, B, X, F, &snes->norm)); in SNESFASCycle_Full()
770 PetscCall(SNESFASCoarseCorrection(snes, X, F, X)); in SNESFASCycle_Full()
771 PetscCall(SNESFASUpSmooth_Private(snes, B, X, F, &snes->norm)); in SNESFASCycle_Full()
777 PetscCall(SNESFASCoarseCorrection(snes, X, F, X)); in SNESFASCycle_Full()
778 PetscCall(SNESFASUpSmooth_Private(snes, B, X, F, &snes->norm)); in SNESFASCycle_Full()
784 static PetscErrorCode SNESFASCycle_Kaskade(SNES snes, Vec X) in SNESFASCycle_Kaskade() argument
790 F = snes->vec_func; in SNESFASCycle_Kaskade()
791 B = snes->vec_rhs; in SNESFASCycle_Kaskade()
792 PetscCall(SNESFASCycleGetCorrection(snes, &next)); in SNESFASCycle_Kaskade()
794 PetscCall(SNESFASCoarseCorrection(snes, X, F, X)); in SNESFASCycle_Kaskade()
795 PetscCall(SNESFASUpSmooth_Private(snes, B, X, F, &snes->norm)); in SNESFASCycle_Kaskade()
797 PetscCall(SNESFASDownSmooth_Private(snes, B, X, F, &snes->norm)); in SNESFASCycle_Kaskade()
813 static PetscErrorCode SNESSolve_FAS(SNES snes) in SNESSolve_FAS() argument
818 SNES_FAS *fas = (SNES_FAS *)snes->data, *ffas; in SNESSolve_FAS()
823 …snes->xl && !snes->xu && !snes->ops->computevariablebounds, PetscObjectComm((PetscObject)snes), PE… in SNESSolve_FAS()
826 snes->reason = SNES_CONVERGED_ITERATING; in SNESSolve_FAS()
827 X = snes->vec_sol; in SNESSolve_FAS()
828 F = snes->vec_func; in SNESSolve_FAS()
830 PetscCall(SNESFASCycleIsFine(snes, &isFine)); in SNESSolve_FAS()
832 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_FAS()
833 snes->iter = 0; in SNESSolve_FAS()
834 snes->norm = 0; in SNESSolve_FAS()
835 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_FAS()
836 if (!snes->vec_func_init_set) { in SNESSolve_FAS()
837 if (fas->eventresidual) PetscCall(PetscLogEventBegin(fas->eventresidual, snes, 0, 0, 0)); in SNESSolve_FAS()
838 PetscCall(SNESComputeFunction(snes, X, F)); in SNESSolve_FAS()
839 if (fas->eventresidual) PetscCall(PetscLogEventEnd(fas->eventresidual, snes, 0, 0, 0)); in SNESSolve_FAS()
840 } else snes->vec_func_init_set = PETSC_FALSE; in SNESSolve_FAS()
843 SNESCheckFunctionDomainError(snes, fnorm); in SNESSolve_FAS()
844 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_FAS()
845 snes->norm = fnorm; in SNESSolve_FAS()
846 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_FAS()
847 PetscCall(SNESLogConvergenceHistory(snes, fnorm, 0)); in SNESSolve_FAS()
850 PetscCall(SNESConverged(snes, 0, 0.0, 0.0, fnorm)); in SNESSolve_FAS()
851 PetscCall(SNESMonitor(snes, snes->iter, fnorm)); in SNESSolve_FAS()
852 if (snes->reason) PetscFunctionReturn(PETSC_SUCCESS); in SNESSolve_FAS()
856 PetscCall(SNESGetDM(snes, &dm)); in SNESSolve_FAS()
865 for (i = 0; i < snes->max_its; i++) { in SNESSolve_FAS()
867 PetscTryTypeMethod(snes, update, snes->iter); in SNESSolve_FAS()
870 PetscCall(SNESFASCycle_Multiplicative(snes, X)); in SNESSolve_FAS()
872 PetscCall(SNESFASCycle_Additive(snes, X)); in SNESSolve_FAS()
874 PetscCall(SNESFASCycle_Full(snes, X)); in SNESSolve_FAS()
876 PetscCall(SNESFASCycle_Kaskade(snes, X)); in SNESSolve_FAS()
877 …} else SETERRQ(PetscObjectComm((PetscObject)snes), PETSC_ERR_ARG_WRONGSTATE, "Unsupported FAS type… in SNESSolve_FAS()
880 if (snes->reason != SNES_CONVERGED_ITERATING) PetscFunctionReturn(PETSC_SUCCESS); in SNESSolve_FAS()
883 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_FAS()
884 snes->iter = i + 1; in SNESSolve_FAS()
885 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_FAS()
886 PetscCall(SNESLogConvergenceHistory(snes, snes->norm, 0)); in SNESSolve_FAS()
887 PetscCall(SNESConverged(snes, snes->iter, 0.0, 0.0, snes->norm)); in SNESSolve_FAS()
888 PetscCall(SNESMonitor(snes, snes->iter, snes->norm)); in SNESSolve_FAS()
889 if (snes->reason) break; in SNESSolve_FAS()
934 PETSC_EXTERN PetscErrorCode SNESCreate_FAS(SNES snes) in SNESCreate_FAS() argument
939 snes->ops->destroy = SNESDestroy_FAS; in SNESCreate_FAS()
940 snes->ops->setup = SNESSetUp_FAS; in SNESCreate_FAS()
941 snes->ops->setfromoptions = SNESSetFromOptions_FAS; in SNESCreate_FAS()
942 snes->ops->view = SNESView_FAS; in SNESCreate_FAS()
943 snes->ops->solve = SNESSolve_FAS; in SNESCreate_FAS()
944 snes->ops->reset = SNESReset_FAS; in SNESCreate_FAS()
946 snes->usesksp = PETSC_FALSE; in SNESCreate_FAS()
947 snes->usesnpc = PETSC_FALSE; in SNESCreate_FAS()
949 PetscCall(SNESParametersInitialize(snes)); in SNESCreate_FAS()
950 PetscObjectParameterSetDefault(snes, max_funcs, 30000); in SNESCreate_FAS()
951 PetscObjectParameterSetDefault(snes, max_its, 10000); in SNESCreate_FAS()
953 snes->alwayscomputesfinalresidual = PETSC_TRUE; in SNESCreate_FAS()
957 snes->data = (void *)fas; in SNESCreate_FAS()
967 fas->fine = snes; in SNESCreate_FAS()