xref: /petsc/src/dm/impls/plex/plextree.c (revision d6a7ad0de8988e07e136b130270bc3c04046c123)
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