LCOV - code coverage report
Current view: top level - src/userobjects - NearestNodeNumberUO.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 2bf808 Lines: 47 57 82.5 %
Date: 2025-07-17 01:28:37 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       14507 : NearestNodeNumberUO::validParams()
      17             : {
      18       14507 :   InputParameters params = NodalUserObject::validParams();
      19       14507 :   params.addRequiredParam<Point>("point", "The point");
      20       14507 :   params.addClassDescription("Finds and outputs the nearest node number to a point");
      21       14507 :   return params;
      22           0 : }
      23             : 
      24         126 : NearestNodeNumberUO::NearestNodeNumberUO(const InputParameters & parameters)
      25             :   : NodalUserObject(parameters),
      26         252 :     _my_pid(processor_id()),
      27         126 :     _point(getParam<Point>("point")),
      28         126 :     _node_found(false),
      29         126 :     _min_distance(std::numeric_limits<Real>::max()),
      30         126 :     _closest_node(nullptr),
      31         126 :     _overall_best_id(0)
      32             : {
      33         126 : }
      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         217 : NearestNodeNumberUO::initialize()
      46             : {
      47         217 :   if (!_node_found)
      48             :   {
      49         144 :     _min_distance = std::numeric_limits<Real>::max();
      50         144 :     _closest_node = nullptr;
      51             :   }
      52         217 : }
      53             : 
      54             : void
      55       10676 : NearestNodeNumberUO::execute()
      56             : {
      57       10676 :   if (_node_found)
      58        2138 :     return;
      59        8538 :   const Real dist = ((*_current_node) - _point).norm();
      60        8538 :   if (dist < _min_distance || (dist == _min_distance && _current_node->id() < _closest_node->id()))
      61             :   {
      62         351 :     _min_distance = dist;
      63         351 :     _closest_node = _current_node;
      64             :   }
      65             : }
      66             : 
      67             : void
      68         199 : NearestNodeNumberUO::finalize()
      69             : {
      70         199 :   Real overall_min_distance = _min_distance;
      71         199 :   gatherMin(overall_min_distance);
      72         398 :   _overall_best_id = (overall_min_distance == _min_distance)
      73         199 :                          ? _closest_node->id()
      74          48 :                          : std::numeric_limits<dof_id_type>::max();
      75         199 :   gatherMin(_overall_best_id);
      76         199 :   _node_found = true;
      77         199 : }
      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