| FEAT 3
    Finite Element Analysis Toolbox | 
Umbrella smoother class template. More...
#include <umbrella_smoother.hpp>
 
  
| Public Types | |
| typedef UmbrellaSmoother< MeshType_ > | BaseClass | 
| typedef BaseClass::CoordType | CoordType | 
| typedef MeshPart< MeshType > | MeshPartType | 
| typedef MeshType_ | MeshType | 
| typedef RootMeshNode< MeshType > | RootMeshNodeType | 
| typedef MeshType_::VertexSetType | VertexSetType | 
| Public Member Functions | |
| DistributedUmbrellaSmoother (const Dist::Comm &comm, RootMeshNodeType &root_mesh_node) | |
| Constructor.  More... | |
| void | compile () | 
| void | smooth (Index max_iter, CoordType tol, bool uniform=true) | 
| Smooths the mesh with an umbrella operator.  More... | |
| Static Public Attributes | |
| static constexpr int | facet_dim = MeshType::shape_dim - 1 | 
| static constexpr int | shape_dim = MeshType_::shape_dim | 
| static constexpr int | world_dim = MeshType::world_dim | 
| Protected Member Functions | |
| virtual void | _calc_boundary_facets () override | 
| determines for each facet whether it is a boundary facet or an inner facet  More... | |
| virtual void | _calc_boundary_vertices () | 
| determines for each vertex whether it is a boundary vertex or an inner vertex  More... | |
| void | _calc_max (CoordType &global_max) override | 
| calculates global maximum over all processes; is overridden in DistributedUmbrellaSmoother  More... | |
| void | _init_edge_multiplicity () | 
| Computes per-edge weights for distributed smoothing.  More... | |
| void | _synchronize (std::vector< Tiny::Vector< CoordType, world_dim > > &sum_neigh, std::vector< CoordType > °) override | 
| synchronizes the smoother over all processes; is overridden in DistributedUmbrellaSmoother  More... | |
| Protected Attributes | |
| std::vector< int > | _boundary_facets | 
| vector to store which facet is at the boundary  More... | |
| std::vector< int > | _boundary_vertices | 
| vector to store which vertex is at the boundary  More... | |
| const Dist::Comm & | _comm | 
| a reference to our communicator  More... | |
| std::vector< CoordType > | _edge_weights | 
| MeshType_ & | _mesh | 
| the mesh we want to smooth  More... | |
| RootMeshNodeType & | _root_mesh_node | 
| a reference to our root mesh node  More... | |
| VertexSetType & | _vtx | 
Umbrella smoother class template.
This class extends the functionality of the UmbrellaSmoother class by addition MPI-based synchronization to ensure that one obtains a consistently smoothed mesh in a distributed simulation. Note that this class needs to work with a RootMeshNode rather than a "naked" mesh object, because it requires the halos for synchronization, which are stored in the mesh node and not in the mesh object itself.
See the documentation of the base-class UmbrellaSmoother for more information
| MeshType_ | The type of the mesh that is to be smoothed, e.g. ConformalMesh | 
Definition at line 292 of file umbrella_smoother.hpp.
| typedef UmbrellaSmoother<MeshType_> FEAT::Geometry::DistributedUmbrellaSmoother< MeshType_ >::BaseClass | 
Definition at line 296 of file umbrella_smoother.hpp.
| typedef BaseClass::CoordType FEAT::Geometry::DistributedUmbrellaSmoother< MeshType_ >::CoordType | 
Definition at line 304 of file umbrella_smoother.hpp.
| typedef MeshPart<MeshType> FEAT::Geometry::DistributedUmbrellaSmoother< MeshType_ >::MeshPartType | 
Definition at line 298 of file umbrella_smoother.hpp.
| typedef MeshType_ FEAT::Geometry::DistributedUmbrellaSmoother< MeshType_ >::MeshType | 
Definition at line 297 of file umbrella_smoother.hpp.
| typedef RootMeshNode<MeshType> FEAT::Geometry::DistributedUmbrellaSmoother< MeshType_ >::RootMeshNodeType | 
Definition at line 299 of file umbrella_smoother.hpp.
| 
 | inherited | 
Definition at line 50 of file umbrella_smoother.hpp.
| 
 | inlineexplicit | 
Constructor.
| [in] | comm | A resident reference to the communicator that was used for partitioning. | 
| [in] | root_mesh_node | A resident reference to the root mesh node containing the mesh that is to be smoothed. | 
Definition at line 322 of file umbrella_smoother.hpp.
References FEAT::Geometry::DistributedUmbrellaSmoother< MeshType_ >::_init_edge_multiplicity().
| 
 | inlinevirtual | 
Definition at line 331 of file umbrella_smoother.hpp.
| 
 | inlineoverrideprotectedvirtual | 
determines for each facet whether it is a boundary facet or an inner facet
Reimplemented from FEAT::Geometry::UmbrellaSmoother< MeshType_ >.
Definition at line 337 of file umbrella_smoother.hpp.
References FEAT::Geometry::UmbrellaSmoother< MeshType_ >::_calc_boundary_facets(), FEAT::Geometry::DistributedUmbrellaSmoother< MeshType_ >::_root_mesh_node, FEAT::Geometry::RootMeshNode< RootMesh_ >::get_halo_map(), and FEAT::Geometry::TargetSet::get_num_entities().
| 
 | inlineprotectedvirtualinherited | 
determines for each vertex whether it is a boundary vertex or an inner vertex
Definition at line 237 of file umbrella_smoother.hpp.
References FEAT::Geometry::UmbrellaSmoother< MeshType_ >::_boundary_facets, FEAT::Geometry::UmbrellaSmoother< MeshType_ >::_boundary_vertices, FEAT::Geometry::UmbrellaSmoother< MeshType_ >::_calc_boundary_facets(), and FEAT::Geometry::UmbrellaSmoother< MeshType_ >::_mesh.
Referenced by FEAT::Geometry::UmbrellaSmoother< MeshType_ >::smooth().
| 
 | inlineoverrideprotectedvirtual | 
calculates global maximum over all processes; is overridden in DistributedUmbrellaSmoother
Reimplemented from FEAT::Geometry::UmbrellaSmoother< MeshType_ >.
Definition at line 533 of file umbrella_smoother.hpp.
References FEAT::Geometry::DistributedUmbrellaSmoother< MeshType_ >::_comm, FEAT::Dist::Comm::allreduce(), and FEAT::Dist::op_max.
| 
 | inlineprotected | 
Computes per-edge weights for distributed smoothing.
Counts how many partitions share each edge and sets the edge weight to 1/multiplicity.
Definition at line 361 of file umbrella_smoother.hpp.
References FEAT::Geometry::DistributedUmbrellaSmoother< MeshType_ >::_comm, FEAT::Geometry::DistributedUmbrellaSmoother< MeshType_ >::_root_mesh_node, FEAT::Geometry::RootMeshNode< RootMesh_ >::get_halo_map(), FEAT::Dist::Comm::rank(), and FEAT::Dist::Comm::size().
Referenced by FEAT::Geometry::DistributedUmbrellaSmoother< MeshType_ >::DistributedUmbrellaSmoother().
| 
 | inlineoverrideprotectedvirtual | 
synchronizes the smoother over all processes; is overridden in DistributedUmbrellaSmoother
Reimplemented from FEAT::Geometry::UmbrellaSmoother< MeshType_ >.
Definition at line 412 of file umbrella_smoother.hpp.
References FEAT::Geometry::DistributedUmbrellaSmoother< MeshType_ >::_comm, FEAT::Geometry::DistributedUmbrellaSmoother< MeshType_ >::_root_mesh_node, FEAT::Geometry::RootMeshNode< RootMesh_ >::get_halo_map(), FEAT::Dist::Comm::irecv(), FEAT::Dist::Comm::isend(), FEAT::Dist::RequestVector::push_back(), FEAT::Dist::Comm::rank(), FEAT::Dist::RequestVector::reserve(), FEAT::Dist::Comm::size(), FEAT::Dist::RequestVector::wait_all(), FEAT::Dist::RequestVector::wait_any(), and XASSERT.
| 
 | inlineinherited | 
Definition at line 88 of file umbrella_smoother.hpp.
| 
 | inlineinherited | 
Smooths the mesh with an umbrella operator.
Iteratively moves each inner vertex towards the (possibly weighted) average of its adjacent vertices (Jacobi update). The weights are either uniform or inversely proportional to the edge lengths (w_ij = 1 / |e_ij|).
| [in] | uniform | true for uniform operator and false for scale dependent operator | 
| [in] | max_iter | Maximum number of smoothing iterations | 
| [in] | tol | Iteration stops if the largest vertex displacement between two steps falls below this threshold | 
Definition at line 115 of file umbrella_smoother.hpp.
References FEAT::Geometry::UmbrellaSmoother< MeshType_ >::_boundary_vertices, FEAT::Geometry::UmbrellaSmoother< MeshType_ >::_calc_boundary_vertices(), FEAT::Geometry::UmbrellaSmoother< MeshType_ >::_calc_max(), FEAT::Geometry::UmbrellaSmoother< MeshType_ >::_mesh, FEAT::Geometry::UmbrellaSmoother< MeshType_ >::_synchronize(), FEAT::Math::maxi(), and FEAT::Math::sqrt().
| 
 | protectedinherited | 
vector to store which facet is at the boundary
Definition at line 60 of file umbrella_smoother.hpp.
Referenced by FEAT::Geometry::UmbrellaSmoother< MeshType_ >::_calc_boundary_facets(), and FEAT::Geometry::UmbrellaSmoother< MeshType_ >::_calc_boundary_vertices().
| 
 | protectedinherited | 
vector to store which vertex is at the boundary
Definition at line 58 of file umbrella_smoother.hpp.
Referenced by FEAT::Geometry::UmbrellaSmoother< MeshType_ >::_calc_boundary_vertices(), and FEAT::Geometry::UmbrellaSmoother< MeshType_ >::smooth().
| 
 | protected | 
a reference to our communicator
Definition at line 308 of file umbrella_smoother.hpp.
Referenced by FEAT::Geometry::DistributedUmbrellaSmoother< MeshType_ >::_calc_max(), FEAT::Geometry::DistributedUmbrellaSmoother< MeshType_ >::_init_edge_multiplicity(), and FEAT::Geometry::DistributedUmbrellaSmoother< MeshType_ >::_synchronize().
| 
 | protectedinherited | 
Definition at line 62 of file umbrella_smoother.hpp.
| 
 | protectedinherited | 
the mesh we want to smooth
Definition at line 56 of file umbrella_smoother.hpp.
Referenced by FEAT::Geometry::UmbrellaSmoother< MeshType_ >::_calc_boundary_facets(), FEAT::Geometry::UmbrellaSmoother< MeshType_ >::_calc_boundary_vertices(), and FEAT::Geometry::UmbrellaSmoother< MeshType_ >::smooth().
| 
 | protected | 
a reference to our root mesh node
Definition at line 310 of file umbrella_smoother.hpp.
Referenced by FEAT::Geometry::DistributedUmbrellaSmoother< MeshType_ >::_calc_boundary_facets(), FEAT::Geometry::DistributedUmbrellaSmoother< MeshType_ >::_init_edge_multiplicity(), and FEAT::Geometry::DistributedUmbrellaSmoother< MeshType_ >::_synchronize().
| 
 | protectedinherited | 
Definition at line 64 of file umbrella_smoother.hpp.
| 
 | staticconstexpr | 
Definition at line 302 of file umbrella_smoother.hpp.
| 
 | staticconstexprinherited | 
Definition at line 51 of file umbrella_smoother.hpp.
| 
 | staticconstexpr | 
Definition at line 301 of file umbrella_smoother.hpp.