https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
13
16{
18 params.addClassDescription("Fluid properties for Lead Bismuth eutectic 2LiF-BeF2");
19
20 return params;
21}
22
27
28std::string
30{
31 return "LeadBismuth";
32}
33
34Real
36{
37 return 2.3399e-1;
38}
39
40Real
42{
43 // Isentropic bulk modulus
44 return (38.02 - 1.296e-2 * T + 1.32e-6 * T * T) * 1e9;
45}
46
47Real
49{
50 Real T = T_from_v_e(v, e);
51 return 1855 - 0.212 * T;
52}
53
56{
57 ADReal T = SinglePhaseFluidProperties::T_from_v_e(v, e);
58 return 1855 - 0.212 * T;
59}
60
61Real
63{
64 Real h = h_from_v_e(v, e);
65 return (h - e) / v;
66}
67
68void
69LeadBismuthFluidProperties::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
78Real
80{
81 return (1 / v - 11065) / -1.293;
82}
83
84void
85LeadBismuthFluidProperties::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
92Real
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
99void
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}
110Real
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
118void
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
132Real
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
143void
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
168Real
170{
171 Real T = T_from_v_e(v, e);
172 return 4.94e-4 * std::exp(754.1 / T);
173}
174
175void
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
186Real
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
193void
194LeadBismuthFluidProperties::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
203Real
205{
206 return 11065 - 1.293 * T;
207}
208
209void
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
218void
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
227Real
229{
230 return 1.0 / rho_from_p_T(p, T);
231}
232
233void
234LeadBismuthFluidProperties::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
241Real
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
250void
251LeadBismuthFluidProperties::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
258Real
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
266void
267LeadBismuthFluidProperties::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
277Real
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
286void
287LeadBismuthFluidProperties::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
297Real
299{
300 return e_from_p_T(p, T_from_p_rho(p, rho));
301}
302
303void
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
315Real
317{
318 return (rho - 11065) / -1.293;
319}
320
321void
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
330Real
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
426void
427LeadBismuthFluidProperties::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
437Real
439{
440 return 164.8 - 3.94e-2 * T + 1.25e-5 * T * T - 4.56e+5 / T / T;
441}
442
443void
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
452Real
454{
455 return 4.94e-4 * std::exp(754.1 / T);
456}
457
458void
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
467Real
469{
470 return 3.284 + 1.617e-2 * T - 2.305e-6 * T * T;
471}
472
473void
474LeadBismuthFluidProperties::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}
DualNumber< Real, DNDerivativeType, true > ADReal
const double mu
const Real p
const double rho
const double T
const double v
registerMooseObject("FluidPropertiesApp", LeadBismuthFluidProperties)
void addClassDescription(const std::string &doc_string)
Fluid properties for LeadBismuth .
Real v_from_p_T(Real p, Real T) const override
Real T_from_p_rho(Real p, Real rho) const
Temperature from pressure and density.
Real h_from_v_e(Real v, Real e) const override
static constexpr Real _T_mo
Melting temperature of 2LiF-BeF2.
Real cv_from_v_e(Real v, Real e) const override
virtual std::string fluidName() const override
Fluid name.
Real k_from_v_e(Real v, Real e) const override
Real T_from_p_h(Real p, Real h) const override
LeadBismuthFluidProperties(const InputParameters &parameters)
Real h_from_p_T(Real p, Real T) const override
Real bulk_modulus_from_p_T(Real p, Real T) const
Isentropic bulk modulus from pressure and temperature.
Real molarMass() const override
Molar mass [kg/mol].
Real mu_from_v_e(Real v, Real e) const override
Real rho_from_p_T(Real p, Real T) const override
Real cp_from_p_T(Real p, Real T) const override
static InputParameters validParams()
Real c_from_v_e(Real v, Real e) const override
Real cp_from_v_e(Real v, Real e) const override
Real T_from_v_e(Real v, Real e) const override
Real mu_from_p_T(Real p, Real T) const override
Real p_from_v_e(Real v, Real e) const override
Real k_from_p_T(Real p, Real T) const override
Real e_from_p_T(Real p, Real T) const override
Real cv_from_p_T(Real p, Real T) const override
Real e_from_p_rho(Real p, Real rho) const override
Common class for single phase fluid properties.
static InputParameters validParams()
e e e e s T T T T T rho v v T e h
T pow(T x, int e)