20#ifndef LIBMESH_DEFAULT_COUPLING_H
21#define LIBMESH_DEFAULT_COUPLING_H
24#include "libmesh/ghosting_functor.h"
33class PeriodicBoundaries;
53#ifdef LIBMESH_ENABLE_PERIODIC
65#ifdef LIBMESH_ENABLE_PERIODIC
75 virtual std::unique_ptr<GhostingFunctor>
clone ()
const override
76 {
return std::make_unique<DefaultCoupling>(*
this); }
89#ifdef LIBMESH_ENABLE_PERIODIC
120 map_type & coupled_elements)
override;
125#ifdef LIBMESH_ENABLE_PERIODIC
This class defines a coupling matrix.
This class implements the default algebraic coupling in libMesh: elements couple to themselves,...
virtual std::unique_ptr< GhostingFunctor > clone() const override
A clone() is needed because GhostingFunctor can not be shared between different meshes.
virtual void mesh_reinit() override
If we have periodic boundaries, then we'll need the mesh to have an updated point locator whenever we...
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...
DefaultCoupling()
Constructor.
const PeriodicBoundaries * _periodic_bcs
void set_periodic_boundaries(const PeriodicBoundaries *periodic_bcs) override
virtual void delete_remote_elements() override
GhostingFunctor subclasses with relatively long-lasting caches may want to delete the no-longer-relev...
void set_dof_coupling(const CouplingMatrix *dof_coupling)
const CouplingMatrix * _dof_coupling
virtual void redistribute() override
GhostingFunctor subclasses with relatively long-lasting caches may want to redistribute those caches ...
DefaultCoupling(const DefaultCoupling &other)
Constructor.
void set_n_levels(unsigned int n_levels)
This abstract base class defines the interface by which library code and user code can report associa...
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?
We're using a class instead of a typedef to allow forward declarations and future flexibility.
The libMesh namespace provides an interface to certain functionality in the library.
uint8_t processor_id_type
The definition of the const_element_iterator struct.