LCOV - code coverage report
Current view: top level - src/components - ShaftConnectedPump1Phase.C (source / functions) Hit Total Coverage
Test: idaholab/moose thermal_hydraulics: #32971 (54bef8) with base c6cf66 Lines: 135 136 99.3 %
Date: 2026-05-29 20:41:18 Functions: 6 6 100.0 %
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 "ShaftConnectedPump1Phase.h"
      11             : #include "FlowModelSinglePhase.h"
      12             : #include "Numerics.h"
      13             : #include "Shaft.h"
      14             : #include "MooseVariableScalar.h"
      15             : #include "Assembly.h"
      16             : #include "ScalarKernel.h"
      17             : 
      18             : registerMooseObject("ThermalHydraulicsApp", ShaftConnectedPump1Phase);
      19             : 
      20             : InputParameters
      21          44 : ShaftConnectedPump1Phase::validParams()
      22             : {
      23          44 :   InputParameters params = VolumeJunction1Phase::validParams();
      24          44 :   params += ShaftConnectable::validParams();
      25          44 :   params.makeParamRequired<Real>("A_ref");
      26          88 :   params.addRequiredParam<BoundaryName>("inlet", "Pump inlet");
      27          88 :   params.addRequiredParam<BoundaryName>("outlet", "Pump outlet");
      28          44 :   params.set<std::vector<BoundaryName>>("connections") = {};
      29          44 :   params.suppressParameter<std::vector<BoundaryName>>("connections");
      30          88 :   params.addRequiredParam<Real>("omega_rated", "Rated pump speed [rad/s]");
      31          88 :   params.addRequiredParam<Real>("volumetric_rated", "Rated pump volumetric flow rate [m^3/s]");
      32          88 :   params.addRequiredParam<Real>("head_rated", "Rated pump head [m]");
      33          88 :   params.addRequiredParam<Real>("torque_rated", "Rated pump torque [N-m]");
      34          88 :   params.addRequiredParam<Real>("density_rated", "Rated pump fluid density [kg/m^3]");
      35          88 :   params.addRequiredParam<Real>("speed_cr_fr", "Pump speed threshold for friction [-]");
      36          88 :   params.addRequiredParam<Real>("tau_fr_const", "Pump friction constant [N-m]");
      37          88 :   params.addRequiredParam<std::vector<Real>>("tau_fr_coeff", "Pump friction coefficients [N-m]");
      38          88 :   params.addRequiredParam<Real>("speed_cr_I", "Pump speed threshold for inertia [-]");
      39          88 :   params.addRequiredParam<Real>("inertia_const", "Pump inertia constant [kg-m^2]");
      40          88 :   params.addRequiredParam<std::vector<Real>>("inertia_coeff", "Pump inertia coefficients [kg-m^2]");
      41          88 :   params.addRequiredParam<FunctionName>("head", "Function to compute data for pump head [-]");
      42          88 :   params.addRequiredParam<FunctionName>("torque_hydraulic",
      43             :                                         "Function to compute data for pump torque [-]");
      44          88 :   params.addParam<Real>(
      45             :       "transition_width",
      46          88 :       1e-3,
      47             :       "Transition width for sign of the frictional torque at 0 speed over rated speed ratio.");
      48             : 
      49          44 :   params.addClassDescription("1-phase pump that must be connected to a Shaft component. Pump speed "
      50             :                              "is controlled by the connected shaft; Hydraulic torque and head are "
      51             :                              "computed by user input functions of inlet flow rate and shaft speed");
      52             : 
      53          44 :   return params;
      54           0 : }
      55             : 
      56          22 : ShaftConnectedPump1Phase::ShaftConnectedPump1Phase(const InputParameters & parameters)
      57             :   : VolumeJunction1Phase(parameters),
      58             :     ShaftConnectable(this),
      59          22 :     _inlet(getParam<BoundaryName>("inlet")),
      60          44 :     _outlet(getParam<BoundaryName>("outlet")),
      61          44 :     _omega_rated(getParam<Real>("omega_rated")),
      62          44 :     _volumetric_rated(getParam<Real>("volumetric_rated")),
      63          44 :     _head_rated(getParam<Real>("head_rated")),
      64          44 :     _torque_rated(getParam<Real>("torque_rated")),
      65          44 :     _density_rated(getParam<Real>("density_rated")),
      66          44 :     _speed_cr_fr(getParam<Real>("speed_cr_fr")),
      67          44 :     _tau_fr_const(getParam<Real>("tau_fr_const")),
      68          44 :     _tau_fr_coeff(getParam<std::vector<Real>>("tau_fr_coeff")),
      69          44 :     _speed_cr_I(getParam<Real>("speed_cr_I")),
      70          44 :     _inertia_const(getParam<Real>("inertia_const")),
      71          44 :     _inertia_coeff(getParam<std::vector<Real>>("inertia_coeff")),
      72          44 :     _head(getParam<FunctionName>("head")),
      73          44 :     _torque_hydraulic(getParam<FunctionName>("torque_hydraulic")),
      74          22 :     _head_var_name(junctionVariableName("head")),
      75          22 :     _hydraulic_torque_var_name(junctionVariableName("hydraulic_torque")),
      76          22 :     _friction_torque_var_name(junctionVariableName("friction_torque")),
      77          22 :     _moi_var_name(junctionVariableName("moment_of_inertia")),
      78          66 :     _transition_width(getParam<Real>("transition_width"))
      79             : {
      80             :   // this determines connection ordering
      81          22 :   addConnection(_inlet);
      82          22 :   addConnection(_outlet);
      83             : 
      84          22 :   checkSizeEqualsValue<Real>("tau_fr_coeff", 4);
      85          22 :   checkSizeEqualsValue<Real>("inertia_coeff", 4);
      86          22 : }
      87             : 
      88             : void
      89          20 : ShaftConnectedPump1Phase::check() const
      90             : {
      91          20 :   VolumeJunction1Phase::check();
      92          20 :   checkShaftConnection(this);
      93          20 : }
      94             : 
      95             : void
      96          20 : ShaftConnectedPump1Phase::buildVolumeJunctionUserObject()
      97             : {
      98          20 :   const Component & c = getComponentByName<Component>(_shaft_name);
      99          20 :   const Shaft & scc = dynamic_cast<const Shaft &>(c);
     100          20 :   const VariableName omega_var_name = scc.getOmegaVariableName();
     101             : 
     102          20 :   ExecFlagEnum execute_on(MooseUtils::getDefaultExecFlagEnum());
     103          80 :   execute_on = {EXEC_INITIAL, EXEC_LINEAR, EXEC_NONLINEAR};
     104             : 
     105             :   {
     106          20 :     const std::string class_name = "ADShaftConnectedPump1PhaseUserObject";
     107          20 :     InputParameters params = _factory.getValidParams(class_name);
     108          20 :     params.set<bool>("use_scalar_variables") = false;
     109          20 :     params.set<subdomain_id_type>("junction_subdomain_id") = _junction_subdomain_id;
     110          20 :     params.set<std::vector<BoundaryName>>("boundary") = _boundary_names;
     111          40 :     params.set<std::vector<Real>>("normals") = _normals;
     112          20 :     params.set<std::vector<processor_id_type>>("processor_ids") = getConnectedProcessorIDs();
     113          20 :     params.set<std::vector<UserObjectName>>("numerical_flux_names") = _numerical_flux_names;
     114          20 :     params.set<Real>("volume") = _volume;
     115          60 :     params.set<std::vector<VariableName>>("A") = {FlowModel::AREA};
     116          60 :     params.set<std::vector<VariableName>>("rhoA") = {FlowModelSinglePhase::RHOA};
     117          60 :     params.set<std::vector<VariableName>>("rhouA") = {FlowModelSinglePhase::RHOUA};
     118          60 :     params.set<std::vector<VariableName>>("rhoEA") = {FlowModelSinglePhase::RHOEA};
     119          60 :     params.set<std::vector<VariableName>>("rhoV") = {_rhoV_var_name};
     120          60 :     params.set<std::vector<VariableName>>("rhouV") = {_rhouV_var_name};
     121          60 :     params.set<std::vector<VariableName>>("rhovV") = {_rhovV_var_name};
     122          60 :     params.set<std::vector<VariableName>>("rhowV") = {_rhowV_var_name};
     123          60 :     params.set<std::vector<VariableName>>("rhoEV") = {_rhoEV_var_name};
     124             :     // the direction of the outlet channel
     125          20 :     params.set<Point>("di_out") = _directions[1].unit();
     126          20 :     params.set<Real>("gravity_magnitude") = THM::gravity_const;
     127          20 :     params.set<Real>("omega_rated") = _omega_rated;
     128          20 :     params.set<Real>("volumetric_rated") = _volumetric_rated;
     129          20 :     params.set<Real>("head_rated") = _head_rated;
     130          20 :     params.set<Real>("torque_rated") = _torque_rated;
     131          20 :     params.set<Real>("density_rated") = _density_rated;
     132          20 :     params.set<Real>("speed_cr_fr") = _speed_cr_fr;
     133          20 :     params.set<Real>("tau_fr_const") = _tau_fr_const;
     134          20 :     params.set<std::vector<Real>>("tau_fr_coeff") = _tau_fr_coeff;
     135          20 :     params.set<Real>("speed_cr_I") = _speed_cr_I;
     136          20 :     params.set<Real>("inertia_const") = _inertia_const;
     137          20 :     params.set<Real>("transition_width") = _transition_width;
     138          20 :     params.set<std::vector<Real>>("inertia_coeff") = _inertia_coeff;
     139          20 :     params.set<FunctionName>("head") = _head;
     140          40 :     params.set<FunctionName>("torque_hydraulic") = _torque_hydraulic;
     141          60 :     params.set<std::vector<VariableName>>("omega") = {omega_var_name};
     142          40 :     params.set<Real>("A_ref") = getParam<Real>("A_ref");
     143          40 :     params.set<Real>("K") = getParam<Real>("K");
     144          20 :     params.set<UserObjectName>("fp") = _fp_name;
     145          20 :     params.set<std::string>("pump_name") = cname();
     146          40 :     params.set<bool>("apply_velocity_scaling") = getParam<bool>("apply_velocity_scaling");
     147          20 :     params.set<ExecFlagEnum>("execute_on") = execute_on;
     148          20 :     getTHMProblem().addUserObject(class_name, getShaftConnectedUserObjectName(), params);
     149          20 :     connectObject(params, _junction_uo_name, "K");
     150          20 :   }
     151          40 : }
     152             : 
     153             : void
     154          20 : ShaftConnectedPump1Phase::addVariables()
     155             : {
     156          20 :   VolumeJunction1Phase::addVariables();
     157             : 
     158          20 :   addJunctionVariable(false, _head_var_name);
     159          20 :   addJunctionVariable(false, _hydraulic_torque_var_name);
     160          20 :   addJunctionVariable(false, _friction_torque_var_name);
     161          20 :   addJunctionVariable(false, _moment_of_inertia_var_name);
     162             : 
     163          20 :   if (!_app.isRestarting())
     164             :   {
     165          20 :     addJunctionIC(_head_var_name, 0);
     166          20 :     addJunctionIC(_hydraulic_torque_var_name, 0);
     167          20 :     addJunctionIC(_friction_torque_var_name, 0);
     168          20 :     addJunctionIC(_moment_of_inertia_var_name, _inertia_const);
     169             :   }
     170          20 : }
     171             : 
     172             : void
     173          20 : ShaftConnectedPump1Phase::addMooseObjects()
     174             : {
     175          20 :   VolumeJunction1Phase::addMooseObjects();
     176             : 
     177             :   const std::vector<std::pair<std::string, VariableName>> quantities = {
     178          20 :       {"pump_head", _head_var_name},
     179          20 :       {"hydraulic_torque", _hydraulic_torque_var_name},
     180          20 :       {"friction_torque", _friction_torque_var_name},
     181         100 :       {"moment_of_inertia", _moment_of_inertia_var_name}};
     182         100 :   for (const auto & quantity_and_name : quantities)
     183             :   {
     184          80 :     const std::string class_name = "ShaftConnectedPump1PhaseAux";
     185          80 :     InputParameters params = _factory.getValidParams(class_name);
     186         160 :     params.set<AuxVariableName>("variable") = quantity_and_name.second;
     187          80 :     params.set<MooseEnum>("quantity") = quantity_and_name.first;
     188         160 :     params.set<UserObjectName>("pump_uo") = getShaftConnectedUserObjectName();
     189         160 :     const std::string obj_name = genName(name(), quantity_and_name.first + "_aux");
     190          80 :     params.set<std::vector<SubdomainName>>("block") = getSubdomainNames();
     191          80 :     getTHMProblem().addAuxKernel(class_name, obj_name, params);
     192          80 :   }
     193          40 : }

Generated by: LCOV version 1.14