14 explicitTriangulation_{rhs.explicitTriangulation_},
15 implicitTriangulation_{rhs.implicitTriangulation_},
16 periodicImplicitTriangulation_{rhs.periodicImplicitTriangulation_},
17 compactTriangulation_{rhs.compactTriangulation_} {
47 abstractTriangulation_{
nullptr}, explicitTriangulation_{std::move(
48 rhs.explicitTriangulation_)},
49 implicitTriangulation_{std::move(rhs.implicitTriangulation_)},
50 periodicImplicitTriangulation_{
51 std::move(rhs.periodicImplicitTriangulation_)},
52 compactTriangulation_{std::move(rhs.compactTriangulation_)} {
55 hasPeriodicBoundaries_ = rhs.hasPeriodicBoundaries_;
57 switch(rhs.getType()) {
59 this->abstractTriangulation_ = &this->explicitTriangulation_;
62 this->abstractTriangulation_ = &this->compactTriangulation_;
65 this->abstractTriangulation_ = &this->implicitTriangulation_;
67 case Type::HYBRID_IMPLICIT:
68 this->abstractTriangulation_ = &this->implicitPreconditionsTriangulation_;
71 this->abstractTriangulation_ = &this->periodicImplicitTriangulation_;
73 case Type::HYBRID_PERIODIC:
74 this->abstractTriangulation_ = &this->periodicPreconditionsTriangulation_;
77 rhs.abstractTriangulation_ =
nullptr;
120 abstractTriangulation_ =
nullptr;
121 explicitTriangulation_ = std::move(rhs.explicitTriangulation_);
122 implicitTriangulation_ = std::move(rhs.implicitTriangulation_);
123 periodicImplicitTriangulation_
124 = std::move(rhs.periodicImplicitTriangulation_);
125 compactTriangulation_ = std::move(rhs.compactTriangulation_);
126 hasPeriodicBoundaries_ = rhs.hasPeriodicBoundaries_;
128 switch(rhs.getType()) {
130 this->abstractTriangulation_ = &this->explicitTriangulation_;
133 this->abstractTriangulation_ = &this->compactTriangulation_;
136 this->abstractTriangulation_ = &this->implicitTriangulation_;
138 case Type::HYBRID_IMPLICIT:
139 this->abstractTriangulation_
140 = &this->implicitPreconditionsTriangulation_;
143 this->abstractTriangulation_ = &this->periodicImplicitTriangulation_;
145 case Type::HYBRID_PERIODIC:
146 this->abstractTriangulation_
147 = &this->periodicPreconditionsTriangulation_;
159 const bool usePreconditions) {
171 && (usePeriodic || !usePreconditions)) {
174 && (!usePeriodic || !usePreconditions)) {
179 if(!usePeriodic && !usePreconditions) {
182 }
else if(!usePeriodic && usePreconditions) {
185 }
else if(usePeriodic && !usePreconditions) {
188 }
else if(usePeriodic && usePreconditions) {
198#ifndef TTK_IMPLICIT_PRECONDITIONS_THRESHOLD
199#define TTK_IMPLICIT_PRECONDITIONS_THRESHOLD 256 * 256 * 256
203 const uint64_t nVerts
207 const auto doPreconditioning = nVerts <= threshold;
209 if(!doPreconditioning) {
212 int prevDebugLevel{-1};
217 this->
printWrn(
"Large grid detected (> " + std::to_string(threshold)
219 this->
printWrn(
"Defaulting to the fully implicit triangulation");
220 if(prevDebugLevel != -1) {
224 return doPreconditioning;
#define TTK_IMPLICIT_PRECONDITIONS_THRESHOLD
AbstractTriangulation is an interface class that defines an interface for efficient traversal methods...
bool hasPeriodicBoundaries_
AbstractTriangulation & operator=(const AbstractTriangulation &)=default
std::array< SimplexId, 3 > gridDimensions_
int printWrn(const std::string &msg, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cerr) const
int preconditionVerticesAndCells()
int preconditionVerticesAndCells()
Triangulation is a class that provides time and memory efficient traversal methods on triangulations ...
ImplicitNoPreconditions implicitTriangulation_
CompactTriangulation compactTriangulation_
ExplicitTriangulation explicitTriangulation_
PeriodicNoPreconditions periodicImplicitTriangulation_
Triangulation::Type getType() const
~Triangulation() override
void switchGrid(const bool usePeriodic, const bool usePreconditions)
Switch regular grid triangulation type.
AbstractTriangulation * abstractTriangulation_
bool processImplicitStrategy(const STRATEGY strategy=STRATEGY::DEFAULT) const
Should we precondition the implicit/periodic triangulations?
PeriodicWithPreconditions periodicPreconditionsTriangulation_
ImplicitWithPreconditions implicitPreconditionsTriangulation_
Triangulation & operator=(const Triangulation &)