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  // create passive transport solution variables, if any
63  const auto & passives_names = _flow_channel.getParam<std::vector<VariableName>>("passives_names");
64  _passives_times_area_names.resize(passives_names.size());
65  for (const auto i : index_range(passives_names))
66  _passives_times_area_names[i] = passives_names[i] + "_times_area";
67 }
68 
69 Real
71 {
72  return _scaling_factors[0];
73 }
74 
75 Real
77 {
78  return _scaling_factors[1];
79 }
80 
81 Real
83 {
84  return _scaling_factors[2];
85 }
86 
87 void
89 {
91 
92  // Add passive transport variables
93  const auto scaling_factor_passives =
94  _flow_channel.isParamSetByUser("scaling_factor_passives")
95  ? _flow_channel.getParam<std::vector<Real>>("scaling_factor_passives")
96  : std::vector<Real>(_passives_times_area_names.size(), 1.0);
97  mooseAssert(scaling_factor_passives.size() == _passives_times_area_names.size(),
98  "'scaling_factor_passives' size must match number of passives.");
99  for (const auto i : index_range(_passives_times_area_names))
100  _sim.addSimVariable(true,
102  _fe_type,
104  scaling_factor_passives[i]);
105 }
106 
107 std::vector<VariableName>
109 {
110  std::vector<VariableName> vars = {RHOA, RHOUA, RHOEA};
111  vars.insert(vars.end(), _passives_times_area_names.begin(), _passives_times_area_names.end());
112  return vars;
113 }
114 
115 void
117 {
119 
120  // passive transport variables
121  const auto & passives_ic_fn_names =
122  _flow_channel.getParam<std::vector<FunctionName>>("initial_passives");
123  for (const auto i : index_range(_passives_times_area_names))
124  addPassiveTransportIC(_passives_times_area_names[i], passives_ic_fn_names[i]);
125 }
126 
127 void
129 {
131 
132  // time derivatives for passive transport variables
133  for (const auto & var : _passives_times_area_names)
135 }
136 
137 void
138 FlowModelSinglePhase::addPassiveTransportIC(const VariableName & var, const FunctionName & ic_fn)
139 {
140  const std::string class_name = "VariableFunctionProductIC";
141  InputParameters params = _factory.getValidParams(class_name);
142  params.set<VariableName>("variable") = var;
143  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
144  params.set<FunctionName>("fn") = ic_fn;
145  params.set<std::vector<VariableName>>("var") = {THM::AREA};
146  _sim.addSimInitialCondition(class_name, genName(_comp_name, var + "_ic"), params);
147 }
148 
149 void
151 {
152  const std::string class_name = "RhoEAFromPressureTemperatureFunctionVelocityIC";
153  InputParameters params = _factory.getValidParams(class_name);
154  params.set<VariableName>("variable") = RHOEA;
155  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
156  params.set<std::vector<VariableName>>("p") = {PRESSURE};
157  params.set<std::vector<VariableName>>("T") = {TEMPERATURE};
158  params.set<FunctionName>("vel") = getVariableFn("initial_vel");
159  params.set<std::vector<VariableName>>("A") = {FlowModel::AREA};
160  params.set<UserObjectName>("fp") = _fp_name;
161  _sim.addSimInitialCondition(class_name, genName(_comp_name, "rhoEA_ic"), params);
162 }
163 
164 void
166 {
167  const std::string class_name = "RhoFromPressureTemperatureIC";
168  InputParameters params = _factory.getValidParams(class_name);
169  params.set<VariableName>("variable") = DENSITY;
170  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
171  params.set<std::vector<VariableName>>("p") = {PRESSURE};
172  params.set<std::vector<VariableName>>("T") = {TEMPERATURE};
173  params.set<UserObjectName>("fp") = _fp_name;
174  _sim.addSimInitialCondition(class_name, genName(_comp_name, "rho_ic"), params);
175 }
176 
177 void
179 {
180  const std::string class_name = "PressureAux";
181  InputParameters params = _factory.getValidParams(class_name);
182  params.set<AuxVariableName>("variable") = PRESSURE;
183  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
184  params.set<std::vector<VariableName>>("e") = {SPECIFIC_INTERNAL_ENERGY};
185  params.set<std::vector<VariableName>>("v") = {SPECIFIC_VOLUME};
186  params.set<UserObjectName>("fp") = _fp_name;
187  _sim.addAuxKernel(class_name, genName(_comp_name, "pressure_uv_auxkernel"), params);
188 }
189 
190 void
192 {
193  const std::string class_name = "TemperatureAux";
194  InputParameters params = _factory.getValidParams(class_name);
195  params.set<AuxVariableName>("variable") = TEMPERATURE;
196  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
197  params.set<std::vector<VariableName>>("e") = {SPECIFIC_INTERNAL_ENERGY};
198  params.set<std::vector<VariableName>>("v") = {SPECIFIC_VOLUME};
199  params.set<UserObjectName>("fp") = _fp_name;
200  _sim.addAuxKernel(class_name, genName(_comp_name, "T_auxkernel"), params);
201 }
202 
203 void
205 {
206  {
207  const std::string class_name = "ADFluidProperties3EqnMaterial";
208  InputParameters params = _factory.getValidParams(class_name);
209  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
210  params.set<UserObjectName>("fp") = _fp_name;
211  params.set<std::vector<VariableName>>("rhoA") = {RHOA};
212  params.set<std::vector<VariableName>>("rhouA") = {RHOUA};
213  params.set<std::vector<VariableName>>("rhoEA") = {RHOEA};
214  params.set<std::vector<VariableName>>("A") = {FlowModel::AREA};
215  _sim.addMaterial(class_name, genName(_comp_name, "fp_mat"), params);
216  }
217  {
218  const std::string class_name = "ADDynamicViscosityMaterial";
219  InputParameters params = _factory.getValidParams(class_name);
220  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
221  params.set<UserObjectName>("fp_1phase") = _fp_name;
222  params.set<MaterialPropertyName>("mu") = {DYNAMIC_VISCOSITY};
223  params.set<MaterialPropertyName>("v") = {SPECIFIC_VOLUME};
224  params.set<MaterialPropertyName>("e") = {SPECIFIC_INTERNAL_ENERGY};
225  _sim.addMaterial(class_name, genName(_comp_name, "mu_mat"), params);
226  }
227 }
228 
229 void
231 {
232  const std::string class_name = "ADNumericalFlux3EqnHLLC";
233  InputParameters params = _factory.getValidParams(class_name);
234  params.applySpecificParameters(parameters(), {"wave_speed_formulation"});
235  params.set<UserObjectName>("fluid_properties") = _fp_name;
236  params.set<MooseEnum>("emit_on_nan") = "none";
237  params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_LINEAR, EXEC_NONLINEAR};
238  _sim.addUserObject(class_name, _numerical_flux_name, params);
239 }
240 
241 void
243 {
244  const std::string class_name = "ADRDG3EqnMaterial";
245  InputParameters params = _factory.getValidParams(class_name);
246  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
247  params.set<MooseEnum>("scheme") = _rdg_slope_reconstruction;
248  params.set<std::vector<VariableName>>("A_elem") = {AREA};
249  params.set<std::vector<VariableName>>("A_linear") = {AREA_LINEAR};
250  params.set<std::vector<VariableName>>("rhoA") = {RHOA};
251  params.set<std::vector<VariableName>>("rhouA") = {RHOUA};
252  params.set<std::vector<VariableName>>("rhoEA") = {RHOEA};
253  params.set<std::vector<VariableName>>("passives_times_area") = _passives_times_area_names;
254  params.set<MaterialPropertyName>("direction") = DIRECTION;
255  params.set<UserObjectName>("fluid_properties") = _fp_name;
256  params.set<bool>("implicit") = _sim.getImplicitTimeIntegrationFlag();
257  _sim.addMaterial(class_name, genName(_comp_name, "rdg_3egn_mat"), params);
258 }
259 
260 void
262 {
263  for (const auto & var : solutionVariableNames())
264  {
265  const std::string class_name = "ADNumericalFlux3EqnDGKernel";
266  InputParameters params = _factory.getValidParams(class_name);
267  params.set<NonlinearVariableName>("variable") = var;
268  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
269  params.set<std::vector<VariableName>>("A_linear") = {AREA_LINEAR};
270  params.set<std::vector<VariableName>>("rhoA") = {RHOA};
271  params.set<std::vector<VariableName>>("rhouA") = {RHOUA};
272  params.set<std::vector<VariableName>>("rhoEA") = {RHOEA};
273  params.set<std::vector<VariableName>>("passives_times_area") = _passives_times_area_names;
274  params.set<UserObjectName>("numerical_flux") = _numerical_flux_name;
275  params.set<bool>("implicit") = _sim.getImplicitTimeIntegrationFlag();
276  _sim.addDGKernel(class_name, genName(_comp_name, "flux_kernel_" + var), params);
277  }
278 }
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
virtual void addInitialConditions() override
Add initial conditions.
virtual void addInitialConditions() override
Add initial conditions.
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
void addPassiveTransportIC(const VariableName &var, const FunctionName &ic_fn)
Adds IC for a passive transport variable.
static InputParameters validParams()
const T & getParam(const std::string &name) const
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
const InputParameters & parameters() const
char ** vars
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)
std::vector< VariableName > _passives_times_area_names
Names of the passive transport solution variables, if any [amount/m].
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
virtual void addVariables() override
Add variables the model uses.
void addSimVariable(bool nl, const VariableName &name, libMesh::FEType fe_type, Real scaling_factor=1.0)
Queues a variable of type MooseVariableScalar to be added to the nonlinear or aux system...
Definition: Simulation.C:271
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
const libMesh::FEType & _fe_type
The type of FE used for flow.
Definition: FlowModel.h:62
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 AREA
Definition: THMNames.h:14
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)
void addTimeDerivativeKernelIfTransient(const VariableName &var_name)
Adds a time derivative kernel for the given variable if problem is transient.
virtual void addVariables() override
Add variables the model uses.
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
Flow model for a single-component, single-phase fluid using the Euler equations.
static const std::string RHOEA
virtual void addKernels() override
Adds the kernels.
virtual void addKernels()
Adds the kernels.
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:345
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.
bool isParamSetByUser(const std::string &name) const
static const std::string RHOA
Definition: THMNames.h:29
auto index_range(const T &sizable)
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