https://mooseframework.inl.gov
Loading...
Searching...
No Matches
LeadFluidProperties.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
10#include "LeadFluidProperties.h"
11
13
16{
18 params.addClassDescription("Fluid properties for Lead");
19
20 return params;
21}
22
27
28std::string
30{
31 return "Lead";
32}
33
34Real
36{
37 return 2.072e-1;
38}
39
40Real
42{
43 // Isentropic bulk modulus, eq 2.42 from Handbook
44 return (43.50 - 1.552e-2 * T + 1.622e-6 * T * T) * 1e9;
45}
46
47Real
49{
50 auto T = T_from_v_e(v, e);
51 return 1953 - 0.246 * T;
52}
53
56{
57 ADReal T = SinglePhaseFluidProperties::T_from_v_e(v, e);
58 return 1953 - 0.246 * T;
59}
60
61Real
63{
64 Real h = h_from_v_e(v, e);
65 return (h - e) / v;
66}
67
68void
69LeadFluidProperties::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 h_from_v_e(v, e, h, dh_dv, dh_de);
73 p = p_from_v_e(v, e);
74 dp_dv = (v * dh_dv - h + e) / v / v;
75 dp_de = (dh_de - 1) / v;
76}
77
78Real
80{
81 Real T = T_from_v_e(v, e);
82 return 4.55e-4 * std::exp(1069 / T);
83}
84
85void
86LeadFluidProperties::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 T_from_v_e(v, e, T, dT_dv, dT_de);
90 mu = mu_from_v_e(v, e);
91 dmu_dv = dT_dv * -1069 * 4.55e-4 * exp(1069 / T) / T / T;
92 dmu_de = dT_de * -1069 * 4.55e-4 * exp(1069 / T) / T / T;
93}
94
95Real
97{
98 Real T = T_from_v_e(v, e);
99 return 0.011 * T + 9.2;
100}
101
102void
103LeadFluidProperties::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 T_from_v_e(v, e, T, dT_dv, dT_de);
107 k = k_from_v_e(v, e);
108 dk_dv = 0.011 * dT_dv;
109 dk_de = 0.011 * dT_de;
110}
111
112Real
114{
115 return 11441 - 1.2795 * T;
116}
117
118void
119LeadFluidProperties::rho_from_p_T(Real p, Real T, Real & rho, Real & drho_dp, Real & drho_dT) const
120{
121 rho = rho_from_p_T(p, T);
122 drho_dp = 0;
123 drho_dT = -1.2795;
124}
125
126void
128 const ADReal & p, const ADReal & T, ADReal & rho, ADReal & drho_dp, ADReal & drho_dT) const
129{
130 rho = SinglePhaseFluidProperties::rho_from_p_T(p, T);
131 drho_dp = 0;
132 drho_dT = -1.2795;
133}
134
135Real
137{
138 return 1.0 / rho_from_p_T(p, T);
139}
140
141void
142LeadFluidProperties::v_from_p_T(Real p, Real T, Real & v, Real & dv_dp, Real & dv_dT) const
143{
144 v = v_from_p_T(p, T);
145 dv_dp = 0;
146 dv_dT = 1.2795 / MathUtils::pow(11441 - 1.2795 * T, 2);
147}
148
149Real
150LeadFluidProperties::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 return 176.2 * (T - _T_mo) - 2.4615e-2 * (T * T - _T_mo * _T_mo) +
155 (1.544e-5 / 3) * (T * T * T - _T_mo * _T_mo * _T_mo) + 1.524e+6 * (1 / T - 1 / _T_mo);
156}
157
158void
159LeadFluidProperties::h_from_p_T(Real p, Real T, Real & h, Real & dh_dp, Real & dh_dT) const
160{
161 h = h_from_p_T(p, T);
162 Real cp = cp_from_p_T(p, T);
163 dh_dp = 0;
164 dh_dT = cp;
165}
166
167Real
169{
170 Real T = T_from_v_e(v, e);
171 return 176.2 * (T - _T_mo) - 2.4615e-2 * (T * T - _T_mo * _T_mo) +
172 (1.544e-5 / 3) * (T * T * T - _T_mo * _T_mo * _T_mo) + 1.524e+6 * (1 / T - 1 / _T_mo);
173}
174
175void
176LeadFluidProperties::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 T_from_v_e(v, e, T, dT_dv, dT_de);
180 h = h_from_v_e(v, e);
181 Real cp = cp_from_v_e(v, e);
182 dh_dv = cp * dT_dv;
183 dh_de = cp * dT_de;
184}
185
186Real
188{
189 // definition of h = e + p * v
190 Real v = v_from_p_T(p, T);
191 Real h = h_from_p_T(p, T);
192 return h - p * v;
193}
194
195void
196LeadFluidProperties::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 h_from_p_T(p, T, h, dh_dp, dh_dT);
200 v_from_p_T(p, T, v, dv_dp, dv_dT);
201 e = e_from_p_T(p, T);
202 de_dp = dh_dp - v - dv_dp * p;
203 de_dT = dh_dT - dv_dT * p;
204}
205
206Real
208{
209 return e_from_p_T(p, T_from_p_rho(p, rho));
210}
211
212void
213LeadFluidProperties::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 T_from_p_rho(p, rho, T, dT_dp, dT_drho);
217 Real de_dp_T, de_dT;
218 e_from_p_T(p, T, e, de_dp_T, de_dT);
219 de_dp = de_dp_T * 1 + de_dT * dT_dp;
220 de_drho = de_dT * dT_drho;
221}
222
223Real
225{
226 return (rho - 11441) / -1.2795;
227}
228
229void
230LeadFluidProperties::T_from_p_rho(Real p, Real rho, Real & T, Real & dT_dp, Real & dT_drho) const
231{
232 T = T_from_p_rho(p, rho);
233 dT_dp = 0;
234 dT_drho = 1 / -1.2795;
235}
236
237Real
238LeadFluidProperties::T_from_v_e(Real v, Real /*e*/) const
239{
240 return (1 / v - 11441) / -1.2795;
241}
242
243void
244LeadFluidProperties::T_from_v_e(Real v, Real e, Real & T, Real & dT_dv, Real & dT_de) const
245{
246 T = T_from_v_e(v, e);
247 dT_de = 0;
248 dT_dv = 1. / v / v / 1.2795;
249}
250
251Real
252LeadFluidProperties::T_from_p_h(Real /*p*/, Real h) const
253{
254 // Obtained from sympy solving h(T) with T as a symbol
255 return -2067.9254113598 *
256 std::sqrt(
257 -7.36955226020901e-15 * (232320624.378877 * h - 74598764305248.3) /
258 std::pow(
259 6.71651186402396e-6 * h +
260 MathUtils::pow(1.0 - 3.99399123439419e-6 * h, 2) +
261 std::sqrt(0.702754599548161 *
262 MathUtils::pow(3.11426907057403e-6 * h - 1.0, 3) +
264 -6.71651186402396e-6 * h -
265 MathUtils::pow(1.0 - 3.99399123439419e-6 * h, 2) +
266 0.0419568962265043,
267 2)) -
268 0.0419568962265043,
269 1. / 3.) +
270 0.61835541884035 *
271 std::pow(
272 6.71651186402396e-6 * h +
273 MathUtils::pow(1.0 - 3.99399123439419e-6 * h, 2) +
274 std::sqrt(0.702754599548161 *
275 MathUtils::pow(3.11426907057403e-6 * h - 1.0, 3) +
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 1.0) +
284 2924.48816272099 *
285 std::sqrt(
286 7.0676560676229e-12 * (97296416908.1661 - 388601.036269178 * h) /
287 std::sqrt(
288 -7.36955226020901e-15 * (232320624.378877 * h - 74598764305248.3) /
289 std::pow(
290 6.71651186402396e-6 * h +
291 MathUtils::pow(1.0 - 3.99399123439419e-6 * h, 2) +
292 std::sqrt(
293 0.702754599548161 *
294 MathUtils::pow(3.11426907057403e-6 * h - 1.0, 3) +
296 -6.71651186402396e-6 * h -
297 MathUtils::pow(1.0 - 3.99399123439419e-6 * h, 2) +
298 0.0419568962265043,
299 2)) -
300 0.0419568962265043,
301 1. / 3.) +
302 0.61835541884035 *
303 std::pow(
304 6.71651186402396e-6 * h +
305 MathUtils::pow(1.0 - 3.99399123439419e-6 * h, 2) +
306 std::sqrt(
307 0.702754599548161 *
308 MathUtils::pow(3.11426907057403e-6 * h - 1.0, 3) +
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 1.0) +
317 3.6847761301045e-15 * (232320624.378877 * h - 74598764305248.3) /
318 std::pow(
319 6.71651186402396e-6 * h +
320 MathUtils::pow(1.0 - 3.99399123439419e-6 * h, 2) +
321 std::sqrt(0.702754599548161 *
322 MathUtils::pow(3.11426907057403e-6 * h - 1.0, 3) +
324 -6.71651186402396e-6 * h -
325 MathUtils::pow(1.0 - 3.99399123439419e-6 * h, 2) +
326 0.0419568962265043,
327 2)) -
328 0.0419568962265043,
329 1. / 3.) -
330 0.309177709420175 *
331 std::pow(
332 6.71651186402396e-6 * h +
333 MathUtils::pow(1.0 - 3.99399123439419e-6 * h, 2) +
334 std::sqrt(0.702754599548161 *
335 MathUtils::pow(3.11426907057403e-6 * h - 1.0, 3) +
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 1195.67681347073;
345}
346
347void
348LeadFluidProperties::T_from_p_h(Real p, Real h, Real & T, Real & dT_dp, Real & dT_dh) const
349{
350 T = T_from_p_h(p, h);
351 dT_dp = 0;
352 // using inverse relation
353 Real h1, dh_dp, dh_dT;
354 h_from_p_T(p, T, h1, dh_dp, dh_dT);
355 dT_dh = 1 / dh_dT;
356}
357
358Real
359LeadFluidProperties::cp_from_p_T(Real /*p*/, Real T) const
360{
361 return 176.2 - 4.923e-2 * T + 1.544e-5 * T * T - 1.524e+6 / T / T;
362}
363
364void
365LeadFluidProperties::cp_from_p_T(Real p, Real T, Real & cp, Real & dcp_dp, Real & dcp_dT) const
366{
367 cp = cp_from_p_T(p, T);
368 dcp_dp = 0;
369 dcp_dT = -4.923e-2 + 2 * 1.544e-5 * T + 2 * 1.524e6 / T / T / T;
370}
371
372Real
374{
375 Real T = T_from_v_e(v, e);
376 return 176.2 - 4.923e-2 * T + 1.544e-5 * T * T - 1.524e6 / T / T;
377}
378
379void
380LeadFluidProperties::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 T_from_v_e(v, e, T, dT_dv, dT_de);
384 cp = cp_from_v_e(v, e);
385 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 dcp_de = -4.923e-2 * dT_de + 2 * dT_de * 1.544e-5 * T + 2 * dT_de * 1.524e+6 / T / T / T;
388}
389
390Real
392{
393 Real p = p_from_v_e(v, e);
394 Real T = T_from_v_e(v, e);
395 return cv_from_p_T(p, T);
396}
397
398void
399LeadFluidProperties::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 p_from_v_e(v, e, p, dp_dv, dp_de);
403 Real T, dT_dv, dT_de;
404 T_from_v_e(v, e, T, dT_dv, dT_de);
405 Real dcv_dp, dcv_dT;
406 cv_from_p_T(p, T, cv, dcv_dp, dcv_dT);
407 dcv_dv = dcv_dp * dp_dv + dcv_dT * dT_dv;
408 dcv_de = dcv_dp * dp_de + dcv_dT * dT_de;
409}
410
411Real
413{
414 Real rho, drho_dT, drho_dp;
415 rho_from_p_T(p, T, rho, drho_dp, drho_dT);
416 Real alpha = -drho_dT / rho;
417 Real bulk_modulus = bulk_modulus_from_p_T(p, T);
418 Real cp = cp_from_p_T(p, T);
419 return cp / (1 + alpha * alpha * bulk_modulus * T / rho / cp);
420}
421
422void
423LeadFluidProperties::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 cp_from_p_T(p, T, cp, dcp_dp, dcp_dT);
427 cv = cv_from_p_T(p, T);
428
429 Real rho, drho_dT, drho_dp;
430 rho_from_p_T(p, T, rho, drho_dp, drho_dT);
431 Real alpha = -drho_dT / rho;
432 Real alpha_2 = alpha * alpha, alpha_3 = alpha * alpha * alpha;
433 Real dalpha_dT = drho_dT * drho_dT / rho / rho;
434 Real bulk = bulk_modulus_from_p_T(p, T);
435 Real dbulk_dT = (-1.552e-2 + 2 * 1.622e-6 * T) * 1e9;
436 Real denominator = (1 + alpha * alpha * bulk * T / rho / cp);
437 // no pressure dependence in alpha, T, bulk modulus, cp or rho
438 dcv_dp = 0;
439 dcv_dT = dcp_dT / denominator -
440 cp / denominator / denominator *
441 (2 * alpha * dalpha_dT * bulk * T / rho / cp + alpha_2 * dbulk_dT * T / rho / cp +
442 alpha_2 * bulk / rho / cp + alpha_3 * bulk * T / rho / cp -
443 dcp_dT * alpha_2 * bulk * T / rho / cp / cp);
444}
445
446Real
447LeadFluidProperties::mu_from_p_T(Real /*p*/, Real T) const
448{
449 return 4.55e-4 * std::exp(1069 / T);
450}
451
452void
453LeadFluidProperties::mu_from_p_T(Real p, Real T, Real & mu, Real & dmu_dp, Real & dmu_dT) const
454{
455 mu = mu_from_p_T(p, T);
456 dmu_dp = 0;
457 dmu_dT = -1069 * 4.55e-4 * std::exp(1069 / T) / T / T;
458}
459
460Real
461LeadFluidProperties::k_from_p_T(Real /*p*/, Real T) const
462{
463 return 0.011 * T + 9.2;
464}
465
466void
467LeadFluidProperties::k_from_p_T(Real p, Real T, Real & k, Real & dk_dp, Real & dk_dT) const
468{
469 k = k_from_p_T(p, T);
470 dk_dp = 0;
471 dk_dT = 0.011;
472}
DualNumber< Real, DNDerivativeType, true > ADReal
const double mu
const Real p
const double rho
const double T
const double v
registerMooseObject("FluidPropertiesApp", LeadFluidProperties)
void addClassDescription(const std::string &doc_string)
Fluid properties for (Lead) .
Real p_from_v_e(Real v, Real e) const override
Real molarMass() const override
Molar mass [kg/mol].
Real c_from_v_e(Real v, Real e) const override
Real cv_from_v_e(Real v, Real e) const override
Real T_from_p_h(Real p, Real h) const override
Real T_from_p_rho(Real p, Real rho) const
Temperature from pressure and density.
Real rho_from_p_T(Real p, Real T) const override
Real e_from_p_T(Real p, Real T) const override
static InputParameters validParams()
Real e_from_p_rho(Real p, Real rho) const override
Real bulk_modulus_from_p_T(Real p, Real T) const
Isentropic bulk modulus from pressure and temperature.
Real mu_from_p_T(Real p, Real T) const override
static constexpr Real _T_mo
Melting temperature of Lead.
virtual std::string fluidName() const override
Fluid name.
Real k_from_p_T(Real p, Real T) const override
LeadFluidProperties(const InputParameters &parameters)
Real mu_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 v_from_p_T(Real p, Real T) const override
Real cv_from_p_T(Real p, Real T) const override
Real h_from_v_e(Real v, Real e) const override
Real h_from_p_T(Real p, Real T) const override
Real k_from_v_e(Real v, Real e) const override
Real cp_from_p_T(Real p, Real T) 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)