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 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