https://mooseframework.inl.gov
Loading...
Searching...
No Matches
ShaftConnectedTurbine1Phase.C
Go to the documentation of this file.
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
12#include "Numerics.h"
13#include "Shaft.h"
14#include "MooseVariableScalar.h"
15#include "Assembly.h"
16#include "ScalarKernel.h"
17
19
22{
25 params.makeParamRequired<Real>("A_ref");
26 params.addRequiredParam<BoundaryName>("inlet", "Turbine inlet");
27 params.addRequiredParam<BoundaryName>("outlet", "Turbine outlet");
28 params.set<std::vector<BoundaryName>>("connections") = {};
29 params.suppressParameter<std::vector<BoundaryName>>("connections");
30 params.addRequiredParam<Real>("omega_rated", "Rated turbine speed [rad/s]");
31 params.addRequiredParam<Real>("D_wheel",
32 "Any physical dimension of the turbine as a measure of the "
33 "turbine's size, usually the rotor diameter [m]");
34 params.addRequiredParam<Real>("speed_cr_fr", "Turbine speed threshold for friction [-]");
35 params.addRequiredParam<Real>("tau_fr_const", "Turbine friction constant [N-m]");
36 params.addRequiredParam<std::vector<Real>>("tau_fr_coeff", "Turbine friction coefficients [N-m]");
37 params.addRequiredParam<Real>("speed_cr_I", "Turbine speed threshold for inertia [-]");
38 params.addRequiredParam<Real>("inertia_const", "Turbine inertia constant [kg-m^2]");
39 params.addRequiredParam<std::vector<Real>>("inertia_coeff",
40 "Turbine inertia coefficients [kg-m^2]");
41 params.addRequiredParam<FunctionName>("head_coefficient",
42 "Head coefficient vs flow coefficient function [-]");
43 params.addRequiredParam<FunctionName>("power_coefficient",
44 "Power coefficient vs flow coefficient function [-]");
45
47 "1-phase turbine that must be connected to a Shaft component. Turbine speed "
48 "is controlled by the connected shaft; Driving torque and delta_p are "
49 "computed by user input functions of inlet flow rate (flow coefficient aux variable) and "
50 "shaft speed");
51
52 return params;
53}
54
56 : VolumeJunction1Phase(parameters),
57 ShaftConnectable(this),
58 _inlet(getParam<BoundaryName>("inlet")),
59 _outlet(getParam<BoundaryName>("outlet")),
60 _omega_rated(getParam<Real>("omega_rated")),
61 _D_wheel(getParam<Real>("D_wheel")),
62 _speed_cr_fr(getParam<Real>("speed_cr_fr")),
63 _tau_fr_const(getParam<Real>("tau_fr_const")),
64 _tau_fr_coeff(getParam<std::vector<Real>>("tau_fr_coeff")),
65 _speed_cr_I(getParam<Real>("speed_cr_I")),
66 _inertia_const(getParam<Real>("inertia_const")),
67 _inertia_coeff(getParam<std::vector<Real>>("inertia_coeff")),
68 _head_coefficient(getParam<FunctionName>("head_coefficient")),
69 _power_coefficient(getParam<FunctionName>("power_coefficient")),
70 _delta_p_var_name(junctionVariableName("delta_p")),
71 _power_var_name(junctionVariableName("power")),
72 _driving_torque_var_name(junctionVariableName("driving_torque")),
73 _friction_torque_var_name(junctionVariableName("friction_torque")),
74 _flow_coeff_var_name(junctionVariableName("flow_coeff")),
75 _moi_var_name(junctionVariableName("moment_of_inertia"))
76{
77 // this determines connection ordering
80
81 checkSizeEqualsValue<Real>("tau_fr_coeff", 4);
82 checkSizeEqualsValue<Real>("inertia_coeff", 4);
83}
84
85void
91
92void
94{
95 const Component & c = getComponentByName<Component>(_shaft_name);
96 const Shaft & scc = dynamic_cast<const Shaft &>(c);
97 const VariableName omega_var_name = scc.getOmegaVariableName();
98
100 execute_on = {EXEC_INITIAL, EXEC_LINEAR, EXEC_NONLINEAR};
101
102 {
103 const std::string class_name = "ADShaftConnectedTurbine1PhaseUserObject";
104 InputParameters params = _factory.getValidParams(class_name);
105 params.set<bool>("use_scalar_variables") = false;
106 params.set<subdomain_id_type>("junction_subdomain_id") = _junction_subdomain_id;
107 params.set<std::vector<BoundaryName>>("boundary") = _boundary_names;
108 params.set<std::vector<Real>>("normals") = _normals;
109 params.set<std::vector<processor_id_type>>("processor_ids") = getConnectedProcessorIDs();
110 params.set<std::vector<UserObjectName>>("numerical_flux_names") = _numerical_flux_names;
111 params.set<Real>("volume") = _volume;
112 params.set<std::vector<VariableName>>("A") = {FlowModel::AREA};
113 params.set<std::vector<VariableName>>("rhoA") = {FlowModelSinglePhase::RHOA};
114 params.set<std::vector<VariableName>>("rhouA") = {FlowModelSinglePhase::RHOUA};
115 params.set<std::vector<VariableName>>("rhoEA") = {FlowModelSinglePhase::RHOEA};
116 params.set<std::vector<VariableName>>("rhoV") = {_rhoV_var_name};
117 params.set<std::vector<VariableName>>("rhouV") = {_rhouV_var_name};
118 params.set<std::vector<VariableName>>("rhovV") = {_rhovV_var_name};
119 params.set<std::vector<VariableName>>("rhowV") = {_rhowV_var_name};
120 params.set<std::vector<VariableName>>("rhoEV") = {_rhoEV_var_name};
121 // the direction of the outlet channel
122 params.set<Point>("di_out") = _directions[1].unit();
123 params.set<Real>("omega_rated") = _omega_rated;
124 params.set<Real>("D_wheel") = _D_wheel;
125 params.set<Real>("speed_cr_fr") = _speed_cr_fr;
126 params.set<Real>("tau_fr_const") = _tau_fr_const;
127 params.set<std::vector<Real>>("tau_fr_coeff") = _tau_fr_coeff;
128 params.set<Real>("speed_cr_I") = _speed_cr_I;
129 params.set<Real>("inertia_const") = _inertia_const;
130 params.set<std::vector<Real>>("inertia_coeff") = _inertia_coeff;
131 params.set<FunctionName>("head_coefficient") = _head_coefficient;
132 params.set<FunctionName>("power_coefficient") = _power_coefficient;
133 params.set<std::vector<VariableName>>("omega") = {omega_var_name};
134 params.set<Real>("A_ref") = getParam<Real>("A_ref");
135 params.set<Real>("K") = getParam<Real>("K");
136 params.set<UserObjectName>("fp") = _fp_name;
137 params.set<std::string>("turbine_name") = cname();
138 params.set<bool>("apply_velocity_scaling") = getParam<bool>("apply_velocity_scaling");
139 params.set<ExecFlagEnum>("execute_on") = execute_on;
141 connectObject(params, _junction_uo_name, "K");
142 }
143}
144
145void
167
168void
170{
172
173 const std::vector<std::pair<std::string, VariableName>> quantities_aux = {
174 {"delta_p", _delta_p_var_name},
175 {"flow_coefficient", _flow_coeff_var_name},
176 {"driving_torque", _driving_torque_var_name},
177 {"friction_torque", _friction_torque_var_name},
178 {"moment_of_inertia", _moment_of_inertia_var_name},
179 {"power", _power_var_name}};
180 for (const auto & quantity_and_name : quantities_aux)
181 {
182 const std::string class_name = "ShaftConnectedTurbine1PhaseAux";
183 InputParameters params = _factory.getValidParams(class_name);
184 params.set<AuxVariableName>("variable") = quantity_and_name.second;
185 params.set<MooseEnum>("quantity") = quantity_and_name.first;
186 params.set<UserObjectName>("turbine_uo") = getShaftConnectedUserObjectName();
187 const std::string obj_name = genName(name(), quantity_and_name.first + "_aux");
188 params.set<std::vector<SubdomainName>>("block") = getSubdomainNames();
189 getTHMProblem().addAuxKernel(class_name, obj_name, params);
190 }
191}
const ExecFlagType EXEC_INITIAL
const ExecFlagType EXEC_LINEAR
const ExecFlagType EXEC_NONLINEAR
const std::string name
Definition Setup.h:21
registerMooseObject("ThermalHydraulicsApp", ShaftConnectedTurbine1Phase)
std::vector< Real > _normals
Outward normals associated with connected components.
std::vector< RealVectorValue > _directions
Directions of connected components.
std::vector< BoundaryName > _boundary_names
Boundary names of connected components.
void addConnection(const BoundaryName &boundary_name)
Adds a connection for this component.
const std::vector< processor_id_type > & getConnectedProcessorIDs()
Gets the processor IDs of the connected 1D components.
subdomain_id_type _junction_subdomain_id
Junction subdomain ID.
Base class for THM components.
Definition Component.h:32
virtual const std::vector< SubdomainName > & getSubdomainNames() const
Gets the subdomain names for this component.
Definition Component.C:345
THMProblem & getTHMProblem() const
Gets the THM problem.
Definition Component.C:135
Factory & _factory
The Factory associated with the MooseApp.
Definition Component.h:497
const std::string & cname() const
Get the component name.
Definition Component.C:51
void connectObject(const InputParameters &obj_params, const std::string &obj_name, const std::string &param) const
Connects a controllable parameter of the component to a controllable parameter of a constituent objec...
Definition Component.C:98
virtual std::vector< std::shared_ptr< UserObject > > addUserObject(const std::string &user_object_name, const std::string &name, InputParameters &parameters)
virtual void addAuxKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
InputParameters getValidParams(const std::string &name) const
std::vector< UserObjectName > _numerical_flux_names
const std::string _junction_uo_name
Name of junction user object name, if any.
UserObjectName _fp_name
Fluid property user object name.
static const std::string RHOUA
static const std::string RHOA
static const std::string RHOEA
static const std::string AREA
Definition FlowModel.h:102
void suppressParameter(const std::string &name)
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
T & set(const std::string &name, bool quiet_mode=false)
void makeParamRequired(const std::string &name)
bool isRestarting() const
MooseApp & _app
std::string genName(const std::string &prefix, unsigned int id, const std::string &suffix="") const
Build a name from a prefix, number and possible suffix.
Interface class for components that connect to a shaft.
std::string _shaft_name
Name of the shaft component.
virtual void checkShaftConnection(const Component *const component) const
static InputParameters validParams()
VariableName _moment_of_inertia_var_name
Moment of inertia variable name.
1-phase turbine that must be connected to a Shaft component
ShaftConnectedTurbine1Phase(const InputParameters &params)
const VariableName _delta_p_var_name
Name of turbine pressure drop variable.
const VariableName _friction_torque_var_name
Name of turbine friction torque variable.
const Real & _speed_cr_fr
Turbine speed threshold for friction.
const BoundaryName & _inlet
Turbine inlet.
const std::vector< Real > & _tau_fr_coeff
Turbine friction coefficients.
const BoundaryName & _outlet
Turbine outlet.
const VariableName _power_var_name
Name of turbine power variable.
const std::vector< Real > & _inertia_coeff
Turbine inertia coefficients.
const Real & _inertia_const
Turbine inertia constant.
const VariableName _driving_torque_var_name
Name of turbine driving torque variable.
const Real & _tau_fr_const
Turbine friction constant.
const Real & _speed_cr_I
Turbine speed threshold for inertia.
virtual UserObjectName getShaftConnectedUserObjectName() const override
const Real & _D_wheel
Turbine wheel diameter.
const FunctionName & _head_coefficient
Name of function to compute data for turbine head.
const VariableName _flow_coeff_var_name
Name of turbine flow_coeff torque variable.
virtual void check() const override
Check the component integrity.
virtual void buildVolumeJunctionUserObject() override
Builds user object for computing and storing the fluxes.
const FunctionName & _power_coefficient
Name of function to compute data for turbine power.
const Real & _omega_rated
Rated turbine speed.
Component that connects torque of turbomachinery components.
Definition Shaft.h:18
virtual VariableName getOmegaVariableName() const
Definition Shaft.C:129
Junction between 1-phase flow channels that has a non-zero volume.
const VariableName _rhovV_var_name
rho*v*V variable name for junction
const Real _volume
Volume of the junction.
void addJunctionVariable(bool is_nonlinear, const VariableName &var, Real scaling_factor=1.0)
Adds a junction variable to the problem, as a scalar or field variable.
virtual void addVariables() override
const VariableName _rhoEV_var_name
rho*E*V variable name for junction
virtual void check() const override
Check the component integrity.
const VariableName _rhoV_var_name
rho*V variable name for junction
virtual void addMooseObjects() override
void addJunctionIC(const VariableName &var, Real value)
Adds a junction IC to the problem, as a scalar or field variable.
static InputParameters validParams()
const VariableName _rhowV_var_name
rho*w*V variable name for junction
const VariableName _rhouV_var_name
rho*u*V variable name for junction
ExecFlagEnum getDefaultExecFlagEnum()