libMesh
overlap_coupling.h
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2025 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_OVERLAP_COUPLING_H
21 #define LIBMESH_OVERLAP_COUPLING_H
22 
23 // Local Includes
24 #include "libmesh/ghosting_functor.h"
25 
26 #include "libmesh/fe_map.h"
27 #include "libmesh/quadrature.h"
28 
29 // C++ Includes
30 #include <memory>
31 
32 namespace libMesh
33 {
34 
35 // Forward declarations
36 class PeriodicBoundaries;
37 
38 
50 {
51 public:
52 
60 
64  OverlapCoupling(const OverlapCoupling & other);
65 
70  virtual std::unique_ptr<GhostingFunctor> clone () const override
71  { return std::make_unique<OverlapCoupling>(*this); }
72 
73  // Change coupling matrix after construction
74  void set_dof_coupling(const CouplingMatrix * dof_coupling)
75  { _dof_coupling = dof_coupling; }
76 
77  // Change quadrature rule after construction. This function takes
78  // ownership of the rule object and uses it for elements of the
79  // appropriate dimension.
80  void set_quadrature_rule(std::unique_ptr<QBase> new_q_rule);
81 
86  virtual void mesh_reinit () override;
87 
88  virtual void redistribute () override
89  { this->mesh_reinit(); }
90 
91  virtual void delete_remote_elements() override
92  { this->mesh_reinit(); }
93 
101  virtual void operator() (const MeshBase::const_element_iterator & range_begin,
102  const MeshBase::const_element_iterator & range_end,
104  map_type & coupled_elements) override;
105 
106 private:
107 
109 
110  // Quadrature rules for different element dimensions
111  std::array<std::unique_ptr<QBase>, 3> _q_rules;
112 
113  // FE Map from quadrature space to physical space
115 };
116 
117 } // namespace libMesh
118 
119 #endif // LIBMESH_OVERLAP_COUPLING_H
This abstract base class defines the interface by which library code and user code can report associa...
void set_dof_coupling(const CouplingMatrix *dof_coupling)
virtual std::unique_ptr< GhostingFunctor > clone() const override
A clone() is needed because GhostingFunctor can not be shared between different meshes.
The definition of the const_element_iterator struct.
Definition: mesh_base.h:2216
virtual void mesh_reinit() override
We need an updated point locator to see what other elements might share each quadrature point...
std::map< const Elem *, const CouplingMatrix *, CompareDofObjectsByPIDAndThenID > map_type
What elements do we care about and what variables do we care about on each element?
The libMesh namespace provides an interface to certain functionality in the library.
OverlapCoupling()
Constructor.
uint8_t processor_id_type
Definition: id_types.h:104
std::array< std::unique_ptr< QBase >, 3 > _q_rules
virtual void operator()(const MeshBase::const_element_iterator &range_begin, const MeshBase::const_element_iterator &range_end, processor_id_type p, map_type &coupled_elements) override
For the specified range of active elements, find the elements which will be coupled to them in the sp...
This class implements ghosting of elements that overlap or touch at at least one sampled point...
virtual void redistribute() override
GhostingFunctor subclasses with relatively long-lasting caches may want to redistribute those caches ...
const CouplingMatrix * _dof_coupling
void set_quadrature_rule(std::unique_ptr< QBase > new_q_rule)
virtual void delete_remote_elements() override
GhostingFunctor subclasses with relatively long-lasting caches may want to delete the no-longer-relev...
Class contained in FE that encapsulates mapping (i.e.
Definition: fe_map.h:47
This class defines a coupling matrix.