libMesh
mesh_smoother_laplace.h
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2024 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:
51  explicit
53 
57  virtual ~LaplaceMeshSmoother() = default;
58 
65  virtual void smooth() override { this->smooth(1); }
66 
72  void smooth(unsigned int n_iterations);
73 
81  void init();
82 
87  void print_graph(std::ostream & out_stream = libMesh::out) const;
88 
89 private:
94  void allgather_graph();
95 
100 
104  std::vector<std::vector<dof_id_type>> _graph;
105 };
106 
107 
108 } // namespace libMesh
109 
110 #endif // LIBMESH_MESH_SMOOTHER_LAPLACE_H
std::vector< std::vector< dof_id_type > > _graph
Data structure for holding the L-graph.
virtual void smooth() override
Redefinition of the smooth function from the base class.
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.
This class defines the data structures necessary for Laplace smoothing.
The UnstructuredMesh class is derived from the MeshBase class.
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
This class provides the necessary interface for mesh smoothing.
Definition: mesh_smoother.h:38
virtual ~LaplaceMeshSmoother()=default
Destructor.