1*d6a7ad0dSToby Isaac #include <petsc-private/dmpleximpl.h> /*I "petscdmplex.h" I*/ 2*d6a7ad0dSToby Isaac #include <../src/sys/utils/hash.h> 3*d6a7ad0dSToby Isaac #include <petsc-private/isimpl.h> 4*d6a7ad0dSToby Isaac #include <petscsf.h> 5*d6a7ad0dSToby Isaac 6*d6a7ad0dSToby Isaac /** hierarchy routines */ 7*d6a7ad0dSToby Isaac 8*d6a7ad0dSToby Isaac #undef __FUNCT__ 9*d6a7ad0dSToby Isaac #define __FUNCT__ "DMPlexSetReferenceTree" 10*d6a7ad0dSToby Isaac /*@ 11*d6a7ad0dSToby Isaac DMPlexSetReferenceTree - set the reference tree for hierarchically non-conforming meshes. 12*d6a7ad0dSToby Isaac 13*d6a7ad0dSToby Isaac Not collective 14*d6a7ad0dSToby Isaac 15*d6a7ad0dSToby Isaac Input Parameters: 16*d6a7ad0dSToby Isaac + dm - The DMPlex object 17*d6a7ad0dSToby Isaac - ref - The reference tree DMPlex object 18*d6a7ad0dSToby Isaac 19*d6a7ad0dSToby Isaac Level: intermediate 20*d6a7ad0dSToby Isaac 21*d6a7ad0dSToby Isaac .seealso: DMPlexGetReferenceTree() 22*d6a7ad0dSToby Isaac @*/ 23*d6a7ad0dSToby Isaac PetscErrorCode DMPlexSetReferenceTree(DM dm, DM ref) 24*d6a7ad0dSToby Isaac { 25*d6a7ad0dSToby Isaac DM_Plex *mesh = (DM_Plex *)dm->data; 26*d6a7ad0dSToby Isaac PetscErrorCode ierr; 27*d6a7ad0dSToby Isaac 28*d6a7ad0dSToby Isaac PetscFunctionBegin; 29*d6a7ad0dSToby Isaac PetscValidHeaderSpecific(dm, DM_CLASSID, 1); 30*d6a7ad0dSToby Isaac PetscValidHeaderSpecific(ref, DM_CLASSID, 2); 31*d6a7ad0dSToby Isaac ierr = PetscObjectReference((PetscObject)ref);CHKERRQ(ierr); 32*d6a7ad0dSToby Isaac ierr = DMDestroy(&mesh->referenceTree);CHKERRQ(ierr); 33*d6a7ad0dSToby Isaac mesh->referenceTree = ref; 34*d6a7ad0dSToby Isaac PetscFunctionReturn(0); 35*d6a7ad0dSToby Isaac } 36*d6a7ad0dSToby Isaac 37*d6a7ad0dSToby Isaac #undef __FUNCT__ 38*d6a7ad0dSToby Isaac #define __FUNCT__ "DMPlexGetReferenceTree" 39*d6a7ad0dSToby Isaac /*@ 40*d6a7ad0dSToby Isaac DMPlexGetReferenceTree - get the reference tree for hierarchically non-conforming meshes. 41*d6a7ad0dSToby Isaac 42*d6a7ad0dSToby Isaac Not collective 43*d6a7ad0dSToby Isaac 44*d6a7ad0dSToby Isaac Input Parameters: 45*d6a7ad0dSToby Isaac . dm - The DMPlex object 46*d6a7ad0dSToby Isaac 47*d6a7ad0dSToby Isaac Output Parameters 48*d6a7ad0dSToby Isaac . ref - The reference tree DMPlex object 49*d6a7ad0dSToby Isaac 50*d6a7ad0dSToby Isaac Level: intermediate 51*d6a7ad0dSToby Isaac 52*d6a7ad0dSToby Isaac .seealso: DMPlexSetReferenceTree() 53*d6a7ad0dSToby Isaac @*/ 54*d6a7ad0dSToby Isaac PetscErrorCode DMPlexGetReferenceTree(DM dm, DM *ref) 55*d6a7ad0dSToby Isaac { 56*d6a7ad0dSToby Isaac DM_Plex *mesh = (DM_Plex *)dm->data; 57*d6a7ad0dSToby Isaac 58*d6a7ad0dSToby Isaac PetscFunctionBegin; 59*d6a7ad0dSToby Isaac PetscValidHeaderSpecific(dm, DM_CLASSID, 1); 60*d6a7ad0dSToby Isaac PetscValidPointer(ref,2); 61*d6a7ad0dSToby Isaac *ref = mesh->referenceTree; 62*d6a7ad0dSToby Isaac PetscFunctionReturn(0); 63*d6a7ad0dSToby Isaac } 64*d6a7ad0dSToby Isaac 65