https://mooseframework.inl.gov
FlinakFluidProperties.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 "FlinakFluidProperties.h"
11 
12 registerMooseObject("FluidPropertiesApp", FlinakFluidProperties);
13 
16 {
18  params.addRangeCheckedParam<Real>(
19  "drho_dp",
20  1.7324E-7,
21  "drho_dp > 0.0",
22  "derivative of density with respect to pressure (at constant temperature)");
23  params.addClassDescription("Fluid properties for flinak");
24  return params;
25 }
26 
28  : SinglePhaseFluidProperties(parameters),
29  _drho_dp(getParam<Real>("drho_dp")),
30  _drho_dT(-0.73),
31  _p_atm(101325.0),
32  _cp(2010.0),
33  _c0(2729.0),
34  _dp_dT_at_constant_v(-_drho_dT / _drho_dp)
35 {
36 }
37 
38 std::string
40 {
41  return "flinak";
42 }
43 
44 Real
46 {
47  return 41.291077435E-3;
48 }
49 
50 Real
52 {
54  return (1.0 / v - _drho_dT * temperature - _c0) / _drho_dp + _p_atm;
55 }
56 
57 void
58 FlinakFluidProperties::p_from_v_e(Real v, Real e, Real & p, Real & dp_dv, Real & dp_de) const
59 {
60  p = p_from_v_e(v, e);
61 
62  // chain rule, (dp_de)_v = (dp_dT)_v * (dT_de)_v
63  Real T, dT_dv, dT_de;
64  T_from_v_e(v, e, T, dT_dv, dT_de);
65  dp_de = _dp_dT_at_constant_v * dT_de;
66 
67  // cyclic relation, (dP_dv)_e = - (dp_de)_v * (de_dv)_p
68  Real cp = cp_from_v_e(v, e);
69  Real dT_dv_at_constant_p = -1.0 / (_drho_dT * v * v);
70  Real de_dv_at_constant_p = cp * dT_dv_at_constant_p - p;
71  dp_dv = -dp_de * de_dv_at_constant_p;
72 }
73 
74 void
76  const ADReal & v, const ADReal & e, ADReal & p, ADReal & dp_dv, ADReal & dp_de) const
77 {
78  p = SinglePhaseFluidProperties::p_from_v_e(v, e);
79 
80  // chain rule, (dp_de)_v = (dp_dT)_v * (dT_de)_v
81  ADReal T, dT_dv, dT_de;
82  T_from_v_e(v, e, T, dT_dv, dT_de);
83  dp_de = _dp_dT_at_constant_v * dT_de;
84 
85  // cyclic relation, (dP_dv)_e = - (dp_de)_v * (de_dv)_p
86  auto cp = SinglePhaseFluidProperties::cp_from_v_e(v, e);
87  auto dT_dv_at_constant_p = -1.0 / (_drho_dT * v * v);
88  auto de_dv_at_constant_p = cp * dT_dv_at_constant_p - p;
89  dp_dv = -dp_de * de_dv_at_constant_p;
90 }
91 
92 Real
94 {
95  // We need to write these in a somewhat strange manner to ensure that pressure
96  // and temperature do not depend implicitly on each other, causing a circular
97  // logic problem. Substituting the definition for pressure based on the
98  // rho * (h - e) = P, where h = Cp * T into the density correlation for flibe,
99  // we can rearrange and get temperature in terms of only v and e
100 
101  // p = (Cp * T - e) / v
102  // T = (1 / v - drho_dp * [p - p_atm] + _c0) / drho_dT
103  // = (1 / v - drho_dp * [(Cp * T - e) / v - p_atm] + _c0) / drho_dT
104  // = (1 + drho_dp * e + p_atm * v * drho_dp - _c0 * v) / (drho_dT * v + drho_dp * Cp)
105 
106  Real cp = cp_from_v_e(v, e);
107  Real numerator = 1.0 + _drho_dp * (e + _p_atm * v) - _c0 * v;
108  Real denominator = _drho_dT * v + _drho_dp * cp;
109  return numerator / denominator;
110 }
111 
112 void
113 FlinakFluidProperties::T_from_v_e(Real v, Real e, Real & T, Real & dT_dv, Real & dT_de) const
114 {
115  T = T_from_v_e(v, e);
116 
117  // reciprocity relation based on the definition of cv
118  Real cv = cv_from_v_e(v, e);
119  dT_de = 1.0 / cv;
120 
121  // cyclic relation, (dT_dv)_e = -(dT_de)_v * (de_dv)_T
122  Real p = p_from_v_e(v, e);
123  Real dp_dv_at_constant_T = -1.0 / (_drho_dp * v * v);
124  Real de_dv_at_constant_T = -(p + v * dp_dv_at_constant_T);
125  dT_dv = -dT_de * de_dv_at_constant_T;
126 }
127 
128 void
130  const ADReal & v, const ADReal & e, ADReal & T, ADReal & dT_dv, ADReal & dT_de) const
131 {
132  T = SinglePhaseFluidProperties::T_from_v_e(v, e);
133 
134  // reciprocity relation based on the definition of cv
135  auto cv = SinglePhaseFluidProperties::cv_from_v_e(v, e);
136  dT_de = 1.0 / cv;
137 
138  // cyclic relation, (dT_dv)_e = -(dT_de)_v * (de_dv)_T
139  auto p = SinglePhaseFluidProperties::p_from_v_e(v, e);
140  auto dp_dv_at_constant_T = -1.0 / (_drho_dp * v * v);
141  auto de_dv_at_constant_T = -(p + v * dp_dv_at_constant_T);
142  dT_dv = -dT_de * de_dv_at_constant_T;
143 }
144 
145 Real
146 FlinakFluidProperties::T_from_p_h(Real /* p */, Real h) const
147 {
148  return h / _cp;
149 }
150 
151 ADReal
152 FlinakFluidProperties::T_from_p_h(const ADReal & /* p */, const ADReal & h) const
153 {
154  return h / _cp;
155 }
156 
157 Real
158 FlinakFluidProperties::T_from_p_rho(Real p, Real rho) const
159 {
160  Real temperature = (rho - (p - _p_atm) * _drho_dp - _c0) / _drho_dT;
161  return temperature;
162 }
163 
164 Real FlinakFluidProperties::cp_from_v_e(Real /*v*/, Real /*e*/) const { return _cp; }
165 
166 void
167 FlinakFluidProperties::cp_from_v_e(Real v, Real e, Real & cp, Real & dcp_dv, Real & dcp_de) const
168 {
169  cp = cp_from_v_e(v, e);
170  dcp_dv = 0.0;
171  dcp_de = 0.0;
172 }
173 
174 Real
176 {
177  // definition of Cv by replacing e by h + p * v
178  Real cp = cp_from_v_e(v, e);
179  return cp - _dp_dT_at_constant_v * v;
180 }
181 
182 void
183 FlinakFluidProperties::cv_from_v_e(Real v, Real e, Real & cv, Real & dcv_dv, Real & dcv_de) const
184 {
185  cv = cv_from_v_e(v, e);
186  dcv_dv = -_dp_dT_at_constant_v;
187  dcv_de = 0.0;
188 }
189 
190 void
192  const ADReal & v, const ADReal & e, ADReal & cv, ADReal & dcv_dv, ADReal & dcv_de) const
193 {
194  cv = SinglePhaseFluidProperties::cv_from_v_e(v, e);
195  dcv_dv = -_dp_dT_at_constant_v;
196  dcv_de = 0.0;
197 }
198 
199 Real
201 {
203  return 4.0e-5 * std::exp(4170.0 / temperature);
204 }
205 
206 Real
208 {
210  return 5.0e-4 * temperature + 0.43;
211 }
212 
213 Real
215 {
216  return _drho_dT * temperature + _drho_dp * (pressure - _p_atm) + _c0;
217 }
218 
219 void
221  Real pressure, Real temperature, Real & rho, Real & drho_dp, Real & drho_dT) const
222 {
224  drho_dp = _drho_dp;
225  drho_dT = _drho_dT;
226 }
227 
228 void
230  const ADReal & temperature,
231  ADReal & rho,
232  ADReal & drho_dp,
233  ADReal & drho_dT) const
234 {
235  rho = SinglePhaseFluidProperties::rho_from_p_T(pressure, temperature);
236  drho_dp = _drho_dp;
237  drho_dT = _drho_dT;
238 }
239 
240 ADReal
242 {
243  return 1.0 / (_drho_dT * temperature + _drho_dp * (pressure - _p_atm) + _c0);
244 }
245 
246 Real
248 {
249  return 1.0 / (_drho_dT * temperature + _drho_dp * (pressure - _p_atm) + _c0);
250 }
251 
252 void
254  Real pressure, Real temperature, Real & v, Real & dv_dp, Real & dv_dT) const
255 {
257  dv_dp = -v * v * _drho_dp;
258  dv_dT = -v * v * _drho_dT;
259 }
260 
261 Real
262 FlinakFluidProperties::h_from_p_T(Real /*pressure*/, Real temperature) const
263 {
264  // definition of h for constant Cp
265  Real cp = cp_from_v_e(0.0 /* dummy */, 0.0 /* dummy */);
266  return cp * temperature;
267 }
268 
269 void
271  Real pressure, Real temperature, Real & h, Real & dh_dp, Real & dh_dT) const
272 {
274  Real cp = cp_from_v_e(0.0 /* dummy */, 0.0 /* dummy */);
275 
276  dh_dp = 0.0;
277  dh_dT = cp;
278 }
279 
280 Real
282 {
283  // definition of h = e + p * v
285  Real cp = cp_from_v_e(v, 0.0 /* dummy */);
286  return cp * temperature - pressure * v;
287 }
288 
289 void
291  Real pressure, Real temperature, Real & e, Real & de_dp, Real & de_dT) const
292 {
294 
295  Real v, dv_dp, dv_dT;
296  v_from_p_T(pressure, temperature, v, dv_dp, dv_dT);
297 
298  // definition of e = h - p * v
299  de_dp = -pressure * dv_dp - v;
300 
301  // definition of e = h - p * v
302  Real cp = cp_from_v_e(v, e);
303  de_dT = cp - pressure * dv_dT;
304 }
305 
306 Real
307 FlinakFluidProperties::e_from_p_rho(Real p, Real rho) const
308 {
309  return e_from_p_T(p, T_from_p_rho(p, rho));
310 }
311 
312 Real
314 {
315  Real rho, drho_dp, drho_dT;
316  rho_from_p_T(pressure, temperature, rho, drho_dp, drho_dT);
317  return -drho_dT / rho;
318 }
319 
320 Real FlinakFluidProperties::cp_from_p_T(Real /*pressure*/, Real /*temperature*/) const
321 {
322  return _cp;
323 }
324 
325 void
327  Real pressure, Real temperature, Real & cp, Real & dcp_dp, Real & dcp_dT) const
328 {
330  dcp_dp = 0.0;
331  dcp_dT = 0.0;
332 }
333 
334 Real
336 {
339  return cv_from_v_e(v, e);
340 }
341 
342 void
344  Real pressure, Real temperature, Real & cv, Real & dcv_dp, Real & dcv_dT) const
345 {
347  dcv_dp = 0.0;
348  dcv_dT = 0.0;
349 }
350 
351 Real
352 FlinakFluidProperties::mu_from_p_T(Real /*pressure*/, Real temperature) const
353 {
354  return 4.0e-5 * std::exp(4170.0 / temperature);
355 }
356 
357 void
359  Real pressure, Real temperature, Real & mu, Real & dmu_dp, Real & dmu_dT) const
360 {
361  mu = this->mu_from_p_T(pressure, temperature);
362  dmu_dp = 0.0;
363  dmu_dT = -4.0e-5 * std::exp(4170.0 / temperature) * 4170.0 / (temperature * temperature);
364 }
365 
366 Real
367 FlinakFluidProperties::k_from_p_T(Real /*pressure*/, Real temperature) const
368 {
369  return 5.0e-4 * temperature + 0.43;
370 }
371 
372 void
374  Real pressure, Real temperature, Real & k, Real & dk_dp, Real & dk_dT) const
375 {
376  k = this->k_from_p_T(pressure, temperature);
377  dk_dp = 0.0;
378  dk_dT = 5.0e-4;
379 }
const Real _p_atm
Atmospheric pressure, Pa.
virtual Real h_from_p_T(Real p, Real T) const override
Specific enthalpy from pressure and temperature.
static const std::string cv
Definition: NS.h:122
virtual Real T_from_p_rho(Real p, Real rho) const
Temperature from pressure and density.
static InputParameters validParams()
virtual Real cv_from_p_T(Real p, Real T) const override
Isochoric specific heat capacity from pressure and temperature.
FlinakFluidProperties(const InputParameters &parameters)
virtual Real cv_from_v_e(Real v, Real e) const override
Isochoric specific heat from specific volume and specific internal energy.
virtual Real T_from_v_e(Real v, Real e) const override
Temperature from specific volume and specific internal energy.
static InputParameters validParams()
registerMooseObject("FluidPropertiesApp", FlinakFluidProperties)
virtual Real cp_from_p_T(Real p, Real T) const override
Isobaric specific heat capacity from pressure and temperature.
static const std::string temperature
Definition: NS.h:59
DualNumber< Real, DNDerivativeType, true > ADReal
virtual Real beta_from_p_T(Real p, Real T) const override
Thermal expansion coefficient from pressure and temperature.
const Real _cp
specific heat at constant pressure
static const std::string cp
Definition: NS.h:121
virtual std::string fluidName() const override
Fluid name.
e e e e s T T T T T rho v v T e h
virtual Real T_from_p_h(Real p, Real h) const override
Temperature from pressure and specific enthalpy.
virtual Real v_from_p_T(Real p, Real T) const override
Specific volume from pressure and temperature.
virtual Real e_from_p_rho(Real p, Real rho) const override
Specific internal energy from pressure and density.
const Real _drho_dT
Derivative of density with respect to temperature at fixed pressure.
static const std::string mu
Definition: NS.h:123
Common class for single phase fluid properties.
virtual Real mu_from_v_e(Real v, Real e) const override
Dynamic viscosity from specific volume and specific internal energy.
virtual Real k_from_v_e(Real v, Real e) const override
Thermal conductivity from specific volume and specific internal energy.
virtual Real p_from_v_e(Real v, Real e) const override
Pressure from specific volume and specific internal energy.
const Real & _drho_dp
Derivative of density with respect to pressure at fixed temperature.
Fluid properties for 0.465 LiF - 0.115 NaF - 0.42 KF (flinak) .
virtual Real e_from_p_T(Real p, Real T) const override
Specific internal energy from pressure and temperature.
const Real _dp_dT_at_constant_v
derivative of pressure with respect to temperature at constant specific volume
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string v
Definition: NS.h:84
static const std::string pressure
Definition: NS.h:56
virtual Real rho_from_p_T(Real p, Real T) const override
Density from pressure and temperature.
void addClassDescription(const std::string &doc_string)
virtual Real k_from_p_T(Real p, Real T) const override
Thermal conductivity from pressure and temperature.
void addRangeCheckedParam(const std::string &name, const T &value, const std::string &parsed_function, const std::string &doc_string)
const Real _c0
additive constant to rho(P, T) correlation
virtual Real molarMass() const override
Molar mass.
virtual Real mu_from_p_T(Real p, Real T) const override
Dynamic viscosity from pressure and temperature.
virtual Real cp_from_v_e(Real v, Real e) const override
Isobaric specific heat from specific volume and specific internal energy.
static const std::string k
Definition: NS.h:130