169cc43acSMatthew G. Knepley #include <petsc/private/petscfeimpl.h> /*I "petscfe.h" I*/ 269cc43acSMatthew G. Knepley 39371c9d4SSatish Balay static PetscErrorCode PetscSpaceSetFromOptions_WXY(PetscSpace sp, PetscOptionItems *PetscOptionsObject) { 469cc43acSMatthew G. Knepley PetscFunctionBegin; 5d0609cedSBarry Smith PetscOptionsHeadBegin(PetscOptionsObject, "PetscSpace WXY options"); 6d0609cedSBarry Smith PetscOptionsHeadEnd(); 769cc43acSMatthew G. Knepley PetscFunctionReturn(0); 869cc43acSMatthew G. Knepley } 969cc43acSMatthew G. Knepley 109371c9d4SSatish Balay static PetscErrorCode PetscSpacePolynomialView_Ascii(PetscSpace sp, PetscViewer v) { 1169cc43acSMatthew G. Knepley PetscFunctionBegin; 129566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPrintf(v, "WXY space of degree %" PetscInt_FMT "\n", sp->degree)); 1369cc43acSMatthew G. Knepley PetscFunctionReturn(0); 1469cc43acSMatthew G. Knepley } 1569cc43acSMatthew G. Knepley 169371c9d4SSatish Balay static PetscErrorCode PetscSpaceView_WXY(PetscSpace sp, PetscViewer viewer) { 1769cc43acSMatthew G. Knepley PetscBool iascii; 1869cc43acSMatthew G. Knepley 1969cc43acSMatthew G. Knepley PetscFunctionBegin; 2069cc43acSMatthew G. Knepley PetscValidHeaderSpecific(sp, PETSCSPACE_CLASSID, 1); 2169cc43acSMatthew G. Knepley PetscValidHeaderSpecific(viewer, PETSC_VIEWER_CLASSID, 2); 229566063dSJacob Faibussowitsch PetscCall(PetscObjectTypeCompare((PetscObject)viewer, PETSCVIEWERASCII, &iascii)); 239566063dSJacob Faibussowitsch if (iascii) PetscCall(PetscSpacePolynomialView_Ascii(sp, viewer)); 2469cc43acSMatthew G. Knepley PetscFunctionReturn(0); 2569cc43acSMatthew G. Knepley } 2669cc43acSMatthew G. Knepley 279371c9d4SSatish Balay static PetscErrorCode PetscSpaceDestroy_WXY(PetscSpace sp) { 2869cc43acSMatthew G. Knepley PetscSpace_WXY *wxy = (PetscSpace_WXY *)sp->data; 2969cc43acSMatthew G. Knepley 3069cc43acSMatthew G. Knepley PetscFunctionBegin; 319566063dSJacob Faibussowitsch PetscCall(PetscFree(wxy)); 3269cc43acSMatthew G. Knepley PetscFunctionReturn(0); 3369cc43acSMatthew G. Knepley } 3469cc43acSMatthew G. Knepley 359371c9d4SSatish Balay static PetscErrorCode PetscSpaceSetUp_WXY(PetscSpace sp) { 3669cc43acSMatthew G. Knepley PetscSpace_WXY *wxy = (PetscSpace_WXY *)sp->data; 3769cc43acSMatthew G. Knepley 3869cc43acSMatthew G. Knepley PetscFunctionBegin; 3969cc43acSMatthew G. Knepley if (wxy->setupCalled) PetscFunctionReturn(0); 4069cc43acSMatthew G. Knepley PetscCheck(sp->degree >= 0, PetscObjectComm((PetscObject)sp), PETSC_ERR_ARG_OUTOFRANGE, "Negative degree %" PetscInt_FMT " invalid\n", sp->degree); 4169cc43acSMatthew G. Knepley sp->maxDegree = sp->degree; 4269cc43acSMatthew G. Knepley wxy->setupCalled = PETSC_TRUE; 4369cc43acSMatthew G. Knepley PetscFunctionReturn(0); 4469cc43acSMatthew G. Knepley } 4569cc43acSMatthew G. Knepley 469371c9d4SSatish Balay static PetscErrorCode PetscSpaceGetDimension_WXY(PetscSpace sp, PetscInt *dim) { 4769cc43acSMatthew G. Knepley PetscFunctionBegin; 4869cc43acSMatthew G. Knepley *dim = 6; 4969cc43acSMatthew G. Knepley PetscFunctionReturn(0); 5069cc43acSMatthew G. Knepley } 5169cc43acSMatthew G. Knepley 529371c9d4SSatish Balay static PetscErrorCode PetscSpaceEvaluate_WXY(PetscSpace sp, PetscInt npoints, const PetscReal points[], PetscReal B[], PetscReal D[], PetscReal H[]) { 5369cc43acSMatthew G. Knepley PetscSpace_WXY *wxy = (PetscSpace_WXY *)sp->data; 5469cc43acSMatthew G. Knepley PetscInt dim = sp->Nv; 5569cc43acSMatthew G. Knepley PetscInt Nb = 6; 5669cc43acSMatthew G. Knepley PetscInt Nc = 3; 5769cc43acSMatthew G. Knepley 5869cc43acSMatthew G. Knepley PetscFunctionBegin; 5969cc43acSMatthew G. Knepley if (!wxy->setupCalled) { 609566063dSJacob Faibussowitsch PetscCall(PetscSpaceSetUp(sp)); 619566063dSJacob Faibussowitsch PetscCall(PetscSpaceEvaluate(sp, npoints, points, B, D, H)); 6269cc43acSMatthew G. Knepley PetscFunctionReturn(0); 6369cc43acSMatthew G. Knepley } 6469cc43acSMatthew G. Knepley PetscCheck((sp->Nc == 3) && (sp->Nv == 3), PETSC_COMM_SELF, PETSC_ERR_PLIB, "WXY space must have 3 variables and 3 components"); 6569cc43acSMatthew G. Knepley if (B) { 6669cc43acSMatthew G. Knepley PetscInt p_inc = Nb * Nc; 6769cc43acSMatthew G. Knepley PetscInt b_inc = Nc; 6869cc43acSMatthew G. Knepley PetscInt c_inc = 1; 6969cc43acSMatthew G. Knepley 7069cc43acSMatthew G. Knepley for (PetscInt p = 0; p < npoints; p++) { 7169cc43acSMatthew G. Knepley const PetscReal x = points[p * dim + 0]; 7269cc43acSMatthew G. Knepley const PetscReal y = points[p * dim + 1]; 7369cc43acSMatthew G. Knepley const PetscReal z = points[p * dim + 2]; 7469cc43acSMatthew G. Knepley 7569cc43acSMatthew G. Knepley /* {2 y z, 0, 0} */ 7669cc43acSMatthew G. Knepley B[p * p_inc + 0 * b_inc + 0 * c_inc] = 2. * y * z; 7769cc43acSMatthew G. Knepley B[p * p_inc + 0 * b_inc + 1 * c_inc] = 0.; 7869cc43acSMatthew G. Knepley B[p * p_inc + 0 * b_inc + 2 * c_inc] = 0.; 7969cc43acSMatthew G. Knepley /* {0, 2 x z, 0} */ 8069cc43acSMatthew G. Knepley B[p * p_inc + 1 * b_inc + 0 * c_inc] = 0.; 8169cc43acSMatthew G. Knepley B[p * p_inc + 1 * b_inc + 1 * c_inc] = 2. * x * z; 8269cc43acSMatthew G. Knepley B[p * p_inc + 1 * b_inc + 2 * c_inc] = 0.; 8369cc43acSMatthew G. Knepley /* {0, 2 y z, -z^2} */ 8469cc43acSMatthew G. Knepley B[p * p_inc + 2 * b_inc + 0 * c_inc] = 0.; 8569cc43acSMatthew G. Knepley B[p * p_inc + 2 * b_inc + 1 * c_inc] = 2. * y * z; 8669cc43acSMatthew G. Knepley B[p * p_inc + 2 * b_inc + 2 * c_inc] = -z * z; 8769cc43acSMatthew G. Knepley /* {2 x z, 0, -z^2} */ 8869cc43acSMatthew G. Knepley B[p * p_inc + 3 * b_inc + 0 * c_inc] = 2. * x * z; 8969cc43acSMatthew G. Knepley B[p * p_inc + 3 * b_inc + 1 * c_inc] = 0.; 9069cc43acSMatthew G. Knepley B[p * p_inc + 3 * b_inc + 2 * c_inc] = -z * z; 9169cc43acSMatthew G. Knepley /* {x^2, x y, -3 x z} */ 9269cc43acSMatthew G. Knepley B[p * p_inc + 4 * b_inc + 0 * c_inc] = x * x; 9369cc43acSMatthew G. Knepley B[p * p_inc + 4 * b_inc + 1 * c_inc] = x * y; 9469cc43acSMatthew G. Knepley B[p * p_inc + 4 * b_inc + 2 * c_inc] = -3. * x * z; 9569cc43acSMatthew G. Knepley /* {x y, y^2, -3 y z} */ 9669cc43acSMatthew G. Knepley B[p * p_inc + 5 * b_inc + 0 * c_inc] = x * y; 9769cc43acSMatthew G. Knepley B[p * p_inc + 5 * b_inc + 1 * c_inc] = y * y; 9869cc43acSMatthew G. Knepley B[p * p_inc + 5 * b_inc + 2 * c_inc] = -3. * y * z; 9969cc43acSMatthew G. Knepley } 10069cc43acSMatthew G. Knepley } 10169cc43acSMatthew G. Knepley if (D) { 10269cc43acSMatthew G. Knepley PetscInt p_inc = Nb * Nc * dim; 10369cc43acSMatthew G. Knepley PetscInt b_inc = Nc * dim; 10469cc43acSMatthew G. Knepley PetscInt c_inc = dim; 10569cc43acSMatthew G. Knepley 10669cc43acSMatthew G. Knepley for (PetscInt p = 0; p < npoints; p++) { 10769cc43acSMatthew G. Knepley const PetscReal x = points[p * dim + 0]; 10869cc43acSMatthew G. Knepley const PetscReal y = points[p * dim + 1]; 10969cc43acSMatthew G. Knepley const PetscReal z = points[p * dim + 2]; 11069cc43acSMatthew G. Knepley 11169cc43acSMatthew G. Knepley /* {2 y z, 0, 0} */ 11269cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 0] = 0.; 11369cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 1] = 2. * z; 11469cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 2] = 2. * y; 11569cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 0] = 0.; 11669cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 1] = 0.; 11769cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 2] = 0.; 11869cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 0] = 0.; 11969cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 1] = 0.; 12069cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 2] = 0.; 12169cc43acSMatthew G. Knepley /* {0, 2 x z, 0} */ 12269cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 0] = 0.; 12369cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 1] = 0.; 12469cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 2] = 0.; 12569cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 0] = 2. * z; 12669cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 1] = 0.; 12769cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 2] = 2. * x; 12869cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 0] = 0.; 12969cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 1] = 0.; 13069cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 2] = 0.; 13169cc43acSMatthew G. Knepley /* {0, 2 y z, -z^2} */ 13269cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 0] = 0.; 13369cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 1] = 0.; 13469cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 2] = 0.; 13569cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 0] = 0.; 13669cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 1] = 2. * z; 13769cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 2] = 2. * y; 13869cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 0] = 0.; 13969cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 1] = 0.; 14069cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 2] = -2. * z; 14169cc43acSMatthew G. Knepley /* {2 x z, 0, -z^2} */ 14269cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 0] = 2. * z; 14369cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 1] = 0.; 14469cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 2] = 2. * x; 14569cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 0] = 0.; 14669cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 1] = 0.; 14769cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 2] = 0.; 14869cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 0] = 0.; 14969cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 1] = 0.; 15069cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 2] = -2. * z; 15169cc43acSMatthew G. Knepley /* {x^2, x y, -3 x z} */ 15269cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 0] = 2. * x; 15369cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 1] = 0.; 15469cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 2] = 0.; 15569cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 0] = y; 15669cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 1] = x; 15769cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 2] = 0.; 15869cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 0] = -3. * z; 15969cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 1] = 0.; 16069cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 2] = -3. * x; 16169cc43acSMatthew G. Knepley /* {x y, y^2, -3 y z} */ 16269cc43acSMatthew G. Knepley D[p * p_inc + 5 * b_inc + 0 * c_inc + 0] = y; 16369cc43acSMatthew G. Knepley D[p * p_inc + 5 * b_inc + 0 * c_inc + 1] = x; 16469cc43acSMatthew G. Knepley D[p * p_inc + 5 * b_inc + 0 * c_inc + 2] = 0.; 16569cc43acSMatthew G. Knepley D[p * p_inc + 5 * b_inc + 1 * c_inc + 0] = 0.; 16669cc43acSMatthew G. Knepley D[p * p_inc + 5 * b_inc + 1 * c_inc + 1] = 2. * y; 16769cc43acSMatthew G. Knepley D[p * p_inc + 5 * b_inc + 1 * c_inc + 2] = 0.; 16869cc43acSMatthew G. Knepley D[p * p_inc + 5 * b_inc + 2 * c_inc + 0] = 0.; 16969cc43acSMatthew G. Knepley D[p * p_inc + 5 * b_inc + 2 * c_inc + 1] = -3. * z; 17069cc43acSMatthew G. Knepley D[p * p_inc + 5 * b_inc + 2 * c_inc + 2] = -3. * y; 17169cc43acSMatthew G. Knepley } 17269cc43acSMatthew G. Knepley } 17369cc43acSMatthew G. Knepley if (H) { 17469cc43acSMatthew G. Knepley PetscInt p_inc = Nb * Nc * dim * dim; 17569cc43acSMatthew G. Knepley PetscInt b_inc = Nc * dim * dim; 17669cc43acSMatthew G. Knepley PetscInt c_inc = dim * dim; 17769cc43acSMatthew G. Knepley 17869cc43acSMatthew G. Knepley for (PetscInt p = 0; p < npoints; p++) { 17969cc43acSMatthew G. Knepley /* {2 y z, 0, 0} */ 18069cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 0] = 0.; 18169cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 1] = 0.; 18269cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 2] = 0.; 18369cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 3] = 0.; 18469cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 4] = 0.; 18569cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 5] = 2.; 18669cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 6] = 0.; 18769cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 7] = 2.; 18869cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 0 * c_inc + 8] = 0.; 18969cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 0] = 0.; 19069cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 1] = 0.; 19169cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 2] = 0.; 19269cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 3] = 0.; 19369cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 4] = 0.; 19469cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 5] = 0.; 19569cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 6] = 0.; 19669cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 7] = 0.; 19769cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 1 * c_inc + 8] = 0.; 19869cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 0] = 0.; 19969cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 1] = 0.; 20069cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 2] = 0.; 20169cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 3] = 0.; 20269cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 4] = 0.; 20369cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 5] = 0.; 20469cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 6] = 0.; 20569cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 7] = 0.; 20669cc43acSMatthew G. Knepley D[p * p_inc + 0 * b_inc + 2 * c_inc + 8] = 0.; 20769cc43acSMatthew G. Knepley /* {0, 2 x z, 0} */ 20869cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 0] = 0.; 20969cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 1] = 0.; 21069cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 2] = 0.; 21169cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 3] = 0.; 21269cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 4] = 0.; 21369cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 5] = 0.; 21469cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 6] = 0.; 21569cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 7] = 0.; 21669cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 0 * c_inc + 8] = 0.; 21769cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 0] = 0.; 21869cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 1] = 0.; 21969cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 2] = 2.; 22069cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 3] = 0.; 22169cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 4] = 0.; 22269cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 5] = 0.; 22369cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 6] = 2.; 22469cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 7] = 0.; 22569cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 1 * c_inc + 8] = 0.; 22669cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 0] = 0.; 22769cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 1] = 0.; 22869cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 2] = 0.; 22969cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 3] = 0.; 23069cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 4] = 0.; 23169cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 5] = 0.; 23269cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 6] = 0.; 23369cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 7] = 0.; 23469cc43acSMatthew G. Knepley D[p * p_inc + 1 * b_inc + 2 * c_inc + 8] = 0.; 23569cc43acSMatthew G. Knepley /* {0, 2 y z, -z^2} */ 23669cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 0] = 0.; 23769cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 1] = 0.; 23869cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 2] = 0.; 23969cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 3] = 0.; 24069cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 4] = 0.; 24169cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 5] = 0.; 24269cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 6] = 0.; 24369cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 7] = 0.; 24469cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 0 * c_inc + 8] = 0.; 24569cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 0] = 0.; 24669cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 1] = 0.; 24769cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 2] = 0.; 24869cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 3] = 0.; 24969cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 4] = 0.; 25069cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 5] = 2.; 25169cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 6] = 0.; 25269cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 7] = 2.; 25369cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 1 * c_inc + 8] = 0.; 25469cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 0] = 0.; 25569cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 1] = 0.; 25669cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 2] = 0.; 25769cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 3] = 0.; 25869cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 4] = 0.; 25969cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 5] = 0.; 26069cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 6] = 0.; 26169cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 7] = 0.; 26269cc43acSMatthew G. Knepley D[p * p_inc + 2 * b_inc + 2 * c_inc + 8] = -2.; 26369cc43acSMatthew G. Knepley /* {2 x z, 0, -z^2} */ 26469cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 0] = 0.; 26569cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 1] = 0.; 26669cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 2] = 2.; 26769cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 3] = 0.; 26869cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 4] = 0.; 26969cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 5] = 0.; 27069cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 6] = 2.; 27169cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 7] = 0.; 27269cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 0 * c_inc + 8] = 0.; 27369cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 0] = 0.; 27469cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 1] = 0.; 27569cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 2] = 0.; 27669cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 3] = 0.; 27769cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 4] = 0.; 27869cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 5] = 0.; 27969cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 6] = 0.; 28069cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 7] = 0.; 28169cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 1 * c_inc + 8] = 0.; 28269cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 0] = 0.; 28369cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 1] = 0.; 28469cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 2] = 0.; 28569cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 3] = 0.; 28669cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 4] = 0.; 28769cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 5] = 0.; 28869cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 6] = 0.; 28969cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 7] = 0.; 29069cc43acSMatthew G. Knepley D[p * p_inc + 3 * b_inc + 2 * c_inc + 8] = -2.; 29169cc43acSMatthew G. Knepley /* {x^2, x y, -3 x z} */ 29269cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 0] = 2.; 29369cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 1] = 0.; 29469cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 2] = 0.; 29569cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 3] = 0.; 29669cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 4] = 0.; 29769cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 5] = 0.; 29869cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 6] = 0.; 29969cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 7] = 0.; 30069cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 8] = 0.; 30169cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 0] = 0.; 30269cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 1] = 1.; 30369cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 2] = 0.; 30469cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 3] = 1.; 30569cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 4] = 0.; 30669cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 5] = 0.; 30769cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 6] = 0.; 30869cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 7] = 0.; 30969cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 8] = 0.; 31069cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 0] = 0.; 31169cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 1] = 0.; 31269cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 2] = -3.; 31369cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 3] = 0.; 31469cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 4] = 0.; 31569cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 5] = 0.; 31669cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 6] = -3.; 31769cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 7] = 0.; 31869cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 8] = 0.; 31969cc43acSMatthew G. Knepley /* {x y, y^2, -3 y z} */ 32069cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 0] = 2.; 32169cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 1] = 0.; 32269cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 2] = 0.; 32369cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 3] = 0.; 32469cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 4] = 0.; 32569cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 5] = 0.; 32669cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 6] = 0.; 32769cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 7] = 0.; 32869cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 0 * c_inc + 8] = 0.; 32969cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 0] = 0.; 33069cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 1] = 1.; 33169cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 2] = 0.; 33269cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 3] = 1.; 33369cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 4] = 0.; 33469cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 5] = 0.; 33569cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 6] = 0.; 33669cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 7] = 0.; 33769cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 1 * c_inc + 8] = 0.; 33869cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 0] = 0.; 33969cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 1] = 0.; 34069cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 2] = -3.; 34169cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 3] = 0.; 34269cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 4] = 0.; 34369cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 5] = 0.; 34469cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 6] = -3.; 34569cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 7] = 0.; 34669cc43acSMatthew G. Knepley D[p * p_inc + 4 * b_inc + 2 * c_inc + 8] = 0.; 34769cc43acSMatthew G. Knepley } 34869cc43acSMatthew G. Knepley } 34969cc43acSMatthew G. Knepley PetscFunctionReturn(0); 35069cc43acSMatthew G. Knepley } 35169cc43acSMatthew G. Knepley 3529371c9d4SSatish Balay static PetscErrorCode PetscSpaceGetHeightSubspace_WXY(PetscSpace sp, PetscInt height, PetscSpace *subsp) { 35369cc43acSMatthew G. Knepley SETERRQ(PetscObjectComm((PetscObject)sp), PETSC_ERR_SUP, "Do not know how to do this"); 35469cc43acSMatthew G. Knepley } 35569cc43acSMatthew G. Knepley 3569371c9d4SSatish Balay static PetscErrorCode PetscSpaceInitialize_WXY(PetscSpace sp) { 35769cc43acSMatthew G. Knepley PetscFunctionBegin; 35869cc43acSMatthew G. Knepley sp->ops->setfromoptions = PetscSpaceSetFromOptions_WXY; 35969cc43acSMatthew G. Knepley sp->ops->setup = PetscSpaceSetUp_WXY; 36069cc43acSMatthew G. Knepley sp->ops->view = PetscSpaceView_WXY; 36169cc43acSMatthew G. Knepley sp->ops->destroy = PetscSpaceDestroy_WXY; 36269cc43acSMatthew G. Knepley sp->ops->getdimension = PetscSpaceGetDimension_WXY; 36369cc43acSMatthew G. Knepley sp->ops->evaluate = PetscSpaceEvaluate_WXY; 36469cc43acSMatthew G. Knepley sp->ops->getheightsubspace = PetscSpaceGetHeightSubspace_WXY; 36569cc43acSMatthew G. Knepley PetscFunctionReturn(0); 36669cc43acSMatthew G. Knepley } 36769cc43acSMatthew G. Knepley 36869cc43acSMatthew G. Knepley /*MC 36969cc43acSMatthew G. Knepley PETSCSPACEWXY = "wxy" - A PetscSpace object that encapsulates the Wheeler-Xu-Yotov enrichments. 37069cc43acSMatthew G. Knepley $ 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}} 37169cc43acSMatthew G. Knepley $ = {{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}} 37269cc43acSMatthew G. Knepley 37369cc43acSMatthew G. Knepley Level: intermediate 37469cc43acSMatthew G. Knepley 375db781477SPatrick Sanan .seealso: `PetscSpaceType`, `PetscSpaceCreate()`, `PetscSpaceSetType()` 37669cc43acSMatthew G. Knepley M*/ 37769cc43acSMatthew G. Knepley 3789371c9d4SSatish Balay PETSC_EXTERN PetscErrorCode PetscSpaceCreate_WXY(PetscSpace sp) { 37969cc43acSMatthew G. Knepley PetscSpace_WXY *wxy; 38069cc43acSMatthew G. Knepley 38169cc43acSMatthew G. Knepley PetscFunctionBegin; 38269cc43acSMatthew G. Knepley PetscValidHeaderSpecific(sp, PETSCSPACE_CLASSID, 1); 383*4dfa11a4SJacob Faibussowitsch PetscCall(PetscNew(&wxy)); 38469cc43acSMatthew G. Knepley sp->data = wxy; 38569cc43acSMatthew G. Knepley sp->degree = 2; 38669cc43acSMatthew G. Knepley 3879566063dSJacob Faibussowitsch PetscCall(PetscSpaceInitialize_WXY(sp)); 38869cc43acSMatthew G. Knepley PetscFunctionReturn(0); 38969cc43acSMatthew G. Knepley } 390