https://mooseframework.inl.gov
FlowModel1PhaseBase.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 "FlowModel1PhaseBase.h"
11 #include "FlowChannel1PhaseBase.h"
12 #include "THMNames.h"
13 
16 {
18  params.addRequiredParam<UserObjectName>("numerical_flux", "Numerical flux user object name");
19  params.addRequiredParam<MooseEnum>("rdg_slope_reconstruction",
20  "Slope reconstruction type for rDG");
21  return params;
22 }
23 
25  : FlowModel(params),
26  _rdg_slope_reconstruction(params.get<MooseEnum>("rdg_slope_reconstruction")),
27  _numerical_flux_name(params.get<UserObjectName>("numerical_flux"))
28 {
29 }
30 
31 void
33 {
35 
36  const std::vector<SubdomainName> & subdomains = _flow_channel.getSubdomainNames();
37 
38  // Nonlinear variables
42 
43  // Auxiliary variables
44  _sim.addSimVariable(false, THM::DENSITY, _fe_type, subdomains);
46  {
47  _sim.addSimVariable(false, THM::VELOCITY_X, _fe_type, subdomains);
48  _sim.addSimVariable(false, THM::VELOCITY_Y, _fe_type, subdomains);
49  _sim.addSimVariable(false, THM::VELOCITY_Z, _fe_type, subdomains);
50  }
51  else
52  _sim.addSimVariable(false, THM::VELOCITY, _fe_type, subdomains);
53  _sim.addSimVariable(false, THM::PRESSURE, _fe_type, subdomains);
54  _sim.addSimVariable(false, THM::SPECIFIC_VOLUME, _fe_type, subdomains);
56  _sim.addSimVariable(false, THM::TEMPERATURE, _fe_type, subdomains);
58 
61 }
62 
63 void
65 {
67 
69  {
70  addRhoAIC();
71  addRhoUAIC();
72  addRhoEAIC();
73 
74  addFunctionIC(THM::PRESSURE, _flow_channel.getParam<FunctionName>("initial_p"));
75  addFunctionIC(THM::TEMPERATURE, _flow_channel.getParam<FunctionName>("initial_T"));
76  addVelocityIC();
77  addDensityIC();
81  }
82 }
83 
84 bool
86 {
87  const auto & flow_channel_1phase_base =
88  dynamic_cast<const FlowChannel1PhaseBase &>(_flow_channel);
89 
90  for (const auto & param : flow_channel_1phase_base.ICParameters())
91  if (!_flow_channel.isParamValid(param))
92  return false;
93 
94  return true;
95 }
96 
97 void
98 FlowModel1PhaseBase::addFunctionIC(const VariableName & var_name,
99  const FunctionName & function_name)
100 {
101  const std::string class_name = "FunctionIC";
102  InputParameters params = _factory.getValidParams(class_name);
103  params.set<VariableName>("variable") = var_name;
104  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
105  params.set<FunctionName>("function") = function_name;
106  _sim.addSimInitialCondition(class_name, genName(_comp_name, var_name + "_ic"), params);
107 }
108 
109 void
111 {
112  const std::string class_name = "VariableProductIC";
113  InputParameters params = _factory.getValidParams(class_name);
114  params.set<VariableName>("variable") = THM::RHOA;
115  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
116  params.set<std::vector<VariableName>>("values") = {THM::DENSITY, THM::AREA};
117  _sim.addSimInitialCondition(class_name, genName(_comp_name, "rhoA_ic"), params);
118 }
119 
120 void
122 {
123  const std::string class_name = "VariableFunctionProductIC";
124  InputParameters params = _factory.getValidParams(class_name);
125  params.set<VariableName>("variable") = THM::RHOUA;
126  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
127  params.set<std::vector<VariableName>>("var") = {THM::RHOA};
128  params.set<FunctionName>("fn") = _flow_channel.getParam<FunctionName>("initial_vel");
129  _sim.addSimInitialCondition(class_name, genName(_comp_name, "rhouA_ic"), params);
130 }
131 
132 void
134 {
136  {
137  std::vector<VariableName> var_name = {THM::VELOCITY_X, THM::VELOCITY_Y, THM::VELOCITY_Z};
138  for (const auto i : make_range(Moose::dim))
139  {
140  const std::string class_name = "VectorVelocityIC";
141  InputParameters params = _factory.getValidParams(class_name);
142  params.set<VariableName>("variable") = var_name[i];
143  params.set<FunctionName>("vel_fn") = _flow_channel.getParam<FunctionName>("initial_vel");
144  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
145  params.set<unsigned int>("component") = i;
146  _sim.addSimInitialCondition(class_name, genName(_comp_name, "vel_ic", i), params);
147  }
148  }
149  else
150  addFunctionIC(THM::VELOCITY, _flow_channel.getParam<FunctionName>("initial_vel"));
151 }
152 
153 void
155 {
156  const std::string class_name = "SpecificVolumeIC";
157  InputParameters params = _factory.getValidParams(class_name);
158  params.set<VariableName>("variable") = THM::SPECIFIC_VOLUME;
159  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
160  params.set<std::vector<VariableName>>("rhoA") = {THM::RHOA};
161  params.set<std::vector<VariableName>>("A") = {THM::AREA};
162  _sim.addSimInitialCondition(class_name, genName(_comp_name, "v_ic"), params);
163 }
164 
165 void
167 {
168  const std::string class_name = "SpecificInternalEnergyIC";
169  InputParameters params = _factory.getValidParams(class_name);
170  params.set<VariableName>("variable") = THM::SPECIFIC_INTERNAL_ENERGY;
171  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
172  params.set<std::vector<VariableName>>("rhoA") = {THM::RHOA};
173  params.set<std::vector<VariableName>>("rhouA") = {THM::RHOUA};
174  params.set<std::vector<VariableName>>("rhoEA") = {THM::RHOEA};
175  _sim.addSimInitialCondition(class_name, genName(_comp_name, "e_ic"), params);
176 }
177 
178 void
180 {
181  const std::string class_name = "SpecificTotalEnthalpyIC";
182  InputParameters params = _factory.getValidParams(class_name);
183  params.set<VariableName>("variable") = THM::SPECIFIC_TOTAL_ENTHALPY;
184  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
185  params.set<std::vector<VariableName>>("p") = {THM::PRESSURE};
186  params.set<std::vector<VariableName>>("rhoA") = {THM::RHOA};
187  params.set<std::vector<VariableName>>("rhoEA") = {THM::RHOEA};
188  params.set<std::vector<VariableName>>("A") = {THM::AREA};
189  _sim.addSimInitialCondition(class_name, genName(_comp_name, "H_ic"), params);
190 }
191 
192 void
194 {
196 
197  addKernels();
198  addDGKernels();
200  addAuxKernels();
205 }
206 
207 void
209 {
210  // Mass equation
212 
213  // Momentum equation
218 
219  // Energy equation
222 }
223 
224 void
226 {
228  {
229  const std::string class_name = "ADTimeDerivative";
230  InputParameters params = _factory.getValidParams(class_name);
231  params.set<NonlinearVariableName>("variable") = var_name;
232  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
233  _sim.addKernel(class_name, genName(_comp_name, var_name + "_td"), params);
234  }
235 }
236 
237 void
239 {
240  const std::string class_name = "ADOneD3EqnMomentumAreaGradient";
241  InputParameters params = _factory.getValidParams(class_name);
242  params.set<NonlinearVariableName>("variable") = THM::RHOUA;
243  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
244  params.set<std::vector<VariableName>>("A") = {THM::AREA_LINEAR};
245  params.set<MaterialPropertyName>("direction") = THM::DIRECTION;
246  params.set<MaterialPropertyName>("p") = THM::PRESSURE;
247  _sim.addKernel(class_name, genName(_comp_name, "mom_area_grad"), params);
248 }
249 
250 void
252 {
253  const std::string class_name = "ADOneD3EqnMomentumFriction";
254  InputParameters params = _factory.getValidParams(class_name);
255  params.set<NonlinearVariableName>("variable") = THM::RHOUA;
256  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
257  params.set<std::vector<VariableName>>("A") = {THM::AREA};
258  params.set<MaterialPropertyName>("D_h") = {THM::HYDRAULIC_DIAMETER};
259  params.set<MaterialPropertyName>("rho") = THM::DENSITY;
260  params.set<MaterialPropertyName>("vel") = THM::VELOCITY;
261  params.set<MaterialPropertyName>("f_D") = THM::FRICTION_FACTOR_DARCY;
262  _sim.addKernel(class_name, genName(_comp_name, "mom_friction"), params);
263 }
264 
265 void
267 {
268  const std::string class_name = "ADOneD3EqnMomentumGravity";
269  InputParameters params = _factory.getValidParams(class_name);
270  params.set<NonlinearVariableName>("variable") = THM::RHOUA;
271  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
272  params.set<std::vector<VariableName>>("A") = {THM::AREA};
273  params.set<MaterialPropertyName>("direction") = THM::DIRECTION;
274  params.set<MaterialPropertyName>("rho") = THM::DENSITY;
275  params.set<RealVectorValue>("gravity_vector") = _gravity_vector;
276  _sim.addKernel(class_name, genName(_comp_name, "mom_gravity"), params);
277 }
278 
279 void
281 {
282  const std::string class_name = "ADOneD3EqnEnergyGravity";
283  InputParameters params = _factory.getValidParams(class_name);
284  params.set<NonlinearVariableName>("variable") = THM::RHOEA;
285  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
286  params.set<std::vector<VariableName>>("A") = {THM::AREA};
287  params.set<MaterialPropertyName>("direction") = THM::DIRECTION;
288  params.set<MaterialPropertyName>("rho") = THM::DENSITY;
289  params.set<MaterialPropertyName>("vel") = THM::VELOCITY;
290  params.set<RealVectorValue>("gravity_vector") = _gravity_vector;
291  _sim.addKernel(class_name, genName(_comp_name, "energy_gravity"), params);
292 }
293 
294 void
296 {
297  if (_flow_channel.getParam<bool>("enable_heat_conduction"))
299 }
300 
301 void
303 {
304  const std::string class_name = "HeatConduction3EqnDGKernel";
305  InputParameters params = _factory.getValidParams(class_name);
306  params.set<NonlinearVariableName>("variable") = THM::RHOEA;
307  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
308  params.set<MaterialPropertyName>("k") = THM::THERMAL_CONDUCTIVITY;
309  params.set<MaterialPropertyName>("T") = THM::TEMPERATURE;
310  params.set<MaterialPropertyName>("direction") = THM::DIRECTION;
311  params.set<std::vector<VariableName>>("A") = {THM::AREA};
312  _sim.addDGKernel(class_name, genName(name(), "heat_cond"), params);
313 }
314 
315 void
317 {
318  addPressureAux();
320  addVelocityAux();
321  addDensityAux();
325 }
326 
327 void
329 {
331  {
332  std::vector<AuxVariableName> var_names = {THM::VELOCITY_X, THM::VELOCITY_Y, THM::VELOCITY_Z};
333  for (const auto i : make_range(Moose::dim))
334  {
335  const std::string class_name = "ADVectorVelocityComponentAux";
336  InputParameters params = _factory.getValidParams(class_name);
337  params.set<AuxVariableName>("variable") = var_names[i];
338  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
339  params.set<std::vector<VariableName>>("arhoA") = {THM::RHOA};
340  params.set<std::vector<VariableName>>("arhouA") = {THM::RHOUA};
341  params.set<MaterialPropertyName>("direction") = THM::DIRECTION;
342  params.set<unsigned int>("component") = i;
343  params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_TIMESTEP_END};
344  _sim.addAuxKernel(class_name, genName(_comp_name, i, "vel_vec"), params);
345  }
346  }
347  else
348  {
349  const std::string class_name = "QuotientAux";
350  InputParameters params = _factory.getValidParams(class_name);
351  params.set<AuxVariableName>("variable") = THM::VELOCITY;
352  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
353  params.set<std::vector<VariableName>>("numerator") = {THM::RHOUA};
354  params.set<std::vector<VariableName>>("denominator") = {THM::RHOA};
355  params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_TIMESTEP_END};
356  _sim.addAuxKernel(class_name, genName(_comp_name, "vel"), params);
357  }
358 }
359 
360 void
362 {
363  const std::string class_name = "QuotientAux";
364  InputParameters params = _factory.getValidParams(class_name);
365  params.set<AuxVariableName>("variable") = THM::DENSITY;
366  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
367  params.set<std::vector<VariableName>>("numerator") = {THM::RHOA};
368  params.set<std::vector<VariableName>>("denominator") = {THM::AREA};
369  params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_TIMESTEP_END};
370  _sim.addAuxKernel(class_name, genName(_comp_name, "rho_aux"), params);
371 }
372 
373 void
375 {
376  const std::string class_name = "THMSpecificVolumeAux";
377  InputParameters params = _factory.getValidParams(class_name);
378  params.set<AuxVariableName>("variable") = THM::SPECIFIC_VOLUME;
379  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
380  params.set<std::vector<VariableName>>("rhoA") = {THM::RHOA};
381  params.set<std::vector<VariableName>>("A") = {THM::AREA};
382  params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_TIMESTEP_END};
383  _sim.addAuxKernel(class_name, genName(_comp_name, "v_aux"), params);
384 }
385 
386 void
388 {
389  const std::string class_name = "THMSpecificInternalEnergyAux";
390  InputParameters params = _factory.getValidParams(class_name);
391  params.set<AuxVariableName>("variable") = THM::SPECIFIC_INTERNAL_ENERGY;
392  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
393  params.set<std::vector<VariableName>>("rhoA") = {THM::RHOA};
394  params.set<std::vector<VariableName>>("rhouA") = {THM::RHOUA};
395  params.set<std::vector<VariableName>>("rhoEA") = {THM::RHOEA};
396  params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_TIMESTEP_END};
397  _sim.addAuxKernel(class_name, genName(_comp_name, "e_aux"), params);
398 }
399 
400 void
402 {
403  const std::string class_name = "SpecificTotalEnthalpyAux";
404  InputParameters params = _factory.getValidParams(class_name);
405  params.set<AuxVariableName>("variable") = THM::SPECIFIC_TOTAL_ENTHALPY;
406  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
407  params.set<std::vector<VariableName>>("rhoA") = {THM::RHOA};
408  params.set<std::vector<VariableName>>("rhoEA") = {THM::RHOEA};
409  params.set<std::vector<VariableName>>("p") = {THM::PRESSURE};
410  params.set<std::vector<VariableName>>("A") = {THM::AREA};
411  params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_TIMESTEP_END};
412  _sim.addAuxKernel(class_name, genName(_comp_name, "H_auxkernel"), params);
413 }
414 
415 void
417 {
420 }
virtual Real getScalingFactorRhoEA() const =0
virtual void addRDGAdvectionDGKernels()=0
Adds DG kernels.
virtual void addInitialConditions() override
Add initial conditions.
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.
virtual void addDGKernels()
Adds the DG kernels.
static const std::string SPECIFIC_INTERNAL_ENERGY
Definition: THMNames.h:36
virtual void addMomentumFrictionKernel()
static const std::string RHOEA
Definition: THMNames.h:30
const bool & _output_vector_velocity
True if we output velocity as a vector-value field, false for outputting velocity as a scalar...
Definition: FlowModel.h:82
static InputParameters validParams()
const T & getParam(const std::string &name) const
virtual void addSpecificInternalEnergyIC()
static const std::string VELOCITY_Z
Definition: THMNames.h:46
virtual void addAuxKernels()
Adds the aux kernels.
virtual void addSpecificTotalEnthalpyIC()
virtual std::vector< VariableName > solutionVariableNames() const =0
Returns the solution variable names for the flow model.
static const std::string THERMAL_CONDUCTIVITY
Definition: THMNames.h:41
virtual void addMooseObjects() override
Add MOOSE objects this model uses.
virtual void addRDGMooseObjects()
Adds RDG objects.
Provides functions to setup the flow model.
Definition: FlowModel.h:27
T & set(const std::string &name, bool quiet_mode=false)
virtual void addCommonInitialConditions()
Adds initial conditions common to any flow model.
Definition: FlowModel.C:80
virtual void addFluidPropertiesMaterials()=0
Adds materials to compute fluid properties.
InputParameters getValidParams(const std::string &name) const
bool ICParametersAreValid() const
Returns true if all of the IC parameters are valid.
static constexpr std::size_t dim
static InputParameters validParams()
Definition: FlowModel.C:19
static const std::string FRICTION_FACTOR_DARCY
Definition: THMNames.h:19
const ExecFlagType EXEC_TIMESTEP_END
virtual void addAuxKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
virtual void addSpecificInternalEnergyAux()
virtual void addKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
FlowChannelBase & _flow_channel
The flow channel component that built this class.
Definition: FlowModel.h:59
void addRequiredParam(const std::string &name, const std::string &doc_string)
static const std::string TEMPERATURE
Definition: THMNames.h:39
virtual void addNumericalFluxUserObject()=0
Adds numerical flux user object.
virtual Real getScalingFactorRhoA() const =0
virtual void addHeatConductionDGKernel()
virtual void addMomentumAreaGradientKernel()
virtual void addFunctorMaterials()
Adds the functor materials.
static const std::string AREA_LINEAR
Definition: THMNames.h:15
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
virtual void addEnergyGravityKernel()
const std::string & name() const
virtual void addPressureAux()=0
static const std::string VELOCITY_Y
Definition: THMNames.h:45
static const std::string HYDRAULIC_DIAMETER
Definition: THMNames.h:23
bool problemIsTransient() const
Whether the problem is transient.
Definition: Component.h:264
virtual void addCommonVariables()
Adds variables common to any flow model (A, P_hf, ...)
Definition: FlowModel.C:70
FlowModel1PhaseBase(const InputParameters &params)
virtual void addRhoEAIC()=0
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
Factory & _factory
The Factory associated with the MooseApp.
Definition: FlowModel.h:56
const RealVectorValue & _gravity_vector
Gravitational acceleration vector.
Definition: FlowModel.h:71
static const std::string AREA
Definition: THMNames.h:14
static const std::string SPECIFIC_VOLUME
Definition: THMNames.h:38
static const std::string DIRECTION
Definition: THMNames.h:17
virtual void addSlopeReconstructionMaterial()=0
Adds slope reconstruction material.
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)
virtual void addDensityIC()=0
virtual void addPostprocessors()
Adds post-processors.
virtual void addVelocityIC()
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 void addDensityAux()
static const std::string VELOCITY_X
Definition: THMNames.h:44
IntRange< T > make_range(T beg, T end)
virtual void addKernels()
Adds the kernels.
bool isParamValid(const std::string &name) const
std::vector< VariableName > _solution_vars
Definition: FlowModel.h:76
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
virtual Real getScalingFactorRhoUA() const =0
virtual void addCommonMooseObjects()
Adds common MOOSE objects.
Definition: FlowModel.C:110
const std::string _comp_name
The component name.
Definition: FlowModel.h:68
virtual void addSpecificTotalEnthalpyAux()
THMProblem & _sim
Definition: FlowModel.h:53
virtual void addSpecificVolumeAux()
virtual void addMomentumGravityKernel()
Base class for single-phase flow channels.
void addFunctionIC(const VariableName &var_name, const FunctionName &function_name)
Adds an IC from a function.
virtual void addVelocityAux()
static const std::string RHOA
Definition: THMNames.h:29
virtual void addSpecificVolumeIC()
const Elem & get(const ElemType type_in)
static const std::string SPECIFIC_TOTAL_ENTHALPY
Definition: THMNames.h:37
virtual void addTemperatureAux()=0
std::vector< VariableName > _derivative_vars
Definition: FlowModel.h:79
static const std::string DENSITY
Definition: THMNames.h:16
const ExecFlagType EXEC_INITIAL