20#ifndef LIBMESH_MESH_SMOOTHER_VSMOOTHER_H
21#define LIBMESH_MESH_SMOOTHER_VSMOOTHER_H
23#include "libmesh/libmesh_config.h"
24#if defined(LIBMESH_ENABLE_VSMOOTHER)
27#include "libmesh/libmesh_common.h"
28#include "libmesh/mesh_smoother.h"
29#include "libmesh/variational_smoother_system.h"
30#include "libmesh/variational_smoother_constraint.h"
32#include "libmesh/distributed_mesh.h"
33#include "libmesh/equation_systems.h"
45class UnstructuredMesh;
102 Real dilation_weight = 0.5,
103 const bool preserve_subdomain_boundaries =
true,
106 const unsigned int verbosity = 0);
117 virtual void setup();
125 virtual void smooth()
override;
This class provides the necessary interface for mesh smoothing.
The UnstructuredMesh class is derived from the MeshBase class.
This is an implementation of Larisa Branets' smoothing algorithms.
virtual void smooth() override
Redefinition of the smooth function from the base class.
const Real _dilation_weight
Smoother control variables.
const unsigned int _verbosity
verbosity setting
virtual ~VariationalMeshSmoother()=default
Destructor.
std::unique_ptr< VariationalSmootherConstraint > _constraint
Constraints imposed on the smoothing process.
const MeshQualityInfo & get_mesh_info() const
Getter for the _system's _mesh_info attribute.
std::unique_ptr< EquationSystems > _equation_systems
EquationsSystems object associated with the smoother.
virtual void setup()
Setup method that creates equation systems, system, and constraints, to be called just prior to smoot...
Real _relative_residual_tolerance
Solver relative residual tolerance.
VariationalSmootherSystem * system() const
Getter for _system to protect against dangling pointers.
Real _absolute_residual_tolerance
Solver absolute residual tolerance.
VariationalSmootherSystem * _system
bool _setup_called
Attribute the keep track of whether the setup method has been called.
const bool _preserve_subdomain_boundaries
Whether subdomain boundaries are subject to change via smoothing.
std::unique_ptr< DistributedMesh > _mesh_copy
Mesh copy to avoid multiple EquationSystems.
The libMesh namespace provides an interface to certain functionality in the library.
static constexpr Real TOLERANCE
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Struct to hold smoother-relevant information about the mesh quality.