https://mooseframework.inl.gov
FlowModelGasMixIC.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 "FlowModelGasMixIC.h"
11 #include "Function.h"
12 #include "FlowModelGasMixUtils.h"
13 #include "THMIndicesGasMix.h"
14 
15 registerMooseObject("ThermalHydraulicsApp", FlowModelGasMixIC);
16 
19 {
21 
22  MooseEnum quantity("rho rhoEA");
23  params.addRequiredParam<MooseEnum>("quantity", quantity, "Quantity to compute");
24 
25  params.addRequiredParam<FunctionName>("mass_fraction", "Secondary gas mass fraction function");
26  params.addRequiredParam<FunctionName>("pressure", "Pressure function");
27  params.addRequiredParam<FunctionName>("temperature", "Temperature function");
28  params.addRequiredParam<FunctionName>("velocity", "Velocity function");
29  params.addRequiredCoupledVar("area", "Cross-sectional area variable");
30 
31  params.addRequiredParam<UserObjectName>("fluid_properties",
32  "The VaporMixtureFluidProperties object");
33 
34  params.addClassDescription("IC for the solution variables of FlowModelGasMix.");
35 
36  return params;
37 }
38 
40  : InitialCondition(parameters),
41  _quantity(getParam<MooseEnum>("quantity").getEnum<Quantity>()),
42  _xi(getFunction("mass_fraction")),
43  _p(getFunction("pressure")),
44  _T(getFunction("temperature")),
45  _vel(getFunction("velocity")),
46  _area(coupledValue("area")),
47  _fp(getUserObject<VaporMixtureFluidProperties>("fluid_properties"))
48 {
49 }
50 
51 Real
52 FlowModelGasMixIC::value(const Point & pt)
53 {
54  const auto xi = _xi.value(_t, pt);
55  const auto p = _p.value(_t, pt);
56  const auto T = _T.value(_t, pt);
57 
58  const auto v = _fp.v_from_p_T(p, T, {xi});
59  const auto rho = 1.0 / v;
60 
61  switch (_quantity)
62  {
63  case Quantity::DENSITY:
64  {
65  return rho;
66  break;
67  }
68  case Quantity::RHOEA:
69  {
70  const auto vel = _vel.value(_t, pt);
71  const auto e = _fp.e_from_p_T(p, T, {xi});
72  const auto E = e + 0.5 * vel * vel;
73  return rho * E * _area[_qp];
74  break;
75  }
76  default:
77  mooseAssert(false, "Invalid 'quantity' parameter.");
78  return 0;
79  }
80 }
Base class for fluid properties of vapor mixtures.
const Quantity _quantity
Which quantity to compute.
FlowModelGasMixIC(const InputParameters &parameters)
const Function & _p
Pressure.
static InputParameters validParams()
const Function & _xi
Secondary gas mass fraction.
void addRequiredParam(const std::string &name, const std::string &doc_string)
registerMooseObject("ThermalHydraulicsApp", FlowModelGasMixIC)
const VaporMixtureFluidProperties & _fp
Fluid properties.
const VariableValue & _area
Cross-sectional area.
const Function & _vel
Velocity.
virtual Real value(const Point &p) override
IC for various variables for FlowModelGasMix.
void addRequiredCoupledVar(const std::string &name, const std::string &doc_string)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string v
Definition: NS.h:84
Quantity
Quantity type.
void addClassDescription(const std::string &doc_string)
const Function & _T
Temperature.
virtual Real value(Real t, const Point &p) const
static InputParameters validParams()