76 triangulation->preconditionExchangeGhostVertices();
82 template <
class dataType,
class triangulationType = AbstractTriangulation>
83 int smooth(
const triangulationType *triangulation,
84 const int &numberOfIterations)
const;
95template <
class dataType,
class triangulationType>
97 const int &numberOfIterations)
const {
101#ifndef TTK_ENABLE_KAMIKAZE
112 SimplexId vertexNumber = triangulation->getNumberOfVertices();
119 for(
SimplexId i = 0; i < vertexNumber; i++) {
126 printMsg(
"Smoothing " + std::to_string(vertexNumber) +
" vertices", 0, 0,
129 int timeBuckets = 10;
130 if(numberOfIterations < timeBuckets)
131 timeBuckets = numberOfIterations;
133 for(
int it = 0; it < numberOfIterations; it++) {
134#ifdef TTK_ENABLE_OPENMP
135#pragma omp parallel for num_threads(threadNumber_)
137 for(
SimplexId i = 0; i < vertexNumber; i++) {
145 tmpData[curr] = outputData[curr];
147 const auto neighborNumber = triangulation->getVertexNeighborNumber(i);
148 for(
SimplexId k = 0; k < neighborNumber; k++) {
150 triangulation->getVertexNeighbor(i, k, neighborId);
153 tmpData[curr] /=
static_cast<double>(neighborNumber + 1);
157 if(numberOfIterations) {
159 for(
SimplexId i = 0; i < vertexNumber; i++) {
170 if(ttk::isRunningWithMPI()) {
173 exchangeGhostVertices<dataType, triangulationType>(
179 if(!(it % ((numberOfIterations) / timeBuckets))) {
180 printMsg(
"Smoothing " + std::to_string(vertexNumber) +
" vertices",
187 printMsg(
"Smoothed " + std::to_string(vertexNumber) +
" vertices", 1,
AbstractTriangulation is an interface class that defines an interface for efficient traversal methods...
virtual int preconditionVertexNeighbors()
Minimalist debugging class.
int printMsg(const std::string &msg, const debug::Priority &priority=debug::Priority::INFO, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cout) const
TTK processing package for scalar field smoothing.
void setMaskDataPointer(const char *const mask)
int preconditionTriangulation(AbstractTriangulation *triangulation)
void setDimensionNumber(const int &dimensionNumber)
void setOutputDataPointer(void *data)
~ScalarFieldSmoother() override
int smooth(const triangulationType *triangulation, const int &numberOfIterations) const
void setInputDataPointer(void *data)
int SimplexId
Identifier type for simplices of any dimension.