Lines Matching refs:nasm

35   SNES_NASM *nasm = (SNES_NASM *)snes->data;  in SNESReset_NASM()  local
39 for (i = 0; i < nasm->n; i++) { in SNESReset_NASM()
40 if (nasm->xl) PetscCall(VecDestroy(&nasm->xl[i])); in SNESReset_NASM()
41 if (nasm->x) PetscCall(VecDestroy(&nasm->x[i])); in SNESReset_NASM()
42 if (nasm->y) PetscCall(VecDestroy(&nasm->y[i])); in SNESReset_NASM()
43 if (nasm->b) PetscCall(VecDestroy(&nasm->b[i])); in SNESReset_NASM()
45 if (nasm->subsnes) PetscCall(SNESDestroy(&nasm->subsnes[i])); in SNESReset_NASM()
46 if (nasm->oscatter) PetscCall(VecScatterDestroy(&nasm->oscatter[i])); in SNESReset_NASM()
47 if (nasm->oscatter_copy) PetscCall(VecScatterDestroy(&nasm->oscatter_copy[i])); in SNESReset_NASM()
48 if (nasm->iscatter) PetscCall(VecScatterDestroy(&nasm->iscatter[i])); in SNESReset_NASM()
49 if (nasm->gscatter) PetscCall(VecScatterDestroy(&nasm->gscatter[i])); in SNESReset_NASM()
52 PetscCall(PetscFree(nasm->x)); in SNESReset_NASM()
53 PetscCall(PetscFree(nasm->xl)); in SNESReset_NASM()
54 PetscCall(PetscFree(nasm->y)); in SNESReset_NASM()
55 PetscCall(PetscFree(nasm->b)); in SNESReset_NASM()
57 if (nasm->xinit) PetscCall(VecDestroy(&nasm->xinit)); in SNESReset_NASM()
59 PetscCall(PetscFree(nasm->subsnes)); in SNESReset_NASM()
60 PetscCall(PetscFree(nasm->oscatter)); in SNESReset_NASM()
61 PetscCall(PetscFree(nasm->oscatter_copy)); in SNESReset_NASM()
62 PetscCall(PetscFree(nasm->iscatter)); in SNESReset_NASM()
63 PetscCall(PetscFree(nasm->gscatter)); in SNESReset_NASM()
65 if (nasm->weight_set) PetscCall(VecDestroy(&nasm->weight)); in SNESReset_NASM()
67 nasm->eventrestrictinterp = 0; in SNESReset_NASM()
68 nasm->eventsubsolve = 0; in SNESReset_NASM()
99 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESSetUp_NASM() local
107 if (!nasm->subsnes) { in SNESSetUp_NASM()
110 nasm->usesdm = PETSC_TRUE; in SNESSetUp_NASM()
111 PetscCall(DMCreateDomainDecomposition(dm, &nasm->n, NULL, NULL, NULL, &subdms)); in SNESSetUp_NASM()
113 …tscCall(DMCreateDomainDecompositionScatters(dm, nasm->n, subdms, &nasm->iscatter, &nasm->oscatter,… in SNESSetUp_NASM()
114 PetscCall(PetscMalloc1(nasm->n, &nasm->oscatter_copy)); in SNESSetUp_NASM()
115 …for (i = 0; i < nasm->n; i++) PetscCall(VecScatterCopy(nasm->oscatter[i], &nasm->oscatter_copy[i])… in SNESSetUp_NASM()
118 PetscCall(PetscMalloc1(nasm->n, &nasm->subsnes)); in SNESSetUp_NASM()
119 for (i = 0; i < nasm->n; i++) { in SNESSetUp_NASM()
120 PetscCall(SNESCreate(PetscObjectComm((PetscObject)subdms[i]), &nasm->subsnes[i])); in SNESSetUp_NASM()
121 … PetscCall(PetscObjectIncrementTabLevel((PetscObject)nasm->subsnes[i], (PetscObject)snes, 1)); in SNESSetUp_NASM()
122 PetscCall(SNESAppendOptionsPrefix(nasm->subsnes[i], optionsprefix)); in SNESSetUp_NASM()
123 PetscCall(SNESAppendOptionsPrefix(nasm->subsnes[i], "sub_")); in SNESSetUp_NASM()
124 PetscCall(SNESSetDM(nasm->subsnes[i], subdms[i])); in SNESSetUp_NASM()
126 …PetscCall(SNESSetComputeApplicationContext(nasm->subsnes[i], snes->ops->ctxcompute, snes->ops->ctx… in SNESSetUp_NASM()
131 PetscCall(SNESSetApplicationContext(nasm->subsnes[i], ctx)); in SNESSetUp_NASM()
133 PetscCall(SNESSetFromOptions(nasm->subsnes[i])); in SNESSetUp_NASM()
140 if (!nasm->x) PetscCall(PetscCalloc1(nasm->n, &nasm->x)); in SNESSetUp_NASM()
141 if (!nasm->xl) PetscCall(PetscCalloc1(nasm->n, &nasm->xl)); in SNESSetUp_NASM()
142 if (!nasm->y) PetscCall(PetscCalloc1(nasm->n, &nasm->y)); in SNESSetUp_NASM()
143 if (!nasm->b) PetscCall(PetscCalloc1(nasm->n, &nasm->b)); in SNESSetUp_NASM()
145 for (i = 0; i < nasm->n; i++) { in SNESSetUp_NASM()
146 PetscCall(SNESGetFunction(nasm->subsnes[i], &F, NULL, NULL)); in SNESSetUp_NASM()
147 if (!nasm->x[i]) PetscCall(VecDuplicate(F, &nasm->x[i])); in SNESSetUp_NASM()
148 if (!nasm->y[i]) PetscCall(VecDuplicate(F, &nasm->y[i])); in SNESSetUp_NASM()
149 if (!nasm->b[i]) PetscCall(VecDuplicate(F, &nasm->b[i])); in SNESSetUp_NASM()
150 if (!nasm->xl[i]) { in SNESSetUp_NASM()
151 PetscCall(SNESGetDM(nasm->subsnes[i], &subdm)); in SNESSetUp_NASM()
152 PetscCall(DMCreateLocalVector(subdm, &nasm->xl[i])); in SNESSetUp_NASM()
153 …l(DMGlobalToLocalHookAdd(subdm, DMGlobalToLocalSubDomainDirichletHook_Private, NULL, nasm->xl[i])); in SNESSetUp_NASM()
156 if (nasm->finaljacobian) { in SNESSetUp_NASM()
158 if (nasm->fjtype == 2) PetscCall(VecDuplicate(snes->vec_sol, &nasm->xinit)); in SNESSetUp_NASM()
159 for (i = 0; i < nasm->n; i++) PetscCall(SNESSetUpMatrices(nasm->subsnes[i])); in SNESSetUp_NASM()
168 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESSetFromOptions_NASM() local
172 …asm_type", "Type of restriction/extension", "", SNESNASMTypes, (PetscEnum)nasm->type, (PetscEnum *… in SNESSetFromOptions_NASM()
176 … (sum of the solutions on the subdomains)", "SNESNASMSetDamping", nasm->damping, &nasm->damping, &… in SNESSetFromOptions_NASM()
177 if (flg) PetscCall(SNESNASMSetDamping(snes, nasm->damping)); in SNESSetFromOptions_NASM()
179 …ute the global jacobian of the final iterate (for ASPIN)", "", nasm->finaljacobian, &nasm->finalja… in SNESSetFromOptions_NASM()
180 …f the final jacobian computed.", "", SNESNASMFJTypes, 3, SNESNASMFJTypes[0], &nasm->fjtype, NULL)); 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()
192 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESView_NASM() local
207 PetscCallMPI(MPIU_Allreduce(&nasm->n, &N, 1, MPIU_INT, MPI_SUM, comm)); in SNESView_NASM()
212 if (nasm->subsnes) { in SNESView_NASM()
220 PetscCall(SNESView(nasm->subsnes[0], sviewer)); in SNESView_NASM()
229 …ISynchronizedPrintf(viewer, " [%d] number of local blocks = %" PetscInt_FMT "\n", rank, nasm->n)); in SNESView_NASM()
236 for (i = 0; i < nasm->n; i++) { in SNESView_NASM()
237 PetscCall(VecGetLocalSize(nasm->x[i], &bsz)); in SNESView_NASM()
239 PetscCall(SNESView(nasm->subsnes[i], sviewer)); in SNESView_NASM()
246 …tscViewerStringSPrintf(viewer, " blocks=%" PetscInt_FMT ",type=%s", N, SNESNASMTypes[nasm->type])); in SNESView_NASM()
248 if (nasm->subsnes && rank == 0) PetscCall(SNESView(nasm->subsnes[0], sviewer)); in SNESView_NASM()
279 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMSetType_NASM() local
283 nasm->type = type; in SNESNASMSetType_NASM()
311 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMGetType_NASM() local
314 *type = nasm->type; in SNESNASMGetType_NASM()
348 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMSetSubdomains_NASM() local
356 nasm->n = n; in SNESNASMSetSubdomains_NASM()
367 PetscCall(PetscMalloc1(n, &nasm->oscatter)); in SNESNASMSetSubdomains_NASM()
368 PetscCall(PetscMalloc1(n, &nasm->oscatter_copy)); in SNESNASMSetSubdomains_NASM()
370 nasm->oscatter[i] = oscatter[i]; in SNESNASMSetSubdomains_NASM()
371 PetscCall(VecScatterCopy(oscatter[i], &nasm->oscatter_copy[i])); in SNESNASMSetSubdomains_NASM()
375 PetscCall(PetscMalloc1(n, &nasm->iscatter)); in SNESNASMSetSubdomains_NASM()
376 for (i = 0; i < n; i++) nasm->iscatter[i] = iscatter[i]; in SNESNASMSetSubdomains_NASM()
379 PetscCall(PetscMalloc1(n, &nasm->gscatter)); in SNESNASMSetSubdomains_NASM()
380 for (i = 0; i < n; i++) nasm->gscatter[i] = gscatter[i]; in SNESNASMSetSubdomains_NASM()
384 PetscCall(PetscMalloc1(n, &nasm->subsnes)); in SNESNASMSetSubdomains_NASM()
385 for (i = 0; i < n; i++) nasm->subsnes[i] = subsnes[i]; in SNESNASMSetSubdomains_NASM()
421 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMGetSubdomains_NASM() local
424 if (n) *n = nasm->n; in SNESNASMGetSubdomains_NASM()
425 if (oscatter) *oscatter = nasm->oscatter; in SNESNASMGetSubdomains_NASM()
426 if (iscatter) *iscatter = nasm->iscatter; in SNESNASMGetSubdomains_NASM()
427 if (gscatter) *gscatter = nasm->gscatter; in SNESNASMGetSubdomains_NASM()
428 if (subsnes) *subsnes = nasm->subsnes; in SNESNASMGetSubdomains_NASM()
463 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMGetSubdomainVecs_NASM() local
466 if (n) *n = nasm->n; in SNESNASMGetSubdomainVecs_NASM()
467 if (x) *x = nasm->x; in SNESNASMGetSubdomainVecs_NASM()
468 if (y) *y = nasm->y; in SNESNASMGetSubdomainVecs_NASM()
469 if (b) *b = nasm->b; in SNESNASMGetSubdomainVecs_NASM()
470 if (xl) *xl = nasm->xl; in SNESNASMGetSubdomainVecs_NASM()
504 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMSetComputeFinalJacobian_NASM() local
507 nasm->finaljacobian = flg; in SNESNASMSetComputeFinalJacobian_NASM()
539 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMSetDamping_NASM() local
542 nasm->damping = dmp; in SNESNASMSetDamping_NASM()
570 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMGetDamping_NASM() local
573 *dmp = nasm->damping; in SNESNASMGetDamping_NASM()
590 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMSolveLocal_Private() local
603 …if (nasm->eventrestrictinterp) PetscCall(PetscLogEventBegin(nasm->eventrestrictinterp, snes, 0, 0,… in SNESNASMSolveLocal_Private()
604 …for (i = 0; i < nasm->n; i++) { /* scatter the global solution to the overlap solution and the loc… in SNESNASMSolveLocal_Private()
605 Xl = nasm->x[i]; in SNESNASMSolveLocal_Private()
606 Xlloc = nasm->xl[i]; in SNESNASMSolveLocal_Private()
607 oscat = nasm->oscatter[i]; in SNESNASMSolveLocal_Private()
608 oscat_copy = nasm->oscatter_copy[i]; in SNESNASMSolveLocal_Private()
609 gscat = nasm->gscatter[i]; in SNESNASMSolveLocal_Private()
615 Bl = nasm->b[i]; 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()
622 for (i = 0; i < nasm->n; i++) { in SNESNASMSolveLocal_Private()
626 Xl = nasm->x[i]; in SNESNASMSolveLocal_Private()
627 Xlloc = nasm->xl[i]; in SNESNASMSolveLocal_Private()
628 Yl = nasm->y[i]; in SNESNASMSolveLocal_Private()
629 subsnes = nasm->subsnes[i]; in SNESNASMSolveLocal_Private()
631 iscat = nasm->iscatter[i]; in SNESNASMSolveLocal_Private()
632 oscat = nasm->oscatter[i]; in SNESNASMSolveLocal_Private()
633 oscat_copy = nasm->oscatter_copy[i]; in SNESNASMSolveLocal_Private()
634 gscat = nasm->gscatter[i]; in SNESNASMSolveLocal_Private()
638 Bl = nasm->b[i]; in SNESNASMSolveLocal_Private()
650 PetscCall(VecScale(Yl, nasm->damping)); 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()
661 if (nasm->weight_set) PetscCall(VecPointwiseMult(Y, Y, nasm->weight)); in SNESNASMSolveLocal_Private()
662 …if (nasm->eventrestrictinterp) PetscCall(PetscLogEventEnd(nasm->eventrestrictinterp, snes, 0, 0, 0… in SNESNASMSolveLocal_Private()
671 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMComputeFinalJacobian_Private() local
679 if (nasm->fjtype == 2) X = nasm->xinit; in SNESNASMComputeFinalJacobian_Private()
685 …if (nasm->eventrestrictinterp) PetscCall(PetscLogEventBegin(nasm->eventrestrictinterp, snes, 0, 0,… in SNESNASMComputeFinalJacobian_Private()
686 if (nasm->fjtype != 1) { in SNESNASMComputeFinalJacobian_Private()
687 for (i = 0; i < nasm->n; i++) { in SNESNASMComputeFinalJacobian_Private()
688 Xlloc = nasm->xl[i]; in SNESNASMComputeFinalJacobian_Private()
689 gscat = nasm->gscatter[i]; in SNESNASMComputeFinalJacobian_Private()
693 …if (nasm->eventrestrictinterp) PetscCall(PetscLogEventEnd(nasm->eventrestrictinterp, snes, 0, 0, 0… in SNESNASMComputeFinalJacobian_Private()
694 for (i = 0; i < nasm->n; i++) { in SNESNASMComputeFinalJacobian_Private()
695 Fl = nasm->subsnes[i]->vec_func; in SNESNASMComputeFinalJacobian_Private()
696 Xl = nasm->x[i]; in SNESNASMComputeFinalJacobian_Private()
697 Xlloc = nasm->xl[i]; in SNESNASMComputeFinalJacobian_Private()
698 subsnes = nasm->subsnes[i]; in SNESNASMComputeFinalJacobian_Private()
699 oscat = nasm->oscatter[i]; in SNESNASMComputeFinalJacobian_Private()
700 gscat = nasm->gscatter[i]; in SNESNASMComputeFinalJacobian_Private()
701 … if (nasm->fjtype != 1) PetscCall(VecScatterEnd(gscat, X, Xlloc, INSERT_VALUES, SCATTER_FORWARD)); in SNESNASMComputeFinalJacobian_Private()
704 if (nasm->fjtype != 1) { in SNESNASMComputeFinalJacobian_Private()
726 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESSolve_NASM() local
769 if (nasm->fjtype == 2) PetscCall(VecCopy(X, nasm->xinit)); in SNESSolve_NASM()
791 if (nasm->finaljacobian) { in SNESSolve_NASM()
833 SNES_NASM *nasm; in SNESCreate_NASM() local
836 PetscCall(PetscNew(&nasm)); in SNESCreate_NASM()
837 snes->data = (void *)nasm; in SNESCreate_NASM()
839 nasm->n = PETSC_DECIDE; in SNESCreate_NASM()
840 nasm->subsnes = NULL; in SNESCreate_NASM()
841 nasm->x = NULL; in SNESCreate_NASM()
842 nasm->xl = NULL; in SNESCreate_NASM()
843 nasm->y = NULL; in SNESCreate_NASM()
844 nasm->b = NULL; in SNESCreate_NASM()
845 nasm->oscatter = NULL; in SNESCreate_NASM()
846 nasm->oscatter_copy = NULL; in SNESCreate_NASM()
847 nasm->iscatter = NULL; in SNESCreate_NASM()
848 nasm->gscatter = NULL; in SNESCreate_NASM()
849 nasm->damping = 1.; in SNESCreate_NASM()
851 nasm->type = PC_ASM_BASIC; in SNESCreate_NASM()
852 nasm->finaljacobian = PETSC_FALSE; in SNESCreate_NASM()
853 nasm->weight_set = PETSC_FALSE; in SNESCreate_NASM()
867 nasm->fjtype = 0; in SNESCreate_NASM()
868 nasm->xinit = NULL; in SNESCreate_NASM()
869 nasm->eventrestrictinterp = 0; in SNESCreate_NASM()
870 nasm->eventsubsolve = 0; in SNESCreate_NASM()
905 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMGetSNES() local
908 …PetscCheck(i >= 0 && i < nasm->n, PetscObjectComm((PetscObject)snes), PETSC_ERR_ARG_OUTOFRANGE, "N… in SNESNASMGetSNES()
909 *subsnes = nasm->subsnes[i]; in SNESNASMGetSNES()
930 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMGetNumber() local
933 *n = nasm->n; in SNESNASMGetNumber()
952 SNES_NASM *nasm = (SNES_NASM *)snes->data; in SNESNASMSetWeight() local
955 PetscCall(VecDestroy(&nasm->weight)); in SNESNASMSetWeight()
956 nasm->weight_set = PETSC_TRUE; in SNESNASMSetWeight()
957 nasm->weight = weight; in SNESNASMSetWeight()
958 PetscCall(PetscObjectReference((PetscObject)nasm->weight)); in SNESNASMSetWeight()