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