Dendro  5.01
Dendro in Greek language means tree. The Dendro library is a large scale (262K cores on ORNL's Titan) distributed memory adaptive octree framework. The main goal of Dendro is to perform large scale multiphysics simulations efficeiently in mordern supercomputers. Dendro consists of efficient parallel data structures and algorithms to perform variational ( finite element) methods and finite difference mthods on 2:1 balanced arbitary adaptive octrees which enables the users to perform simulations raning from black holes (binary black hole mergers) to blood flow in human body, where applications ranging from relativity, astrophysics to biomedical engineering.
dendro.h
1 //
2 // Created by milinda on 2/8/16.
3 //
4 
5 #ifndef SFCSORTBENCH_DENDRO_H
6 #define SFCSORTBENCH_DENDRO_H
7 
8 #include <climits>
9 #include <complex>
10 
11 #define RED "\e[1;31m"
12 #define BLU "\e[2;34m"
13 #define GRN "\e[0;32m"
14 #define YLW "\e[0;33m"
15 #define MAG "\e[0;35m"
16 #define CYN "\e[0;36m"
17 #define NRM "\e[0m"
18 
19 
20 
21 #ifdef USE_64BIT_INDICES
22 #define DendroIntL long long
23 #define DendroIntLSpecifier %lld
24 #define DendroUIntLSpecifier %llu
25 #else
26 #define DendroIntL unsigned int
27 #define DendroIntLSpecifier %d
28 #define DendroUIntLSpecifier %u
29 #endif
30 
31 
32 #define DendroScalar double
33 #define DendroComplex std::complex<double>
34 
35 
36 
37 //#define DendroIntL unsigned int
38 typedef unsigned __int128 DendroUInt_128;
39 
40 
41 
42 
43 // mesh.h # defines.
44 #define LOOK_UP_TABLE_DEFAULT UINT_MAX
45 
46 
47 // TreeNode.h # defines.
48 
60 #define OCT_FOUND 32
61 #define OCT_KEY_NONE 64
62 #define OCT_KEY_SPLITTER 128
63 #define OCT_KEY_UP 256
64 #define OCT_KEY_DOWN 512
65 #define OCT_KEY_FRONT 1024
66 #define OCT_KEY_BACK 2048
67 #define OCT_KEY_LEFT 4096
68 #define OCT_KEY_RIGHT 8192
69 
77 #define OCT_DIR_LEFT 0
78 #define OCT_DIR_RIGHT 1
79 #define OCT_DIR_DOWN 2
80 #define OCT_DIR_UP 3
81 #define OCT_DIR_BACK 4
82 #define OCT_DIR_FRONT 5
83 
84 #define OCT_DIR_LEFT_DOWN 6
85 #define OCT_DIR_LEFT_UP 7
86 #define OCT_DIR_LEFT_BACK 8
87 #define OCT_DIR_LEFT_FRONT 9
88 
89 
90 #define OCT_DIR_RIGHT_DOWN 10
91 #define OCT_DIR_RIGHT_UP 11
92 #define OCT_DIR_RIGHT_BACK 12
93 #define OCT_DIR_RIGHT_FRONT 13
94 
95 #define OCT_DIR_DOWN_BACK 14
96 #define OCT_DIR_DOWN_FRONT 15
97 
98 
99 #define OCT_DIR_UP_BACK 16
100 #define OCT_DIR_UP_FRONT 17
101 
102 #define OCT_DIR_LEFT_DOWN_BACK 18
103 #define OCT_DIR_RIGHT_DOWN_BACK 19
104 #define OCT_DIR_LEFT_UP_BACK 20
105 #define OCT_DIR_RIGHT_UP_BACK 21
106 #define OCT_DIR_LEFT_DOWN_FRONT 22
107 #define OCT_DIR_RIGHT_DOWN_FRONT 23
108 #define OCT_DIR_LEFT_UP_FRONT 24
109 #define OCT_DIR_RIGHT_UP_FRONT 25
110 #define OCT_DIR_INTERNAL 26
111 
112 #define OCT_DIR_TOTAL 27
113 
114 
115 #define MAXDEAPTH_LEVEL_DIFF 1 // difference between maxdepth and the level when constructing and balancing octrees. Used to ensure higher order mesh generation get proper octants sizes divisible by m_uiElementOrder.
116 
117 
118 #define NUM_LEVEL_BITS 5u
119 
120 #ifdef DIM_2
121 #define m_uiDim 2
122 #else
123 #define m_uiDim 3
124 #endif
125 
126 #ifdef DIM_2
127 #define NUM_CHILDREN 4
128 #define NUM_FACES 1
129 #define NUM_EDGES 4
130 #define EDGE_OFFSET 4
131 #define VERTEX_OFFSET 4
132 #define ROTATION_OFFSET 8
133 #define MAX_HANGING_FACES 2
134 #define F2E_MAP_OFFSET 4
135 #else
136 #define NUM_CHILDREN 8
137 #define NUM_FACES 6
138 #define NUM_EDGES 12
139 #define EDGE_OFFSET 6
140 #define VERTEX_OFFSET 18
141 #define ROTATION_OFFSET 16
142 #define MAX_HANGING_FACES 4
143 #define F2E_MAP_OFFSET 6
144 #endif
145 
146 #define F2E_FACE_DIR_OFFSET 3
147 #define F2E_NUM_MAX_FACE_DIR 7
148 #define F2E_FACE_INDEPEN_BIT 3
149 #define F2E_FACE_DEPEN_BIT 4
150 
151 
152 // AMR coarsening factor.
153 #define DENDRO_AMR_COARSEN_FAC 0.1
154 
155 #define DENDRO_DEFAULT_LB_TOL 0.1
156 #define DENDRO_DEFAULT_SF_K 2
157 #define DENDRO_DEFAULT_GRAIN_SZ 100
158 
159 
160 #define DENDRO_UNSIGNED_INT_MIN UINT_MIN
161 #define DENDRO_UNSIGNED_INT_MAX UINT_MAX
162 
163 #define DENDRO_REMESH_UNZIP_SCALE_FAC 1.0
164 
165 
166 #define DENDRO_BLOCK_ALIGN_FACTOR 1
167 #define DENDRO_BLOCK_ALIGN_FACTOR_LOG 0
168 
169 
170 #define ODA_INDEPENDENT_FLAG_BIT 0
171 #define ODA_W_DEPENDENT_FLAG_BIT 1
172 #define ODA_W_BOUNDARY_FLAG_BIT 2
173 // used in face to element map.
174 #define ODA_FLAGS_TOTAL 3
175 
176 
177 #endif //SFCSORTBENCH_DENDRO_H