LCOV - code coverage report
Current view: top level - src/userobjects - NodalWaveSpeed.C (source / functions) Hit Total Coverage
Test: idaholab/moose contact: #32971 (54bef8) with base c6cf66 Lines: 35 37 94.6 %
Date: 2026-05-29 20:36:03 Functions: 7 8 87.5 %
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 "NodalWaveSpeed.h"
      11             : 
      12             : // MOOSE includes
      13             : #include "MooseVariable.h"
      14             : #include "SystemBase.h"
      15             : 
      16             : #include "libmesh/numeric_vector.h"
      17             : #include "libmesh/quadrature.h"
      18             : 
      19             : registerMooseObject("ContactApp", NodalWaveSpeed);
      20             : 
      21             : InputParameters
      22          87 : NodalWaveSpeed::validParams()
      23             : {
      24          87 :   InputParameters params = SideIntegralVariableUserObject::validParams();
      25          87 :   params.set<ExecFlagEnum>("execute_on") = EXEC_LINEAR;
      26          87 :   params.addClassDescription("Compute the tributary wave speeds for nodes on a surface");
      27          87 :   return params;
      28           0 : }
      29             : 
      30          46 : NodalWaveSpeed::NodalWaveSpeed(const InputParameters & parameters)
      31             :   : SideIntegralVariableUserObject(parameters),
      32          46 :     _phi(_variable->phiFace()),
      33          46 :     _system(_variable->sys()),
      34          46 :     _aux_solution(_system.solution()),
      35          92 :     _wave_speed(getMaterialProperty<Real>("wave_speed"))
      36             : {
      37          46 : }
      38             : 
      39          92 : NodalWaveSpeed::~NodalWaveSpeed() {}
      40             : 
      41             : void
      42         658 : NodalWaveSpeed::threadJoin(const UserObject & fred)
      43             : {
      44         658 :   const NodalWaveSpeed & na = dynamic_cast<const NodalWaveSpeed &>(fred);
      45             : 
      46             :   std::map<const Node *, Real>::const_iterator it = na._node_wave_speeds.begin();
      47             :   const std::map<const Node *, Real>::const_iterator it_end = na._node_wave_speeds.end();
      48         658 :   for (; it != it_end; ++it)
      49           0 :     _node_wave_speeds[it->first] += it->second;
      50         658 : }
      51             : 
      52             : void
      53        5318 : NodalWaveSpeed::initialize()
      54             : {
      55             :   _node_wave_speeds.clear();
      56        5318 : }
      57             : 
      58             : void
      59       28421 : NodalWaveSpeed::execute()
      60             : {
      61       28421 :   std::vector<Real> node_wave_speeds(_phi.size());
      62      142085 :   for (unsigned qp(0); qp < _qrule->n_points(); ++qp)
      63     1022896 :     for (unsigned j(0); j < _phi.size(); ++j)
      64      909232 :       node_wave_speeds[j] += (_phi[j][qp] * _wave_speed[qp]);
      65             : 
      66      255749 :   for (unsigned j(0); j < _phi.size(); ++j)
      67             :   {
      68      227328 :     const Real wave_speed = node_wave_speeds[j];
      69      227328 :     if (wave_speed != 0)
      70      113664 :       _node_wave_speeds[_current_elem->node_ptr(j)] = wave_speed;
      71             :   }
      72       28421 : }
      73             : 
      74             : void
      75        4660 : NodalWaveSpeed::finalize()
      76             : {
      77             :   const std::map<const Node *, Real>::iterator it_end = _node_wave_speeds.end();
      78       60615 :   for (std::map<const Node *, Real>::iterator it = _node_wave_speeds.begin(); it != it_end; ++it)
      79             :   {
      80       55955 :     const Node * const node = it->first;
      81       55955 :     dof_id_type dof = node->dof_number(_system.number(), _variable->number(), 0);
      82       55955 :     _aux_solution.set(dof, it->second);
      83             :   }
      84        4660 :   _aux_solution.close();
      85        4660 : }

Generated by: LCOV version 1.14