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
144
145private:
146
150 const unsigned int _verbosity;
151
156
161
162 // These must be declared in reverse dependency order to avoid corrupting the
163 // heap during destruction
164
168 // independent of _equations_systems and _constraint
169 std::unique_ptr<DistributedMesh> _mesh_copy;
170
174 // uses _mesh_copy, owns the system
175 std::unique_ptr<EquationSystems> _equation_systems;
176
177
178 // Now it's safe to store non-owning pointers to the above
179
180 /*
181 * System used to smooth the mesh.
182 */
183 // Owned by _equation_systems
185
190 {
192 return _system;
193 }
194
198 // uses system, which is owned by _equations_systems
199 std::unique_ptr<VariationalSmootherConstraint> _constraint;
200
205
210
215
221};
222
223} // namespace libMesh
224
225#endif // defined(LIBMESH_ENABLE_VSMOOTHER)
226
227#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.
void set_quadrature_type(QuadratureType qt)
Set the quadrature rule type used by the underlying VariationalSmootherSystem to integrate the distor...
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.
QuadratureType _quadrature_type
Quadrature rule type used to integrate the distortion-dilation metric.
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)
QuadratureType
Defines an enum for currently available quadrature rules.
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.