44 return std::tie(this->
dim_, this->
id_)
45 == std::tie(other.
dim_, other.
id_);
67 const std::array<SimplexId, 3> &lowVerts,
68 const std::array<uint8_t, 3> &faces)
78 const std::array<uint8_t, 3>
faces_{};
94 hasMPISupport_ =
true;
102 template <
typename triangulationType>
104 bool bypassCache =
false);
115 const size_t mTime) {
123 if(data !=
nullptr) {
137 }
else if(dim == 3) {
189 template <
typename triangulationType>
191 const triangulationType &triangulation)
const;
196 template <
typename triangulationType>
198 const triangulationType &triangulation)
const;
211 template <
typename triangulationType>
213 const triangulationType &triangulation,
214 bool isReverse =
false)
const;
219 template <
typename triangulationType>
221 std::vector<Cell> &vpath,
222 const triangulationType &triangulation,
223 const bool enableCycleDetector =
false)
const;
228 template <
typename triangulationType>
230 std::vector<Cell> &vpath,
231 const triangulationType &triangulation)
const;
237 template <
typename triangulationType>
240 const std::vector<bool> &isVisited,
241 std::vector<Cell> *
const vpath,
242 const triangulationType &triangulation,
243 const bool stopIfMultiConnected =
false,
244 const bool enableCycleDetector
251 template <
typename triangulationType>
254 const std::vector<bool> &isVisited,
255 std::vector<Cell> *
const vpath,
256 const triangulationType &triangulation,
257 const bool stopIfMultiConnected =
false,
258 const bool enableCycleDetector =
false,
259 bool *
const cycleFound =
nullptr)
const;
265 template <
typename triangulationType>
267 const triangulationType &triangulation)
const;
272 template <
typename triangulationType>
275 const triangulationType &triangulation,
276 std::vector<Cell> *
const wall =
nullptr,
277 std::vector<SimplexId> *
const saddles
283 template <
typename triangulationType>
286 const triangulationType &triangulation,
287 std::vector<Cell> *
const wall =
nullptr,
288 std::vector<SimplexId> *
const saddles
295 template <
typename triangulationType>
298 const triangulationType &triangulation)
const;
304 template <
typename triangulationType>
307 const triangulationType &triangulation)
const;
317 template <
typename triangulationType>
319 const std::array<std::vector<SimplexId>, 4> &criticalCellsByDim,
320 std::vector<std::array<float, 3>> &points,
321 std::vector<char> &cellDimensions,
322 std::vector<SimplexId> &cellIds,
323 std::vector<char> &isOnBoundary,
324 std::vector<SimplexId> &PLVertexIdentifiers,
325 const triangulationType &triangulation)
const;
331 template <
typename triangulationType>
333 std::vector<char> &cellDimensions,
334 std::vector<SimplexId> &cellIds,
335 std::vector<char> &isOnBoundary,
336 std::vector<SimplexId> &PLVertexIdentifiers,
337 const triangulationType &triangulation)
const;
342 template <
typename triangulationType>
344 std::array<std::vector<SimplexId>, 4> &criticalCellsByDim,
345 const triangulationType &triangulation)
const;
351 void setCellToGhost(
const int cellDim,
const SimplexId cellId);
358 const std::array<std::vector<SimplexId>, 4> &criticalCellsByDim,
359 const SimplexId *
const ascendingManifold,
360 const SimplexId *
const descendingManifold,
361 std::vector<SimplexId> &manifoldSize)
const;
366 template <
typename triangulationType>
368 std::vector<char> &points_pairOrigins,
369 std::vector<char> &cells_pairTypes,
370 std::vector<SimplexId> &cellsIds,
371 std::vector<char> &cellsDimensions,
372 const triangulationType &triangulation)
const;
378 using lowerStarType = std::array<std::vector<CellExt>, 4>;
389 template <
typename triangulationType>
390 inline void lowerStar(lowerStarType &ls,
393 const triangulationType &triangulation)
const;
404 std::pair<size_t, SimplexId>
405 numUnpairedFaces(
const CellExt &c,
const lowerStarType &ls)
const;
406 std::pair<size_t, SimplexId>
407 numUnpairedFacesTriangle(
const CellExt &c,
408 const lowerStarType &ls)
const;
409 std::pair<size_t, SimplexId>
410 numUnpairedFacesTetra(
const CellExt &c,
const lowerStarType &ls)
const;
416 CriticalType criticalTypeFromCellDimension(
const int dim)
const;
424 template <
typename triangulationType>
425 inline void pairCells(
CellExt &alpha,
427 const triangulationType &triangulation);
435 template <
typename triangulationType>
436 int processLowerStars(
const SimplexId *
const offsets,
437 const triangulationType &triangulation);
448 template <
typename dataType,
typename triangulationType>
451 const dataType *
const scalars,
452 const triangulationType &triangulation)
const;
481 template <
typename triangulationType>
483 const triangulationType &triangulation)
const;
488 template <
typename triangulationType>
490 const triangulationType &triangulation)
const;
495 template <
typename triangulationType>
497 const triangulationType &triangulation,
498 bool cancelReversal =
false)
const;
503 template <
typename triangulationType>
505 const std::vector<Cell> &vpath,
506 const triangulationType &triangulation)
const;
AbstractTriangulation is an interface class that defines an interface for efficient traversal methods...
virtual int preconditionEdgeStars()
std::pair< const void *, size_t > gradientKeyType
Key type for gradientCacheType.
virtual int preconditionBoundaryEdges()
virtual int preconditionCellTriangles()
virtual int preconditionVertexStars()
virtual int preconditionVertexEdges()
virtual int preconditionBoundaryVertices()
virtual int preconditionVertexNeighbors()
virtual int preconditionEdgeTriangles()
virtual int preconditionTriangleStars()
virtual int preconditionTriangleEdges()
virtual int preconditionEdges()
virtual int getDimensionality() const
virtual int preconditionVertexTriangles()
gradientCacheType gradientCache_
virtual int preconditionTriangles()
virtual int preconditionBoundaryTriangles()
std::array< std::vector< gradIdType >, 6 > gradientType
Discrete gradient internal struct.
virtual int preconditionCellEdges()
Minimalist debugging class.
void setDebugMsgPrefix(const std::string &prefix)
TTK discreteGradient processing package.
SimplexId getCellLowerVertex(const Cell c, const triangulationType &triangulation) const
int reverseAscendingPath(const std::vector< Cell > &vpath, const triangulationType &triangulation) const
bool isMinimum(const Cell &cell) const
void setInputOffsets(const SimplexId *const data)
int reverseDescendingPath(const std::vector< Cell > &vpath, const triangulationType &triangulation) const
int setGradientGlyphs(std::vector< std::array< float, 3 > > &points, std::vector< char > &points_pairOrigins, std::vector< char > &cells_pairTypes, std::vector< SimplexId > &cellsIds, std::vector< char > &cellsDimensions, const triangulationType &triangulation) const
int reverseAscendingPathOnWall(const std::vector< Cell > &vpath, const triangulationType &triangulation, bool cancelReversal=false) const
bool getDescendingPathThroughWall(const Cell &saddle2, const Cell &saddle1, const std::vector< bool > &isVisited, std::vector< Cell > *const vpath, const triangulationType &triangulation, const bool stopIfMultiConnected=false, const bool enableCycleDetector=false) const
bool isSaddle1(const Cell &cell) const
bool isMaximum(const Cell &cell) const
bool isSaddle2(const Cell &cell) const
AbstractTriangulation::gradientKeyType inputScalarField_
int setManifoldSize(const std::array< std::vector< SimplexId >, 4 > &criticalCellsByDim, const SimplexId *const ascendingManifold, const SimplexId *const descendingManifold, std::vector< SimplexId > &manifoldSize) const
void setInputScalarField(const void *const data, const size_t mTime)
SimplexId getNumberOfCells(const int dimension, const triangulationType &triangulation) const
void setLocalGradient()
Use local storage instead of cache.
SimplexId numberOfVertices_
bool isBoundary(const Cell &cell, const triangulationType &triangulation) const
bool isCellCritical(const int cellDim, const SimplexId cellId) const
SimplexId getPairedCell(const Cell &cell, const triangulationType &triangulation, bool isReverse=false) const
int getAscendingWall(const Cell &cell, VisitedMask &mask, const triangulationType &triangulation, std::vector< Cell > *const wall=nullptr, std::vector< SimplexId > *const saddles=nullptr) const
int reverseDescendingPathOnWall(const std::vector< Cell > &vpath, const triangulationType &triangulation) const
SimplexId getCellGreaterVertex(const Cell c, const triangulationType &triangulation) const
int getCriticalPoints(std::array< std::vector< SimplexId >, 4 > &criticalCellsByDim, const triangulationType &triangulation) const
static void clearCache(const AbstractTriangulation &triangulation)
bool getAscendingPathThroughWall(const Cell &saddle1, const Cell &saddle2, const std::vector< bool > &isVisited, std::vector< Cell > *const vpath, const triangulationType &triangulation, const bool stopIfMultiConnected=false, const bool enableCycleDetector=false, bool *const cycleFound=nullptr) const
void preconditionTriangulation(AbstractTriangulation *const data)
dataType getPersistence(const Cell &up, const Cell &down, const dataType *const scalars, const triangulationType &triangulation) const
int buildGradient(const triangulationType &triangulation, bool bypassCache=false)
int setCriticalPoints(const std::array< std::vector< SimplexId >, 4 > &criticalCellsByDim, std::vector< std::array< float, 3 > > &points, std::vector< char > &cellDimensions, std::vector< SimplexId > &cellIds, std::vector< char > &isOnBoundary, std::vector< SimplexId > &PLVertexIdentifiers, const triangulationType &triangulation) const
int getDimensionality() const
int getDescendingPath(const Cell &cell, std::vector< Cell > &vpath, const triangulationType &triangulation) const
bool detectGradientCycle(const Cell &cell, const triangulationType &triangulation) const
int getAscendingPath(const Cell &cell, std::vector< Cell > &vpath, const triangulationType &triangulation, const bool enableCycleDetector=false) const
AbstractTriangulation::gradientType localGradient_
int getNumberOfDimensions() const
int getDescendingWall(const Cell &cell, VisitedMask &mask, const triangulationType &triangulation, std::vector< Cell > *const wall=nullptr, std::vector< SimplexId > *const saddles=nullptr) const
AbstractTriangulation::gradientType * gradient_
const SimplexId * inputOffsets_
std::string to_string(__int128)
CriticalType
default value for critical index
int SimplexId
Identifier type for simplices of any dimension.
Auto-cleaning re-usable graph propagations data structure.
Extended Cell structure for processLowerStars.
CellExt(const int dim, const SimplexId id, const std::array< SimplexId, 3 > &lowVerts, const std::array< uint8_t, 3 > &faces)
CellExt(const int dim, const SimplexId id)
const std::array< SimplexId, 3 > lowVerts_
const std::array< uint8_t, 3 > faces_
std::string to_string() const
bool operator==(const Cell &other) const
Cell(const int dim, const SimplexId id)