1*2dce792eSToby Isaac const char help[] = "Test construction of a mixed form degree dual space";
2*2dce792eSToby Isaac
3*2dce792eSToby Isaac #include <petscdualspace.h>
4*2dce792eSToby Isaac #include <petscdmplex.h>
5*2dce792eSToby Isaac
main(int argc,char ** argv)6*2dce792eSToby Isaac int main(int argc, char **argv)
7*2dce792eSToby Isaac {
8*2dce792eSToby Isaac DM K;
9*2dce792eSToby Isaac PetscDualSpace h_1, h_div, list[2], joint;
10*2dce792eSToby Isaac PetscQuadrature quad;
11*2dce792eSToby Isaac Mat mat;
12*2dce792eSToby Isaac
13*2dce792eSToby Isaac PetscCall(PetscInitialize(&argc, &argv, NULL, help));
14*2dce792eSToby Isaac PetscCall(DMPlexCreateReferenceCell(PETSC_COMM_SELF, DM_POLYTOPE_QUADRILATERAL, &K));
15*2dce792eSToby Isaac PetscCall(PetscDualSpaceCreate(PETSC_COMM_SELF, &h_1));
16*2dce792eSToby Isaac PetscCall(PetscObjectSetName((PetscObject)h_1, "H1"));
17*2dce792eSToby Isaac PetscCall(PetscDualSpaceSetType(h_1, PETSCDUALSPACELAGRANGE));
18*2dce792eSToby Isaac PetscCall(PetscDualSpaceSetDM(h_1, K));
19*2dce792eSToby Isaac PetscCall(PetscDualSpaceSetNumComponents(h_1, 2));
20*2dce792eSToby Isaac PetscCall(PetscDualSpaceLagrangeSetTensor(h_1, PETSC_TRUE));
21*2dce792eSToby Isaac PetscCall(PetscDualSpaceSetFormDegree(h_1, 0));
22*2dce792eSToby Isaac PetscCall(PetscDualSpaceSetOrder(h_1, 1));
23*2dce792eSToby Isaac PetscCall(PetscDualSpaceSetUp(h_1));
24*2dce792eSToby Isaac PetscCall(PetscDualSpaceCreate(PETSC_COMM_SELF, &h_div));
25*2dce792eSToby Isaac PetscCall(PetscObjectSetName((PetscObject)h_div, "Hdiv"));
26*2dce792eSToby Isaac PetscCall(PetscDualSpaceSetType(h_div, PETSCDUALSPACELAGRANGE));
27*2dce792eSToby Isaac PetscCall(PetscDualSpaceSetDM(h_div, K));
28*2dce792eSToby Isaac PetscCall(PetscDualSpaceSetNumComponents(h_div, 2));
29*2dce792eSToby Isaac PetscCall(PetscDualSpaceLagrangeSetTensor(h_div, PETSC_TRUE));
30*2dce792eSToby Isaac PetscCall(PetscDualSpaceSetFormDegree(h_div, -1));
31*2dce792eSToby Isaac PetscCall(PetscDualSpaceLagrangeSetTrimmed(h_div, PETSC_TRUE));
32*2dce792eSToby Isaac PetscCall(PetscDualSpaceSetOrder(h_div, 1));
33*2dce792eSToby Isaac PetscCall(PetscDualSpaceSetUp(h_div));
34*2dce792eSToby Isaac list[0] = h_1;
35*2dce792eSToby Isaac list[1] = h_div;
36*2dce792eSToby Isaac PetscCall(PetscDualSpaceCreateSum(2, list, PETSC_FALSE, &joint));
37*2dce792eSToby Isaac PetscCall(PetscDualSpaceSetUp(joint));
38*2dce792eSToby Isaac PetscCall(PetscDualSpaceView(joint, PETSC_VIEWER_STDOUT_SELF));
39*2dce792eSToby Isaac PetscCall(PetscDualSpaceGetAllData(joint, &quad, &mat));
40*2dce792eSToby Isaac PetscCall(PetscQuadratureView(quad, PETSC_VIEWER_STDOUT_SELF));
41*2dce792eSToby Isaac PetscCall(PetscObjectSetName((PetscObject)mat, "Joint dual space projection matrix"));
42*2dce792eSToby Isaac PetscCall(MatView(mat, PETSC_VIEWER_STDOUT_SELF));
43*2dce792eSToby Isaac PetscCall(PetscDualSpaceDestroy(&joint));
44*2dce792eSToby Isaac PetscCall(PetscDualSpaceDestroy(&h_div));
45*2dce792eSToby Isaac PetscCall(PetscDualSpaceDestroy(&h_1));
46*2dce792eSToby Isaac PetscCall(DMDestroy(&K));
47*2dce792eSToby Isaac PetscCall(PetscFinalize());
48*2dce792eSToby Isaac return 0;
49*2dce792eSToby Isaac }
50*2dce792eSToby Isaac
51*2dce792eSToby Isaac /*TEST
52*2dce792eSToby Isaac
53*2dce792eSToby Isaac test:
54*2dce792eSToby Isaac suffix: 0
55*2dce792eSToby Isaac
56*2dce792eSToby Isaac TEST*/
57