15void DiscreteVectorField::initMemory(
22 std::vector<SimplexId> numberOfCells(numberOfDimensions);
23 for(
int i = 0; i < numberOfDimensions; ++i) {
29 (*vectors_)[2 * i].clear();
30 (*vectors_)[2 * i].resize(numberOfCells[i], -1);
31 (*vectors_)[2 * i + 1].clear();
32 (*vectors_)[2 * i + 1].resize(numberOfCells[i + 1], -1);
35 std::vector<std::vector<std::string>> rows{
36 {
"#Vertices", std::to_string(numberOfCells[0])},
37 {
"#Edges", std::to_string(numberOfCells[1])},
42 std::vector<std::string>{
"#Triangles", std::to_string(numberOfCells[2])});
47 std::vector<std::string>{
"#Tetras", std::to_string(numberOfCells[3])});
51 this->
printMsg(
"Initialized discrete vectors memory", 1.0,
52 tm.getElapsedTime(), this->threadNumber_);
55std::pair<size_t, SimplexId>
56 DiscreteVectorField::numUnpairedFaces(
const CellOutExt &c,
57 const outwardStarType &ls)
const {
60 return numUnpairedFacesTriangle(c, ls);
61 }
else if(c.
dim_ == 3) {
62 return numUnpairedFacesTetra(c, ls);
68std::pair<size_t, SimplexId> DiscreteVectorField::numUnpairedFacesTriangle(
69 const CellOutExt &c,
const outwardStarType &ls)
const {
71 std::pair<size_t, SimplexId> res{0, -1};
75 for(
size_t i = 0; i < 2; ++i) {
76 if(!ls[1][c.
faces_[i]].paired_) {
85std::pair<size_t, SimplexId>
86 DiscreteVectorField::numUnpairedFacesTetra(
const CellOutExt &c,
87 const outwardStarType &ls)
const {
89 std::pair<size_t, SimplexId> res{0, -1};
92 for(
const auto f : c.
faces_) {
93 if(!ls[2][f].paired_) {
105 if(cellDim > this->dimensionality_) {
108#ifndef TTK_ENABLE_KAMIKAZE
110 this->
printErr(
"Invalid cell ID given to isCellCritical");
143 const std::array<std::vector<SimplexId>, 4> &criticalCellsByDim,
144 const SimplexId *
const ascendingManifold,
145 const SimplexId *
const descendingManifold,
146 std::vector<SimplexId> &manifoldSize)
const {
148 const auto nCritPoints{
149 criticalCellsByDim[0].size() + criticalCellsByDim[1].size()
150 + criticalCellsByDim[2].size() + criticalCellsByDim[3].size()};
152 const auto dim{this->dimensionality_};
155 || (criticalCellsByDim[0].empty() && criticalCellsByDim[dim].empty())) {
160 manifoldSize.resize(nCritPoints, 0);
163 if(!criticalCellsByDim[0].empty()) {
166 if(descendingManifold[i] != -1 && descendingManifold[i] < nMin) {
167 manifoldSize[descendingManifold[i]]++;
172 if(!criticalCellsByDim[dim].empty()) {
174 const auto nFirstMaximum{nCritPoints - criticalCellsByDim[dim].size()};
176 =
static_cast<SimplexId>(criticalCellsByDim[dim].size());
179 if(ascendingManifold[i] != -1 && ascendingManifold[i] < nMax) {
180 manifoldSize[ascendingManifold[i] + nFirstMaximum]++;
189void DiscreteVectorField::setCellToGhost(
const int cellDim,
int getDimensionality() const
AbstractTriangulation is an interface class that defines an interface for efficient traversal methods...
int printErr(const std::string &msg, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cerr) const
bool isCellCritical(const int cellDim, const SimplexId cellId) const
int getNumberOfDimensions() const
std::array< std::vector< SimplexId >, 6 > * vectors_
SimplexId getNumberOfCells(const int dimension, const triangulationType &triangulation) const
int setManifoldSize(const std::array< std::vector< SimplexId >, 4 > &criticalCellsByDim, const SimplexId *const ascendingManifold, const SimplexId *const descendingManifold, std::vector< SimplexId > &manifoldSize) const
SimplexId numberOfVertices_
TTK base package defining the standard types.
int SimplexId
Identifier type for simplices of any dimension.
Extended Cell structure for processOutwardStars.
const std::array< uint8_t, 3 > faces_
printMsg(debug::output::BOLD+" | | | | | . \\ | | (__| | / __/| |_| / __/| (_) |"+debug::output::ENDCOLOR, debug::Priority::PERFORMANCE, debug::LineMode::NEW, stream)