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 "LeadFluidProperties.h"
11 :
12 : registerMooseObject("FluidPropertiesApp", LeadFluidProperties);
13 :
14 : InputParameters
15 8 : LeadFluidProperties::validParams()
16 : {
17 8 : InputParameters params = SinglePhaseFluidProperties::validParams();
18 8 : params.addClassDescription("Fluid properties for Lead");
19 :
20 8 : return params;
21 0 : }
22 :
23 4 : LeadFluidProperties::LeadFluidProperties(const InputParameters & parameters)
24 4 : : SinglePhaseFluidProperties(parameters)
25 : {
26 4 : }
27 :
28 : std::string
29 1 : LeadFluidProperties::fluidName() const
30 : {
31 1 : return "Lead";
32 : }
33 :
34 : Real
35 1 : LeadFluidProperties::molarMass() const
36 : {
37 1 : return 2.072e-1;
38 : }
39 :
40 : Real
41 23 : LeadFluidProperties::bulk_modulus_from_p_T(Real /*p*/, Real T) const
42 : {
43 : // Isentropic bulk modulus, eq 2.42 from Handbook
44 23 : return (43.50 - 1.552e-2 * T + 1.622e-6 * T * T) * 1e9;
45 : }
46 :
47 : Real
48 3 : LeadFluidProperties::c_from_v_e(Real v, Real e) const
49 : {
50 3 : auto T = T_from_v_e(v, e);
51 3 : return 1953 - 0.246 * T;
52 : }
53 :
54 : ADReal
55 0 : LeadFluidProperties::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 1953 - 0.246 * T;
59 : }
60 :
61 : Real
62 18 : LeadFluidProperties::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 : LeadFluidProperties::p_from_v_e(Real v, Real e, Real & p, Real & dp_dv, Real & dp_de) const
70 : {
71 : Real h, dh_dv, dh_de;
72 2 : h_from_v_e(v, e, h, dh_dv, dh_de);
73 2 : p = p_from_v_e(v, e);
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 9 : LeadFluidProperties::mu_from_v_e(Real v, Real e) const
80 : {
81 9 : Real T = T_from_v_e(v, e);
82 9 : return 4.55e-4 * std::exp(1069 / T);
83 : }
84 :
85 : void
86 1 : LeadFluidProperties::mu_from_v_e(Real v, Real e, Real & mu, Real & dmu_dv, Real & dmu_de) const
87 : {
88 : Real T, dT_dv, dT_de;
89 1 : T_from_v_e(v, e, T, dT_dv, dT_de);
90 1 : mu = mu_from_v_e(v, e);
91 1 : dmu_dv = dT_dv * -1069 * 4.55e-4 * exp(1069 / T) / T / T;
92 1 : dmu_de = dT_de * -1069 * 4.55e-4 * exp(1069 / T) / T / T;
93 1 : }
94 :
95 : Real
96 9 : LeadFluidProperties::k_from_v_e(Real v, Real e) const
97 : {
98 9 : Real T = T_from_v_e(v, e);
99 9 : return 0.011 * T + 9.2;
100 : }
101 :
102 : void
103 1 : LeadFluidProperties::k_from_v_e(Real v, Real e, Real & k, Real & dk_dv, Real & dk_de) const
104 : {
105 : Real T, dT_dv, dT_de;
106 1 : T_from_v_e(v, e, T, dT_dv, dT_de);
107 1 : k = k_from_v_e(v, e);
108 1 : dk_dv = 0.011 * dT_dv;
109 1 : dk_de = 0.011 * dT_de;
110 1 : }
111 :
112 : Real
113 66 : LeadFluidProperties::rho_from_p_T(Real /*p*/, Real T) const
114 : {
115 66 : return 11441 - 1.2795 * T;
116 : }
117 :
118 : void
119 21 : LeadFluidProperties::rho_from_p_T(Real p, Real T, Real & rho, Real & drho_dp, Real & drho_dT) const
120 : {
121 21 : rho = rho_from_p_T(p, T);
122 21 : drho_dp = 0;
123 21 : drho_dT = -1.2795;
124 21 : }
125 :
126 : void
127 0 : LeadFluidProperties::rho_from_p_T(
128 : const ADReal & p, const ADReal & T, ADReal & rho, ADReal & drho_dp, ADReal & drho_dT) const
129 : {
130 0 : rho = SinglePhaseFluidProperties::rho_from_p_T(p, T);
131 0 : drho_dp = 0;
132 0 : drho_dT = -1.2795;
133 0 : }
134 :
135 : Real
136 33 : LeadFluidProperties::v_from_p_T(Real p, Real T) const
137 : {
138 33 : return 1.0 / rho_from_p_T(p, T);
139 : }
140 :
141 : void
142 3 : LeadFluidProperties::v_from_p_T(Real p, Real T, Real & v, Real & dv_dp, Real & dv_dT) const
143 : {
144 3 : v = v_from_p_T(p, T);
145 3 : dv_dp = 0;
146 3 : dv_dT = 1.2795 / MathUtils::pow(11441 - 1.2795 * T, 2);
147 3 : }
148 :
149 : Real
150 38 : LeadFluidProperties::h_from_p_T(Real /*p*/, Real T) const
151 : {
152 : // see 2.53 in 2005 NEA Lead Handbook
153 : // 5.1467e-6 is replaced by 1.544e-5/3 for accuracy
154 38 : return 176.2 * (T - _T_mo) - 2.4615e-2 * (T * T - _T_mo * _T_mo) +
155 38 : (1.544e-5 / 3) * (T * T * T - _T_mo * _T_mo * _T_mo) + 1.524e+6 * (1 / T - 1 / _T_mo);
156 : }
157 :
158 : void
159 4 : LeadFluidProperties::h_from_p_T(Real p, Real T, Real & h, Real & dh_dp, Real & dh_dT) const
160 : {
161 4 : h = h_from_p_T(p, T);
162 4 : Real cp = cp_from_p_T(p, T);
163 4 : dh_dp = 0;
164 4 : dh_dT = cp;
165 4 : }
166 :
167 : Real
168 29 : LeadFluidProperties::h_from_v_e(Real v, Real e) const
169 : {
170 29 : Real T = T_from_v_e(v, e);
171 29 : return 176.2 * (T - _T_mo) - 2.4615e-2 * (T * T - _T_mo * _T_mo) +
172 29 : (1.544e-5 / 3) * (T * T * T - _T_mo * _T_mo * _T_mo) + 1.524e+6 * (1 / T - 1 / _T_mo);
173 : }
174 :
175 : void
176 3 : LeadFluidProperties::h_from_v_e(Real v, Real e, Real & h, Real & dh_dv, Real & dh_de) const
177 : {
178 : Real T, dT_dv, dT_de;
179 3 : T_from_v_e(v, e, T, dT_dv, dT_de);
180 3 : h = h_from_v_e(v, e);
181 3 : Real cp = cp_from_v_e(v, e);
182 3 : dh_dv = cp * dT_dv;
183 3 : dh_de = cp * dT_de;
184 3 : }
185 :
186 : Real
187 22 : LeadFluidProperties::e_from_p_T(Real p, Real T) const
188 : {
189 : // definition of h = e + p * v
190 22 : Real v = v_from_p_T(p, T);
191 22 : Real h = h_from_p_T(p, T);
192 22 : return h - p * v;
193 : }
194 :
195 : void
196 2 : LeadFluidProperties::e_from_p_T(Real p, Real T, Real & e, Real & de_dp, Real & de_dT) const
197 : {
198 : Real dh_dp, dv_dp, dh_dT, dv_dT, v, h;
199 2 : h_from_p_T(p, T, h, dh_dp, dh_dT);
200 2 : v_from_p_T(p, T, v, dv_dp, dv_dT);
201 2 : e = e_from_p_T(p, T);
202 2 : de_dp = dh_dp - v - dv_dp * p;
203 2 : de_dT = dh_dT - dv_dT * p;
204 2 : }
205 :
206 : Real
207 8 : LeadFluidProperties::e_from_p_rho(Real p, Real rho) const
208 : {
209 8 : return e_from_p_T(p, T_from_p_rho(p, rho));
210 : }
211 :
212 : void
213 1 : LeadFluidProperties::e_from_p_rho(Real p, Real rho, Real & e, Real & de_dp, Real & de_drho) const
214 : {
215 : Real T, dT_dp, dT_drho;
216 1 : T_from_p_rho(p, rho, T, dT_dp, dT_drho);
217 : Real de_dp_T, de_dT;
218 1 : e_from_p_T(p, T, e, de_dp_T, de_dT);
219 1 : de_dp = de_dp_T * 1 + de_dT * dT_dp;
220 1 : de_drho = de_dT * dT_drho;
221 1 : }
222 :
223 : Real
224 18 : LeadFluidProperties::T_from_p_rho(Real /*p*/, Real rho) const
225 : {
226 18 : return (rho - 11441) / -1.2795;
227 : }
228 :
229 : void
230 2 : LeadFluidProperties::T_from_p_rho(Real p, Real rho, Real & T, Real & dT_dp, Real & dT_drho) const
231 : {
232 2 : T = T_from_p_rho(p, rho);
233 2 : dT_dp = 0;
234 2 : dT_drho = 1 / -1.2795;
235 2 : }
236 :
237 : Real
238 86 : LeadFluidProperties::T_from_v_e(Real v, Real /*e*/) const
239 : {
240 86 : return (1 / v - 11441) / -1.2795;
241 : }
242 :
243 : void
244 8 : LeadFluidProperties::T_from_v_e(Real v, Real e, Real & T, Real & dT_dv, Real & dT_de) const
245 : {
246 8 : T = T_from_v_e(v, e);
247 8 : dT_de = 0;
248 8 : dT_dv = 1. / v / v / 1.2795;
249 8 : }
250 :
251 : Real
252 9 : LeadFluidProperties::T_from_p_h(Real /*p*/, Real h) const
253 : {
254 : // Obtained from sympy solving h(T) with T as a symbol
255 9 : return -2067.9254113598 *
256 9 : std::sqrt(
257 9 : -7.36955226020901e-15 * (232320624.378877 * h - 74598764305248.3) /
258 9 : std::pow(
259 9 : 6.71651186402396e-6 * h +
260 9 : MathUtils::pow(1.0 - 3.99399123439419e-6 * h, 2) +
261 9 : std::sqrt(0.702754599548161 *
262 9 : MathUtils::pow(3.11426907057403e-6 * h - 1.0, 3) +
263 9 : MathUtils::pow(
264 9 : -6.71651186402396e-6 * h -
265 : MathUtils::pow(1.0 - 3.99399123439419e-6 * h, 2) +
266 : 0.0419568962265043,
267 : 2)) -
268 : 0.0419568962265043,
269 9 : 1. / 3.) +
270 9 : 0.61835541884035 *
271 9 : std::pow(
272 : 6.71651186402396e-6 * h +
273 9 : MathUtils::pow(1.0 - 3.99399123439419e-6 * h, 2) +
274 9 : std::sqrt(0.702754599548161 *
275 : MathUtils::pow(3.11426907057403e-6 * h - 1.0, 3) +
276 : MathUtils::pow(
277 : -6.71651186402396e-6 * h -
278 : MathUtils::pow(1.0 - 3.99399123439419e-6 * h, 2) +
279 : 0.0419568962265043,
280 : 2)) -
281 : 0.0419568962265043,
282 : 1. / 3.) -
283 9 : 1.0) +
284 9 : 2924.48816272099 *
285 9 : std::sqrt(
286 9 : 7.0676560676229e-12 * (97296416908.1661 - 388601.036269178 * h) /
287 9 : std::sqrt(
288 9 : -7.36955226020901e-15 * (232320624.378877 * h - 74598764305248.3) /
289 9 : std::pow(
290 : 6.71651186402396e-6 * h +
291 9 : MathUtils::pow(1.0 - 3.99399123439419e-6 * h, 2) +
292 9 : std::sqrt(
293 : 0.702754599548161 *
294 : MathUtils::pow(3.11426907057403e-6 * h - 1.0, 3) +
295 : MathUtils::pow(
296 : -6.71651186402396e-6 * h -
297 : MathUtils::pow(1.0 - 3.99399123439419e-6 * h, 2) +
298 : 0.0419568962265043,
299 : 2)) -
300 : 0.0419568962265043,
301 9 : 1. / 3.) +
302 9 : 0.61835541884035 *
303 9 : std::pow(
304 : 6.71651186402396e-6 * h +
305 9 : MathUtils::pow(1.0 - 3.99399123439419e-6 * h, 2) +
306 9 : std::sqrt(
307 : 0.702754599548161 *
308 : MathUtils::pow(3.11426907057403e-6 * h - 1.0, 3) +
309 : MathUtils::pow(
310 : -6.71651186402396e-6 * h -
311 : MathUtils::pow(1.0 - 3.99399123439419e-6 * h, 2) +
312 : 0.0419568962265043,
313 : 2)) -
314 : 0.0419568962265043,
315 : 1. / 3.) -
316 9 : 1.0) +
317 9 : 3.6847761301045e-15 * (232320624.378877 * h - 74598764305248.3) /
318 9 : std::pow(
319 : 6.71651186402396e-6 * h +
320 9 : MathUtils::pow(1.0 - 3.99399123439419e-6 * h, 2) +
321 9 : std::sqrt(0.702754599548161 *
322 : MathUtils::pow(3.11426907057403e-6 * h - 1.0, 3) +
323 : MathUtils::pow(
324 : -6.71651186402396e-6 * h -
325 : MathUtils::pow(1.0 - 3.99399123439419e-6 * h, 2) +
326 : 0.0419568962265043,
327 : 2)) -
328 : 0.0419568962265043,
329 9 : 1. / 3.) -
330 9 : 0.309177709420175 *
331 9 : std::pow(
332 : 6.71651186402396e-6 * h +
333 9 : MathUtils::pow(1.0 - 3.99399123439419e-6 * h, 2) +
334 9 : std::sqrt(0.702754599548161 *
335 : MathUtils::pow(3.11426907057403e-6 * h - 1.0, 3) +
336 : MathUtils::pow(
337 : -6.71651186402396e-6 * h -
338 : MathUtils::pow(1.0 - 3.99399123439419e-6 * h, 2) +
339 : 0.0419568962265043,
340 : 2)) -
341 : 0.0419568962265043,
342 : 1. / 3.) -
343 : 1.0) +
344 9 : 1195.67681347073;
345 : }
346 :
347 : void
348 1 : LeadFluidProperties::T_from_p_h(Real p, Real h, Real & T, Real & dT_dp, Real & dT_dh) const
349 : {
350 1 : T = T_from_p_h(p, h);
351 1 : dT_dp = 0;
352 : // using inverse relation
353 : Real h1, dh_dp, dh_dT;
354 1 : h_from_p_T(p, T, h1, dh_dp, dh_dT);
355 1 : dT_dh = 1 / dh_dT;
356 1 : }
357 :
358 : Real
359 33 : LeadFluidProperties::cp_from_p_T(Real /*p*/, Real T) const
360 : {
361 33 : return 176.2 - 4.923e-2 * T + 1.544e-5 * T * T - 1.524e+6 / T / T;
362 : }
363 :
364 : void
365 3 : LeadFluidProperties::cp_from_p_T(Real p, Real T, Real & cp, Real & dcp_dp, Real & dcp_dT) const
366 : {
367 3 : cp = cp_from_p_T(p, T);
368 3 : dcp_dp = 0;
369 3 : dcp_dT = -4.923e-2 + 2 * 1.544e-5 * T + 2 * 1.524e6 / T / T / T;
370 3 : }
371 :
372 : Real
373 12 : LeadFluidProperties::cp_from_v_e(Real v, Real e) const
374 : {
375 12 : Real T = T_from_v_e(v, e);
376 12 : return 176.2 - 4.923e-2 * T + 1.544e-5 * T * T - 1.524e6 / T / T;
377 : }
378 :
379 : void
380 1 : LeadFluidProperties::cp_from_v_e(Real v, Real e, Real & cp, Real & dcp_dv, Real & dcp_de) const
381 : {
382 : Real T, dT_dv, dT_de;
383 1 : T_from_v_e(v, e, T, dT_dv, dT_de);
384 1 : cp = cp_from_v_e(v, e);
385 1 : dcp_dv = -4.923e-2 * dT_dv + 2 * dT_dv * 1.544e-5 * T + 2 * dT_dv * 1.524e+6 / T / T / T;
386 :
387 1 : dcp_de = -4.923e-2 * dT_de + 2 * dT_de * 1.544e-5 * T + 2 * dT_de * 1.524e+6 / T / T / T;
388 1 : }
389 :
390 : Real
391 8 : LeadFluidProperties::cv_from_v_e(Real v, Real e) const
392 : {
393 8 : Real p = p_from_v_e(v, e);
394 8 : Real T = T_from_v_e(v, e);
395 8 : return cv_from_p_T(p, T);
396 : }
397 :
398 : void
399 1 : LeadFluidProperties::cv_from_v_e(Real v, Real e, Real & cv, Real & dcv_dv, Real & dcv_de) const
400 : {
401 : Real p, dp_dv, dp_de;
402 1 : p_from_v_e(v, e, p, dp_dv, dp_de);
403 : Real T, dT_dv, dT_de;
404 1 : T_from_v_e(v, e, T, dT_dv, dT_de);
405 : Real dcv_dp, dcv_dT;
406 1 : cv_from_p_T(p, T, cv, dcv_dp, dcv_dT);
407 1 : dcv_dv = dcv_dp * dp_dv + dcv_dT * dT_dv;
408 1 : dcv_de = dcv_dp * dp_de + dcv_dT * dT_de;
409 1 : }
410 :
411 : Real
412 18 : LeadFluidProperties::cv_from_p_T(Real p, Real T) const
413 : {
414 : Real rho, drho_dT, drho_dp;
415 18 : rho_from_p_T(p, T, rho, drho_dp, drho_dT);
416 18 : Real alpha = -drho_dT / rho;
417 18 : Real bulk_modulus = bulk_modulus_from_p_T(p, T);
418 18 : Real cp = cp_from_p_T(p, T);
419 18 : return cp / (1 + alpha * alpha * bulk_modulus * T / rho / cp);
420 : }
421 :
422 : void
423 2 : LeadFluidProperties::cv_from_p_T(Real p, Real T, Real & cv, Real & dcv_dp, Real & dcv_dT) const
424 : {
425 : Real cp, dcp_dp, dcp_dT;
426 2 : cp_from_p_T(p, T, cp, dcp_dp, dcp_dT);
427 2 : cv = cv_from_p_T(p, T);
428 :
429 : Real rho, drho_dT, drho_dp;
430 2 : rho_from_p_T(p, T, rho, drho_dp, drho_dT);
431 2 : Real alpha = -drho_dT / rho;
432 2 : Real alpha_2 = alpha * alpha, alpha_3 = alpha * alpha * alpha;
433 2 : Real dalpha_dT = drho_dT * drho_dT / rho / rho;
434 2 : Real bulk = bulk_modulus_from_p_T(p, T);
435 2 : Real dbulk_dT = (-1.552e-2 + 2 * 1.622e-6 * T) * 1e9;
436 2 : Real denominator = (1 + alpha * alpha * bulk * T / rho / cp);
437 : // no pressure dependence in alpha, T, bulk modulus, cp or rho
438 2 : dcv_dp = 0;
439 2 : dcv_dT = dcp_dT / denominator -
440 2 : cp / denominator / denominator *
441 2 : (2 * alpha * dalpha_dT * bulk * T / rho / cp + alpha_2 * dbulk_dT * T / rho / cp +
442 2 : alpha_2 * bulk / rho / cp + alpha_3 * bulk * T / rho / cp -
443 2 : dcp_dT * alpha_2 * bulk * T / rho / cp / cp);
444 2 : }
445 :
446 : Real
447 9 : LeadFluidProperties::mu_from_p_T(Real /*p*/, Real T) const
448 : {
449 9 : return 4.55e-4 * std::exp(1069 / T);
450 : }
451 :
452 : void
453 1 : LeadFluidProperties::mu_from_p_T(Real p, Real T, Real & mu, Real & dmu_dp, Real & dmu_dT) const
454 : {
455 1 : mu = mu_from_p_T(p, T);
456 1 : dmu_dp = 0;
457 1 : dmu_dT = -1069 * 4.55e-4 * std::exp(1069 / T) / T / T;
458 1 : }
459 :
460 : Real
461 9 : LeadFluidProperties::k_from_p_T(Real /*p*/, Real T) const
462 : {
463 9 : return 0.011 * T + 9.2;
464 : }
465 :
466 : void
467 1 : LeadFluidProperties::k_from_p_T(Real p, Real T, Real & k, Real & dk_dp, Real & dk_dT) const
468 : {
469 1 : k = k_from_p_T(p, T);
470 1 : dk_dp = 0;
471 1 : dk_dT = 0.011;
472 1 : }
|