Line data Source code
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 : // 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 : 26 : namespace libMesh 27 : { 28 : 29 19514 : void SiblingCoupling::operator() 30 : (const MeshBase::const_element_iterator & range_begin, 31 : const MeshBase::const_element_iterator & range_end, 32 : processor_id_type p, 33 : map_type & coupled_elements) 34 : { 35 80 : LOG_SCOPE("operator()", "SiblingCoupling"); 36 : 37 40 : libmesh_assert(_mesh); 38 : 39 77501 : for (const auto & elem : as_range(range_begin, range_end)) 40 : { 41 269 : std::vector<const Elem *> active_siblings; 42 : 43 269 : libmesh_assert(_mesh->query_elem_ptr(elem->id()) == elem); 44 : 45 19526 : const Elem * parent = elem->parent(); 46 19526 : if (!parent) 47 5 : continue; 48 : 49 : #ifdef LIBMESH_ENABLE_AMR 50 19127 : parent->active_family_tree(active_siblings); 51 : #endif 52 : 53 111620 : for (const Elem * sibling : active_siblings) 54 92493 : if (sibling->processor_id() != p) 55 47725 : coupled_elements.emplace(sibling, _dof_coupling); 56 19434 : } 57 19514 : } 58 : 59 : 60 : } // namespace libMesh