Lines Matching refs:sp

3 static PetscErrorCode PetscSpaceSetFromOptions_Ptrimmed(PetscSpace sp, PetscOptionItems PetscOptionsObject)
5 PetscSpace_Ptrimmed *pt = (PetscSpace_Ptrimmed *)sp->data;
14 static PetscErrorCode PetscSpacePTrimmedView_Ascii(PetscSpace sp, PetscViewer v)
16 PetscSpace_Ptrimmed *pt = (PetscSpace_Ptrimmed *)sp->data;
21 tdegree = f == 0 ? sp->degree : sp->degree + 1;
22 PetscCall(PetscViewerASCIIPrintf(v, "Trimmed polynomials %" PetscInt_FMT "%s-forms of degree %" PetscInt_FMT " (P-%" PetscInt_FMT "/\\%" PetscInt_FMT ")\n", PetscAbsInt(f), f < 0 ? "*" : "", sp->degree, tdegree, PetscAbsInt(f)));
26 static PetscErrorCode PetscSpaceView_Ptrimmed(PetscSpace sp, PetscViewer viewer)
31 PetscValidHeaderSpecific(sp, PETSCSPACE_CLASSID, 1);
34 if (isascii) PetscCall(PetscSpacePTrimmedView_Ascii(sp, viewer));
38 static PetscErrorCode PetscSpaceDestroy_Ptrimmed(PetscSpace sp)
40 PetscSpace_Ptrimmed *pt = (PetscSpace_Ptrimmed *)sp->data;
43 PetscCall(PetscObjectComposeFunction((PetscObject)sp, "PetscSpacePTrimmedGetFormDegree_C", NULL));
44 PetscCall(PetscObjectComposeFunction((PetscObject)sp, "PetscSpacePTrimmedSetFormDegree_C", NULL));
48 for (d = 0; d < sp->Nv; ++d) PetscCall(PetscSpaceDestroy(&pt->subspaces[d]));
55 static PetscErrorCode PetscSpaceSetUp_Ptrimmed(PetscSpace sp)
57 PetscSpace_Ptrimmed *pt = (PetscSpace_Ptrimmed *)sp->data;
62 PetscCheck(pt->formDegree >= -sp->Nv && pt->formDegree <= sp->Nv, PetscObjectComm((PetscObject)sp), PETSC_ERR_ARG_OUTOFRANGE, "Form degree %" PetscInt_FMT " not in valid range [%" PetscInt_FMT ",%" PetscInt_FMT "]", pt->formDegree, sp->Nv, sp->Nv);
63 PetscCall(PetscDTBinomialInt(sp->Nv, PetscAbsInt(pt->formDegree), &Nf));
64 if (sp->Nc == PETSC_DETERMINE) sp->Nc = Nf;
65 PetscCheck(sp->Nc % Nf == 0, PetscObjectComm((PetscObject)sp), PETSC_ERR_ARG_INCOMP, "Number of components %" PetscInt_FMT " is not a multiple of form dimension %" PetscInt_FMT, sp->Nc, Nf);
66 if (sp->Nc != Nf) {
68 PetscInt nCopies = sp->Nc / Nf;
75 PetscCall(PetscSpaceSetType(sp, PETSCSPACESUM));
76 PetscCall(PetscSpaceSumSetConcatenate(sp, PETSC_TRUE));
77 PetscCall(PetscSpaceSumSetNumSubspaces(sp, nCopies));
78 PetscCall(PetscSpaceCreate(PetscObjectComm((PetscObject)sp), &subsp));
79 PetscCall(PetscObjectGetOptionsPrefix((PetscObject)sp, &prefix));
82 if (((PetscObject)sp)->name) {
83 PetscCall(PetscObjectGetName((PetscObject)sp, &name));
88 PetscCall(PetscSpaceGetNumVariables(sp, &Nv));
91 PetscCall(PetscSpaceGetDegree(sp, &deg, &maxDeg));
95 for (PetscInt i = 0; i < nCopies; i++) PetscCall(PetscSpaceSumSetSubspace(sp, i, subsp));
97 PetscCall(PetscSpaceSetUp(sp));
100 if (sp->degree == PETSC_DEFAULT) sp->degree = 0;
101 else PetscCheck(sp->degree >= 0, PetscObjectComm((PetscObject)sp), PETSC_ERR_ARG_OUTOFRANGE, "Invalid negative degree %" PetscInt_FMT, sp->degree);
102 sp->maxDegree = (pt->formDegree == 0 || PetscAbsInt(pt->formDegree) == sp->Nv) ? sp->degree : sp->degree + 1;
103 if (pt->formDegree == 0 || PetscAbsInt(pt->formDegree) == sp->Nv) {
105 PetscCall(PetscSpaceSetType(sp, PETSCSPACEPOLYNOMIAL));
106 PetscCall(PetscSpaceSetUp(sp));
113 static PetscErrorCode PetscSpaceGetDimension_Ptrimmed(PetscSpace sp, PetscInt *dim)
115 PetscSpace_Ptrimmed *pt = (PetscSpace_Ptrimmed *)sp->data;
123 PetscCall(PetscDTPTrimmedSize(sp->Nv, f == 0 ? sp->degree : sp->degree + 1, pt->formDegree, dim));
124 PetscCall(PetscDTBinomialInt(sp->Nv, PetscAbsInt(pt->formDegree), &Nf));
125 *dim *= (sp->Nc / Nf);
134 static PetscErrorCode PetscSpaceEvaluate_Ptrimmed(PetscSpace sp, PetscInt npoints, const PetscReal points[], PetscReal B[], PetscReal D[], PetscReal H[])
136 PetscSpace_Ptrimmed *pt = (PetscSpace_Ptrimmed *)sp->data;
137 DM dm = sp->dm;
139 PetscInt Nc = sp->Nc;
141 PetscInt dim = sp->Nv;
147 PetscCall(PetscSpaceSetUp(sp));
148 PetscCall(PetscSpaceEvaluate(sp, npoints, points, B, D, H));
159 degree = f == 0 ? sp->degree : sp->degree + 1;
162 PetscCheck(Ncopies == 1, PetscObjectComm((PetscObject)sp), PETSC_ERR_PLIB, "Multicopy spaces should have been converted to PETSCSPACESUM");
240 + sp - the function space object
250 PetscErrorCode PetscSpacePTrimmedSetFormDegree(PetscSpace sp, PetscInt formDegree)
253 PetscValidHeaderSpecific(sp, PETSCSPACE_CLASSID, 1);
254 PetscTryMethod(sp, "PetscSpacePTrimmedSetFormDegree_C", (PetscSpace, PetscInt), (sp, formDegree));
262 . sp - the function space object
271 PetscErrorCode PetscSpacePTrimmedGetFormDegree(PetscSpace sp, PetscInt *formDegree)
274 PetscValidHeaderSpecific(sp, PETSCSPACE_CLASSID, 1);
276 PetscTryMethod(sp, "PetscSpacePTrimmedGetFormDegree_C", (PetscSpace, PetscInt *), (sp, formDegree));
280 static PetscErrorCode PetscSpacePTrimmedSetFormDegree_Ptrimmed(PetscSpace sp, PetscInt formDegree)
282 PetscSpace_Ptrimmed *pt = (PetscSpace_Ptrimmed *)sp->data;
289 static PetscErrorCode PetscSpacePTrimmedGetFormDegree_Ptrimmed(PetscSpace sp, PetscInt *formDegree)
291 PetscSpace_Ptrimmed *pt = (PetscSpace_Ptrimmed *)sp->data;
294 PetscValidHeaderSpecific(sp, PETSCSPACE_CLASSID, 1);
300 static PetscErrorCode PetscSpaceGetHeightSubspace_Ptrimmed(PetscSpace sp, PetscInt height, PetscSpace *subsp)
302 PetscSpace_Ptrimmed *pt = (PetscSpace_Ptrimmed *)sp->data;
306 PetscCall(PetscSpaceGetNumVariables(sp, &dim));
315 PetscCall(PetscSpaceGetNumComponents(sp, &Nc));
319 PetscCall(PetscSpaceGetDegree(sp, &degree, NULL));
321 PetscCall(PetscSpaceCreate(PetscObjectComm((PetscObject)sp), &sub));
322 PetscCall(PetscObjectGetName((PetscObject)sp, &name));
339 static PetscErrorCode PetscSpaceInitialize_Ptrimmed(PetscSpace sp)
342 PetscCall(PetscObjectComposeFunction((PetscObject)sp, "PetscSpacePTrimmedGetFormDegree_C", PetscSpacePTrimmedGetFormDegree_Ptrimmed));
343 PetscCall(PetscObjectComposeFunction((PetscObject)sp, "PetscSpacePTrimmedSetFormDegree_C", PetscSpacePTrimmedSetFormDegree_Ptrimmed));
344 sp->ops->setfromoptions = PetscSpaceSetFromOptions_Ptrimmed;
345 sp->ops->setup = PetscSpaceSetUp_Ptrimmed;
346 sp->ops->view = PetscSpaceView_Ptrimmed;
347 sp->ops->destroy = PetscSpaceDestroy_Ptrimmed;
348 sp->ops->getdimension = PetscSpaceGetDimension_Ptrimmed;
349 sp->ops->evaluate = PetscSpaceEvaluate_Ptrimmed;
350 sp->ops->getheightsubspace = PetscSpaceGetHeightSubspace_Ptrimmed;
388 PETSC_EXTERN PetscErrorCode PetscSpaceCreate_Ptrimmed(PetscSpace sp)
393 PetscValidHeaderSpecific(sp, PETSCSPACE_CLASSID, 1);
395 sp->data = pt;
398 sp->Nc = PETSC_DETERMINE;
400 PetscCall(PetscSpaceInitialize_Ptrimmed(sp));