https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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"
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
31void
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);
56 _sim.addSimVariable(false, THM::TEMPERATURE, _fe_type, subdomains);
58
61}
62
63void
83
84bool
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
97void
98FlowModel1PhaseBase::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
109void
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
120void
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
132void
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
153void
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
165void
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
178void
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
192void
206
207void
223
224void
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
237void
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
250void
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
265void
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
279void
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
294void
296{
297 if (_flow_channel.getParam<bool>("enable_heat_conduction"))
299}
300
301void
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
315void
326
327void
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
360void
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
373void
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
386void
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
400void
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
415void
const ExecFlagType EXEC_TIMESTEP_END
const ExecFlagType EXEC_INITIAL
virtual const std::vector< SubdomainName > & getSubdomainNames() const
Gets the subdomain names for this component.
Definition Component.C:345
bool problemIsTransient() const
Whether the problem is transient.
Definition Component.h:264
virtual void addKernel(const std::string &kernel_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 single-phase flow channels.
virtual void addMooseObjects() override
Add MOOSE objects this model uses.
virtual void addSpecificTotalEnthalpyAux()
virtual void addFunctorMaterials()
Adds the functor materials.
virtual void addRhoEAIC()=0
virtual void addInitialConditions() override
Add initial conditions.
virtual void addTemperatureAux()=0
virtual std::vector< VariableName > solutionVariableNames() const =0
Returns the solution variable names for the flow model.
virtual Real getScalingFactorRhoA() const =0
virtual void addMomentumFrictionKernel()
virtual void addSpecificTotalEnthalpyIC()
virtual void addKernels()
Adds the kernels.
virtual void addMomentumAreaGradientKernel()
virtual void addPressureAux()=0
bool ICParametersAreValid() const
Returns true if all of the IC parameters are valid.
virtual void addSpecificInternalEnergyAux()
virtual void addMomentumGravityKernel()
FlowModel1PhaseBase(const InputParameters &params)
virtual void addVelocityAux()
virtual Real getScalingFactorRhoEA() const =0
void addTimeDerivativeKernelIfTransient(const VariableName &var_name)
Adds a time derivative kernel for the given variable if problem is transient.
virtual void addSpecificInternalEnergyIC()
virtual void addHeatConductionDGKernel()
virtual Real getScalingFactorRhoUA() const =0
virtual void addPostprocessors()
Adds post-processors.
virtual void addFluidPropertiesMaterials()=0
Adds materials to compute fluid properties.
virtual void addVariables() override
Add variables the model uses.
virtual void addEnergyGravityKernel()
virtual void addRDGMooseObjects()
Adds RDG objects.
virtual void addRDGAdvectionDGKernels()=0
Adds DG kernels.
static InputParameters validParams()
virtual void addSpecificVolumeIC()
virtual void addSlopeReconstructionMaterial()=0
Adds slope reconstruction material.
virtual void addAuxKernels()
Adds the aux kernels.
virtual void addNumericalFluxUserObject()=0
Adds numerical flux user object.
virtual void addDGKernels()
Adds the DG kernels.
virtual void addSpecificVolumeAux()
virtual void addDensityIC()=0
void addFunctionIC(const VariableName &var_name, const FunctionName &function_name)
Adds an IC from a function.
Provides functions to setup the flow model.
Definition FlowModel.h:28
FlowChannelBase & _flow_channel
The flow channel component that built this class.
Definition FlowModel.h:59
virtual void addCommonVariables()
Adds variables common to any flow model (A, P_hf, ...)
Definition FlowModel.C:70
const std::string _comp_name
The component name.
Definition FlowModel.h:68
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
std::vector< VariableName > _solution_vars
Definition FlowModel.h:76
static InputParameters validParams()
Definition FlowModel.C:19
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
virtual void addCommonInitialConditions()
Adds initial conditions common to any flow model.
Definition FlowModel.C:80
virtual void addCommonMooseObjects()
Adds common MOOSE objects.
Definition FlowModel.C:110
const RealVectorValue & _gravity_vector
Gravitational acceleration vector.
Definition FlowModel.h:71
THMProblem & _sim
Definition FlowModel.h:53
std::vector< VariableName > _derivative_vars
Definition FlowModel.h:79
void addRequiredParam(const std::string &name, const std::string &doc_string)
T & set(const std::string &name, bool quiet_mode=false)
const std::string & name() const
const T & getParam(const std::string &name) const
bool isParamValid(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.
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 constexpr std::size_t dim
static const std::string DIRECTION
Definition THMNames.h:17
static const std::string FRICTION_FACTOR_DARCY
Definition THMNames.h:19
static const std::string AREA
Definition THMNames.h:14
static const std::string RHOEA
Definition THMNames.h:30
static const std::string AREA_LINEAR
Definition THMNames.h:15
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 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 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 DENSITY
Definition THMNames.h:16
static const std::string RHOA
Definition THMNames.h:29