libMesh
mesh_smoother_laplace.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_LAPLACE_H
21 #define LIBMESH_MESH_SMOOTHER_LAPLACE_H
22 
23 // C++ Includes
24 #include <vector>
25 
26 // Local Includes
27 #include "libmesh/libmesh.h"
28 #include "libmesh/mesh_smoother.h"
29 
30 namespace libMesh
31 {
32 
45 {
46 public:
53  const unsigned int n_iterations);
54 
55 #ifdef LIBMESH_ENABLE_DEPRECATED
56 
69  libmesh_deprecated();
70  }
71 #endif
72 
76  virtual ~LaplaceMeshSmoother() = default;
77 
82  virtual void smooth() override;
83 
84 #ifdef LIBMESH_ENABLE_DEPRECATED
85 
93  void smooth(unsigned int n_iterations);
94 #endif
95 
103  void init();
104 
109  void print_graph(std::ostream & out_stream = libMesh::out) const;
110 
111 private:
116  void allgather_graph();
117 
122 
126  std::vector<std::vector<dof_id_type>> _graph;
127 
131  unsigned int _n_iterations;
132 };
133 
134 
135 } // namespace libMesh
136 
137 #endif // LIBMESH_MESH_SMOOTHER_LAPLACE_H
std::vector< std::vector< dof_id_type > > _graph
Data structure for holding the L-graph.
bool _initialized
True if the L-graph has been created, false otherwise.
void print_graph(std::ostream &out_stream=libMesh::out) const
Mainly for debugging, this function will print out the connectivity graph which has been created...
MeshBase & mesh
void init()
Initialization for the Laplace smoothing routine is basically identical to building an "L-graph" whic...
The libMesh namespace provides an interface to certain functionality in the library.
virtual void smooth() override
Redefinition of the smooth function from the base class.
This class defines the data structures necessary for Laplace smoothing.
The UnstructuredMesh class is derived from the MeshBase class.
LaplaceMeshSmoother(UnstructuredMesh &mesh, const unsigned int n_iterations)
Constructor.
LaplaceMeshSmoother(UnstructuredMesh &mesh)
Constructor.
void allgather_graph()
This function allgather&#39;s the (local) graph after it is computed on each processor by the init() func...
OStreamProxy out
unsigned int _n_iterations
Number of smoothing iterations to perform.
This class provides the necessary interface for mesh smoothing.
Definition: mesh_smoother.h:38
virtual ~LaplaceMeshSmoother()=default
Destructor.