Lines Matching refs:snes
33 static PetscErrorCode SNESReset_NASM(SNES snes) in SNESReset_NASM() argument
35 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESReset_NASM()
72 static PetscErrorCode SNESDestroy_NASM(SNES snes) in SNESDestroy_NASM() argument
75 PetscCall(SNESReset_NASM(snes)); in SNESDestroy_NASM()
76 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNASMSetType_C", NULL)); in SNESDestroy_NASM()
77 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNASMGetType_C", NULL)); in SNESDestroy_NASM()
78 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNASMSetSubdomains_C", NULL)); in SNESDestroy_NASM()
79 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNASMGetSubdomains_C", NULL)); in SNESDestroy_NASM()
80 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNASMSetDamping_C", NULL)); in SNESDestroy_NASM()
81 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNASMGetDamping_C", NULL)); in SNESDestroy_NASM()
82 PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNASMGetSubdomainVecs_C", NULL)); in SNESDestroy_NASM()
83 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNASMSetComputeFinalJacobian_C", NULL)… in SNESDestroy_NASM()
84 PetscCall(PetscFree(snes->data)); in SNESDestroy_NASM()
97 static PetscErrorCode SNESSetUp_NASM(SNES snes) in SNESSetUp_NASM() argument
99 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESSetUp_NASM()
108 PetscCall(SNESGetDM(snes, &dm)); in SNESSetUp_NASM()
117 PetscCall(SNESGetOptionsPrefix(snes, &optionsprefix)); in SNESSetUp_NASM()
121 … PetscCall(PetscObjectIncrementTabLevel((PetscObject)nasm->subsnes[i], (PetscObject)snes, 1)); in SNESSetUp_NASM()
125 if (snes->ops->ctxcompute) { in SNESSetUp_NASM()
126 …PetscCall(SNESSetComputeApplicationContext(nasm->subsnes[i], snes->ops->ctxcompute, snes->ops->ctx… in SNESSetUp_NASM()
130 PetscCall(SNESGetApplicationContext(snes, &ctx)); in SNESSetUp_NASM()
137 …} else SETERRQ(PetscObjectComm((PetscObject)snes), PETSC_ERR_ARG_WRONGSTATE, "Cannot construct loc… in SNESSetUp_NASM()
138 …} else SETERRQ(PetscObjectComm((PetscObject)snes), PETSC_ERR_ARG_WRONGSTATE, "Must set subproblems… in SNESSetUp_NASM()
157 PetscCall(SNESSetUpMatrices(snes)); in SNESSetUp_NASM()
158 if (nasm->fjtype == 2) PetscCall(VecDuplicate(snes->vec_sol, &nasm->xinit)); in SNESSetUp_NASM()
164 static PetscErrorCode SNESSetFromOptions_NASM(SNES snes, PetscOptionItems PetscOptionsObject) in SNESSetFromOptions_NASM() argument
168 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESSetFromOptions_NASM()
173 if (flg) PetscCall(SNESNASMSetType(snes, asmtype)); in SNESSetFromOptions_NASM()
177 if (flg) PetscCall(SNESNASMSetDamping(snes, nasm->damping)); in SNESSetFromOptions_NASM()
183 …PetscCall(PetscLogEventRegister("SNESNASMSubSolve", ((PetscObject)snes)->classid, &nasm->eventsubs… in SNESSetFromOptions_NASM()
184 …PetscCall(PetscLogEventRegister("SNESNASMRestrict", ((PetscObject)snes)->classid, &nasm->eventrest… in SNESSetFromOptions_NASM()
190 static PetscErrorCode SNESView_NASM(SNES snes, PetscViewer viewer) in SNESView_NASM() argument
192 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESView_NASM()
202 PetscCall(PetscObjectGetComm((PetscObject)snes, &comm)); in SNESView_NASM()
214 PetscCall(SNESGetOptionsPrefix(snes, &prefix)); in SNESView_NASM()
270 PetscErrorCode SNESNASMSetType(SNES snes, PCASMType type) in SNESNASMSetType() argument
273 PetscTryMethod(snes, "SNESNASMSetType_C", (SNES, PCASMType), (snes, type)); in SNESNASMSetType()
277 static PetscErrorCode SNESNASMSetType_NASM(SNES snes, PCASMType type) in SNESNASMSetType_NASM() argument
279 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMSetType_NASM()
282 …PetscCheck(type == PC_ASM_BASIC || type == PC_ASM_RESTRICT, PetscObjectComm((PetscObject)snes), PE… in SNESNASMSetType_NASM()
302 PetscErrorCode SNESNASMGetType(SNES snes, PCASMType *type) in SNESNASMGetType() argument
305 PetscUseMethod(snes, "SNESNASMGetType_C", (SNES, PCASMType *), (snes, type)); in SNESNASMGetType()
309 static PetscErrorCode SNESNASMGetType_NASM(SNES snes, PCASMType *type) in SNESNASMGetType_NASM() argument
311 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMGetType_NASM()
335 PetscErrorCode SNESNASMSetSubdomains(SNES snes, PetscInt n, SNES subsnes[], VecScatter iscatter[], … in SNESNASMSetSubdomains() argument
340 PetscCall(PetscObjectQueryFunction((PetscObject)snes, "SNESNASMSetSubdomains_C", &f)); in SNESNASMSetSubdomains()
341 if (f) PetscCall((f)(snes, n, subsnes, iscatter, oscatter, gscatter)); in SNESNASMSetSubdomains()
345 static PetscErrorCode SNESNASMSetSubdomains_NASM(SNES snes, PetscInt n, SNES subsnes[], VecScatter … in SNESNASMSetSubdomains_NASM() argument
348 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMSetSubdomains_NASM()
351 …PetscCheck(!snes->setupcalled, PetscObjectComm((PetscObject)snes), PETSC_ERR_ARG_WRONGSTATE, "SNES… in SNESNASMSetSubdomains_NASM()
354 PetscCall(SNESReset(snes)); in SNESNASMSetSubdomains_NASM()
409 PetscErrorCode SNESNASMGetSubdomains(SNES snes, PetscInt *n, SNES *subsnes[], VecScatter *iscatter[… in SNESNASMGetSubdomains() argument
414 PetscCall(PetscObjectQueryFunction((PetscObject)snes, "SNESNASMGetSubdomains_C", &f)); in SNESNASMGetSubdomains()
415 if (f) PetscCall((f)(snes, n, subsnes, iscatter, oscatter, gscatter)); in SNESNASMGetSubdomains()
419 static PetscErrorCode SNESNASMGetSubdomains_NASM(SNES snes, PetscInt *n, SNES *subsnes[], VecScatte… in SNESNASMGetSubdomains_NASM() argument
421 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMGetSubdomains_NASM()
451 PetscErrorCode SNESNASMGetSubdomainVecs(SNES snes, PetscInt *n, Vec *x[], Vec *y[], Vec *b[], Vec *… in SNESNASMGetSubdomainVecs() argument
456 PetscCall(PetscObjectQueryFunction((PetscObject)snes, "SNESNASMGetSubdomainVecs_C", &f)); in SNESNASMGetSubdomainVecs()
457 if (f) PetscCall((f)(snes, n, x, y, b, xl)); in SNESNASMGetSubdomainVecs()
461 static PetscErrorCode SNESNASMGetSubdomainVecs_NASM(SNES snes, PetscInt *n, Vec **x, Vec **y, Vec *… in SNESNASMGetSubdomainVecs_NASM() argument
463 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMGetSubdomainVecs_NASM()
492 PetscErrorCode SNESNASMSetComputeFinalJacobian(SNES snes, PetscBool flg) in SNESNASMSetComputeFinalJacobian() argument
497 PetscCall(PetscObjectQueryFunction((PetscObject)snes, "SNESNASMSetComputeFinalJacobian_C", &f)); in SNESNASMSetComputeFinalJacobian()
498 if (f) PetscCall((f)(snes, flg)); in SNESNASMSetComputeFinalJacobian()
502 static PetscErrorCode SNESNASMSetComputeFinalJacobian_NASM(SNES snes, PetscBool flg) in SNESNASMSetComputeFinalJacobian_NASM() argument
504 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMSetComputeFinalJacobian_NASM()
530 PetscErrorCode SNESNASMSetDamping(SNES snes, PetscReal dmp) in SNESNASMSetDamping() argument
533 PetscTryMethod(snes, "SNESNASMSetDamping_C", (SNES, PetscReal), (snes, dmp)); in SNESNASMSetDamping()
537 static PetscErrorCode SNESNASMSetDamping_NASM(SNES snes, PetscReal dmp) in SNESNASMSetDamping_NASM() argument
539 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMSetDamping_NASM()
561 PetscErrorCode SNESNASMGetDamping(SNES snes, PetscReal *dmp) in SNESNASMGetDamping() argument
564 PetscUseMethod(snes, "SNESNASMGetDamping_C", (SNES, PetscReal *), (snes, dmp)); in SNESNASMGetDamping()
568 static PetscErrorCode SNESNASMGetDamping_NASM(SNES snes, PetscReal *dmp) in SNESNASMGetDamping_NASM() argument
570 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMGetDamping_NASM()
588 static PetscErrorCode SNESNASMSolveLocal_Private(SNES snes, Vec B, Vec Y, Vec X) in SNESNASMSolveLocal_Private() argument
590 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMSolveLocal_Private()
600 PetscCall(SNESNASMGetType(snes, &type)); in SNESNASMSolveLocal_Private()
601 PetscCall(SNESGetDM(snes, &dm)); in SNESNASMSolveLocal_Private()
603 …if (nasm->eventrestrictinterp) PetscCall(PetscLogEventBegin(nasm->eventrestrictinterp, snes, 0, 0,… in SNESNASMSolveLocal_Private()
619 …if (nasm->eventrestrictinterp) PetscCall(PetscLogEventEnd(nasm->eventrestrictinterp, snes, 0, 0, 0… in SNESNASMSolveLocal_Private()
621 if (nasm->eventsubsolve) PetscCall(PetscLogEventBegin(nasm->eventsubsolve, snes, 0, 0, 0)); in SNESNASMSolveLocal_Private()
657 …} else SETERRQ(PetscObjectComm((PetscObject)snes), PETSC_ERR_ARG_WRONGSTATE, "Only basic and restr… in SNESNASMSolveLocal_Private()
659 if (nasm->eventsubsolve) PetscCall(PetscLogEventEnd(nasm->eventsubsolve, snes, 0, 0, 0)); in SNESNASMSolveLocal_Private()
660 …if (nasm->eventrestrictinterp) PetscCall(PetscLogEventBegin(nasm->eventrestrictinterp, snes, 0, 0,… in SNESNASMSolveLocal_Private()
662 …if (nasm->eventrestrictinterp) PetscCall(PetscLogEventEnd(nasm->eventrestrictinterp, snes, 0, 0, 0… in SNESNASMSolveLocal_Private()
663 PetscCall(SNESNASMGetDamping(snes, &dmp)); in SNESNASMSolveLocal_Private()
668 static PetscErrorCode SNESNASMComputeFinalJacobian_Private(SNES snes, Vec Xfinal) in SNESNASMComputeFinalJacobian_Private() argument
671 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMComputeFinalJacobian_Private()
680 F = snes->vec_func; in SNESNASMComputeFinalJacobian_Private()
681 if (snes->normschedule == SNES_NORM_NONE) PetscCall(SNESComputeFunction(snes, X, F)); in SNESNASMComputeFinalJacobian_Private()
682 PetscCall(SNESComputeJacobian(snes, X, snes->jacobian, snes->jacobian_pre)); in SNESNASMComputeFinalJacobian_Private()
683 SNESCheckJacobianDomainError(snes); in SNESNASMComputeFinalJacobian_Private()
684 PetscCall(SNESGetDM(snes, &dm)); in SNESNASMComputeFinalJacobian_Private()
685 …if (nasm->eventrestrictinterp) PetscCall(PetscLogEventBegin(nasm->eventrestrictinterp, snes, 0, 0,… in SNESNASMComputeFinalJacobian_Private()
693 …if (nasm->eventrestrictinterp) PetscCall(PetscLogEventEnd(nasm->eventrestrictinterp, snes, 0, 0, 0… in SNESNASMComputeFinalJacobian_Private()
717 static PetscErrorCode SNESSolve_NASM(SNES snes) in SNESSolve_NASM() argument
726 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESSolve_NASM()
729 …snes->xl & !snes->xu && !snes->ops->computevariablebounds, PetscObjectComm((PetscObject)snes), PET… in SNESSolve_NASM()
732 X = snes->vec_sol; in SNESSolve_NASM()
733 Y = snes->vec_sol_update; in SNESSolve_NASM()
734 F = snes->vec_func; in SNESSolve_NASM()
735 B = snes->vec_rhs; in SNESSolve_NASM()
737 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_NASM()
738 snes->iter = 0; in SNESSolve_NASM()
739 snes->norm = 0.; in SNESSolve_NASM()
740 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_NASM()
741 snes->reason = SNES_CONVERGED_ITERATING; in SNESSolve_NASM()
742 PetscCall(SNESGetNormSchedule(snes, &normschedule)); in SNESSolve_NASM()
743 …dule == SNES_NORM_INITIAL_ONLY || normschedule == SNES_NORM_INITIAL_FINAL_ONLY || !snes->max_its) { in SNESSolve_NASM()
745 if (!snes->vec_func_init_set) PetscCall(SNESComputeFunction(snes, X, F)); in SNESSolve_NASM()
746 else snes->vec_func_init_set = PETSC_FALSE; in SNESSolve_NASM()
749 SNESCheckFunctionDomainError(snes, fnorm); in SNESSolve_NASM()
750 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_NASM()
751 snes->iter = 0; in SNESSolve_NASM()
752 snes->norm = fnorm; in SNESSolve_NASM()
753 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_NASM()
754 PetscCall(SNESLogConvergenceHistory(snes, snes->norm, 0)); in SNESSolve_NASM()
757 PetscCall(SNESConverged(snes, 0, 0.0, 0.0, fnorm)); in SNESSolve_NASM()
758 PetscCall(SNESMonitor(snes, 0, snes->norm)); in SNESSolve_NASM()
759 if (snes->reason) PetscFunctionReturn(PETSC_SUCCESS); in SNESSolve_NASM()
761 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_NASM()
762 PetscCall(SNESLogConvergenceHistory(snes, snes->norm, 0)); in SNESSolve_NASM()
763 PetscCall(SNESMonitor(snes, snes->iter, snes->norm)); in SNESSolve_NASM()
767 PetscTryTypeMethod(snes, update, snes->iter); in SNESSolve_NASM()
771 for (i = 0; i < snes->max_its; i++) { in SNESSolve_NASM()
772 PetscCall(SNESNASMSolveLocal_Private(snes, B, Y, X)); in SNESSolve_NASM()
773 …if (normschedule == SNES_NORM_ALWAYS || ((i == snes->max_its - 1) && (normschedule == SNES_NORM_IN… in SNESSolve_NASM()
774 PetscCall(SNESComputeFunction(snes, X, F)); in SNESSolve_NASM()
776 SNESCheckFunctionDomainError(snes, fnorm); in SNESSolve_NASM()
779 PetscCall(PetscObjectSAWsTakeAccess((PetscObject)snes)); in SNESSolve_NASM()
780 snes->iter = i + 1; in SNESSolve_NASM()
781 snes->norm = fnorm; in SNESSolve_NASM()
782 PetscCall(PetscObjectSAWsGrantAccess((PetscObject)snes)); in SNESSolve_NASM()
783 PetscCall(SNESLogConvergenceHistory(snes, snes->norm, 0)); in SNESSolve_NASM()
785 PetscCall(SNESConverged(snes, snes->iter, 0.0, 0.0, fnorm)); in SNESSolve_NASM()
786 PetscCall(SNESMonitor(snes, snes->iter, snes->norm)); in SNESSolve_NASM()
787 if (snes->reason) break; in SNESSolve_NASM()
789 PetscTryTypeMethod(snes, update, snes->iter); in SNESSolve_NASM()
792 PetscCall(SNESNASMComputeFinalJacobian_Private(snes, X)); in SNESSolve_NASM()
793 SNESCheckJacobianDomainError(snes); in SNESSolve_NASM()
831 PETSC_EXTERN PetscErrorCode SNESCreate_NASM(SNES snes) in SNESCreate_NASM() argument
837 snes->data = (void *)nasm; in SNESCreate_NASM()
855 snes->ops->destroy = SNESDestroy_NASM; in SNESCreate_NASM()
856 snes->ops->setup = SNESSetUp_NASM; in SNESCreate_NASM()
857 snes->ops->setfromoptions = SNESSetFromOptions_NASM; in SNESCreate_NASM()
858 snes->ops->view = SNESView_NASM; in SNESCreate_NASM()
859 snes->ops->solve = SNESSolve_NASM; in SNESCreate_NASM()
860 snes->ops->reset = SNESReset_NASM; in SNESCreate_NASM()
862 snes->usesksp = PETSC_FALSE; in SNESCreate_NASM()
863 snes->usesnpc = PETSC_FALSE; in SNESCreate_NASM()
865 snes->alwayscomputesfinalresidual = PETSC_FALSE; in SNESCreate_NASM()
872 PetscCall(SNESParametersInitialize(snes)); in SNESCreate_NASM()
873 PetscObjectParameterSetDefault(snes, max_funcs, 10000); in SNESCreate_NASM()
874 PetscObjectParameterSetDefault(snes, max_its, 10000); in SNESCreate_NASM()
876 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNASMSetType_C", SNESNASMSetType_NASM)… in SNESCreate_NASM()
877 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNASMGetType_C", SNESNASMGetType_NASM)… in SNESCreate_NASM()
878 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNASMSetSubdomains_C", SNESNASMSetSubd… in SNESCreate_NASM()
879 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNASMGetSubdomains_C", SNESNASMGetSubd… in SNESCreate_NASM()
880 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNASMSetDamping_C", SNESNASMSetDamping… in SNESCreate_NASM()
881 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNASMGetDamping_C", SNESNASMGetDamping… in SNESCreate_NASM()
882 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNASMGetSubdomainVecs_C", SNESNASMGetS… in SNESCreate_NASM()
883 …PetscCall(PetscObjectComposeFunction((PetscObject)snes, "SNESNASMSetComputeFinalJacobian_C", SNESN… in SNESCreate_NASM()
903 PetscErrorCode SNESNASMGetSNES(SNES snes, PetscInt i, SNES *subsnes) in SNESNASMGetSNES() argument
905 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMGetSNES()
908 …PetscCheck(i >= 0 && i < nasm->n, PetscObjectComm((PetscObject)snes), PETSC_ERR_ARG_OUTOFRANGE, "N… in SNESNASMGetSNES()
928 PetscErrorCode SNESNASMGetNumber(SNES snes, PetscInt *n) in SNESNASMGetNumber() argument
930 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMGetNumber()
950 PetscErrorCode SNESNASMSetWeight(SNES snes, Vec weight) in SNESNASMSetWeight() argument
952 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMSetWeight()