https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
11#include "FlowChannelBase.h"
12#include "THMNames.h"
13
21const std::string FlowModelSinglePhase::RHOA = THM::RHOA;
22const std::string FlowModelSinglePhase::RHOEA = THM::RHOEA;
23const 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
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
69Real
74
75Real
80
81Real
86
87void
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
107std::vector<VariableName>
109{
110 std::vector<VariableName> vars = {RHOA, RHOUA, RHOEA};
112 return vars;
113}
114
115void
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
127void
129{
131
132 // time derivatives for passive transport variables
133 for (const auto & var : _passives_times_area_names)
135}
136
137void
138FlowModelSinglePhase::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
149void
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
164void
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
177void
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
190void
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
203void
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
229void
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
241void
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
260void
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}
registerMooseObject("ThermalHydraulicsApp", FlowModelSinglePhase)
const ExecFlagType EXEC_INITIAL
const ExecFlagType EXEC_LINEAR
const ExecFlagType EXEC_NONLINEAR
char ** vars
virtual const std::vector< SubdomainName > & getSubdomainNames() const
Gets the subdomain names for this component.
Definition Component.C:345
virtual std::vector< std::shared_ptr< UserObject > > addUserObject(const std::string &user_object_name, const std::string &name, InputParameters &parameters)
virtual void addMaterial(const std::string &material_name, const std::string &name, InputParameters &parameters)
virtual void addDGKernel(const std::string &kernel_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
Base class for a flow model for a single-phase fluid.
virtual void addInitialConditions() override
Add initial conditions.
virtual void addKernels()
Adds the kernels.
const UserObjectName _numerical_flux_name
Numerical flux user object name.
void addTimeDerivativeKernelIfTransient(const VariableName &var_name)
Adds a time derivative kernel for the given variable if problem is transient.
const MooseEnum _rdg_slope_reconstruction
Slope reconstruction type for rDG.
virtual void addVariables() override
Add variables the model uses.
static InputParameters validParams()
Flow model for a single-component, single-phase fluid using the Euler equations.
virtual void addRDGAdvectionDGKernels() override
Adds DG kernels.
static const std::string DENSITY
static const std::string SOUND_SPEED
static const std::string HYDRAULIC_DIAMETER
static const std::string VELOCITY
static InputParameters validParams()
virtual void addVariables() override
Add variables the model uses.
static const std::string HEAT_TRANSFER_COEFFICIENT_WALL
virtual void addRhoEAIC() override
virtual Real getScalingFactorRhoA() const override
virtual void addInitialConditions() override
Add initial conditions.
virtual Real getScalingFactorRhoEA() const override
static const std::string SPECIFIC_HEAT_CONSTANT_VOLUME
std::vector< VariableName > _passives_times_area_names
Names of the passive transport solution variables, if any [amount/m].
static const std::string RHOUA
static const std::string REYNOLDS_NUMBER
static const std::string VELOCITY_Y
static const std::string RHOA
static const std::string VELOCITY_X
FlowModelSinglePhase(const InputParameters &params)
virtual void addTemperatureAux() override
static const std::string DYNAMIC_VISCOSITY
const std::vector< Real > _scaling_factors
Scaling factors for each solution variable (rhoA, rhouA, rhoEA)
virtual void addDensityIC() override
virtual void addFluidPropertiesMaterials() override
Adds materials to compute fluid properties.
virtual void addKernels() override
Adds the kernels.
static const std::string FRICTION_FACTOR_DARCY
static const std::string SPECIFIC_HEAT_CONSTANT_PRESSURE
static const std::string THERMAL_CONDUCTIVITY
virtual void addSlopeReconstructionMaterial() override
Adds slope reconstruction material.
static const std::string SPECIFIC_INTERNAL_ENERGY
void addPassiveTransportIC(const VariableName &var, const FunctionName &ic_fn)
Adds IC for a passive transport variable.
virtual void addPressureAux() override
virtual void addNumericalFluxUserObject() override
Adds numerical flux user object.
static const std::string TEMPERATURE
static const std::string SPECIFIC_VOLUME
static const std::string RHOEA
virtual Real getScalingFactorRhoUA() const override
static const std::string SPECIFIC_TOTAL_ENTHALPY
static const std::string VELOCITY_Z
static const std::string PRESSURE
virtual std::vector< VariableName > solutionVariableNames() const override
Returns the solution variable names for the flow model.
static const std::string DIRECTION
Definition FlowModel.h:110
FlowChannelBase & _flow_channel
The flow channel component that built this class.
Definition FlowModel.h:59
static const std::string AREA
Definition FlowModel.h:102
const FunctionName & getVariableFn(const FunctionName &fn_param_name)
Definition FlowModel.C:56
static const std::string AREA_LINEAR
Definition FlowModel.h:103
const std::string _comp_name
The component name.
Definition FlowModel.h:68
Factory & _factory
The Factory associated with the MooseApp.
Definition FlowModel.h:56
const libMesh::FEType & _fe_type
The type of FE used for flow.
Definition FlowModel.h:62
const UserObjectName _fp_name
The name of the user object that defines fluid properties.
Definition FlowModel.h:65
THMProblem & _sim
Definition FlowModel.h:53
void applySpecificParameters(const InputParameters &common, const std::vector< std::string > &include, bool allow_private=false)
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
T & set(const std::string &name, bool quiet_mode=false)
const InputParameters & parameters() const
bool isParamSetByUser(const std::string &name) const
const T & getParam(const std::string &name) const
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.
const bool & getImplicitTimeIntegrationFlag()
Gets the flag indicating whether an implicit time integration scheme is being used.
Definition Simulation.h:329
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
void addSimInitialCondition(const std::string &type, const std::string &name, InputParameters params)
Definition Simulation.C:495
static const std::string FRICTION_FACTOR_DARCY
Definition THMNames.h:19
static const std::string AREA
Definition THMNames.h:14
static const std::string REYNOLDS_NUMBER
Definition THMNames.h:28
static const std::string RHOEA
Definition THMNames.h:30
static const std::string SPECIFIC_VOLUME
Definition THMNames.h:38
static const std::string VELOCITY_Y
Definition THMNames.h:45
static const std::string TEMPERATURE
Definition THMNames.h:39
static const std::string SOUND_SPEED
Definition THMNames.h:32
static const std::string VELOCITY_X
Definition THMNames.h:44
static const std::string VELOCITY
Definition THMNames.h:43
static const std::string VELOCITY_Z
Definition THMNames.h:46
static const std::string SPECIFIC_INTERNAL_ENERGY
Definition THMNames.h:36
static const std::string HYDRAULIC_DIAMETER
Definition THMNames.h:23
static const std::string SPECIFIC_TOTAL_ENTHALPY
Definition THMNames.h:37
static const std::string SPECIFIC_HEAT_CONSTANT_VOLUME
Definition THMNames.h:35
static const std::string RHOUA
Definition THMNames.h:31
static const std::string THERMAL_CONDUCTIVITY
Definition THMNames.h:41
static const std::string PRESSURE
Definition THMNames.h:27
static const std::string HEAT_TRANSFER_COEFFICIENT_WALL
Definition THMNames.h:22
static const std::string DENSITY
Definition THMNames.h:16
static const std::string SPECIFIC_HEAT_CONSTANT_PRESSURE
Definition THMNames.h:34
static const std::string DYNAMIC_VISCOSITY
Definition THMNames.h:18
static const std::string RHOA
Definition THMNames.h:29