https://mooseframework.inl.gov
FlowModelGasMix.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 "FlowModelGasMix.h"
11 #include "FlowChannelBase.h"
12 #include "THMNames.h"
13 
14 registerMooseObject("ThermalHydraulicsApp", FlowModelGasMix);
15 
18 {
20 
21  params.addRequiredParam<Real>("scaling_factor_xirhoA",
22  "Scaling factor for the secondary component mass equation");
23  params.addRequiredParam<Real>("scaling_factor_rhoA",
24  "Scaling factor for the mixture mass equation");
25  params.addRequiredParam<Real>("scaling_factor_rhouA", "Scaling factor for the momentum equation");
26  params.addRequiredParam<Real>("scaling_factor_rhoEA", "Scaling factor for the energy equation");
27 
28  return params;
29 }
30 
32 
33 void
35 {
37 
38  const std::vector<SubdomainName> & subdomains = _flow_channel.getSubdomainNames();
39 
41  true, THM::XIRHOA, _fe_type, subdomains, getParam<Real>("scaling_factor_xirhoA"));
42  _sim.addSimVariable(false, THM::MASS_FRACTION, _fe_type, subdomains);
43 }
44 
45 Real
47 {
48  return getParam<Real>("scaling_factor_rhoA");
49 }
50 
51 Real
53 {
54  return getParam<Real>("scaling_factor_rhouA");
55 }
56 
57 Real
59 {
60  return getParam<Real>("scaling_factor_rhoEA");
61 }
62 
63 std::vector<VariableName>
65 {
67 }
68 
69 void
71 {
73 
75  {
76  addXiRhoAIC();
78  _flow_channel.getParam<FunctionName>("initial_mass_fraction"));
79  }
80 }
81 
82 void
84 {
85  const std::string class_name = "VariableProductIC";
86  InputParameters params = _factory.getValidParams(class_name);
87  params.set<VariableName>("variable") = THM::XIRHOA;
88  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
89  params.set<std::vector<VariableName>>("values") = {THM::MASS_FRACTION, THM::RHOA};
90  _sim.addSimInitialCondition(class_name, genName(_comp_name, "xirhoA_ic"), params);
91 }
92 
93 void
95 {
96  const std::string class_name = "FlowModelGasMixIC";
97  InputParameters params = _factory.getValidParams(class_name);
98  params.set<VariableName>("variable") = THM::RHOEA;
99  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
100  params.set<MooseEnum>("quantity") = "rhoEA";
101  params.set<FunctionName>("mass_fraction") =
102  _flow_channel.getParam<FunctionName>("initial_mass_fraction");
103  params.set<FunctionName>("pressure") = _flow_channel.getParam<FunctionName>("initial_p");
104  params.set<FunctionName>("temperature") = _flow_channel.getParam<FunctionName>("initial_T");
105  params.set<FunctionName>("velocity") = _flow_channel.getParam<FunctionName>("initial_vel");
106  params.set<std::vector<VariableName>>("area") = {THM::AREA};
107  params.set<UserObjectName>("fluid_properties") = _fp_name;
108  _sim.addSimInitialCondition(class_name, genName(_comp_name, "rhoEA_ic"), params);
109 }
110 
111 void
113 {
114  const std::string class_name = "FlowModelGasMixIC";
115  InputParameters params = _factory.getValidParams(class_name);
116  params.set<VariableName>("variable") = THM::DENSITY;
117  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
118  params.set<MooseEnum>("quantity") = "rho";
119  params.set<FunctionName>("mass_fraction") =
120  _flow_channel.getParam<FunctionName>("initial_mass_fraction");
121  params.set<FunctionName>("pressure") = _flow_channel.getParam<FunctionName>("initial_p");
122  params.set<FunctionName>("temperature") = _flow_channel.getParam<FunctionName>("initial_T");
123  params.set<FunctionName>("velocity") = _flow_channel.getParam<FunctionName>("initial_vel");
124  params.set<std::vector<VariableName>>("area") = {THM::AREA};
125  params.set<UserObjectName>("fluid_properties") = _fp_name;
126  _sim.addSimInitialCondition(class_name, genName(_comp_name, "rho_ic"), params);
127 }
128 
129 void
131 {
133 
135 }
136 
137 void
139 {
141 
144 }
145 
146 void
148 {
149  const std::string class_name = "MassDiffusionSpeciesGasMixDGKernel";
150  InputParameters params = _factory.getValidParams(class_name);
151  params.set<NonlinearVariableName>("variable") = THM::XIRHOA;
152  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
153  params.set<std::vector<VariableName>>("A_linear") = {THM::AREA_LINEAR};
154  params.set<MaterialPropertyName>("density") = THM::DENSITY;
155  params.set<MaterialPropertyName>("diffusion_coefficient") = THM::MASS_DIFFUSION_COEFFICIENT;
156  params.set<MaterialPropertyName>("mass_fraction") = THM::MASS_FRACTION;
157  params.set<MaterialPropertyName>("direction") = THM::DIRECTION;
158  params.set<bool>("implicit") = _sim.getImplicitTimeIntegrationFlag();
159  _sim.addDGKernel(class_name, genName(_comp_name, "mass_diffusion_species"), params);
160 }
161 
162 void
164 {
165  const std::string class_name = "MassDiffusionEnergyGasMixDGKernel";
166  InputParameters params = _factory.getValidParams(class_name);
167  params.set<NonlinearVariableName>("variable") = THM::RHOEA;
168  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
169  params.set<std::vector<VariableName>>("A_linear") = {THM::AREA_LINEAR};
170  params.set<MaterialPropertyName>("density") = THM::DENSITY;
171  params.set<MaterialPropertyName>("pressure") = THM::PRESSURE;
172  params.set<MaterialPropertyName>("temperature") = THM::TEMPERATURE;
173  params.set<MaterialPropertyName>("velocity") = THM::VELOCITY;
174  params.set<MaterialPropertyName>("diffusion_coefficient") = THM::MASS_DIFFUSION_COEFFICIENT;
175  params.set<MaterialPropertyName>("mass_fraction") = THM::MASS_FRACTION;
176  params.set<MaterialPropertyName>("direction") = THM::DIRECTION;
177  params.set<UserObjectName>("fluid_properties") = _fp_name;
178  params.set<bool>("implicit") = _sim.getImplicitTimeIntegrationFlag();
179  _sim.addDGKernel(class_name, genName(_comp_name, "mass_diffusion_energy"), params);
180 }
181 
182 void
184 {
187 }
188 
189 void
191 {
192  const std::string class_name = "FlowModelGasMixAux";
193  InputParameters params = _factory.getValidParams(class_name);
194  params.set<AuxVariableName>("variable") = THM::PRESSURE;
195  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
196  params.set<MooseEnum>("quantity") = "p";
197  params.set<std::vector<VariableName>>("xirhoA") = {THM::XIRHOA};
198  params.set<std::vector<VariableName>>("rhoA") = {THM::RHOA};
199  params.set<std::vector<VariableName>>("rhouA") = {THM::RHOUA};
200  params.set<std::vector<VariableName>>("rhoEA") = {THM::RHOEA};
201  params.set<std::vector<VariableName>>("area") = {THM::AREA};
202  params.set<UserObjectName>("fluid_properties") = _fp_name;
203  params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_TIMESTEP_END};
204  _sim.addAuxKernel(class_name, genName(_comp_name, "p_aux"), params);
205 }
206 
207 void
209 {
210  const std::string class_name = "FlowModelGasMixAux";
211  InputParameters params = _factory.getValidParams(class_name);
212  params.set<AuxVariableName>("variable") = THM::TEMPERATURE;
213  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
214  params.set<MooseEnum>("quantity") = "T";
215  params.set<std::vector<VariableName>>("xirhoA") = {THM::XIRHOA};
216  params.set<std::vector<VariableName>>("rhoA") = {THM::RHOA};
217  params.set<std::vector<VariableName>>("rhouA") = {THM::RHOUA};
218  params.set<std::vector<VariableName>>("rhoEA") = {THM::RHOEA};
219  params.set<std::vector<VariableName>>("area") = {THM::AREA};
220  params.set<UserObjectName>("fluid_properties") = _fp_name;
221  params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_TIMESTEP_END};
222  _sim.addAuxKernel(class_name, genName(_comp_name, "T_aux"), params);
223 }
224 
225 void
227 {
228  const std::string class_name = "QuotientAux";
229  InputParameters params = _factory.getValidParams(class_name);
230  params.set<AuxVariableName>("variable") = THM::MASS_FRACTION;
231  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
232  params.set<std::vector<VariableName>>("numerator") = {THM::XIRHOA};
233  params.set<std::vector<VariableName>>("denominator") = {THM::RHOA};
234  params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_TIMESTEP_END};
235  _sim.addAuxKernel(class_name, genName(_comp_name, "xi_aux"), params);
236 }
237 
238 void
240 {
241  const std::string class_name = "FluidPropertiesGasMixMaterial";
242  InputParameters params = _factory.getValidParams(class_name);
243  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
244  params.set<std::vector<VariableName>>("xirhoA") = {THM::XIRHOA};
245  params.set<std::vector<VariableName>>("rhoA") = {THM::RHOA};
246  params.set<std::vector<VariableName>>("rhouA") = {THM::RHOUA};
247  params.set<std::vector<VariableName>>("rhoEA") = {THM::RHOEA};
248  params.set<std::vector<VariableName>>("area") = {THM::AREA};
249  params.set<UserObjectName>("fluid_properties") = _fp_name;
250  _sim.addMaterial(class_name, genName(_comp_name, "fp_mat"), params);
251 }
252 
253 void
255 {
256  const std::string class_name = "NumericalFluxGasMixHLLC";
257  InputParameters params = _factory.getValidParams(class_name);
258  params.set<UserObjectName>("fluid_properties") = _fp_name;
259  params.set<MooseEnum>("emit_on_nan") = "none";
260  params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_LINEAR, EXEC_NONLINEAR};
261  _sim.addUserObject(class_name, _numerical_flux_name, params);
262 }
263 
264 void
266 {
267  const std::string class_name = "SlopeReconstructionGasMixMaterial";
268  InputParameters params = _factory.getValidParams(class_name);
269  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
270  params.set<MooseEnum>("scheme") = _rdg_slope_reconstruction;
271  params.set<std::vector<VariableName>>("A_elem") = {THM::AREA};
272  params.set<std::vector<VariableName>>("A_linear") = {THM::AREA_LINEAR};
273  params.set<std::vector<VariableName>>("xirhoA") = {THM::XIRHOA};
274  params.set<std::vector<VariableName>>("rhoA") = {THM::RHOA};
275  params.set<std::vector<VariableName>>("rhouA") = {THM::RHOUA};
276  params.set<std::vector<VariableName>>("rhoEA") = {THM::RHOEA};
277  params.set<UserObjectName>("fluid_properties") = _fp_name;
278  params.set<bool>("implicit") = _sim.getImplicitTimeIntegrationFlag();
279  _sim.addMaterial(class_name, genName(_comp_name, "slope_mat"), params);
280 }
281 
282 void
284 {
285  const std::vector<NonlinearVariableName> vars{THM::XIRHOA, THM::RHOA, THM::RHOUA, THM::RHOEA};
286 
287  for (const auto & var : vars)
288  {
289  const std::string class_name = "NumericalFluxGasMixDGKernel";
290  InputParameters params = _factory.getValidParams(class_name);
291  params.set<NonlinearVariableName>("variable") = var;
292  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
293  params.set<std::vector<VariableName>>("A_linear") = {THM::AREA_LINEAR};
294  params.set<std::vector<VariableName>>("xirhoA") = {THM::XIRHOA};
295  params.set<std::vector<VariableName>>("rhoA") = {THM::RHOA};
296  params.set<std::vector<VariableName>>("rhouA") = {THM::RHOUA};
297  params.set<std::vector<VariableName>>("rhoEA") = {THM::RHOEA};
298  params.set<UserObjectName>("numerical_flux") = _numerical_flux_name;
299  params.set<bool>("implicit") = _sim.getImplicitTimeIntegrationFlag();
300  _sim.addDGKernel(class_name, genName(_comp_name, "advection:" + var), params);
301  }
302 }
virtual Real getScalingFactorRhoUA() const override
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 RHOEA
Definition: THMNames.h:30
virtual void addXiRhoAIC()
virtual void addMassFractionAux()
static InputParameters validParams()
virtual void addAuxKernels()
Adds the aux kernels.
virtual void addTemperatureAux() override
virtual void addMaterial(const std::string &material_name, const std::string &name, InputParameters &parameters)
char ** vars
T & set(const std::string &name, bool quiet_mode=false)
InputParameters getValidParams(const std::string &name) const
bool ICParametersAreValid() const
Returns true if all of the IC parameters are valid.
registerMooseObject("ThermalHydraulicsApp", FlowModelGasMix)
const ExecFlagType EXEC_TIMESTEP_END
virtual void addAuxKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
virtual void addAuxKernels() override
Adds the aux kernels.
FlowChannelBase & _flow_channel
The flow channel component that built this class.
Definition: FlowModel.h:59
virtual void addFluidPropertiesMaterials() override
Adds materials to compute fluid properties.
virtual void addRhoEAIC() override
void addRequiredParam(const std::string &name, const std::string &doc_string)
virtual std::vector< VariableName > solutionVariableNames() const override
Returns the solution variable names for the flow model.
static const std::string TEMPERATURE
Definition: THMNames.h:39
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 addRDGAdvectionDGKernels() override
Adds DG kernels.
virtual Real getScalingFactorRhoA() const override
const UserObjectName _numerical_flux_name
Numerical flux user object name.
static InputParameters validParams()
virtual void addDGKernels() override
Adds the DG kernels.
const T & getParam(const std::string &name) const
virtual void addMassDiffusionSpeciesDGKernel()
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
const MooseEnum _rdg_slope_reconstruction
Slope reconstruction type for rDG.
virtual Real getScalingFactorRhoEA() const override
const ExecFlagType EXEC_LINEAR
Factory & _factory
The Factory associated with the MooseApp.
Definition: FlowModel.h:56
static const std::string AREA
Definition: THMNames.h:14
virtual void addMassDiffusionEnergyDGKernel()
static const std::string DIRECTION
Definition: THMNames.h:17
const ExecFlagType EXEC_NONLINEAR
static const std::string MASS_DIFFUSION_COEFFICIENT
Definition: THMNames.h:24
virtual void addSlopeReconstructionMaterial() override
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 addKernels() override
Adds the kernels.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual void addVariables() override
Add variables the model uses.
1D flow model for a binary gas mixture
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 addDensityIC() override
virtual void addVariables() override
Add variables the model uses.
const UserObjectName _fp_name
The name of the user object that defines fluid properties.
Definition: FlowModel.h:65
const bool & getImplicitTimeIntegrationFlag()
Gets the flag indicating whether an implicit time integration scheme is being used.
Definition: Simulation.h:329
static const std::string MASS_FRACTION
Definition: THMNames.h:25
FlowModelGasMix(const InputParameters &params)
virtual void addInitialConditions() override
Add initial conditions.
static const std::string XIRHOA
Definition: THMNames.h:47
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:307
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.
virtual void addPressureAux() override
void addFunctionIC(const VariableName &var_name, const FunctionName &function_name)
Adds an IC from a function.
static const std::string RHOA
Definition: THMNames.h:29
virtual void addNumericalFluxUserObject() override
Adds numerical flux user object.
static const std::string DENSITY
Definition: THMNames.h:16
const ExecFlagType EXEC_INITIAL