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