LCOV - code coverage report
Current view: top level - src/components - ShaftConnectedCompressor1Phase.C (source / functions) Hit Total Coverage
Test: idaholab/moose thermal_hydraulics: #30301 (3b550b) with base 2ad78d Lines: 149 150 99.3 %
Date: 2025-07-30 13:02:48 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 "ShaftConnectedCompressor1Phase.h"
      11             : #include "FlowModelSinglePhase.h"
      12             : #include "Numerics.h"
      13             : #include "Shaft.h"
      14             : #include "ADShaftConnectedCompressor1PhaseUserObject.h"
      15             : #include "MooseVariableScalar.h"
      16             : #include "Assembly.h"
      17             : #include "ScalarKernel.h"
      18             : #include "ADVolumeJunction1PhaseUserObject.h"
      19             : 
      20             : registerMooseObject("ThermalHydraulicsApp", ShaftConnectedCompressor1Phase);
      21             : 
      22             : InputParameters
      23         220 : ShaftConnectedCompressor1Phase::validParams()
      24             : {
      25         220 :   InputParameters params = VolumeJunction1Phase::validParams();
      26         220 :   params += ShaftConnectable::validParams();
      27         220 :   params.makeParamRequired<Real>("A_ref");
      28         440 :   params.addRequiredParam<BoundaryName>("inlet", "Compressor inlet");
      29         440 :   params.addRequiredParam<BoundaryName>("outlet", "Compressor outlet");
      30         220 :   params.set<std::vector<BoundaryName>>("connections") = {};
      31         220 :   params.suppressParameter<std::vector<BoundaryName>>("connections");
      32         440 :   params.addParam<bool>("treat_as_turbine", false, "Treat the compressor as a turbine?");
      33         440 :   params.addRequiredParam<Real>("omega_rated", "Rated compressor speed [rad/s]");
      34         440 :   params.addRequiredParam<Real>("mdot_rated", "Rated compressor mass flow rate [kg/s]");
      35         440 :   params.addRequiredParam<Real>("rho0_rated", "Rated compressor stagnation fluid density [kg/m^3]");
      36         440 :   params.addRequiredParam<Real>("c0_rated", "Rated compressor stagnation sound speed [m/s]");
      37         440 :   params.addRequiredParam<Real>("speed_cr_fr", "Compressor speed threshold for friction [-]");
      38         440 :   params.addRequiredParam<Real>("tau_fr_const", "Compressor friction constant [N-m]");
      39         440 :   params.addRequiredParam<std::vector<Real>>("tau_fr_coeff",
      40             :                                              "Compressor friction coefficients [N-m]");
      41         440 :   params.addRequiredParam<Real>("speed_cr_I", "Compressor speed threshold for inertia [-]");
      42         440 :   params.addRequiredParam<Real>("inertia_const", "Compressor inertia constant [kg-m^2]");
      43         440 :   params.addRequiredParam<std::vector<Real>>("inertia_coeff",
      44             :                                              "Compressor inertia coefficients [kg-m^2]");
      45         440 :   params.addRequiredParam<std::vector<Real>>(
      46             :       "speeds",
      47             :       "Relative corrected speeds. Order of speeds needs correspond to the "
      48             :       "orders of `Rp_functions` and `eff_functions` [-]");
      49         440 :   params.addRequiredParam<std::vector<FunctionName>>(
      50             :       "Rp_functions",
      51             :       "Functions of pressure ratio versus relative corrected flow. Each function is for a "
      52             :       "different, constant relative corrected speed. The order of function names should correspond "
      53             :       "to the order of speeds in the `speeds` parameter [-]");
      54         440 :   params.addRequiredParam<std::vector<FunctionName>>(
      55             :       "eff_functions",
      56             :       "Functions of adiabatic efficiency versus relative corrected flow. Each function is for a "
      57             :       "different, constant relative corrected speed. The order of function names should correspond "
      58             :       "to the order of speeds in the `speeds` parameter [-]");
      59         440 :   params.addParam<Real>("min_pressure_ratio", 0.0, "Minimum pressure ratio");
      60         440 :   params.addParam<Real>("max_pressure_ratio", 50.0, "Maximum pressure ratio");
      61             : 
      62         220 :   params.addClassDescription(
      63             :       "1-phase compressor that must be connected to a Shaft component. Compressor speed "
      64             :       "is controlled by the connected shaft; Isentropic/Dissipation torque and delta_p are "
      65             :       "computed by user input functions of inlet flow rate and shaft speed");
      66             : 
      67         220 :   return params;
      68           0 : }
      69             : 
      70         110 : ShaftConnectedCompressor1Phase::ShaftConnectedCompressor1Phase(const InputParameters & parameters)
      71             :   : VolumeJunction1Phase(parameters),
      72             :     ShaftConnectable(this),
      73         110 :     _inlet(getParam<BoundaryName>("inlet")),
      74         220 :     _outlet(getParam<BoundaryName>("outlet")),
      75         220 :     _omega_rated(getParam<Real>("omega_rated")),
      76         220 :     _mdot_rated(getParam<Real>("mdot_rated")),
      77         220 :     _rho0_rated(getParam<Real>("rho0_rated")),
      78         220 :     _c0_rated(getParam<Real>("c0_rated")),
      79         220 :     _speed_cr_fr(getParam<Real>("speed_cr_fr")),
      80         220 :     _tau_fr_const(getParam<Real>("tau_fr_const")),
      81         220 :     _tau_fr_coeff(getParam<std::vector<Real>>("tau_fr_coeff")),
      82         220 :     _speed_cr_I(getParam<Real>("speed_cr_I")),
      83         220 :     _inertia_const(getParam<Real>("inertia_const")),
      84         220 :     _inertia_coeff(getParam<std::vector<Real>>("inertia_coeff")),
      85         220 :     _speeds(getParam<std::vector<Real>>("speeds")),
      86         220 :     _Rp_functions(getParam<std::vector<FunctionName>>("Rp_functions")),
      87         220 :     _eff_functions(getParam<std::vector<FunctionName>>("eff_functions")),
      88         110 :     _delta_p_var_name(junctionVariableName("delta_p")),
      89         110 :     _isentropic_torque_var_name(junctionVariableName("isentropic_torque")),
      90         110 :     _dissipation_torque_var_name(junctionVariableName("dissipation_torque")),
      91         110 :     _friction_torque_var_name(junctionVariableName("friction_torque")),
      92         220 :     _moi_var_name(junctionVariableName("moment_of_inertia"))
      93             : {
      94             :   // this determines connection ordering
      95         110 :   addConnection(_inlet);
      96         110 :   addConnection(_outlet);
      97             : 
      98         110 :   checkSizeEqualsValue<Real>("tau_fr_coeff", 4);
      99         110 :   checkSizeEqualsValue<Real>("inertia_coeff", 4);
     100         110 : }
     101             : 
     102             : void
     103         105 : ShaftConnectedCompressor1Phase::check() const
     104             : {
     105         105 :   VolumeJunction1Phase::check();
     106         105 :   checkShaftConnection(this);
     107         105 : }
     108             : 
     109             : void
     110         108 : ShaftConnectedCompressor1Phase::buildVolumeJunctionUserObject()
     111             : {
     112         108 :   const Component & c = getComponentByName<Component>(_shaft_name);
     113         108 :   const Shaft & scc = dynamic_cast<const Shaft &>(c);
     114         108 :   const VariableName omega_var_name = scc.getOmegaVariableName();
     115             : 
     116         108 :   ExecFlagEnum execute_on(MooseUtils::getDefaultExecFlagEnum());
     117         432 :   execute_on = {EXEC_INITIAL, EXEC_LINEAR, EXEC_NONLINEAR};
     118             : 
     119             :   {
     120         108 :     const std::string class_name = "ADShaftConnectedCompressor1PhaseUserObject";
     121         108 :     InputParameters params = _factory.getValidParams(class_name);
     122         108 :     params.set<bool>("use_scalar_variables") = false;
     123         108 :     params.set<subdomain_id_type>("junction_subdomain_id") = _junction_subdomain_id;
     124         108 :     params.set<std::vector<BoundaryName>>("boundary") = _boundary_names;
     125         216 :     params.set<std::vector<Real>>("normals") = _normals;
     126         108 :     params.set<std::vector<processor_id_type>>("processor_ids") = getConnectedProcessorIDs();
     127         108 :     params.set<std::vector<UserObjectName>>("numerical_flux_names") = _numerical_flux_names;
     128         108 :     params.set<Real>("volume") = _volume;
     129         324 :     params.set<std::vector<VariableName>>("A") = {FlowModel::AREA};
     130         324 :     params.set<std::vector<VariableName>>("rhoA") = {FlowModelSinglePhase::RHOA};
     131         324 :     params.set<std::vector<VariableName>>("rhouA") = {FlowModelSinglePhase::RHOUA};
     132         324 :     params.set<std::vector<VariableName>>("rhoEA") = {FlowModelSinglePhase::RHOEA};
     133         324 :     params.set<std::vector<VariableName>>("rhoV") = {_rhoV_var_name};
     134         324 :     params.set<std::vector<VariableName>>("rhouV") = {_rhouV_var_name};
     135         324 :     params.set<std::vector<VariableName>>("rhovV") = {_rhovV_var_name};
     136         324 :     params.set<std::vector<VariableName>>("rhowV") = {_rhowV_var_name};
     137         324 :     params.set<std::vector<VariableName>>("rhoEV") = {_rhoEV_var_name};
     138             :     // the direction of the outlet channel
     139         108 :     params.set<Point>("di_out") = _directions[1].unit();
     140         108 :     params.set<Real>("omega_rated") = _omega_rated;
     141         216 :     params.set<bool>("treat_as_turbine") = getParam<bool>("treat_as_turbine");
     142         108 :     params.set<Real>("mdot_rated") = _mdot_rated;
     143         108 :     params.set<Real>("rho0_rated") = _rho0_rated;
     144         108 :     params.set<Real>("c0_rated") = _c0_rated;
     145         108 :     params.set<Real>("speed_cr_fr") = _speed_cr_fr;
     146         108 :     params.set<Real>("tau_fr_const") = _tau_fr_const;
     147         108 :     params.set<std::vector<Real>>("tau_fr_coeff") = _tau_fr_coeff;
     148         108 :     params.set<Real>("speed_cr_I") = _speed_cr_I;
     149         108 :     params.set<Real>("inertia_const") = _inertia_const;
     150         108 :     params.set<std::vector<Real>>("inertia_coeff") = _inertia_coeff;
     151         108 :     params.set<std::vector<Real>>("speeds") = _speeds;
     152         108 :     params.set<std::vector<FunctionName>>("Rp_functions") = _Rp_functions;
     153         108 :     params.set<std::vector<FunctionName>>("eff_functions") = _eff_functions;
     154         216 :     params.set<Real>("min_pressure_ratio") = getParam<Real>("min_pressure_ratio");
     155         216 :     params.set<Real>("max_pressure_ratio") = getParam<Real>("max_pressure_ratio");
     156         324 :     params.set<std::vector<VariableName>>("omega") = {omega_var_name};
     157         216 :     params.set<Real>("A_ref") = getParam<Real>("A_ref");
     158         216 :     params.set<Real>("K") = getParam<Real>("K");
     159         108 :     params.set<UserObjectName>("fp") = _fp_name;
     160         108 :     params.set<std::string>("compressor_name") = cname();
     161         216 :     params.set<bool>("apply_velocity_scaling") = getParam<bool>("apply_velocity_scaling");
     162         108 :     params.set<ExecFlagEnum>("execute_on") = execute_on;
     163         108 :     getTHMProblem().addUserObject(class_name, getShaftConnectedUserObjectName(), params);
     164         108 :     connectObject(params, _junction_uo_name, "K");
     165         108 :   }
     166         216 : }
     167             : 
     168             : void
     169         108 : ShaftConnectedCompressor1Phase::addVariables()
     170             : {
     171         108 :   VolumeJunction1Phase::addVariables();
     172             : 
     173         108 :   addJunctionVariable(false, _delta_p_var_name);
     174         108 :   addJunctionVariable(false, _isentropic_torque_var_name);
     175         108 :   addJunctionVariable(false, _dissipation_torque_var_name);
     176         108 :   addJunctionVariable(false, _friction_torque_var_name);
     177         108 :   addJunctionVariable(false, _moment_of_inertia_var_name);
     178             : 
     179         108 :   if (!_app.isRestarting())
     180             :   {
     181         108 :     addJunctionIC(_delta_p_var_name, 0);
     182         108 :     addJunctionIC(_isentropic_torque_var_name, 0);
     183         108 :     addJunctionIC(_dissipation_torque_var_name, 0);
     184         108 :     addJunctionIC(_friction_torque_var_name, 0);
     185         108 :     addJunctionIC(_moment_of_inertia_var_name, _inertia_const);
     186             :   }
     187         108 : }
     188             : 
     189             : void
     190         108 : ShaftConnectedCompressor1Phase::addMooseObjects()
     191             : {
     192         108 :   VolumeJunction1Phase::addMooseObjects();
     193             : 
     194             :   const std::vector<std::pair<std::string, VariableName>> quantities_aux = {
     195         108 :       {"delta_p", _delta_p_var_name},
     196         108 :       {"isentropic_torque", _isentropic_torque_var_name},
     197         108 :       {"dissipation_torque", _dissipation_torque_var_name},
     198         108 :       {"friction_torque", _friction_torque_var_name},
     199         648 :       {"moment_of_inertia", _moment_of_inertia_var_name}};
     200         648 :   for (const auto & quantity_and_name : quantities_aux)
     201             :   {
     202         540 :     const std::string class_name = "ShaftConnectedCompressor1PhaseAux";
     203         540 :     InputParameters params = _factory.getValidParams(class_name);
     204        1080 :     params.set<AuxVariableName>("variable") = quantity_and_name.second;
     205         540 :     params.set<MooseEnum>("quantity") = quantity_and_name.first;
     206        1080 :     params.set<UserObjectName>("compressor_uo") = getShaftConnectedUserObjectName();
     207        1080 :     const std::string obj_name = genName(name(), quantity_and_name.first + "_aux");
     208         540 :     params.set<std::vector<SubdomainName>>("block") = getSubdomainNames();
     209         540 :     getTHMProblem().addAuxKernel(class_name, obj_name, params);
     210         540 :   }
     211             : 
     212             :   const std::vector<std::string> quantities_pp = {
     213         540 :       "pressure_ratio", "efficiency", "rel_corrected_flow", "rel_corrected_speed"};
     214         540 :   for (const auto & quantity : quantities_pp)
     215             :   {
     216         432 :     const std::string class_name = "ShaftConnectedCompressor1PhasePostprocessor";
     217         432 :     InputParameters params = _factory.getValidParams(class_name);
     218         432 :     params.set<MooseEnum>("quantity") = quantity;
     219         864 :     params.set<UserObjectName>("compressor_uo") = getShaftConnectedUserObjectName();
     220        1728 :     params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_TIMESTEP_END};
     221         432 :     getTHMProblem().addPostprocessor(class_name, Component::genName(name(), quantity), params);
     222         432 :   }
     223         864 : }

Generated by: LCOV version 1.14