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