libMesh
Loading...
Searching...
No Matches
mesh_smoother_vsmoother.h
Go to the documentation of this file.
1// The libMesh Finite Element Library.
2// Copyright (C) 2002-2026 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
3
4// This library is free software; you can redistribute it and/or
5// modify it under the terms of the GNU Lesser General Public
6// License as published by the Free Software Foundation; either
7// version 2.1 of the License, or (at your option) any later version.
8
9// This library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12// Lesser General Public License for more details.
13
14// You should have received a copy of the GNU Lesser General Public
15// License along with this library; if not, write to the Free Software
16// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
18
19
20#ifndef LIBMESH_MESH_SMOOTHER_VSMOOTHER_H
21#define LIBMESH_MESH_SMOOTHER_VSMOOTHER_H
22
23#include "libmesh/libmesh_config.h"
24#if defined(LIBMESH_ENABLE_VSMOOTHER)
25
26// Local Includes
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"
31#include "petsc_diff_solver.h"
32#include "libmesh/distributed_mesh.h"
33#include "libmesh/equation_systems.h"
34
35// C++ Includes
36#include <cstddef>
37#include <vector>
38#include <map>
39#include <fstream>
40
41namespace libMesh
42{
43
44// Forward declarations
45class UnstructuredMesh;
46
76{
77public:
102 Real dilation_weight = 0.5,
103 const bool preserve_subdomain_boundaries = true,
104 const Real relative_residual_tolerance = TOLERANCE * TOLERANCE,
105 const Real absolute_residual_tolerance = TOLERANCE * TOLERANCE,
106 const unsigned int verbosity = 0);
107
111 virtual ~VariationalMeshSmoother() = default;
112
117 virtual void setup();
118
125 virtual void smooth() override;
126
130 const MeshQualityInfo & get_mesh_info() const;
131
132private:
133
137 const unsigned int _verbosity;
138
143
148
149 // These must be declared in reverse dependency order to avoid corrupting the
150 // heap during destruction
151
155 // independent of _equations_systems and _constraint
156 std::unique_ptr<DistributedMesh> _mesh_copy;
157
161 // uses _mesh_copy, owns the system
162 std::unique_ptr<EquationSystems> _equation_systems;
163
164
165 // Now it's safe to store non-owning pointers to the above
166
167 /*
168 * System used to smooth the mesh.
169 */
170 // Owned by _equation_systems
172
177 {
179 return _system;
180 }
181
185 // uses system, which is owned by _equations_systems
186 std::unique_ptr<VariationalSmootherConstraint> _constraint;
187
192
197
202};
203
204} // namespace libMesh
205
206#endif // defined(LIBMESH_ENABLE_VSMOOTHER)
207
208#endif // LIBMESH_MESH_SMOOTHER_VSMOOTHER_H
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.
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.
MeshBase & mesh
The libMesh namespace provides an interface to certain functionality in the library.
libmesh_assert(ctx)
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.