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.addClassDescription(
28  "Fluid properties for a fluid with density linearly dependent on temperature and pressure");
29  return params;
30 }
31 
33  : SinglePhaseFluidProperties(parameters),
34  _rho_0(getParam<Real>("rho_0")),
35  _p_0(getParam<Real>("p_0")),
36  _a2(getParam<Real>("a2")),
37  _beta(getParam<Real>("beta")),
38  _cv(getParam<Real>("cv")),
39  _e_0(getParam<Real>("e_0")),
40  _T_0(getParam<Real>("T_0")),
41  _mu(getParam<Real>("mu")),
42  _k(getParam<Real>("k")),
43  _Pr(_cv / _k * _mu)
44 {
45 }
46 
47 Real
49 {
50  return _p_0 + _rho_0 * _a2 * ((1 / v / _rho_0 - 1.) + (_beta / _cv) * (e - _e_0));
51 }
52 
53 void
54 LinearFluidProperties::p_from_v_e(Real v, Real e, Real & p, Real & dp_dv, Real & dp_de) const
55 {
56  p = p_from_v_e(v, e);
57  dp_dv = -_a2 / v / v;
58  dp_de = _rho_0 * _a2 * _beta / _cv;
59 }
60 
61 Real
62 LinearFluidProperties::T_from_v_e(Real /*v*/, Real e) const
63 {
64  // e - e0 = cv * (T - T0)
65  return _T_0 + (1. / _cv) * (e - _e_0);
66 }
67 
68 void
69 LinearFluidProperties::T_from_v_e(Real v, Real e, Real & T, Real & dT_dv, Real & dT_de) const
70 {
71  T = T_from_v_e(v, e);
72  dT_dv = 0;
73  dT_de = 1 / _cv;
74 }
75 
76 Real
78 {
79  return std::sqrt(_a2);
80 }
81 
82 void
83 LinearFluidProperties::c_from_v_e(Real v, Real e, Real & c, Real & dc_dv, Real & dc_de) const
84 {
85  c = c_from_v_e(v, e);
86  dc_dv = 0;
87  dc_de = 0;
88 }
89 
90 Real
92 {
93  return _cv;
94 }
95 
96 void
97 LinearFluidProperties::cp_from_v_e(Real v, Real e, Real & cp, Real & dcp_dv, Real & dcp_de) const
98 {
99  cp = cp_from_v_e(v, e);
100  dcp_de = 0;
101  dcp_dv = 0;
102 }
103 
104 Real
106 {
107  return _cv;
108 }
109 
110 void
111 LinearFluidProperties::cv_from_v_e(Real v, Real e, Real & cv, Real & dcv_dv, Real & dcv_de) const
112 {
113  cv = cv_from_v_e(v, e);
114  dcv_de = 0;
115  dcv_dv = 0;
116 }
117 
118 Real
120 {
121  return _mu;
122 }
123 
124 Real
126 {
127  return _k;
128 }
129 
130 Real
132 {
133  mooseError(name(), ": s_from_v_e() not implemented.");
134 }
135 
136 void
137 LinearFluidProperties::s_from_v_e(Real, Real, Real &, Real &, Real &) const
138 {
139  mooseError(name(), ": s_from_v_e() not implemented.");
140 }
141 
142 Real
144 {
145  mooseError(name(), ": s_from_p_T() not implemented.");
146 }
147 
148 void
149 LinearFluidProperties::s_from_p_T(Real, Real, Real &, Real &, Real &) const
150 {
151  mooseError(name(), ": s_from_p_T() not implemented.");
152 }
153 
154 Real
156 {
157  mooseError(name(), ": s(h,p) is not implemented");
158 }
159 
160 void
161 LinearFluidProperties::s_from_h_p(Real, Real, Real &, Real &, Real &) const
162 {
163  mooseError(name(), ": s(h,p) is not implemented");
164 }
165 
166 Real
168 {
169  mooseError(name(), ": rho_from_p_s() not implemented.");
170 }
171 
172 void
173 LinearFluidProperties::rho_from_p_s(Real, Real, Real &, Real &, Real &) const
174 {
175  mooseError(name(), ": rho_from_p_s() not implemented.");
176 }
177 
178 Real
180 {
181  return (h - v * p_from_v_e(v, 0)) / (1 + v * _beta / _cv * _rho_0 * _a2);
182 }
183 
184 void
185 LinearFluidProperties::e_from_v_h(Real v, Real h, Real & e, Real & de_dv, Real & de_dh) const
186 {
187  const auto num = (h - v * (_p_0 + _a2 * ((1 / v - _rho_0) - _rho_0 * _beta / _cv * _e_0)));
188  const auto denum = (1 + v * _beta / _cv * _rho_0 * _a2);
189  e = num / denum;
190  de_dh = 1 / denum;
191  de_dv = ((-_p_0 - _a2 * _rho_0 * (-1 - _beta / _cv * _e_0)) * denum -
192  num * _beta / _cv * _rho_0 * _a2) /
193  denum / denum;
194 }
195 
196 Real
198 {
199  return _beta;
200 }
201 
202 void
204  Real p, Real T, Real & beta, Real & dbeta_dp, Real & dbeta_dT) const
205 {
206  beta = beta_from_p_T(p, T);
207  dbeta_dp = 0;
208  dbeta_dT = 0;
209 }
210 
211 Real
213 {
214  Real e = _e_0 + _cv * (T - _T_0);
215  return (p - _p_0) / _a2 - _rho_0 * (_beta / _cv) * (e - _e_0) + _rho_0;
216 }
217 
218 void
220  Real p, Real T, Real & rho, Real & drho_dp, Real & drho_dT) const
221 {
222  Real e = _e_0 + _cv * (T - _T_0);
223  rho = (p - _p_0) / _a2 - _rho_0 * (_beta / _cv) * (e - _e_0) + _rho_0;
224  drho_dp = 1 / _a2;
225  drho_dT = -_rho_0 * _beta;
226 }
227 
228 Real
230 {
231  const auto rho = rho_from_p_T(p, T);
232  return e_from_p_rho(p, rho);
233 }
234 
235 void
236 LinearFluidProperties::e_from_p_T(Real p, Real T, Real & e, Real & de_dp, Real & de_dT) const
237 {
238  Real rho, drho_dp, drho_dT;
239  rho_from_p_T(p, T, rho, drho_dp, drho_dT);
240  Real de_drho, de_dp_rho;
241  e_from_p_rho(p, rho, e, de_dp_rho, de_drho);
242  de_dp = de_drho * drho_dp + de_dp_rho;
243  de_dT = de_drho * drho_dT;
244 }
245 
246 Real
248 {
249  return (_cv / _beta) * (((p - _p_0) / (_rho_0 * _a2)) - (rho / _rho_0) + 1) + _e_0;
250 }
251 
252 void
253 LinearFluidProperties::e_from_p_rho(Real p, Real rho, Real & e, Real & de_dp, Real & de_drho) const
254 {
255  e = e_from_p_rho(p, rho);
256  de_dp = _cv / _beta / _rho_0 / _a2;
257  de_drho = -_cv / _beta / _rho_0;
258 }
259 
260 Real
262 {
263  Real rho = rho_from_p_T(p, T);
264  Real e = e_from_p_rho(p, rho);
265  return e + p / rho;
266 }
267 
268 void
269 LinearFluidProperties::h_from_p_T(Real p, Real T, Real & h, Real & dh_dp, Real & dh_dT) const
270 {
271  h = h_from_p_T(p, T);
272 
273  Real rho, drho_dp, drho_dT;
274  rho_from_p_T(p, T, rho, drho_dp, drho_dT);
275 
276  dh_dp = 1.0 / rho - p / rho / rho * drho_dp;
277  dh_dT = _cv - p / rho / rho * drho_dT;
278 }
279 
280 Real
282 {
283  mooseError(name(), ": p_from_h_s() not implemented");
284 }
285 
286 void
287 LinearFluidProperties::p_from_h_s(Real, Real, Real &, Real &, Real &) const
288 {
289  mooseError(name(), ": p_from_h_s() not implemented");
290 }
291 
292 Real
294 {
295  mooseError(name(), ": g_from_v_e(v, e) not implemented");
296 }
297 
298 Real
300 {
301  mooseError(name(), ": molarMass() not implemented");
302 }
303 
304 Real
305 LinearFluidProperties::Pr(Real, Real) const
306 {
307  return _Pr;
308 }
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:126
const double T
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
const double v
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 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
virtual Real cp_from_v_e(Real v, Real e) const override
static const std::string cp
Definition: NS.h:125
e e e e s T T T T T rho v v T e h
const std::string & name() const
virtual Real Pr(Real density, Real temperature) const
virtual Real molarMass() const override
Molar mass [kg/mol].
const double rho
virtual Real e_from_p_T(Real p, Real T) const override
Common class for single phase fluid properties.
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
virtual Real beta_from_p_T(Real p, Real T) const override
const Real p
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)