169cc43acSMatthew G. Knepley #include <petsc/private/petscfeimpl.h> /*I "petscfe.h" I*/
269cc43acSMatthew G. Knepley
PetscSpaceSetFromOptions_WXY(PetscSpace sp,PetscOptionItems PetscOptionsObject)3ce78bad3SBarry Smith static PetscErrorCode PetscSpaceSetFromOptions_WXY(PetscSpace sp, PetscOptionItems PetscOptionsObject)
4d71ae5a4SJacob Faibussowitsch {
569cc43acSMatthew G. Knepley PetscFunctionBegin;
6d0609cedSBarry Smith PetscOptionsHeadBegin(PetscOptionsObject, "PetscSpace WXY options");
7d0609cedSBarry Smith PetscOptionsHeadEnd();
83ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
969cc43acSMatthew G. Knepley }
1069cc43acSMatthew G. Knepley
PetscSpacePolynomialView_Ascii(PetscSpace sp,PetscViewer v)11d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscSpacePolynomialView_Ascii(PetscSpace sp, PetscViewer v)
12d71ae5a4SJacob Faibussowitsch {
1369cc43acSMatthew G. Knepley PetscFunctionBegin;
149566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPrintf(v, "WXY space of degree %" PetscInt_FMT "\n", sp->degree));
153ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
1669cc43acSMatthew G. Knepley }
1769cc43acSMatthew G. Knepley
PetscSpaceView_WXY(PetscSpace sp,PetscViewer viewer)18d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscSpaceView_WXY(PetscSpace sp, PetscViewer viewer)
19d71ae5a4SJacob Faibussowitsch {
20*9f196a02SMartin Diehl PetscBool isascii;
2169cc43acSMatthew G. Knepley
2269cc43acSMatthew G. Knepley PetscFunctionBegin;
2369cc43acSMatthew G. Knepley PetscValidHeaderSpecific(sp, PETSCSPACE_CLASSID, 1);
2469cc43acSMatthew G. Knepley PetscValidHeaderSpecific(viewer, PETSC_VIEWER_CLASSID, 2);
25*9f196a02SMartin Diehl PetscCall(PetscObjectTypeCompare((PetscObject)viewer, PETSCVIEWERASCII, &isascii));
26*9f196a02SMartin Diehl if (isascii) PetscCall(PetscSpacePolynomialView_Ascii(sp, viewer));
273ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
2869cc43acSMatthew G. Knepley }
2969cc43acSMatthew G. Knepley
PetscSpaceDestroy_WXY(PetscSpace sp)30d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscSpaceDestroy_WXY(PetscSpace sp)
31d71ae5a4SJacob Faibussowitsch {
3269cc43acSMatthew G. Knepley PetscSpace_WXY *wxy = (PetscSpace_WXY *)sp->data;
3369cc43acSMatthew G. Knepley
3469cc43acSMatthew G. Knepley PetscFunctionBegin;
359566063dSJacob Faibussowitsch PetscCall(PetscFree(wxy));
363ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
3769cc43acSMatthew G. Knepley }
3869cc43acSMatthew G. Knepley
PetscSpaceSetUp_WXY(PetscSpace sp)39d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscSpaceSetUp_WXY(PetscSpace sp)
40d71ae5a4SJacob Faibussowitsch {
4169cc43acSMatthew G. Knepley PetscSpace_WXY *wxy = (PetscSpace_WXY *)sp->data;
4269cc43acSMatthew G. Knepley
4369cc43acSMatthew G. Knepley PetscFunctionBegin;
44371d2eb7SMartin Diehl if (wxy->setupcalled) PetscFunctionReturn(PETSC_SUCCESS);
4500045ab3SPierre Jolivet PetscCheck(sp->degree >= 0, PetscObjectComm((PetscObject)sp), PETSC_ERR_ARG_OUTOFRANGE, "Negative degree %" PetscInt_FMT " invalid", sp->degree);
4669cc43acSMatthew G. Knepley sp->maxDegree = sp->degree;
47371d2eb7SMartin Diehl wxy->setupcalled = PETSC_TRUE;
483ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
4969cc43acSMatthew G. Knepley }
5069cc43acSMatthew G. Knepley
PetscSpaceGetDimension_WXY(PetscSpace sp,PetscInt * dim)51d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscSpaceGetDimension_WXY(PetscSpace sp, PetscInt *dim)
52d71ae5a4SJacob Faibussowitsch {
5369cc43acSMatthew G. Knepley PetscFunctionBegin;
5469cc43acSMatthew G. Knepley *dim = 6;
553ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
5669cc43acSMatthew G. Knepley }
5769cc43acSMatthew G. Knepley
PetscSpaceEvaluate_WXY(PetscSpace sp,PetscInt npoints,const PetscReal points[],PetscReal B[],PetscReal D[],PetscReal H[])58d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscSpaceEvaluate_WXY(PetscSpace sp, PetscInt npoints, const PetscReal points[], PetscReal B[], PetscReal D[], PetscReal H[])
59d71ae5a4SJacob Faibussowitsch {
6069cc43acSMatthew G. Knepley PetscSpace_WXY *wxy = (PetscSpace_WXY *)sp->data;
6169cc43acSMatthew G. Knepley PetscInt dim = sp->Nv;
6269cc43acSMatthew G. Knepley PetscInt Nb = 6;
6369cc43acSMatthew G. Knepley PetscInt Nc = 3;
6469cc43acSMatthew G. Knepley
6569cc43acSMatthew G. Knepley PetscFunctionBegin;
66371d2eb7SMartin Diehl if (!wxy->setupcalled) {
679566063dSJacob Faibussowitsch PetscCall(PetscSpaceSetUp(sp));
689566063dSJacob Faibussowitsch PetscCall(PetscSpaceEvaluate(sp, npoints, points, B, D, H));
693ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
7069cc43acSMatthew G. Knepley }
7169cc43acSMatthew G. Knepley PetscCheck((sp->Nc == 3) && (sp->Nv == 3), PETSC_COMM_SELF, PETSC_ERR_PLIB, "WXY space must have 3 variables and 3 components");
7269cc43acSMatthew G. Knepley if (B) {
7369cc43acSMatthew G. Knepley PetscInt p_inc = Nb * Nc;
7469cc43acSMatthew G. Knepley PetscInt b_inc = Nc;
7569cc43acSMatthew G. Knepley PetscInt c_inc = 1;
7669cc43acSMatthew G. Knepley
7769cc43acSMatthew G. Knepley for (PetscInt p = 0; p < npoints; p++) {
7869cc43acSMatthew G. Knepley const PetscReal x = points[p * dim + 0];
7969cc43acSMatthew G. Knepley const PetscReal y = points[p * dim + 1];
8069cc43acSMatthew G. Knepley const PetscReal z = points[p * dim + 2];
8169cc43acSMatthew G. Knepley
8269cc43acSMatthew G. Knepley /* {2 y z, 0, 0} */
8369cc43acSMatthew G. Knepley B[p * p_inc + 0 * b_inc + 0 * c_inc] = 2. * y * z;
8469cc43acSMatthew G. Knepley B[p * p_inc + 0 * b_inc + 1 * c_inc] = 0.;
8569cc43acSMatthew G. Knepley B[p * p_inc + 0 * b_inc + 2 * c_inc] = 0.;
8669cc43acSMatthew G. Knepley /* {0, 2 x z, 0} */
8769cc43acSMatthew G. Knepley B[p * p_inc + 1 * b_inc + 0 * c_inc] = 0.;
8869cc43acSMatthew G. Knepley B[p * p_inc + 1 * b_inc + 1 * c_inc] = 2. * x * z;
8969cc43acSMatthew G. Knepley B[p * p_inc + 1 * b_inc + 2 * c_inc] = 0.;
9069cc43acSMatthew G. Knepley /* {0, 2 y z, -z^2} */
9169cc43acSMatthew G. Knepley B[p * p_inc + 2 * b_inc + 0 * c_inc] = 0.;
9269cc43acSMatthew G. Knepley B[p * p_inc + 2 * b_inc + 1 * c_inc] = 2. * y * z;
9369cc43acSMatthew G. Knepley B[p * p_inc + 2 * b_inc + 2 * c_inc] = -z * z;
9469cc43acSMatthew G. Knepley /* {2 x z, 0, -z^2} */
9569cc43acSMatthew G. Knepley B[p * p_inc + 3 * b_inc + 0 * c_inc] = 2. * x * z;
9669cc43acSMatthew G. Knepley B[p * p_inc + 3 * b_inc + 1 * c_inc] = 0.;
9769cc43acSMatthew G. Knepley B[p * p_inc + 3 * b_inc + 2 * c_inc] = -z * z;
9869cc43acSMatthew G. Knepley /* {x^2, x y, -3 x z} */
9969cc43acSMatthew G. Knepley B[p * p_inc + 4 * b_inc + 0 * c_inc] = x * x;
10069cc43acSMatthew G. Knepley B[p * p_inc + 4 * b_inc + 1 * c_inc] = x * y;
10169cc43acSMatthew G. Knepley B[p * p_inc + 4 * b_inc + 2 * c_inc] = -3. * x * z;
10269cc43acSMatthew G. Knepley /* {x y, y^2, -3 y z} */
10369cc43acSMatthew G. Knepley B[p * p_inc + 5 * b_inc + 0 * c_inc] = x * y;
10469cc43acSMatthew G. Knepley B[p * p_inc + 5 * b_inc + 1 * c_inc] = y * y;
10569cc43acSMatthew G. Knepley B[p * p_inc + 5 * b_inc + 2 * c_inc] = -3. * y * z;
10669cc43acSMatthew G. Knepley }
10769cc43acSMatthew G. Knepley }
10869cc43acSMatthew G. Knepley if (D) {
10969cc43acSMatthew G. Knepley PetscInt p_inc = Nb * Nc * dim;
11069cc43acSMatthew G. Knepley PetscInt b_inc = Nc * dim;
11169cc43acSMatthew G. Knepley PetscInt c_inc = dim;
11269cc43acSMatthew G. Knepley
11369cc43acSMatthew G. Knepley for (PetscInt p = 0; p < npoints; p++) {
11469cc43acSMatthew G. Knepley const PetscReal x = points[p * dim + 0];
11569cc43acSMatthew G. Knepley const PetscReal y = points[p * dim + 1];
11669cc43acSMatthew G. Knepley const PetscReal z = points[p * dim + 2];
11769cc43acSMatthew G. Knepley
11869cc43acSMatthew G. Knepley /* {2 y z, 0, 0} */
11969cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 0] = 0.;
12069cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 1] = 2. * z;
12169cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 2] = 2. * y;
12269cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 0] = 0.;
12369cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 1] = 0.;
12469cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 2] = 0.;
12569cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 0] = 0.;
12669cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 1] = 0.;
12769cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 2] = 0.;
12869cc43acSMatthew G. Knepley /* {0, 2 x z, 0} */
12969cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 0] = 0.;
13069cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 1] = 0.;
13169cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 2] = 0.;
13269cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 0] = 2. * z;
13369cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 1] = 0.;
13469cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 2] = 2. * x;
13569cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 0] = 0.;
13669cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 1] = 0.;
13769cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 2] = 0.;
13869cc43acSMatthew G. Knepley /* {0, 2 y z, -z^2} */
13969cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 0] = 0.;
14069cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 1] = 0.;
14169cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 2] = 0.;
14269cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 0] = 0.;
14369cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 1] = 2. * z;
14469cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 2] = 2. * y;
14569cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 0] = 0.;
14669cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 1] = 0.;
14769cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 2] = -2. * z;
14869cc43acSMatthew G. Knepley /* {2 x z, 0, -z^2} */
14969cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 0] = 2. * z;
15069cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 1] = 0.;
15169cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 2] = 2. * x;
15269cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 0] = 0.;
15369cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 1] = 0.;
15469cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 2] = 0.;
15569cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 0] = 0.;
15669cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 1] = 0.;
15769cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 2] = -2. * z;
15869cc43acSMatthew G. Knepley /* {x^2, x y, -3 x z} */
15969cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 0] = 2. * x;
16069cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 1] = 0.;
16169cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 2] = 0.;
16269cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 0] = y;
16369cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 1] = x;
16469cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 2] = 0.;
16569cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 0] = -3. * z;
16669cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 1] = 0.;
16769cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 2] = -3. * x;
16869cc43acSMatthew G. Knepley /* {x y, y^2, -3 y z} */
16969cc43acSMatthew G. Knepley D[p * p_inc + 5 * b_inc + 0 * c_inc + 0] = y;
17069cc43acSMatthew G. Knepley D[p * p_inc + 5 * b_inc + 0 * c_inc + 1] = x;
17169cc43acSMatthew G. Knepley D[p * p_inc + 5 * b_inc + 0 * c_inc + 2] = 0.;
17269cc43acSMatthew G. Knepley D[p * p_inc + 5 * b_inc + 1 * c_inc + 0] = 0.;
17369cc43acSMatthew G. Knepley D[p * p_inc + 5 * b_inc + 1 * c_inc + 1] = 2. * y;
17469cc43acSMatthew G. Knepley D[p * p_inc + 5 * b_inc + 1 * c_inc + 2] = 0.;
17569cc43acSMatthew G. Knepley D[p * p_inc + 5 * b_inc + 2 * c_inc + 0] = 0.;
17669cc43acSMatthew G. Knepley D[p * p_inc + 5 * b_inc + 2 * c_inc + 1] = -3. * z;
17769cc43acSMatthew G. Knepley D[p * p_inc + 5 * b_inc + 2 * c_inc + 2] = -3. * y;
17869cc43acSMatthew G. Knepley }
17969cc43acSMatthew G. Knepley }
18069cc43acSMatthew G. Knepley if (H) {
18169cc43acSMatthew G. Knepley PetscInt p_inc = Nb * Nc * dim * dim;
18269cc43acSMatthew G. Knepley PetscInt b_inc = Nc * dim * dim;
18369cc43acSMatthew G. Knepley PetscInt c_inc = dim * dim;
18469cc43acSMatthew G. Knepley
18569cc43acSMatthew G. Knepley for (PetscInt p = 0; p < npoints; p++) {
18669cc43acSMatthew G. Knepley /* {2 y z, 0, 0} */
18769cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 0] = 0.;
18869cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 1] = 0.;
18969cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 2] = 0.;
19069cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 3] = 0.;
19169cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 4] = 0.;
19269cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 5] = 2.;
19369cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 6] = 0.;
19469cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 7] = 2.;
19569cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 8] = 0.;
19669cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 0] = 0.;
19769cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 1] = 0.;
19869cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 2] = 0.;
19969cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 3] = 0.;
20069cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 4] = 0.;
20169cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 5] = 0.;
20269cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 6] = 0.;
20369cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 7] = 0.;
20469cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 8] = 0.;
20569cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 0] = 0.;
20669cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 1] = 0.;
20769cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 2] = 0.;
20869cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 3] = 0.;
20969cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 4] = 0.;
21069cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 5] = 0.;
21169cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 6] = 0.;
21269cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 7] = 0.;
21369cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 8] = 0.;
21469cc43acSMatthew G. Knepley /* {0, 2 x z, 0} */
21569cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 0] = 0.;
21669cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 1] = 0.;
21769cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 2] = 0.;
21869cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 3] = 0.;
21969cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 4] = 0.;
22069cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 5] = 0.;
22169cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 6] = 0.;
22269cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 7] = 0.;
22369cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 8] = 0.;
22469cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 0] = 0.;
22569cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 1] = 0.;
22669cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 2] = 2.;
22769cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 3] = 0.;
22869cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 4] = 0.;
22969cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 5] = 0.;
23069cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 6] = 2.;
23169cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 7] = 0.;
23269cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 8] = 0.;
23369cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 0] = 0.;
23469cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 1] = 0.;
23569cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 2] = 0.;
23669cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 3] = 0.;
23769cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 4] = 0.;
23869cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 5] = 0.;
23969cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 6] = 0.;
24069cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 7] = 0.;
24169cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 8] = 0.;
24269cc43acSMatthew G. Knepley /* {0, 2 y z, -z^2} */
24369cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 0] = 0.;
24469cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 1] = 0.;
24569cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 2] = 0.;
24669cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 3] = 0.;
24769cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 4] = 0.;
24869cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 5] = 0.;
24969cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 6] = 0.;
25069cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 7] = 0.;
25169cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 8] = 0.;
25269cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 0] = 0.;
25369cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 1] = 0.;
25469cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 2] = 0.;
25569cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 3] = 0.;
25669cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 4] = 0.;
25769cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 5] = 2.;
25869cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 6] = 0.;
25969cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 7] = 2.;
26069cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 8] = 0.;
26169cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 0] = 0.;
26269cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 1] = 0.;
26369cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 2] = 0.;
26469cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 3] = 0.;
26569cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 4] = 0.;
26669cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 5] = 0.;
26769cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 6] = 0.;
26869cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 7] = 0.;
26969cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 8] = -2.;
27069cc43acSMatthew G. Knepley /* {2 x z, 0, -z^2} */
27169cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 0] = 0.;
27269cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 1] = 0.;
27369cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 2] = 2.;
27469cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 3] = 0.;
27569cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 4] = 0.;
27669cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 5] = 0.;
27769cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 6] = 2.;
27869cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 7] = 0.;
27969cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 8] = 0.;
28069cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 0] = 0.;
28169cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 1] = 0.;
28269cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 2] = 0.;
28369cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 3] = 0.;
28469cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 4] = 0.;
28569cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 5] = 0.;
28669cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 6] = 0.;
28769cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 7] = 0.;
28869cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 8] = 0.;
28969cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 0] = 0.;
29069cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 1] = 0.;
29169cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 2] = 0.;
29269cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 3] = 0.;
29369cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 4] = 0.;
29469cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 5] = 0.;
29569cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 6] = 0.;
29669cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 7] = 0.;
29769cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 8] = -2.;
29869cc43acSMatthew G. Knepley /* {x^2, x y, -3 x z} */
29969cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 0] = 2.;
30069cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 1] = 0.;
30169cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 2] = 0.;
30269cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 3] = 0.;
30369cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 4] = 0.;
30469cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 5] = 0.;
30569cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 6] = 0.;
30669cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 7] = 0.;
30769cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 8] = 0.;
30869cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 0] = 0.;
30969cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 1] = 1.;
31069cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 2] = 0.;
31169cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 3] = 1.;
31269cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 4] = 0.;
31369cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 5] = 0.;
31469cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 6] = 0.;
31569cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 7] = 0.;
31669cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 8] = 0.;
31769cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 0] = 0.;
31869cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 1] = 0.;
31969cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 2] = -3.;
32069cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 3] = 0.;
32169cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 4] = 0.;
32269cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 5] = 0.;
32369cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 6] = -3.;
32469cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 7] = 0.;
32569cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 8] = 0.;
32669cc43acSMatthew G. Knepley /* {x y, y^2, -3 y z} */
32769cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 0] = 2.;
32869cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 1] = 0.;
32969cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 2] = 0.;
33069cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 3] = 0.;
33169cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 4] = 0.;
33269cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 5] = 0.;
33369cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 6] = 0.;
33469cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 7] = 0.;
33569cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 8] = 0.;
33669cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 0] = 0.;
33769cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 1] = 1.;
33869cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 2] = 0.;
33969cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 3] = 1.;
34069cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 4] = 0.;
34169cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 5] = 0.;
34269cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 6] = 0.;
34369cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 7] = 0.;
34469cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 8] = 0.;
34569cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 0] = 0.;
34669cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 1] = 0.;
34769cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 2] = -3.;
34869cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 3] = 0.;
34969cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 4] = 0.;
35069cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 5] = 0.;
35169cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 6] = -3.;
35269cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 7] = 0.;
35369cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 8] = 0.;
35469cc43acSMatthew G. Knepley }
35569cc43acSMatthew G. Knepley }
3563ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
35769cc43acSMatthew G. Knepley }
35869cc43acSMatthew G. Knepley
PetscSpaceGetHeightSubspace_WXY(PetscSpace sp,PetscInt height,PetscSpace * subsp)359d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscSpaceGetHeightSubspace_WXY(PetscSpace sp, PetscInt height, PetscSpace *subsp)
360d71ae5a4SJacob Faibussowitsch {
36169cc43acSMatthew G. Knepley SETERRQ(PetscObjectComm((PetscObject)sp), PETSC_ERR_SUP, "Do not know how to do this");
36269cc43acSMatthew G. Knepley }
36369cc43acSMatthew G. Knepley
PetscSpaceInitialize_WXY(PetscSpace sp)364d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscSpaceInitialize_WXY(PetscSpace sp)
365d71ae5a4SJacob Faibussowitsch {
36669cc43acSMatthew G. Knepley PetscFunctionBegin;
36769cc43acSMatthew G. Knepley sp->ops->setfromoptions = PetscSpaceSetFromOptions_WXY;
36869cc43acSMatthew G. Knepley sp->ops->setup = PetscSpaceSetUp_WXY;
36969cc43acSMatthew G. Knepley sp->ops->view = PetscSpaceView_WXY;
37069cc43acSMatthew G. Knepley sp->ops->destroy = PetscSpaceDestroy_WXY;
37169cc43acSMatthew G. Knepley sp->ops->getdimension = PetscSpaceGetDimension_WXY;
37269cc43acSMatthew G. Knepley sp->ops->evaluate = PetscSpaceEvaluate_WXY;
37369cc43acSMatthew G. Knepley sp->ops->getheightsubspace = PetscSpaceGetHeightSubspace_WXY;
3743ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
37569cc43acSMatthew G. Knepley }
37669cc43acSMatthew G. Knepley
37769cc43acSMatthew G. Knepley /*MC
378dce8aebaSBarry Smith PETSCSPACEWXY = "wxy" - A `PetscSpace` object that encapsulates the Wheeler-Xu-Yotov enrichments.
37969cc43acSMatthew G. Knepley
38069cc43acSMatthew G. Knepley Level: intermediate
38169cc43acSMatthew G. Knepley
38237fdd005SBarry Smith Note:
38337fdd005SBarry Smith .vb
38437fdd005SBarry Smith curl {{0, 0, y^2 z}, {x z^2, 0, 0}, {y z^2, 0, 0}, {0, -x z^2, 0}, {0, -3/2 x^2 z, -1/2 x^2 y}, {3/2 y^2 z, 0, 1/2 y^2 x}}
38537fdd005SBarry Smith = {{2 y z, 0, 0}, {0, 2 x z, 0}, {0, 2 y z, -z^2}, {2 x z, 0, -z^2}, {x^2, x y, -3 x z}, {x y, y^2, -3 y z}}
38637fdd005SBarry Smith .ve
38737fdd005SBarry Smith
388dce8aebaSBarry Smith .seealso: `PetscSpace`, `PetscSpaceType`, `PetscSpaceCreate()`, `PetscSpaceSetType()`
38969cc43acSMatthew G. Knepley M*/
39069cc43acSMatthew G. Knepley
PetscSpaceCreate_WXY(PetscSpace sp)391d71ae5a4SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode PetscSpaceCreate_WXY(PetscSpace sp)
392d71ae5a4SJacob Faibussowitsch {
39369cc43acSMatthew G. Knepley PetscSpace_WXY *wxy;
39469cc43acSMatthew G. Knepley
39569cc43acSMatthew G. Knepley PetscFunctionBegin;
39669cc43acSMatthew G. Knepley PetscValidHeaderSpecific(sp, PETSCSPACE_CLASSID, 1);
3974dfa11a4SJacob Faibussowitsch PetscCall(PetscNew(&wxy));
39869cc43acSMatthew G. Knepley sp->data = wxy;
39969cc43acSMatthew G. Knepley sp->degree = 2;
40069cc43acSMatthew G. Knepley
4019566063dSJacob Faibussowitsch PetscCall(PetscSpaceInitialize_WXY(sp));
4023ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
40369cc43acSMatthew G. Knepley }
404