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