LCOV - code coverage report
Current view: top level - src/relationshipmanagers - GhostHigherDLowerDPointNeighbors.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: #32971 (54bef8) with base c6cf66 Lines: 36 42 85.7 %
Date: 2026-05-29 20:35:17 Functions: 6 7 85.7 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //* This file is part of the MOOSE framework
       2             : //* https://mooseframework.inl.gov
       3             : //*
       4             : //* All rights reserved, see COPYRIGHT for full restrictions
       5             : //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
       6             : //*
       7             : //* Licensed under LGPL 2.1, please see LICENSE for details
       8             : //* https://www.gnu.org/licenses/lgpl-2.1.html
       9             : 
      10             : // App includes
      11             : #include "GhostHigherDLowerDPointNeighbors.h"
      12             : #include "Executioner.h"
      13             : #include "FEProblemBase.h"
      14             : #include "MooseApp.h"
      15             : #include "GhostLowerDElems.h"
      16             : 
      17             : // libMesh includes
      18             : #include "libmesh/elem.h"
      19             : #include "libmesh/mesh_base.h"
      20             : #include "libmesh/boundary_info.h"
      21             : 
      22             : registerMooseObject("MooseApp", GhostHigherDLowerDPointNeighbors);
      23             : 
      24             : using namespace libMesh;
      25             : 
      26             : InputParameters
      27       11251 : GhostHigherDLowerDPointNeighbors::validParams()
      28             : {
      29       11251 :   InputParameters params = RelationshipManager::validParams();
      30       11251 :   params.set<bool>("attach_geometric_early") = false;
      31       11251 :   return params;
      32           0 : }
      33             : 
      34        3666 : GhostHigherDLowerDPointNeighbors::GhostHigherDLowerDPointNeighbors(const InputParameters & params)
      35        3666 :   : RelationshipManager(params)
      36             : {
      37        3666 : }
      38             : 
      39         858 : GhostHigherDLowerDPointNeighbors::GhostHigherDLowerDPointNeighbors(
      40         858 :     const GhostHigherDLowerDPointNeighbors & other)
      41         858 :   : RelationshipManager(other)
      42             : {
      43         858 : }
      44             : 
      45             : std::string
      46           0 : GhostHigherDLowerDPointNeighbors::getInfo() const
      47             : {
      48           0 :   std::ostringstream oss;
      49           0 :   oss << "GhostHigherDLowerDPointNeighbors";
      50           0 :   return oss.str();
      51           0 : }
      52             : 
      53             : void
      54         248 : GhostHigherDLowerDPointNeighbors::operator()(const MeshBase::const_element_iterator & range_begin,
      55             :                                              const MeshBase::const_element_iterator & range_end,
      56             :                                              const processor_id_type p,
      57             :                                              map_type & coupled_elements)
      58             : {
      59             :   mooseAssert(_moose_mesh,
      60             :               "The MOOSE mesh must be non-null in order for this relationship manager to work.");
      61         248 :   const auto & node_to_elem_map = _moose_mesh->nodeToElemMap();
      62             : 
      63             :   static const CouplingMatrix * const null_mat = nullptr;
      64         248 :   const auto mesh_dim = _mesh->mesh_dimension();
      65         248 :   std::unordered_set<dof_id_type> visited_nodes;
      66             : 
      67       20334 :   for (const Elem * const elem : as_range(range_begin, range_end))
      68             :   {
      69       10043 :     if (elem->dim() != mesh_dim)
      70             :       // not a higher-dimensional element
      71        1419 :       continue;
      72             : 
      73       61745 :     for (const auto & node : elem->node_ref_range())
      74             :     {
      75             :       // We want to ghost the adjoining lower-d elements if the node hasn't been partitioned yet
      76             :       // (e.g. we don't know what processes it will be) or if its processor id matches our
      77             :       // processes's id
      78       53121 :       const auto node_pid = node.processor_id();
      79       53121 :       if (node_pid == p || node_pid == DofObject::invalid_processor_id)
      80             :       {
      81       50674 :         const auto [_, inserted] = visited_nodes.insert(node.id());
      82       50674 :         if (!inserted)
      83             :           // We've already considered this node
      84       36768 :           continue;
      85             : 
      86       13906 :         const auto & elem_node_neighbors = libmesh_map_find(node_to_elem_map, node.id());
      87       71751 :         for (const auto elem_id : elem_node_neighbors)
      88             :         {
      89       57845 :           const Elem * const elem_node_neighbor = _mesh->elem_ptr(elem_id);
      90       57845 :           if (elem_node_neighbor->dim() != mesh_dim && elem_node_neighbor->processor_id() != p)
      91         170 :             coupled_elements.emplace(elem_node_neighbor, null_mat);
      92             :         }
      93             :       }
      94             :     }
      95         248 :   }
      96         248 : }
      97             : 
      98             : bool
      99       17256 : GhostHigherDLowerDPointNeighbors::operator>=(const RelationshipManager & other) const
     100             : {
     101       31605 :   return dynamic_cast<const GhostHigherDLowerDPointNeighbors *>(&other) ||
     102       31605 :          dynamic_cast<const GhostLowerDElems *>(&other);
     103             : }
     104             : 
     105             : std::unique_ptr<GhostingFunctor>
     106         858 : GhostHigherDLowerDPointNeighbors::clone() const
     107             : {
     108         858 :   return _app.getFactory().copyConstruct(*this);
     109             : }

Generated by: LCOV version 1.14