libMesh
Loading...
Searching...
No Matches
sibling_coupling.C
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// Local Includes
21#include "libmesh/sibling_coupling.h"
22#include "libmesh/elem.h"
23#include "libmesh/remote_elem.h"
24#include "libmesh/libmesh_logging.h"
25
26namespace libMesh
27{
28
29void SiblingCoupling::operator()
30 (const MeshBase::const_element_iterator & range_begin,
31 const MeshBase::const_element_iterator & range_end,
33 map_type & coupled_elements)
34{
35 LOG_SCOPE("operator()", "SiblingCoupling");
36
37 libmesh_assert(_mesh);
38
39 for (const auto & elem : as_range(range_begin, range_end))
40 {
41 std::vector<const Elem *> active_siblings;
42
43 libmesh_assert(_mesh->query_elem_ptr(elem->id()) == elem);
44
45 const Elem * parent = elem->parent();
46 if (!parent)
47 continue;
48
49#ifdef LIBMESH_ENABLE_AMR
50 parent->active_family_tree(active_siblings);
51#endif
52
53 for (const Elem * sibling : active_siblings)
54 if (sibling->processor_id() != p)
55 coupled_elements.emplace(sibling, _dof_coupling);
56 }
57}
58
59
60} // namespace libMesh
This is the base class from which all geometric element types are derived.
Definition elem.h:96
const Elem * parent() const
Definition elem.h:3047
void active_family_tree(std::vector< const Elem * > &active_family, bool reset=true) const
Same as the family_tree() member, but only adds the active children.
Definition elem.C:2142
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.
SimpleRange< IndexType > as_range(const std::pair< IndexType, IndexType > &p)
Helper function that allows us to treat a homogenous pair as a range.
libmesh_assert(ctx)
uint8_t processor_id_type
Definition id_types.h:104
The definition of the const_element_iterator struct.
Definition mesh_base.h:2556