https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
14registerMooseObject("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
33void
35{
37
38 const std::vector<SubdomainName> & subdomains = _flow_channel.getSubdomainNames();
39
41 true, THM::XIRHOA, _fe_type, subdomains, getParam<Real>("scaling_factor_xirhoA"));
43}
44
45Real
47{
48 return getParam<Real>("scaling_factor_rhoA");
49}
50
51Real
53{
54 return getParam<Real>("scaling_factor_rhouA");
55}
56
57Real
59{
60 return getParam<Real>("scaling_factor_rhoEA");
61}
62
63std::vector<VariableName>
68
69void
81
82void
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
93void
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
111void
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
129void
136
137void
145
146void
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
162void
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
182void
188
189void
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
207void
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
225void
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
238void
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
253void
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
264void
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
282void
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}
registerMooseObject("ThermalHydraulicsApp", FlowModelGasMix)
const ExecFlagType EXEC_TIMESTEP_END
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.
bool ICParametersAreValid() const
Returns true if all of the IC parameters are valid.
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()
virtual void addAuxKernels()
Adds the aux kernels.
virtual void addDGKernels()
Adds the DG kernels.
void addFunctionIC(const VariableName &var_name, const FunctionName &function_name)
Adds an IC from a function.
1D flow model for a binary gas mixture
virtual void addMassDiffusionEnergyDGKernel()
FlowModelGasMix(const InputParameters &params)
virtual void addSlopeReconstructionMaterial() override
Adds slope reconstruction material.
virtual void addMassDiffusionSpeciesDGKernel()
virtual Real getScalingFactorRhoEA() const override
virtual void addDGKernels() override
Adds the DG kernels.
virtual void addFluidPropertiesMaterials() override
Adds materials to compute fluid properties.
virtual void addPressureAux() override
virtual void addRhoEAIC() override
virtual void addNumericalFluxUserObject() override
Adds numerical flux user object.
virtual void addTemperatureAux() override
virtual void addRDGAdvectionDGKernels() override
Adds DG kernels.
virtual Real getScalingFactorRhoUA() const override
virtual void addAuxKernels() override
Adds the aux kernels.
virtual Real getScalingFactorRhoA() const override
virtual void addVariables() override
Add variables the model uses.
virtual void addKernels() override
Adds the kernels.
virtual void addMassFractionAux()
virtual void addDensityIC() override
static InputParameters validParams()
virtual void addInitialConditions() override
Add initial conditions.
virtual void addXiRhoAIC()
virtual std::vector< VariableName > solutionVariableNames() const override
Returns the solution variable names for the flow model.
FlowChannelBase & _flow_channel
The flow channel component that built this class.
Definition FlowModel.h:59
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 addRequiredParam(const std::string &name, const std::string &doc_string)
T & set(const std::string &name, bool quiet_mode=false)
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 XIRHOA
Definition THMNames.h:47
static const std::string MASS_DIFFUSION_COEFFICIENT
Definition THMNames.h:24
static const std::string DIRECTION
Definition THMNames.h:17
static const std::string AREA
Definition THMNames.h:14
static const std::string MASS_FRACTION
Definition THMNames.h:25
static const std::string RHOEA
Definition THMNames.h:30
static const std::string AREA_LINEAR
Definition THMNames.h:15
static const std::string TEMPERATURE
Definition THMNames.h:39
static const std::string VELOCITY
Definition THMNames.h:43
static const std::string RHOUA
Definition THMNames.h:31
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