1 const char help[] = "Test construction of a mixed form degree dual space"; 2 3 #include <petscdualspace.h> 4 #include <petscdmplex.h> 5 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