121 uint64_t m_firstDescMorton;
122 uint64_t m_lastDescMorton;
123 int8_t m_localMaxDepth;
124 uint8_t m_balanceCodim;
129 u32vector2D m_connectivity;
131 u32vector2D m_ghostsConnectivity;
153 void computeVirtualNeighOffsets(uint8_t level, uint8_t iface, uint8_t neighLevel, std::vector<std::array<int64_t, 3>> *neighOffsets)
const;
175 uint64_t getFirstDescMorton()
const;
176 uint64_t getLastDescMorton()
const;
177 uint32_t getNumGhosts()
const;
178 uint32_t getNumOctants()
const;
179 int8_t getLocalMaxDepth()
const;
180 int8_t getMarker(int32_t idx)
const;
181 uint8_t getLevel(int32_t idx)
const;
182 uint64_t getMorton(int32_t idx)
const;
183 uint64_t computeNodePersistentKey(int32_t idx, uint8_t inode)
const;
184 uint8_t getGhostLevel(int32_t idx)
const;
185 uint64_t computeGhostMorton(int32_t idx)
const;
186 uint64_t computeGhostNodePersistentKey(int32_t idx, uint8_t inode)
const;
187 bool getBalance(int32_t idx)
const;
188 uint8_t getBalanceCodim()
const;
189 void setMarker(int32_t idx, int8_t marker);
190 void setBalance(int32_t idx,
bool balance);
191 void setBalanceCodim(uint8_t b21codim);
192 void setFirstDescMorton();
193 void setLastDescMorton();
194 void setPeriodic(
bvector & periodic);
199 bool isPeriodic(
const Octant* oct, uint8_t iface)
const;
200 bool isEdgePeriodic(
const Octant* oct, uint8_t iedge)
const;
201 bool isNodePeriodic(
const Octant* oct, uint8_t inode)
const;
208 void initialize(uint8_t dim);
209 void reset(
bool createRoot);
211 Octant& extractOctant(uint32_t idx);
212 const Octant& extractOctant(uint32_t idx)
const;
213 Octant& extractGhostOctant(uint32_t idx);
214 const Octant& extractGhostOctant(uint32_t idx)
const;
221 void checkCoarse(uint64_t partLastDesc,
u32vector & mapidx);
222 void updateLocalMaxDepth();
224 void findNeighbours(
const Octant* oct, uint8_t iface,
u32vector & neighbours,
bvector & isghost,
bool onlyinternal,
bool append)
const;
225 void findEdgeNeighbours(
const Octant* oct, uint8_t iedge,
u32vector & neighbours,
bvector & isghost,
bool onlyinternal,
bool append)
const;
226 void findNodeNeighbours(
const Octant* oct, uint8_t inode,
u32vector & neighbours,
bvector & isghost,
bool onlyinternal,
bool append)
const;
228 void computeNeighSearchBegin(uint64_t sameSizeVirtualNeighMorton,
const octvector &octants, uint32_t *searchBeginIdx, uint64_t *searchBeginMorton)
const;
230 bool localBalance(
bool doNew,
bool checkInterior,
bool checkGhost);
232 bool fixBrokenFamiliesMarkers(std::vector<Octant *> *updatedOctants =
nullptr, std::vector<bool> *updatedGhostFlags =
nullptr);
234 void computeIntersections();
236 uint32_t findMorton(uint64_t targetMorton)
const;
237 uint32_t findGhostMorton(uint64_t targetMorton)
const;
238 uint32_t findMorton(uint64_t targetMorton,
const octvector &octants)
const;
239 void findMortonLowerBound(uint64_t targetMorton,
const octvector &octants, uint32_t *lowerBoundIdx, uint64_t *lowerBoundMorton)
const;
240 void findMortonUpperBound(uint64_t targetMorton,
const octvector &octants, uint32_t *upperBoundIdx, uint64_t *upperBoundMorton)
const;
242 void computeConnectivity();
243 void clearConnectivity(
bool release =
true);
244 void updateConnectivity();