https://mooseframework.inl.gov
FlowModelSinglePhase.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 
10 #include "FlowModelSinglePhase.h"
11 #include "FlowChannelBase.h"
12 #include "THMNames.h"
13 
21 const std::string FlowModelSinglePhase::RHOA = THM::RHOA;
22 const std::string FlowModelSinglePhase::RHOEA = THM::RHOEA;
23 const std::string FlowModelSinglePhase::RHOUA = THM::RHOUA;
39 
42 {
44 
45  MooseEnum wave_speed_formulation("einfeldt davis", "einfeldt");
46  params.addParam<MooseEnum>(
47  "wave_speed_formulation", wave_speed_formulation, "Method for computing wave speeds");
48 
49  params.addRequiredParam<std::vector<Real>>(
50  "scaling_factor_1phase",
51  "Scaling factors for each single phase variable (rhoA, rhouA, rhoEA)");
52 
53  return params;
54 }
55 
56 registerMooseObject("ThermalHydraulicsApp", FlowModelSinglePhase);
57 
59  : FlowModel1PhaseBase(params),
60  _scaling_factors(getParam<std::vector<Real>>("scaling_factor_1phase"))
61 {
62 }
63 
64 Real
66 {
67  return _scaling_factors[0];
68 }
69 
70 Real
72 {
73  return _scaling_factors[1];
74 }
75 
76 Real
78 {
79  return _scaling_factors[2];
80 }
81 
82 std::vector<VariableName>
84 {
85  return {RHOA, RHOUA, RHOEA};
86 }
87 
88 void
90 {
91  const std::string class_name = "RhoEAFromPressureTemperatureFunctionVelocityIC";
92  InputParameters params = _factory.getValidParams(class_name);
93  params.set<VariableName>("variable") = RHOEA;
94  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
95  params.set<std::vector<VariableName>>("p") = {PRESSURE};
96  params.set<std::vector<VariableName>>("T") = {TEMPERATURE};
97  params.set<FunctionName>("vel") = getVariableFn("initial_vel");
98  params.set<std::vector<VariableName>>("A") = {FlowModel::AREA};
99  params.set<UserObjectName>("fp") = _fp_name;
100  _sim.addSimInitialCondition(class_name, genName(_comp_name, "rhoEA_ic"), params);
101 }
102 
103 void
105 {
106  const std::string class_name = "RhoFromPressureTemperatureIC";
107  InputParameters params = _factory.getValidParams(class_name);
108  params.set<VariableName>("variable") = DENSITY;
109  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
110  params.set<std::vector<VariableName>>("p") = {PRESSURE};
111  params.set<std::vector<VariableName>>("T") = {TEMPERATURE};
112  params.set<UserObjectName>("fp") = _fp_name;
113  _sim.addSimInitialCondition(class_name, genName(_comp_name, "rho_ic"), params);
114 }
115 
116 void
118 {
119  const std::string class_name = "PressureAux";
120  InputParameters params = _factory.getValidParams(class_name);
121  params.set<AuxVariableName>("variable") = PRESSURE;
122  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
123  params.set<std::vector<VariableName>>("e") = {SPECIFIC_INTERNAL_ENERGY};
124  params.set<std::vector<VariableName>>("v") = {SPECIFIC_VOLUME};
125  params.set<UserObjectName>("fp") = _fp_name;
126  _sim.addAuxKernel(class_name, genName(_comp_name, "pressure_uv_auxkernel"), params);
127 }
128 
129 void
131 {
132  const std::string class_name = "TemperatureAux";
133  InputParameters params = _factory.getValidParams(class_name);
134  params.set<AuxVariableName>("variable") = TEMPERATURE;
135  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
136  params.set<std::vector<VariableName>>("e") = {SPECIFIC_INTERNAL_ENERGY};
137  params.set<std::vector<VariableName>>("v") = {SPECIFIC_VOLUME};
138  params.set<UserObjectName>("fp") = _fp_name;
139  _sim.addAuxKernel(class_name, genName(_comp_name, "T_auxkernel"), params);
140 }
141 
142 void
144 {
145  {
146  const std::string class_name = "ADFluidProperties3EqnMaterial";
147  InputParameters params = _factory.getValidParams(class_name);
148  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
149  params.set<UserObjectName>("fp") = _fp_name;
150  params.set<std::vector<VariableName>>("rhoA") = {RHOA};
151  params.set<std::vector<VariableName>>("rhouA") = {RHOUA};
152  params.set<std::vector<VariableName>>("rhoEA") = {RHOEA};
153  params.set<std::vector<VariableName>>("A") = {FlowModel::AREA};
154  _sim.addMaterial(class_name, genName(_comp_name, "fp_mat"), params);
155  }
156  {
157  const std::string class_name = "ADDynamicViscosityMaterial";
158  InputParameters params = _factory.getValidParams(class_name);
159  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
160  params.set<UserObjectName>("fp_1phase") = _fp_name;
161  params.set<MaterialPropertyName>("mu") = {DYNAMIC_VISCOSITY};
162  params.set<MaterialPropertyName>("v") = {SPECIFIC_VOLUME};
163  params.set<MaterialPropertyName>("e") = {SPECIFIC_INTERNAL_ENERGY};
164  _sim.addMaterial(class_name, genName(_comp_name, "mu_mat"), params);
165  }
166 }
167 
168 void
170 {
171  const std::string class_name = "ADNumericalFlux3EqnHLLC";
172  InputParameters params = _factory.getValidParams(class_name);
173  params.applySpecificParameters(parameters(), {"wave_speed_formulation"});
174  params.set<UserObjectName>("fluid_properties") = _fp_name;
175  params.set<MooseEnum>("emit_on_nan") = "none";
176  params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_LINEAR, EXEC_NONLINEAR};
177  _sim.addUserObject(class_name, _numerical_flux_name, params);
178 }
179 
180 void
182 {
183  const std::string class_name = "ADRDG3EqnMaterial";
184  InputParameters params = _factory.getValidParams(class_name);
185  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
186  params.set<MooseEnum>("scheme") = _rdg_slope_reconstruction;
187  params.set<std::vector<VariableName>>("A_elem") = {AREA};
188  params.set<std::vector<VariableName>>("A_linear") = {AREA_LINEAR};
189  params.set<std::vector<VariableName>>("rhoA") = {RHOA};
190  params.set<std::vector<VariableName>>("rhouA") = {RHOUA};
191  params.set<std::vector<VariableName>>("rhoEA") = {RHOEA};
192  params.set<MaterialPropertyName>("direction") = DIRECTION;
193  params.set<UserObjectName>("fluid_properties") = _fp_name;
194  params.set<bool>("implicit") = _sim.getImplicitTimeIntegrationFlag();
195  _sim.addMaterial(class_name, genName(_comp_name, "rdg_3egn_mat"), params);
196 }
197 
198 void
200 {
201  // mass
202  const std::string class_name = "ADNumericalFlux3EqnDGKernel";
203  InputParameters params = _factory.getValidParams(class_name);
204  params.set<NonlinearVariableName>("variable") = RHOA;
205  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
206  params.set<std::vector<VariableName>>("A_linear") = {AREA_LINEAR};
207  params.set<std::vector<VariableName>>("rhoA") = {RHOA};
208  params.set<std::vector<VariableName>>("rhouA") = {RHOUA};
209  params.set<std::vector<VariableName>>("rhoEA") = {RHOEA};
210  params.set<UserObjectName>("numerical_flux") = _numerical_flux_name;
211  params.set<bool>("implicit") = _sim.getImplicitTimeIntegrationFlag();
212  _sim.addDGKernel(class_name, genName(_comp_name, "mass_advection"), params);
213 
214  // momentum
215  params.set<NonlinearVariableName>("variable") = RHOUA;
216  _sim.addDGKernel(class_name, genName(_comp_name, "momentum_advection"), params);
217 
218  // energy
219  params.set<NonlinearVariableName>("variable") = RHOEA;
220  _sim.addDGKernel(class_name, genName(_comp_name, "energy_advection"), params);
221 }
virtual void addNumericalFluxUserObject() override
Adds numerical flux user object.
virtual Real getScalingFactorRhoUA() const override
static const std::string AREA_LINEAR
Definition: FlowModel.h:103
static const std::string SPECIFIC_HEAT_CONSTANT_PRESSURE
static const std::string SPECIFIC_HEAT_CONSTANT_PRESSURE
Definition: THMNames.h:34
static const std::string HEAT_TRANSFER_COEFFICIENT_WALL
Definition: THMNames.h:22
static const std::string VELOCITY_Y
FlowModelSinglePhase(const InputParameters &params)
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.
static const std::string SPECIFIC_INTERNAL_ENERGY
Definition: THMNames.h:36
virtual void addRhoEAIC() override
static const std::string RHOEA
Definition: THMNames.h:30
static const std::string DYNAMIC_VISCOSITY
static InputParameters validParams()
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void applySpecificParameters(const InputParameters &common, const std::vector< std::string > &include, bool allow_private=false)
static const std::string AREA
Definition: FlowModel.h:102
static const std::string TEMPERATURE
static const std::string VELOCITY_Z
Definition: THMNames.h:46
virtual Real getScalingFactorRhoA() const override
static const std::string SPECIFIC_HEAT_CONSTANT_VOLUME
static const std::string THERMAL_CONDUCTIVITY
Definition: THMNames.h:41
registerMooseObject("ThermalHydraulicsApp", FlowModelSinglePhase)
virtual void addFluidPropertiesMaterials() override
Adds materials to compute fluid properties.
static const std::string VELOCITY
virtual void addMaterial(const std::string &material_name, const std::string &name, InputParameters &parameters)
virtual Real getScalingFactorRhoEA() const override
T & set(const std::string &name, bool quiet_mode=false)
InputParameters getValidParams(const std::string &name) const
static const std::string THERMAL_CONDUCTIVITY
static const std::string HEAT_TRANSFER_COEFFICIENT_WALL
static const std::string DENSITY
static const std::string FRICTION_FACTOR_DARCY
Definition: THMNames.h:19
virtual void addTemperatureAux() override
virtual void addAuxKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
static const std::string SPECIFIC_VOLUME
static const std::string VELOCITY_Z
const FunctionName & getVariableFn(const FunctionName &fn_param_name)
Definition: FlowModel.C:56
FlowChannelBase & _flow_channel
The flow channel component that built this class.
Definition: FlowModel.h:59
static const std::string SOUND_SPEED
virtual void addRDGAdvectionDGKernels() override
Adds DG kernels.
void addRequiredParam(const std::string &name, const std::string &doc_string)
static const std::string TEMPERATURE
Definition: THMNames.h:39
static const std::string SPECIFIC_INTERNAL_ENERGY
virtual void addSlopeReconstructionMaterial() override
Adds slope reconstruction material.
virtual void addDensityIC() override
static const std::string PRESSURE
static const std::string PRESSURE
Definition: THMNames.h:27
const UserObjectName _numerical_flux_name
Numerical flux user object name.
static const std::string VELOCITY_Y
Definition: THMNames.h:45
static const std::string RHOUA
static const std::string REYNOLDS_NUMBER
static const std::string HYDRAULIC_DIAMETER
Definition: THMNames.h:23
static const std::string RHOA
static const std::string REYNOLDS_NUMBER
Definition: THMNames.h:28
virtual void addPressureAux() override
static const std::string VELOCITY
Definition: THMNames.h:43
static const std::string FRICTION_FACTOR_DARCY
const MooseEnum _rdg_slope_reconstruction
Slope reconstruction type for rDG.
const ExecFlagType EXEC_LINEAR
static const std::string SPECIFIC_TOTAL_ENTHALPY
Factory & _factory
The Factory associated with the MooseApp.
Definition: FlowModel.h:56
static const std::string SPECIFIC_VOLUME
Definition: THMNames.h:38
static const std::string SOUND_SPEED
Definition: THMNames.h:32
const ExecFlagType EXEC_NONLINEAR
void addSimInitialCondition(const std::string &type, const std::string &name, InputParameters params)
Definition: Simulation.C:495
virtual void addDGKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual std::vector< std::shared_ptr< UserObject > > addUserObject(const std::string &user_object_name, const std::string &name, InputParameters &parameters)
virtual std::vector< VariableName > solutionVariableNames() const override
Returns the solution variable names for the flow model.
static const std::string VELOCITY_X
Definition: THMNames.h:44
const UserObjectName _fp_name
The name of the user object that defines fluid properties.
Definition: FlowModel.h:65
const std::vector< Real > _scaling_factors
Scaling factors for each solution variable (rhoA, rhouA, rhoEA)
static const std::string HYDRAULIC_DIAMETER
const bool & getImplicitTimeIntegrationFlag()
Gets the flag indicating whether an implicit time integration scheme is being used.
Definition: Simulation.h:329
static const std::string VELOCITY_X
const InputParameters & parameters() const
Flow model for a single-component, single-phase fluid using the Euler equations.
static const std::string RHOEA
static const std::string RHOUA
Definition: THMNames.h:31
virtual const std::vector< SubdomainName > & getSubdomainNames() const
Gets the subdomain names for this component.
Definition: Component.C:307
static InputParameters validParams()
const std::string _comp_name
The component name.
Definition: FlowModel.h:68
THMProblem & _sim
Definition: FlowModel.h:53
Base class for a flow model for a single-phase fluid.
static const std::string RHOA
Definition: THMNames.h:29
static const std::string DIRECTION
Definition: FlowModel.h:110
static const std::string SPECIFIC_HEAT_CONSTANT_VOLUME
Definition: THMNames.h:35
static const std::string SPECIFIC_TOTAL_ENTHALPY
Definition: THMNames.h:37
static const std::string DYNAMIC_VISCOSITY
Definition: THMNames.h:18
static const std::string DENSITY
Definition: THMNames.h:16
const ExecFlagType EXEC_INITIAL