https://mooseframework.inl.gov
LinearFluidProperties.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 "LinearFluidProperties.h"
11 
12 registerMooseObject("ThermalHydraulicsApp", LinearFluidProperties);
13 
16 {
18  params.addRequiredParam<Real>("p_0", "Reference pressure");
19  params.addRequiredParam<Real>("rho_0", "Reference density");
20  params.addRequiredParam<Real>("a2", "dp/d(rho)");
21  params.addRequiredParam<Real>("beta", "Coefficient of thermal expansion");
22  params.addRequiredParam<Real>("cv", "Specific heat");
23  params.addRequiredParam<Real>("e_0", "Reference internal energy");
24  params.addRequiredParam<Real>("T_0", "Reference internal energy");
25  params.addRequiredParam<Real>("mu", "Dynamic viscosity, Pa.s");
26  params.addRequiredParam<Real>("k", "Thermal conductivity, W/(m-K)");
27  params.addDeprecatedParam<Real>(
28  "Pr",
29  "Prandtl Number, [-]",
30  "This parameter is no longer required. It is computed from the other parameters.");
31  params.addClassDescription(
32  "Fluid properties for a fluid with density linearly dependent on temperature and pressure");
33  return params;
34 }
35 
37  : SinglePhaseFluidProperties(parameters),
38  _rho_0(getParam<Real>("rho_0")),
39  _p_0(getParam<Real>("p_0")),
40  _a2(getParam<Real>("a2")),
41  _beta(getParam<Real>("beta")),
42  _cv(getParam<Real>("cv")),
43  _e_0(getParam<Real>("e_0")),
44  _T_0(getParam<Real>("T_0")),
45  _mu(getParam<Real>("mu")),
46  _k(getParam<Real>("k"))
47 {
48  if (isParamValid("Pr"))
49  _Pr = getParam<Real>("Pr");
50  else
51  _Pr = _cv / _k * _mu;
52 
53  // Sanity checks
55  paramError("Pr", "Prandtl number should be equal to cv * mu / k");
56 }
57 
58 Real
60 {
61  return _p_0 + _rho_0 * _a2 * ((1 / v / _rho_0 - 1.) + (_beta / _cv) * (e - _e_0));
62 }
63 
64 void
65 LinearFluidProperties::p_from_v_e(Real v, Real e, Real & p, Real & dp_dv, Real & dp_de) const
66 {
67  p = p_from_v_e(v, e);
68  dp_dv = -_a2 / v / v;
69  dp_de = _rho_0 * _a2 * _beta / _cv;
70 }
71 
72 Real
73 LinearFluidProperties::T_from_v_e(Real /*v*/, Real e) const
74 {
75  // e - e0 = cv * (T - T0)
76  return _T_0 + (1. / _cv) * (e - _e_0);
77 }
78 
79 void
80 LinearFluidProperties::T_from_v_e(Real v, Real e, Real & T, Real & dT_dv, Real & dT_de) const
81 {
82  T = T_from_v_e(v, e);
83  dT_dv = 0;
84  dT_de = 1 / _cv;
85 }
86 
87 Real
89 {
90  return std::sqrt(_a2);
91 }
92 
93 void
94 LinearFluidProperties::c_from_v_e(Real v, Real e, Real & c, Real & dc_dv, Real & dc_de) const
95 {
96  c = c_from_v_e(v, e);
97  dc_dv = 0;
98  dc_de = 0;
99 }
100 
101 Real
103 {
104  return _cv;
105 }
106 
107 void
108 LinearFluidProperties::cp_from_v_e(Real v, Real e, Real & cp, Real & dcp_dv, Real & dcp_de) const
109 {
110  cp = cp_from_v_e(v, e);
111  dcp_de = 0;
112  dcp_dv = 0;
113 }
114 
115 Real
117 {
118  return _cv;
119 }
120 
121 void
122 LinearFluidProperties::cv_from_v_e(Real v, Real e, Real & cv, Real & dcv_dv, Real & dcv_de) const
123 {
124  cv = cv_from_v_e(v, e);
125  dcv_de = 0;
126  dcv_dv = 0;
127 }
128 
129 Real
131 {
132  return _mu;
133 }
134 
135 Real
137 {
138  return _k;
139 }
140 
141 Real
143 {
144  mooseError(name(), ": s_from_v_e() not implemented.");
145 }
146 
147 void
148 LinearFluidProperties::s_from_v_e(Real, Real, Real &, Real &, Real &) const
149 {
150  mooseError(name(), ": s_from_v_e() not implemented.");
151 }
152 
153 Real
155 {
156  mooseError(name(), ": s_from_p_T() not implemented.");
157 }
158 
159 void
160 LinearFluidProperties::s_from_p_T(Real, Real, Real &, Real &, Real &) const
161 {
162  mooseError(name(), ": s_from_p_T() not implemented.");
163 }
164 
165 Real
167 {
168  mooseError(name(), ": s(h,p) is not implemented");
169 }
170 
171 void
172 LinearFluidProperties::s_from_h_p(Real, Real, Real &, Real &, Real &) const
173 {
174  mooseError(name(), ": s(h,p) is not implemented");
175 }
176 
177 Real
179 {
180  mooseError(name(), ": rho_from_p_s() not implemented.");
181 }
182 
183 void
184 LinearFluidProperties::rho_from_p_s(Real, Real, Real &, Real &, Real &) const
185 {
186  mooseError(name(), ": rho_from_p_s() not implemented.");
187 }
188 
189 Real
191 {
192  return (h - v * p_from_v_e(v, 0)) / (1 + v * _beta / _cv * _rho_0 * _a2);
193 }
194 
195 void
196 LinearFluidProperties::e_from_v_h(Real v, Real h, Real & e, Real & de_dv, Real & de_dh) const
197 {
198  const auto num = (h - v * (_p_0 + _a2 * ((1 / v - _rho_0) - _rho_0 * _beta / _cv * _e_0)));
199  const auto denum = (1 + v * _beta / _cv * _rho_0 * _a2);
200  e = num / denum;
201  de_dh = 1 / denum;
202  de_dv = ((-_p_0 - _a2 * _rho_0 * (-1 - _beta / _cv * _e_0)) * denum -
203  num * _beta / _cv * _rho_0 * _a2) /
204  denum / denum;
205 }
206 
207 Real
209 {
210  return _beta;
211 }
212 
213 void
215  Real p, Real T, Real & beta, Real & dbeta_dp, Real & dbeta_dT) const
216 {
217  beta = beta_from_p_T(p, T);
218  dbeta_dp = 0;
219  dbeta_dT = 0;
220 }
221 
222 Real
224 {
225  Real e = _e_0 + _cv * (T - _T_0);
226  return (p - _p_0) / _a2 - _rho_0 * (_beta / _cv) * (e - _e_0) + _rho_0;
227 }
228 
229 void
231  Real p, Real T, Real & rho, Real & drho_dp, Real & drho_dT) const
232 {
233  Real e = _e_0 + _cv * (T - _T_0);
234  rho = (p - _p_0) / _a2 - _rho_0 * (_beta / _cv) * (e - _e_0) + _rho_0;
235  drho_dp = 1 / _a2;
236  drho_dT = -_rho_0 * _beta;
237 }
238 
239 Real
241 {
242  const auto rho = rho_from_p_T(p, T);
243  return e_from_p_rho(p, rho);
244 }
245 
246 void
247 LinearFluidProperties::e_from_p_T(Real p, Real T, Real & e, Real & de_dp, Real & de_dT) const
248 {
249  Real rho, drho_dp, drho_dT;
250  rho_from_p_T(p, T, rho, drho_dp, drho_dT);
251  Real de_drho, de_dp_rho;
252  e_from_p_rho(p, rho, e, de_dp_rho, de_drho);
253  de_dp = de_drho * drho_dp + de_dp_rho;
254  de_dT = de_drho * drho_dT;
255 }
256 
257 Real
258 LinearFluidProperties::e_from_p_rho(Real p, Real rho) const
259 {
260  return (_cv / _beta) * (((p - _p_0) / (_rho_0 * _a2)) - (rho / _rho_0) + 1) + _e_0;
261 }
262 
263 void
264 LinearFluidProperties::e_from_p_rho(Real p, Real rho, Real & e, Real & de_dp, Real & de_drho) const
265 {
266  e = e_from_p_rho(p, rho);
267  de_dp = _cv / _beta / _rho_0 / _a2;
268  de_drho = -_cv / _beta / _rho_0;
269 }
270 
271 Real
273 {
274  Real rho = rho_from_p_T(p, T);
275  Real e = e_from_p_rho(p, rho);
276  return e + p / rho;
277 }
278 
279 void
280 LinearFluidProperties::h_from_p_T(Real p, Real T, Real & h, Real & dh_dp, Real & dh_dT) const
281 {
282  h = h_from_p_T(p, T);
283 
284  Real rho, drho_dp, drho_dT;
285  rho_from_p_T(p, T, rho, drho_dp, drho_dT);
286 
287  dh_dp = 1.0 / rho - p / rho / rho * drho_dp;
288  dh_dT = _cv - p / rho / rho * drho_dT;
289 }
290 
291 Real
293 {
294  mooseError(name(), ": p_from_h_s() not implemented");
295 }
296 
297 void
298 LinearFluidProperties::p_from_h_s(Real, Real, Real &, Real &, Real &) const
299 {
300  mooseError(name(), ": p_from_h_s() not implemented");
301 }
302 
303 Real
305 {
306  mooseError(name(), ": g_from_v_e(v, e) not implemented");
307 }
308 
309 Real
311 {
312  mooseError(name(), ": molarMass() not implemented");
313 }
314 
315 Real
316 LinearFluidProperties::Pr(Real, Real) const
317 {
318  return _Pr;
319 }
virtual Real e_from_p_rho(Real p, Real rho) const override
virtual Real T_from_v_e(Real v, Real e) const override
static const std::string cv
Definition: NS.h:122
bool absoluteFuzzyEqual(const T &var1, const T2 &var2, const T3 &tol=libMesh::TOLERANCE *libMesh::TOLERANCE)
void addDeprecatedParam(const std::string &name, const T &value, const std::string &doc_string, const std::string &deprecation_message)
static InputParameters validParams()
virtual Real c_from_v_e(Real v, Real e) const override
virtual Real h_from_p_T(Real p, Real T) const override
LinearFluidProperties(const InputParameters &parameters)
virtual Real s_from_p_T(Real p, Real T) const override
virtual Real k_from_v_e(Real v, Real e) const override
virtual const std::string & name() const
virtual Real cv_from_v_e(Real v, Real e) const override
void addRequiredParam(const std::string &name, const std::string &doc_string)
virtual Real rho_from_p_T(Real p, Real T) const override
bool isParamValid(const std::string &name) const
virtual Real cp_from_v_e(Real v, Real e) const override
static const std::string cp
Definition: NS.h:121
e e e e s T T T T T rho v v T e h
virtual Real Pr(Real density, Real temperature) const
virtual Real molarMass() const override
Molar mass [kg/mol].
virtual Real e_from_p_T(Real p, Real T) const override
Common class for single phase fluid properties.
void paramError(const std::string &param, Args... args) const
virtual Real p_from_v_e(Real v, Real e) const override
virtual Real e_from_v_h(Real v, Real h) const override
virtual Real p_from_h_s(Real h, Real s) const override
Linear fluid properties.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string v
Definition: NS.h:84
virtual Real beta_from_p_T(Real p, Real T) const override
void mooseError(Args &&... args) const
void addClassDescription(const std::string &doc_string)
virtual Real g_from_v_e(Real v, Real e) const override
virtual Real mu_from_v_e(Real v, Real e) const override
virtual Real rho_from_p_s(Real p, Real s) const override
static InputParameters validParams()
virtual Real s_from_v_e(Real v, Real e) const override
virtual Real s_from_h_p(Real h, Real p) const override
registerMooseObject("ThermalHydraulicsApp", LinearFluidProperties)