libMesh
|
This is an implementation of Larisa Branets' smoothing algorithms. More...
#include <mesh_smoother_vsmoother.h>
Public Member Functions | |
VariationalMeshSmoother (UnstructuredMesh &mesh, Real dilation_weight=0.5, const bool preserve_subdomain_boundaries=true) | |
Simple constructor to use for smoothing purposes. More... | |
virtual | ~VariationalMeshSmoother ()=default |
Destructor. More... | |
virtual void | smooth () override |
Redefinition of the smooth function from the base class. More... | |
void | smooth (unsigned int n_iterations) |
The actual smoothing function, gets called whenever the user specifies an actual number of smoothing iterations. More... | |
Protected Attributes | |
UnstructuredMesh & | _mesh |
Private Attributes | |
const Real | _dilation_weight |
Smoother control variables. More... | |
const bool | _preserve_subdomain_boundaries |
Whether subdomain boundaries are subject to change via smoothing. More... | |
This is an implementation of Larisa Branets' smoothing algorithms.
The initial implementation was done by her, the adaptation to libmesh was completed by Derek Gaston. The code was heavily refactored into something more closely resembling C++ by John Peterson in 2014.
Here are the relevant publications: 1) L. Branets, G. Carey, "Extension of a mesh quality metric for elements with a curved boundary edge or surface", Journal of Computing and Information Science in Engineering, vol. 5(4), pp.302-308, 2005.
2) L. Branets, G. Carey, "A local cell quality metric and variational grid smoothing algorithm", Engineering with Computers, vol. 21, pp.19-28, 2005.
3) L. Branets, "A variational grid optimization algorithm based on a local cell quality metric", Ph.D. thesis, The University of Texas at Austin, 2005.
Definition at line 65 of file mesh_smoother_vsmoother.h.
libMesh::VariationalMeshSmoother::VariationalMeshSmoother | ( | UnstructuredMesh & | mesh, |
Real | dilation_weight = 0.5 , |
||
const bool | preserve_subdomain_boundaries = true |
||
) |
Simple constructor to use for smoothing purposes.
Definition at line 52 of file mesh_smoother_vsmoother.C.
|
virtualdefault |
Destructor.
|
inlineoverridevirtual |
Redefinition of the smooth function from the base class.
All this does is call the smooth function in this class which takes an int, using a default value of 1.
Implements libMesh::MeshSmoother.
Definition at line 87 of file mesh_smoother_vsmoother.h.
References smooth().
Referenced by main(), and smooth().
void libMesh::VariationalMeshSmoother::smooth | ( | unsigned int | n_iterations | ) |
The actual smoothing function, gets called whenever the user specifies an actual number of smoothing iterations.
Definition at line 61 of file mesh_smoother_vsmoother.C.
References _dilation_weight, libMesh::MeshSmoother::_mesh, _preserve_subdomain_boundaries, libMesh::EquationSystems::add_system(), libMesh::System::attach_constraint_object(), libMesh::ParallelObject::comm(), libMesh::MeshBase::elem_dimensions(), libMesh::VariationalSmootherSystem::get_dilation_weight(), libMesh::EquationSystems::init(), libMesh::make_range(), libMesh::MeshBase::mesh_dimension(), libMesh::MeshBase::node_ref(), libMesh::FEMSystem::solve(), libMesh::Parallel::sync_dofobject_data_by_id(), libMesh::DifferentiableSystem::time_solver, and libMesh::TOLERANCE.
|
private |
Smoother control variables.
Definition at line 102 of file mesh_smoother_vsmoother.h.
Referenced by smooth().
|
protectedinherited |
Definition at line 61 of file mesh_smoother.h.
Referenced by libMesh::LaplaceMeshSmoother::allgather_graph(), libMesh::LaplaceMeshSmoother::init(), libMesh::LaplaceMeshSmoother::smooth(), and smooth().
|
private |
Whether subdomain boundaries are subject to change via smoothing.
Definition at line 105 of file mesh_smoother_vsmoother.h.
Referenced by smooth().