LCOV - code coverage report
Current view: top level - src/userobjects - NearestNodeNumberUO.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: #32971 (54bef8) with base c6cf66 Lines: 47 57 82.5 %
Date: 2026-05-29 20:35:17 Functions: 8 9 88.9 %
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             : #include "NearestNodeNumberUO.h"
      11             : #include <limits>
      12             : 
      13             : registerMooseObject("MooseApp", NearestNodeNumberUO);
      14             : 
      15             : InputParameters
      16        3285 : NearestNodeNumberUO::validParams()
      17             : {
      18        3285 :   InputParameters params = NodalUserObject::validParams();
      19       13140 :   params.addRequiredParam<Point>("point", "The point");
      20        3285 :   params.addClassDescription("Finds and outputs the nearest node number to a point");
      21        3285 :   return params;
      22           0 : }
      23             : 
      24         117 : NearestNodeNumberUO::NearestNodeNumberUO(const InputParameters & parameters)
      25             :   : NodalUserObject(parameters),
      26         234 :     _my_pid(processor_id()),
      27         234 :     _point(getParam<Point>("point")),
      28         117 :     _node_found(false),
      29         117 :     _min_distance(std::numeric_limits<Real>::max()),
      30         117 :     _closest_node(nullptr),
      31         117 :     _overall_best_id(0)
      32             : {
      33         117 : }
      34             : 
      35             : void
      36          12 : NearestNodeNumberUO::meshChanged()
      37             : {
      38          12 :   _node_found = false;
      39          12 :   _min_distance = std::numeric_limits<Real>::max();
      40          12 :   _min_distance = std::numeric_limits<Real>::max();
      41          12 :   _closest_node = nullptr;
      42          12 : }
      43             : 
      44             : void
      45         206 : NearestNodeNumberUO::initialize()
      46             : {
      47         206 :   if (!_node_found)
      48             :   {
      49         135 :     _min_distance = std::numeric_limits<Real>::max();
      50         135 :     _closest_node = nullptr;
      51             :   }
      52         206 : }
      53             : 
      54             : void
      55        9114 : NearestNodeNumberUO::execute()
      56             : {
      57        9114 :   if (_node_found)
      58        1854 :     return;
      59        7260 :   const Real dist = ((*_current_node) - _point).norm();
      60        7260 :   if (dist < _min_distance || (dist == _min_distance && _current_node->id() < _closest_node->id()))
      61             :   {
      62         324 :     _min_distance = dist;
      63         324 :     _closest_node = _current_node;
      64             :   }
      65             : }
      66             : 
      67             : void
      68         188 : NearestNodeNumberUO::finalize()
      69             : {
      70         188 :   Real overall_min_distance = _min_distance;
      71         188 :   gatherMin(overall_min_distance);
      72         376 :   _overall_best_id = (overall_min_distance == _min_distance)
      73         188 :                          ? _closest_node->id()
      74          48 :                          : std::numeric_limits<dof_id_type>::max();
      75         188 :   gatherMin(_overall_best_id);
      76         188 :   _node_found = true;
      77         188 : }
      78             : 
      79             : dof_id_type
      80          99 : NearestNodeNumberUO::getClosestNodeId() const
      81             : {
      82          99 :   return _overall_best_id;
      83             : }
      84             : 
      85             : const Node *
      86           0 : NearestNodeNumberUO::getClosestNode() const
      87             : {
      88           0 :   if (!_closest_node) // probably no evaluation has occurred
      89           0 :     return nullptr;
      90           0 :   if (_closest_node->id() == _overall_best_id && _closest_node->processor_id() == _my_pid)
      91           0 :     return _closest_node;
      92           0 :   return nullptr;
      93             : }
      94             : 
      95             : void
      96          18 : NearestNodeNumberUO::threadJoin(const UserObject & y)
      97             : {
      98          18 :   const auto & nnn = static_cast<const NearestNodeNumberUO &>(y);
      99          18 :   if (!nnn._closest_node)
     100           0 :     return;
     101          36 :   if (nnn._min_distance < _min_distance ||
     102          18 :       (nnn._min_distance == _min_distance && nnn._closest_node->id() < _closest_node->id()))
     103             :   {
     104           0 :     _min_distance = nnn._min_distance;
     105           0 :     _closest_node = nnn._closest_node;
     106             :   }
     107             : }

Generated by: LCOV version 1.14