Loading [MathJax]/extensions/tex2jax.js
https://mooseframework.inl.gov
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends
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 
10 #include "FlowModelSinglePhase.h"
11 #include "FlowChannelBase.h"
12 
13 const std::string FlowModelSinglePhase::DENSITY = "rho";
14 const std::string FlowModelSinglePhase::FRICTION_FACTOR_DARCY = "f_D";
15 const std::string FlowModelSinglePhase::DYNAMIC_VISCOSITY = "mu";
17 const std::string FlowModelSinglePhase::HYDRAULIC_DIAMETER = "D_h";
18 const std::string FlowModelSinglePhase::PRESSURE = "p";
19 const std::string FlowModelSinglePhase::RHOA = "rhoA";
20 const std::string FlowModelSinglePhase::RHOEA = "rhoEA";
21 const std::string FlowModelSinglePhase::RHOUA = "rhouA";
22 const std::string FlowModelSinglePhase::SOUND_SPEED = "c";
26 const std::string FlowModelSinglePhase::SPECIFIC_TOTAL_ENTHALPY = "H";
27 const std::string FlowModelSinglePhase::SPECIFIC_VOLUME = "v";
28 const std::string FlowModelSinglePhase::TEMPERATURE = "T";
29 const std::string FlowModelSinglePhase::THERMAL_CONDUCTIVITY = "k";
30 const std::string FlowModelSinglePhase::VELOCITY = "vel";
31 const std::string FlowModelSinglePhase::VELOCITY_X = "vel_x";
32 const std::string FlowModelSinglePhase::VELOCITY_Y = "vel_y";
33 const std::string FlowModelSinglePhase::VELOCITY_Z = "vel_z";
34 const std::string FlowModelSinglePhase::REYNOLDS_NUMBER = "Re";
35 
38 {
40  params.addRequiredParam<UserObjectName>("numerical_flux", "Numerical flux user object name");
41  params.addRequiredParam<MooseEnum>("rdg_slope_reconstruction",
42  "Slope reconstruction type for rDG");
43  params.addRequiredParam<std::vector<Real>>(
44  "scaling_factor_1phase",
45  "Scaling factors for each single phase variable (rhoA, rhouA, rhoEA)");
46  return params;
47 }
48 
49 registerMooseObject("ThermalHydraulicsApp", FlowModelSinglePhase);
50 
52  : FlowModel(params),
53  _rdg_slope_reconstruction(params.get<MooseEnum>("rdg_slope_reconstruction")),
54  _numerical_flux_name(params.get<UserObjectName>("numerical_flux")),
55  _scaling_factors(getParam<std::vector<Real>>("scaling_factor_1phase"))
56 {
57 }
58 
59 void
61 {
62 }
63 
64 void
66 {
68 
69  const std::vector<SubdomainName> & subdomains = _flow_channel.getSubdomainNames();
70 
71  // Nonlinear variables
72  _sim.addSimVariable(true, RHOA, _fe_type, subdomains, _scaling_factors[0]);
73  _sim.addSimVariable(true, RHOUA, _fe_type, subdomains, _scaling_factors[1]);
74  _sim.addSimVariable(true, RHOEA, _fe_type, subdomains, _scaling_factors[2]);
75 
78 
79  // Auxiliary
80  _sim.addSimVariable(false, DENSITY, _fe_type, subdomains);
82  {
83  _sim.addSimVariable(false, VELOCITY_X, _fe_type, subdomains);
84  _sim.addSimVariable(false, VELOCITY_Y, _fe_type, subdomains);
85  _sim.addSimVariable(false, VELOCITY_Z, _fe_type, subdomains);
86  }
87  else
88  _sim.addSimVariable(false, VELOCITY, _fe_type, subdomains);
89  _sim.addSimVariable(false, PRESSURE, _fe_type, subdomains);
90  _sim.addSimVariable(false, SPECIFIC_VOLUME, _fe_type, subdomains);
92  _sim.addSimVariable(false, TEMPERATURE, _fe_type, subdomains);
94 }
95 
96 void
98 {
100 
101  if (_flow_channel.isParamValid("initial_p") && _flow_channel.isParamValid("initial_T") &&
102  _flow_channel.isParamValid("initial_vel"))
103  {
104  const std::vector<SubdomainName> & block = _flow_channel.getSubdomainNames();
105 
106  const FunctionName & p_fn = getVariableFn("initial_p");
107  _sim.addFunctionIC(PRESSURE, p_fn, block);
108 
109  const FunctionName & T_fn = getVariableFn("initial_T");
110  _sim.addFunctionIC(TEMPERATURE, T_fn, block);
111 
112  const FunctionName & vel_fn = getVariableFn("initial_vel");
114  {
115  std::vector<VariableName> var_name = {VELOCITY_X, VELOCITY_Y, VELOCITY_Z};
116  for (const auto i : make_range(Moose::dim))
117  {
118  std::string class_name = "VectorVelocityIC";
119  InputParameters params = _factory.getValidParams(class_name);
120  params.set<VariableName>("variable") = var_name[i];
121  params.set<FunctionName>("vel_fn") = vel_fn;
122  params.set<std::vector<SubdomainName>>("block") = block;
123  params.set<unsigned int>("component") = i;
124  _sim.addSimInitialCondition(class_name, genName(_comp_name, "vel_ic", i), params);
125  }
126 
127  {
128  std::string class_name = "VariableFunctionProductIC";
129  InputParameters params = _factory.getValidParams(class_name);
130  params.set<VariableName>("variable") = RHOUA;
131  params.set<std::vector<SubdomainName>>("block") = block;
132  params.set<std::vector<VariableName>>("var") = {RHOA};
133  params.set<FunctionName>("fn") = vel_fn;
134  _sim.addSimInitialCondition(class_name, genName(_comp_name, "rhouA_ic"), params);
135  }
136  {
137  std::string class_name = "RhoEAFromPressureTemperatureFunctionVelocityIC";
138  InputParameters params = _factory.getValidParams(class_name);
139  params.set<VariableName>("variable") = RHOEA;
140  params.set<std::vector<SubdomainName>>("block") = block;
141  params.set<std::vector<VariableName>>("p") = {PRESSURE};
142  params.set<std::vector<VariableName>>("T") = {TEMPERATURE};
143  params.set<FunctionName>("vel") = vel_fn;
144  params.set<std::vector<VariableName>>("A") = {FlowModel::AREA};
145  params.set<UserObjectName>("fp") = _fp_name;
146  _sim.addSimInitialCondition(class_name, genName(_comp_name, "rhoEA_ic"), params);
147  }
148  }
149  else
150  {
151  _sim.addFunctionIC(VELOCITY, vel_fn, block);
152 
153  {
154  std::string class_name = "VariableProductIC";
155  InputParameters params = _factory.getValidParams(class_name);
156  params.set<VariableName>("variable") = RHOUA;
157  params.set<std::vector<SubdomainName>>("block") = block;
158  params.set<std::vector<VariableName>>("values") = {DENSITY, VELOCITY, FlowModel::AREA};
159  _sim.addSimInitialCondition(class_name, genName(_comp_name, "rhouA_ic"), params);
160  }
161  {
162  std::string class_name = "RhoEAFromPressureTemperatureVelocityIC";
163  InputParameters params = _factory.getValidParams(class_name);
164  params.set<VariableName>("variable") = RHOEA;
165  params.set<std::vector<SubdomainName>>("block") = block;
166  params.set<std::vector<VariableName>>("p") = {PRESSURE};
167  params.set<std::vector<VariableName>>("T") = {TEMPERATURE};
168  params.set<std::vector<VariableName>>("vel") = {VELOCITY};
169  params.set<std::vector<VariableName>>("A") = {FlowModel::AREA};
170  params.set<UserObjectName>("fp") = _fp_name;
171  _sim.addSimInitialCondition(class_name, genName(_comp_name, "rhoEA_ic"), params);
172  }
173  }
174 
175  {
176  std::string class_name = "RhoFromPressureTemperatureIC";
177  InputParameters params = _factory.getValidParams(class_name);
178  params.set<VariableName>("variable") = DENSITY;
179  params.set<std::vector<SubdomainName>>("block") = block;
180  params.set<std::vector<VariableName>>("p") = {PRESSURE};
181  params.set<std::vector<VariableName>>("T") = {TEMPERATURE};
182  params.set<UserObjectName>("fp") = _fp_name;
183  _sim.addSimInitialCondition(class_name, genName(_comp_name, "rho_ic"), params);
184  }
185 
186  {
187  std::string class_name = "VariableProductIC";
188  InputParameters params = _factory.getValidParams(class_name);
189  params.set<VariableName>("variable") = RHOA;
190  params.set<std::vector<SubdomainName>>("block") = block;
191  params.set<std::vector<VariableName>>("values") = {DENSITY, FlowModel::AREA};
192  _sim.addSimInitialCondition(class_name, genName(_comp_name, "rhoA_ic"), params);
193  }
194 
195  {
196  std::string class_name = "SpecificVolumeIC";
197  InputParameters params = _factory.getValidParams(class_name);
198  params.set<VariableName>("variable") = SPECIFIC_VOLUME;
199  params.set<std::vector<SubdomainName>>("block") = block;
200  params.set<std::vector<VariableName>>("rhoA") = {RHOA};
201  params.set<std::vector<VariableName>>("A") = {FlowModel::AREA};
202  _sim.addSimInitialCondition(class_name, genName(_comp_name, "v_ic"), params);
203  }
204  {
205  std::string class_name = "SpecificInternalEnergyIC";
206  InputParameters params = _factory.getValidParams(class_name);
207  params.set<VariableName>("variable") = SPECIFIC_INTERNAL_ENERGY;
208  params.set<std::vector<SubdomainName>>("block") = block;
209  params.set<std::vector<VariableName>>("rhoA") = {RHOA};
210  params.set<std::vector<VariableName>>("rhouA") = {RHOUA};
211  params.set<std::vector<VariableName>>("rhoEA") = {RHOEA};
212  _sim.addSimInitialCondition(class_name, genName(_comp_name, "u_ic"), params);
213  }
214  {
215  std::string class_name = "SpecificTotalEnthalpyIC";
216  InputParameters params = _factory.getValidParams(class_name);
217  params.set<VariableName>("variable") = SPECIFIC_TOTAL_ENTHALPY;
218  params.set<std::vector<SubdomainName>>("block") = block;
219  params.set<std::vector<VariableName>>("p") = {PRESSURE};
220  params.set<std::vector<VariableName>>("rhoA") = {RHOA};
221  params.set<std::vector<VariableName>>("rhoEA") = {RHOEA};
222  params.set<std::vector<VariableName>>("A") = {FlowModel::AREA};
223  _sim.addSimInitialCondition(class_name, genName(_comp_name, "H_ic"), params);
224  }
225  }
226 }
227 
228 void
230 {
232 
235 
236  {
237  std::string class_name = "ADFluidProperties3EqnMaterial";
238  InputParameters params = _factory.getValidParams(class_name);
239  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
240  params.set<UserObjectName>("fp") = _fp_name;
241  params.set<std::vector<VariableName>>("rhoA") = {RHOA};
242  params.set<std::vector<VariableName>>("rhouA") = {RHOUA};
243  params.set<std::vector<VariableName>>("rhoEA") = {RHOEA};
244  params.set<std::vector<VariableName>>("A") = {FlowModel::AREA};
245  _sim.addMaterial(class_name, genName(_comp_name, "fp_mat"), params);
246  }
247  {
248  const std::string class_name = "ADDynamicViscosityMaterial";
249  InputParameters params = _factory.getValidParams(class_name);
250  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
251  params.set<UserObjectName>("fp_1phase") = _fp_name;
252  params.set<MaterialPropertyName>("mu") = {DYNAMIC_VISCOSITY};
253  params.set<MaterialPropertyName>("v") = {SPECIFIC_VOLUME};
254  params.set<MaterialPropertyName>("e") = {SPECIFIC_INTERNAL_ENERGY};
255  _sim.addMaterial(class_name, genName(_comp_name, "mu_mat"), params);
256  }
257 
259  // Adding kernels
261 
262  // Density equation (transient term + advection term)
264  {
265  std::string class_name = "ADTimeDerivative";
266  InputParameters params = _factory.getValidParams(class_name);
267  params.set<NonlinearVariableName>("variable") = RHOA;
268  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
269  if (_lump_mass_matrix)
270  params.set<bool>("lumping") = true;
271  _sim.addKernel(class_name, genName(_comp_name, "rho_ie"), params);
272  }
273 
274  // Momentum equation, for 1-D flow channel, x-momentum equation only
275  // (transient term + remaining terms[advection, pressure, body force, etc])
277  {
278  std::string class_name = "ADTimeDerivative";
279  InputParameters params = _factory.getValidParams(class_name);
280  params.set<NonlinearVariableName>("variable") = RHOUA;
281  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
282  if (_lump_mass_matrix)
283  params.set<bool>("lumping") = true;
284  _sim.addKernel(class_name, genName(_comp_name, "rhou_ie"), params);
285  }
286  {
287  std::string class_name = "ADOneD3EqnMomentumAreaGradient";
288  InputParameters params = _factory.getValidParams(class_name);
289  params.set<NonlinearVariableName>("variable") = RHOUA;
290  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
291  params.set<std::vector<VariableName>>("A") = {AREA_LINEAR};
292  params.set<MaterialPropertyName>("direction") = DIRECTION;
293  params.set<MaterialPropertyName>("p") = PRESSURE;
294  _sim.addKernel(class_name, genName(_comp_name, "rhou_ps"), params);
295  }
296  {
297  std::string class_name = "ADOneD3EqnMomentumFriction";
298  InputParameters params = _factory.getValidParams(class_name);
299  params.set<NonlinearVariableName>("variable") = RHOUA;
300  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
301  params.set<std::vector<VariableName>>("A") = {AREA};
302  params.set<MaterialPropertyName>("D_h") = {HYDRAULIC_DIAMETER};
303  params.set<MaterialPropertyName>("rho") = DENSITY;
304  params.set<MaterialPropertyName>("vel") = VELOCITY;
305  params.set<MaterialPropertyName>("f_D") = FRICTION_FACTOR_DARCY;
306  _sim.addKernel(class_name, genName(_comp_name, "rhou_friction"), params);
307  }
308  {
309  std::string class_name = "ADOneD3EqnMomentumGravity";
310  InputParameters params = _factory.getValidParams(class_name);
311  params.set<NonlinearVariableName>("variable") = RHOUA;
312  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
313  params.set<std::vector<VariableName>>("A") = {AREA};
314  params.set<MaterialPropertyName>("direction") = DIRECTION;
315  params.set<MaterialPropertyName>("rho") = DENSITY;
316  params.set<RealVectorValue>("gravity_vector") = _gravity_vector;
317  _sim.addKernel(class_name, genName(_comp_name, "rhou_gravity"), params);
318  }
319 
320  // Total energy equation
321  // (transient term + remaining terms[advection, wall heating, work from body force, etc])
323  {
324  std::string class_name = "ADTimeDerivative";
325  InputParameters params = _factory.getValidParams(class_name);
326  params.set<NonlinearVariableName>("variable") = RHOEA;
327  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
328  if (_lump_mass_matrix)
329  params.set<bool>("lumping") = true;
330  _sim.addKernel(class_name, genName(_comp_name, "rhoE_ie"), params);
331  }
332  {
333  std::string class_name = "ADOneD3EqnEnergyGravity";
334  InputParameters params = _factory.getValidParams(class_name);
335  params.set<NonlinearVariableName>("variable") = RHOEA;
336  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
337  params.set<std::vector<VariableName>>("A") = {AREA};
338  params.set<MaterialPropertyName>("direction") = DIRECTION;
339  params.set<MaterialPropertyName>("rho") = DENSITY;
340  params.set<MaterialPropertyName>("vel") = VELOCITY;
341  params.set<RealVectorValue>("gravity_vector") = _gravity_vector;
342  _sim.addKernel(class_name, genName(_comp_name, "rhoE_gravity"), params);
343  }
344 
346  // Adding auxiliary kernels
348 
350  {
351  // Vector-valued velocity
352  {
354  execute_on = {EXEC_INITIAL, EXEC_TIMESTEP_END};
355 
356  std::vector<AuxVariableName> var_names = {VELOCITY_X, VELOCITY_Y, VELOCITY_Z};
357  for (const auto i : make_range(Moose::dim))
358  {
359  std::string class_name = "ADVectorVelocityComponentAux";
360  InputParameters params = _factory.getValidParams(class_name);
361  params.set<AuxVariableName>("variable") = var_names[i];
362  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
363  params.set<std::vector<VariableName>>("arhoA") = {RHOA};
364  params.set<std::vector<VariableName>>("arhouA") = {RHOUA};
365  params.set<MaterialPropertyName>("direction") = DIRECTION;
366  params.set<unsigned int>("component") = i;
367  params.set<ExecFlagEnum>("execute_on") = execute_on;
368  _sim.addAuxKernel(class_name, genName(_comp_name, i, "vel_vec"), params);
369  }
370  }
371  }
372  else
373  {
375  execute_on = {EXEC_INITIAL, EXEC_TIMESTEP_END};
376 
377  // Velocity auxiliary kernel
378  {
379  std::string class_name = "QuotientAux";
380  InputParameters params = _factory.getValidParams(class_name);
381  params.set<AuxVariableName>("variable") = VELOCITY;
382  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
383  params.set<std::vector<VariableName>>("numerator") = {RHOUA};
384  params.set<std::vector<VariableName>>("denominator") = {RHOA};
385  params.set<ExecFlagEnum>("execute_on") = execute_on;
386  _sim.addAuxKernel(class_name, genName(_comp_name, "vel"), params);
387  }
388  }
389 
391  ts_execute_on = EXEC_TIMESTEP_BEGIN;
392 
393  {
394  // Computes rho = (rho*A)/A
395  InputParameters params = _factory.getValidParams("QuotientAux");
396  params.set<AuxVariableName>("variable") = DENSITY;
397  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
398  params.set<std::vector<VariableName>>("numerator") = {RHOA};
399  params.set<std::vector<VariableName>>("denominator") = {AREA};
400  _sim.addAuxKernel("QuotientAux", genName(_comp_name, "rho_auxkernel"), params);
401  }
402 
403  {
404  std::string class_name = "THMSpecificVolumeAux";
405  InputParameters params = _factory.getValidParams(class_name);
406  params.set<AuxVariableName>("variable") = SPECIFIC_VOLUME;
407  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
408  params.set<std::vector<VariableName>>("rhoA") = {RHOA};
409  params.set<std::vector<VariableName>>("A") = {AREA};
410  _sim.addAuxKernel(class_name, genName(_comp_name, "v_aux"), params);
411  }
412  {
413  std::string class_name = "THMSpecificInternalEnergyAux";
414  InputParameters params = _factory.getValidParams(class_name);
415  params.set<AuxVariableName>("variable") = SPECIFIC_INTERNAL_ENERGY;
416  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
417  params.set<std::vector<VariableName>>("rhoA") = {RHOA};
418  params.set<std::vector<VariableName>>("rhouA") = {RHOUA};
419  params.set<std::vector<VariableName>>("rhoEA") = {RHOEA};
420  _sim.addAuxKernel(class_name, genName(_comp_name, "e_aux"), params);
421  }
422 
423  {
424  std::string class_name = "PressureAux";
425  InputParameters params = _factory.getValidParams(class_name);
426  params.set<AuxVariableName>("variable") = PRESSURE;
427  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
428  params.set<std::vector<VariableName>>("e") = {SPECIFIC_INTERNAL_ENERGY};
429  params.set<std::vector<VariableName>>("v") = {SPECIFIC_VOLUME};
430  params.set<UserObjectName>("fp") = _fp_name;
431  _sim.addAuxKernel(class_name, genName(_comp_name, "pressure_uv_auxkernel"), params);
432  }
433  {
434  std::string class_name = "TemperatureAux";
435  InputParameters params = _factory.getValidParams(class_name);
436  params.set<AuxVariableName>("variable") = TEMPERATURE;
437  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
438  params.set<std::vector<VariableName>>("e") = {SPECIFIC_INTERNAL_ENERGY};
439  params.set<std::vector<VariableName>>("v") = {SPECIFIC_VOLUME};
440  params.set<UserObjectName>("fp") = _fp_name;
441  _sim.addAuxKernel(class_name, genName(_comp_name, "T_auxkernel"), params);
442  }
443 
444  {
445  std::string class_name = "SpecificTotalEnthalpyAux";
446  InputParameters params = _factory.getValidParams(class_name);
447  params.set<AuxVariableName>("variable") = SPECIFIC_TOTAL_ENTHALPY;
448  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
449  params.set<std::vector<VariableName>>("rhoA") = {RHOA};
450  params.set<std::vector<VariableName>>("rhoEA") = {RHOEA};
451  params.set<std::vector<VariableName>>("p") = {PRESSURE};
452  params.set<std::vector<VariableName>>("A") = {AREA};
453  _sim.addAuxKernel(class_name, genName(_comp_name, "H_auxkernel"), params);
454  }
455 }
456 
457 void
459 {
460  const std::string class_name = "ADNumericalFlux3EqnHLLC";
461  InputParameters params = _factory.getValidParams(class_name);
462  params.set<UserObjectName>("fluid_properties") = _fp_name;
463  params.set<MooseEnum>("emit_on_nan") = "none";
464  params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_LINEAR, EXEC_NONLINEAR};
465  _sim.addUserObject(class_name, _numerical_flux_name, params);
466 }
467 
468 void
470 {
471  // slope reconstruction material
472  {
473  const std::string class_name = "ADRDG3EqnMaterial";
474  InputParameters params = _factory.getValidParams(class_name);
475  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
476  params.set<MooseEnum>("scheme") = _rdg_slope_reconstruction;
477  params.set<std::vector<VariableName>>("A_elem") = {AREA};
478  params.set<std::vector<VariableName>>("A_linear") = {AREA_LINEAR};
479  params.set<std::vector<VariableName>>("rhoA") = {RHOA};
480  params.set<std::vector<VariableName>>("rhouA") = {RHOUA};
481  params.set<std::vector<VariableName>>("rhoEA") = {RHOEA};
482  params.set<MaterialPropertyName>("direction") = DIRECTION;
483  params.set<UserObjectName>("fluid_properties") = _fp_name;
484  params.set<bool>("implicit") = _sim.getImplicitTimeIntegrationFlag();
485  _sim.addMaterial(class_name, genName(_comp_name, "rdg_3egn_mat"), params);
486  }
487 
489 }
490 
491 void
493 {
494  // mass
495  const std::string class_name = "ADNumericalFlux3EqnDGKernel";
496  InputParameters params = _factory.getValidParams(class_name);
497  params.set<NonlinearVariableName>("variable") = RHOA;
498  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
499  params.set<std::vector<VariableName>>("A_linear") = {AREA_LINEAR};
500  params.set<std::vector<VariableName>>("rhoA") = {RHOA};
501  params.set<std::vector<VariableName>>("rhouA") = {RHOUA};
502  params.set<std::vector<VariableName>>("rhoEA") = {RHOEA};
503  params.set<UserObjectName>("numerical_flux") = _numerical_flux_name;
504  params.set<bool>("implicit") = _sim.getImplicitTimeIntegrationFlag();
505  _sim.addDGKernel(class_name, genName(_comp_name, "mass_advection"), params);
506 
507  // momentum
508  params.set<NonlinearVariableName>("variable") = RHOUA;
509  _sim.addDGKernel(class_name, genName(_comp_name, "momentum_advection"), params);
510 
511  // energy
512  params.set<NonlinearVariableName>("variable") = RHOEA;
513  _sim.addDGKernel(class_name, genName(_comp_name, "energy_advection"), params);
514 }
static const std::string AREA_LINEAR
Definition: FlowModel.h:112
static const std::string SPECIFIC_HEAT_CONSTANT_PRESSURE
static const std::string VELOCITY_Y
virtual void addInitialConditions() override
Add initial conditions.
const bool _lump_mass_matrix
Lump the mass matrix.
Definition: FlowModel.h:82
FlowModelSinglePhase(const InputParameters &params)
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.
static const std::string DYNAMIC_VISCOSITY
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:91
static const std::string AREA
Definition: FlowModel.h:111
static const std::string TEMPERATURE
static const std::string SPECIFIC_HEAT_CONSTANT_VOLUME
registerMooseObject("ThermalHydraulicsApp", FlowModelSinglePhase)
static const std::string VELOCITY
Provides functions to setup the flow model.
Definition: FlowModel.h:27
virtual void addMaterial(const std::string &material_name, const std::string &name, InputParameters &parameters)
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 addMooseObjects() override
Add MOOSE objects this model uses.
InputParameters getValidParams(const std::string &name) const
static const std::string THERMAL_CONDUCTIVITY
static const std::string HEAT_TRANSFER_COEFFICIENT_WALL
static constexpr std::size_t dim
static InputParameters validParams()
Definition: FlowModel.C:18
static const std::string DENSITY
const MooseEnum _rdg_slope_reconstruction
Slope reconstruction type for rDG.
const ExecFlagType EXEC_TIMESTEP_END
virtual void addAuxKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
virtual void addKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
static const std::string SPECIFIC_VOLUME
static const std::string VELOCITY_Z
const FunctionName & getVariableFn(const FunctionName &fn_param_name)
Definition: FlowModel.C:56
FlowChannelBase & _flow_channel
The flow channel component that built this class.
Definition: FlowModel.h:65
static const std::string SOUND_SPEED
void addRequiredParam(const std::string &name, const std::string &doc_string)
static const std::string SPECIFIC_INTERNAL_ENERGY
void addFunctionIC(const VariableName &var_name, const std::string &func_name, const std::vector< SubdomainName > &block_names)
Definition: Simulation.C:532
ExecFlagEnum getDefaultExecFlagEnum()
static const std::string PRESSURE
bool isParamValid(const std::string &name) const
virtual void addVariables() override
Add variables the model uses.
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
const ExecFlagType EXEC_TIMESTEP_BEGIN
static const std::string RHOUA
static const std::string REYNOLDS_NUMBER
virtual void addNumericalFluxUserObject()
bool problemIsTransient() const
Whether the problem is transient.
Definition: Component.h:252
virtual void addCommonVariables()
Adds variables common to any flow model (A, P_hf, ...)
Definition: FlowModel.C:70
static const std::string RHOA
const libMesh::FEType & _fe_type
The type of FE used for flow.
Definition: FlowModel.h:68
static const std::string FRICTION_FACTOR_DARCY
const ExecFlagType EXEC_LINEAR
static const std::string SPECIFIC_TOTAL_ENTHALPY
Factory & _factory
The Factory associated with the MooseApp.
Definition: FlowModel.h:62
const RealVectorValue & _gravity_vector
Gravitational acceleration vector.
Definition: FlowModel.h:77
virtual void addRDGMooseObjects()
virtual void init() override
Initialize the model.
const ExecFlagType EXEC_NONLINEAR
void addSimInitialCondition(const std::string &type, const std::string &name, InputParameters params)
Definition: Simulation.C:495
const UserObjectName _numerical_flux_name
Numerical flux user object name.
virtual void addDGKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual std::vector< std::shared_ptr< UserObject > > addUserObject(const std::string &user_object_name, const std::string &name, InputParameters &parameters)
IntRange< T > make_range(T beg, T end)
const UserObjectName _fp_name
The name of the user object that defines fluid properties.
Definition: FlowModel.h:71
const std::vector< Real > _scaling_factors
Scaling factors for each solution variable (rhoA, rhouA, rhoEA)
static const std::string HYDRAULIC_DIAMETER
const bool & getImplicitTimeIntegrationFlag()
Gets the flag indicating whether an implicit time integration scheme is being used.
Definition: Simulation.h:329
static const std::string VELOCITY_X
Sets up the single-phase flow model using Euler&#39;s equations.
static const std::string RHOEA
std::vector< VariableName > _solution_vars
Definition: FlowModel.h:85
virtual const std::vector< SubdomainName > & getSubdomainNames() const
Gets the subdomain names for this component.
Definition: Component.C:307
static InputParameters validParams()
virtual void addCommonMooseObjects()
Adds common MOOSE objects.
Definition: FlowModel.C:112
const std::string _comp_name
The component name.
Definition: FlowModel.h:74
THMProblem & _sim
Definition: FlowModel.h:59
const Elem & get(const ElemType type_in)
static const std::string DIRECTION
Definition: FlowModel.h:119
virtual void addRDGAdvectionDGKernels()
std::vector< VariableName > _derivative_vars
Definition: FlowModel.h:88
const ExecFlagType EXEC_INITIAL