https://mooseframework.inl.gov
LeadBismuthFluidProperties.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 
11 
12 registerMooseObject("FluidPropertiesApp", LeadBismuthFluidProperties);
13 
16 {
18  params.addClassDescription("Fluid properties for Lead Bismuth eutectic 2LiF-BeF2");
19 
20  return params;
21 }
22 
24  : SinglePhaseFluidProperties(parameters)
25 {
26 }
27 
28 std::string
30 {
31  return "LeadBismuth";
32 }
33 
34 Real
36 {
37  return 2.3399e-1;
38 }
39 
40 Real
42 {
43  // Isentropic bulk modulus
44  return (38.02 - 1.296e-2 * T + 1.32e-6 * T * T) * 1e9;
45 }
46 
47 Real
49 {
50  Real T = T_from_v_e(v, e);
51  return 1855 - 0.212 * T;
52 }
53 
54 ADReal
56 {
57  ADReal T = SinglePhaseFluidProperties::T_from_v_e(v, e);
58  return 1855 - 0.212 * T;
59 }
60 
61 Real
63 {
64  Real h = h_from_v_e(v, e);
65  return (h - e) / v;
66 }
67 
68 void
69 LeadBismuthFluidProperties::p_from_v_e(Real v, Real e, Real & p, Real & dp_dv, Real & dp_de) const
70 {
71  p = p_from_v_e(v, e);
72  Real h, dh_dv, dh_de;
73  h_from_v_e(v, e, h, dh_dv, dh_de);
74  dp_dv = (v * dh_dv - h + e) / v / v;
75  dp_de = (dh_de - 1) / v;
76 }
77 
78 Real
80 {
81  return (1 / v - 11065) / -1.293;
82 }
83 
84 void
85 LeadBismuthFluidProperties::T_from_v_e(Real v, Real e, Real & T, Real & dT_dv, Real & dT_de) const
86 {
87  T = T_from_v_e(v, e);
88  dT_de = 0;
89  dT_dv = 1 / v / v / 1.293;
90 }
91 
92 Real
94 {
95  Real T = T_from_v_e(v, e);
96  return 164.8 - 3.94e-2 * T + 1.25e-5 * T * T - 4.56e+5 / T / T;
97 }
98 
99 void
101  Real v, Real e, Real & cp, Real & dcp_dv, Real & dcp_de) const
102 {
103  Real T, dT_dv, dT_de;
104  T_from_v_e(v, e, T, dT_dv, dT_de);
105  cp = cp_from_v_e(v, e);
106  dcp_dv = -3.94e-2 * dT_dv + 2 * dT_dv * 1.25e-5 * T + 2 * dT_dv * 4.56e+5 / T / T / T;
107 
108  dcp_de = -3.94e-2 * dT_de + 2 * dT_de * 1.25e-5 * T + 2 * dT_de * 4.56e+5 / T / T / T;
109 }
110 Real
112 {
113  Real p = p_from_v_e(v, e);
114  Real T = T_from_v_e(v, e);
115  return cv_from_p_T(p, T);
116 }
117 
118 void
120  Real v, Real e, Real & cv, Real & dcv_dv, Real & dcv_de) const
121 {
122  Real p, dp_dv, dp_de;
123  p_from_v_e(v, e, p, dp_dv, dp_de);
124  Real T, dT_dv, dT_de;
125  T_from_v_e(v, e, T, dT_dv, dT_de);
126  Real dcv_dp, dcv_dT;
127  cv_from_p_T(p, T, cv, dcv_dp, dcv_dT);
128  dcv_dv = dcv_dp * dp_dv + dcv_dT * dT_dv;
129  dcv_de = dcv_dp * dp_de + dcv_dT * dT_de;
130 }
131 
132 Real
134 {
135  Real rho, drho_dT, drho_dp;
136  rho_from_p_T(p, T, rho, drho_dp, drho_dT);
137  Real alpha = -drho_dT / rho;
138  Real bulk_modulus = bulk_modulus_from_p_T(p, T);
139  Real cp = cp_from_p_T(p, T);
140  return cp / (1 + alpha * alpha * bulk_modulus * T / rho / cp);
141 }
142 
143 void
145  Real p, Real T, Real & cv, Real & dcv_dp, Real & dcv_dT) const
146 {
147  Real cp, dcp_dp, dcp_dT;
148  cp_from_p_T(p, T, cp, dcp_dp, dcp_dT);
149  cv = cv_from_p_T(p, T);
150 
151  Real rho, drho_dT, drho_dp;
152  rho_from_p_T(p, T, rho, drho_dp, drho_dT);
153  Real alpha = -drho_dT / rho;
154  Real alpha_2 = alpha * alpha, alpha_3 = alpha * alpha * alpha;
155  Real dalpha_dT = drho_dT * drho_dT / rho / rho;
156  Real bulk = bulk_modulus_from_p_T(p, T);
157  Real dbulk_dT = (-1.296e-2 + 2 * 1.32e-6 * T) * 1e9;
158  Real denominator = (1 + alpha * alpha * bulk * T / rho / cp);
159  // no pressure dependence in alpha, T, bulk modulus, cp or rho
160  dcv_dp = 0;
161  dcv_dT = dcp_dT / denominator -
162  cp / denominator / denominator *
163  (2 * alpha * dalpha_dT * bulk * T / rho / cp + alpha_2 * dbulk_dT * T / rho / cp +
164  alpha_2 * bulk / rho / cp + alpha_3 * bulk * T / rho / cp -
165  dcp_dT * alpha_2 * bulk * T / rho / cp / cp);
166 }
167 
168 Real
170 {
171  Real T = T_from_v_e(v, e);
172  return 4.94e-4 * std::exp(754.1 / T);
173 }
174 
175 void
177  Real v, Real e, Real & mu, Real & dmu_dv, Real & dmu_de) const
178 {
179  Real T, dT_dv, dT_de;
180  T_from_v_e(v, e, T, dT_dv, dT_de);
181  mu = mu_from_v_e(v, e);
182  dmu_dv = dT_dv * -754.1 * 4.94e-4 * exp(754.1 / T) / T / T;
183  dmu_de = dT_de * -754.1 * 4.94e-4 * exp(754.1 / T) / T / T;
184 }
185 
186 Real
188 {
189  Real T = T_from_v_e(v, e);
190  return 3.284 + 1.617e-2 * T - 2.305e-6 * T * T;
191 }
192 
193 void
194 LeadBismuthFluidProperties::k_from_v_e(Real v, Real e, Real & k, Real & dk_dv, Real & dk_de) const
195 {
196  Real T, dT_dv, dT_de;
197  T_from_v_e(v, e, T, dT_dv, dT_de);
198  k = k_from_v_e(v, e);
199  dk_dv = 1.617e-2 * dT_dv - 2 * 2.305e-6 * dT_dv * T;
200  dk_de = 1.617e-2 * dT_de - 2 * 2.305e-6 * dT_de * T;
201 }
202 
203 Real
205 {
206  return 11065 - 1.293 * T;
207 }
208 
209 void
211  Real p, Real T, Real & rho, Real & drho_dp, Real & drho_dT) const
212 {
213  rho = rho_from_p_T(p, T);
214  drho_dp = 0;
215  drho_dT = -1.293;
216 }
217 
218 void
220  const ADReal & p, const ADReal & T, ADReal & rho, ADReal & drho_dp, ADReal & drho_dT) const
221 {
222  rho = SinglePhaseFluidProperties::rho_from_p_T(p, T);
223  drho_dp = 0;
224  drho_dT = -1.293;
225 }
226 
227 Real
229 {
230  return 1.0 / rho_from_p_T(p, T);
231 }
232 
233 void
234 LeadBismuthFluidProperties::v_from_p_T(Real p, Real T, Real & v, Real & dv_dp, Real & dv_dT) const
235 {
236  v = v_from_p_T(p, T);
237  dv_dp = 0;
238  dv_dT = 1.293 / MathUtils::pow(11065 - 1.293 * T, 2);
239 }
240 
241 Real
242 LeadBismuthFluidProperties::h_from_p_T(Real /*p*/, Real T) const
243 {
244  // see 2.55 in 2005 NEA Lead Handbook
245  // 4.167e-6 is replaced by 1.25e-5/3 for accuracy
246  return 164.8 * (T - _T_mo) - 1.97e-2 * (T * T - _T_mo * _T_mo) +
247  (1.25e-5 / 3) * (T * T * T - _T_mo * _T_mo * _T_mo) + 4.56e+5 * (1 / T - 1 / _T_mo);
248 }
249 
250 void
251 LeadBismuthFluidProperties::h_from_p_T(Real p, Real T, Real & h, Real & dh_dp, Real & dh_dT) const
252 {
253  h = h_from_p_T(p, T);
254  dh_dp = 0;
255  dh_dT = cp_from_p_T(p, T);
256 }
257 
258 Real
260 {
261  Real T = T_from_v_e(v, e);
262  return 164.8 * (T - _T_mo) - 1.97e-2 * (T * T - _T_mo * _T_mo) +
263  (1.25e-5 / 3) * (T * T * T - _T_mo * _T_mo * _T_mo) + 4.56e+5 * (1 / T - 1 / _T_mo);
264 }
265 
266 void
267 LeadBismuthFluidProperties::h_from_v_e(Real v, Real e, Real & h, Real & dh_dv, Real & dh_de) const
268 {
269  Real T, dT_dv, dT_de;
270  T_from_v_e(v, e, T, dT_dv, dT_de);
271  h = h_from_v_e(v, e);
272  Real cp = cp_from_v_e(v, e);
273  dh_dv = cp * dT_dv;
274  dh_de = cp * dT_de;
275 }
276 
277 Real
279 {
280  // definition of h = e + p * v
281  Real v = v_from_p_T(p, T);
282  Real h = h_from_p_T(p, T);
283  return h - p * v;
284 }
285 
286 void
287 LeadBismuthFluidProperties::e_from_p_T(Real p, Real T, Real & e, Real & de_dp, Real & de_dT) const
288 {
289  Real dh_dp, dv_dp, dh_dT, dv_dT, v, h;
290  h_from_p_T(p, T, h, dh_dp, dh_dT);
291  v_from_p_T(p, T, v, dv_dp, dv_dT);
292  e = e_from_p_T(p, T);
293  de_dp = dh_dp - v - dv_dp * p;
294  de_dT = dh_dT - dv_dT * p;
295 }
296 
297 Real
299 {
300  return e_from_p_T(p, T_from_p_rho(p, rho));
301 }
302 
303 void
305  Real p, Real rho, Real & e, Real & de_dp, Real & de_drho) const
306 {
307  Real T, dT_dp, dT_drho;
308  T_from_p_rho(p, rho, T, dT_dp, dT_drho);
309  Real de_dp_T, de_dT;
310  e_from_p_T(p, T, e, de_dp_T, de_dT);
311  de_dp = de_dp_T * 1 + de_dT * dT_dp;
312  de_drho = de_dT * dT_drho;
313 }
314 
315 Real
316 LeadBismuthFluidProperties::T_from_p_rho(Real /*p*/, Real rho) const
317 {
318  return (rho - 11065) / -1.293;
319 }
320 
321 void
323  Real p, Real rho, Real & T, Real & dT_dp, Real & dT_drho) const
324 {
325  T = T_from_p_rho(p, rho);
326  dT_dp = 0;
327  dT_drho = 1 / -1.293;
328 }
329 
330 Real
331 LeadBismuthFluidProperties::T_from_p_h(Real /*p*/, Real h) const
332 {
333  // Obtained from sympy solving h(T) with T as a symbol
334  return -2279.2270619664 *
335  std::sqrt(
336  -5.00288972505329e-15 * (283680000.0 * h - 112351848202732.0) /
337  std::pow(
338  5.58786624617756e-6 * h +
339  MathUtils::pow(1.0 - 3.69464146080841e-6 * h, 2) +
340  std::sqrt(0.755198459604694 *
341  MathUtils::pow(2.52492508612867e-6 * h - 1.0, 3) +
343  -5.58786624617756e-6 * h -
344  MathUtils::pow(1.0 - 3.69464146080841e-6 * h, 2) +
345  0.0867667825136797,
346  2)) -
347  0.0867667825136797,
348  1. / 3.) +
349  0.617230605772255 *
350  std::pow(
351  5.58786624617756e-6 * h +
352  MathUtils::pow(1.0 - 3.69464146080841e-6 * h, 2) +
353  std::sqrt(0.755198459604694 *
354  MathUtils::pow(2.52492508612867e-6 * h - 1.0, 3) +
356  -5.58786624617756e-6 * h -
357  MathUtils::pow(1.0 - 3.69464146080841e-6 * h, 2) +
358  0.0867667825136797,
359  2)) -
360  0.0867667825136797,
361  1. / 3.) -
362  1.0) +
363  3223.31382276067 *
364  std::sqrt(
365  5.27858159332216e-12 * (129917883803.256 - 480000.0 * h) /
366  std::sqrt(
367  -5.00288972505329e-15 * (283680000.0 * h - 112351848202732.0) /
368  std::pow(
369  5.58786624617756e-6 * h +
370  MathUtils::pow(1.0 - 3.69464146080841e-6 * h, 2) +
371  std::sqrt(
372  0.755198459604694 *
373  MathUtils::pow(2.52492508612867e-6 * h - 1.0, 3) +
375  -5.58786624617756e-6 * h -
376  MathUtils::pow(1.0 - 3.69464146080841e-6 * h, 2) +
377  0.0867667825136797,
378  2)) -
379  0.0867667825136797,
380  1. / 3.) +
381  0.617230605772255 *
382  std::pow(
383  5.58786624617756e-6 * h +
384  MathUtils::pow(1.0 - 3.69464146080841e-6 * h, 2) +
385  std::sqrt(
386  0.755198459604694 *
387  MathUtils::pow(2.52492508612867e-6 * h - 1.0, 3) +
389  -5.58786624617756e-6 * h -
390  MathUtils::pow(1.0 - 3.69464146080841e-6 * h, 2) +
391  0.0867667825136797,
392  2)) -
393  0.0867667825136797,
394  1. / 3.) -
395  1.0) +
396  2.50144486252665e-15 * (283680000.0 * h - 112351848202732.0) /
397  std::pow(
398  5.58786624617756e-6 * h +
399  MathUtils::pow(1.0 - 3.69464146080841e-6 * h, 2) +
400  std::sqrt(0.755198459604694 *
401  MathUtils::pow(2.52492508612867e-6 * h - 1.0, 3) +
403  -5.58786624617756e-6 * h -
404  MathUtils::pow(1.0 - 3.69464146080841e-6 * h, 2) +
405  0.0867667825136797,
406  2)) -
407  0.0867667825136797,
408  1. / 3.) -
409  0.308615302886127 *
410  std::pow(
411  5.58786624617756e-6 * h +
412  MathUtils::pow(1.0 - 3.69464146080841e-6 * h, 2) +
413  std::sqrt(0.755198459604694 *
414  MathUtils::pow(2.52492508612867e-6 * h - 1.0, 3) +
416  -5.58786624617756e-6 * h -
417  MathUtils::pow(1.0 - 3.69464146080841e-6 * h, 2) +
418  0.0867667825136797,
419  2)) -
420  0.0867667825136797,
421  1. / 3.) -
422  1.0) +
423  1182.0;
424 }
425 
426 void
427 LeadBismuthFluidProperties::T_from_p_h(Real p, Real h, Real & T, Real & dT_dp, Real & dT_dh) const
428 {
429  T = T_from_p_h(p, h);
430  dT_dp = 0;
431  // using inverse relation
432  Real h1, dh_dp, dh_dT;
433  h_from_p_T(p, T, h1, dh_dp, dh_dT);
434  dT_dh = 1 / dh_dT;
435 }
436 
437 Real
439 {
440  return 164.8 - 3.94e-2 * T + 1.25e-5 * T * T - 4.56e+5 / T / T;
441 }
442 
443 void
445  Real p, Real T, Real & cp, Real & dcp_dp, Real & dcp_dT) const
446 {
447  cp = cp_from_p_T(p, T);
448  dcp_dp = 0;
449  dcp_dT = -3.94e-2 + 2 * 1.25e-5 * T + 2 * 4.56e+5 / T / T / T;
450 }
451 
452 Real
454 {
455  return 4.94e-4 * std::exp(754.1 / T);
456 }
457 
458 void
460  Real p, Real T, Real & mu, Real & dmu_dp, Real & dmu_dT) const
461 {
462  mu = mu_from_p_T(p, T);
463  dmu_dp = 0;
464  dmu_dT = -754.1 * 4.94e-4 * exp(754.1 / T) / T / T;
465 }
466 
467 Real
468 LeadBismuthFluidProperties::k_from_p_T(Real /*p*/, Real T) const
469 {
470  return 3.284 + 1.617e-2 * T - 2.305e-6 * T * T;
471 }
472 
473 void
474 LeadBismuthFluidProperties::k_from_p_T(Real p, Real T, Real & k, Real & dk_dp, Real & dk_dT) const
475 {
476  k = k_from_p_T(p, T);
477  dk_dp = 0;
478  dk_dT = 1.617e-2 - 2 * 2.305e-6 * T;
479 }
Real c_from_v_e(Real v, Real e) const override
Real T_from_p_h(Real p, Real h) const override
Real h_from_p_T(Real p, Real T) const override
static const std::string cv
Definition: NS.h:122
Real k_from_p_T(Real p, Real T) const override
virtual std::string fluidName() const override
Fluid name.
Real mu_from_p_T(Real p, Real T) const override
auto exp(const T &)
Fluid properties for LeadBismuth .
static InputParameters validParams()
Real p_from_v_e(Real v, Real e) const override
static InputParameters validParams()
Real v_from_p_T(Real p, Real T) const override
Real h_from_v_e(Real v, Real e) const override
Real e_from_p_T(Real p, Real T) const override
Real cp_from_p_T(Real p, Real T) const override
Real k_from_v_e(Real v, Real e) const override
DualNumber< Real, DNDerivativeType, true > ADReal
Real T_from_v_e(Real v, Real e) const override
static const std::string cp
Definition: NS.h:121
registerMooseObject("FluidPropertiesApp", LeadBismuthFluidProperties)
e e e e s T T T T T rho v v T e h
static const std::string mu
Definition: NS.h:123
Real T_from_p_rho(Real p, Real rho) const
Temperature from pressure and density.
Real mu_from_v_e(Real v, Real e) const override
Common class for single phase fluid properties.
Real cp_from_v_e(Real v, Real e) const override
Real molarMass() const override
Molar mass [kg/mol].
Real e_from_p_rho(Real p, Real rho) const override
Real cv_from_v_e(Real v, Real e) const override
Real cv_from_p_T(Real p, Real T) const override
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string v
Definition: NS.h:84
static const std::string alpha
Definition: NS.h:134
void addClassDescription(const std::string &doc_string)
T pow(T x, int e)
LeadBismuthFluidProperties(const InputParameters &parameters)
Real bulk_modulus_from_p_T(Real p, Real T) const
Isentropic bulk modulus from pressure and temperature.
MooseUnits pow(const MooseUnits &, int)
static const std::string k
Definition: NS.h:130
static constexpr Real _T_mo
Melting temperature of 2LiF-BeF2.
Real rho_from_p_T(Real p, Real T) const override