https://mooseframework.inl.gov
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 
12 registerMooseObject("FluidPropertiesApp", LeadFluidProperties);
13 
16 {
18  params.addClassDescription("Fluid properties for Lead");
19 
20  return params;
21 }
22 
24  : SinglePhaseFluidProperties(parameters)
25 {
26 }
27 
28 std::string
30 {
31  return "Lead";
32 }
33 
34 Real
36 {
37  return 2.072e-1;
38 }
39 
40 Real
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 
47 Real
49 {
50  auto T = T_from_v_e(v, e);
51  return 1953 - 0.246 * T;
52 }
53 
54 ADReal
56 {
57  ADReal T = SinglePhaseFluidProperties::T_from_v_e(v, e);
58  return 1953 - 0.246 * 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 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  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 
78 Real
80 {
81  Real T = T_from_v_e(v, e);
82  return 4.55e-4 * std::exp(1069 / T);
83 }
84 
85 void
86 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  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 
95 Real
97 {
98  Real T = T_from_v_e(v, e);
99  return 0.011 * T + 9.2;
100 }
101 
102 void
103 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  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 
112 Real
113 LeadFluidProperties::rho_from_p_T(Real /*p*/, Real T) const
114 {
115  return 11441 - 1.2795 * T;
116 }
117 
118 void
119 LeadFluidProperties::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 
126 void
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 
135 Real
136 LeadFluidProperties::v_from_p_T(Real p, Real T) const
137 {
138  return 1.0 / rho_from_p_T(p, T);
139 }
140 
141 void
142 LeadFluidProperties::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 
149 Real
150 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  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 
158 void
159 LeadFluidProperties::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 
167 Real
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 
175 void
176 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  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 
186 Real
187 LeadFluidProperties::e_from_p_T(Real p, Real T) const
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 
195 void
196 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  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 
206 Real
207 LeadFluidProperties::e_from_p_rho(Real p, Real rho) const
208 {
209  return e_from_p_T(p, T_from_p_rho(p, rho));
210 }
211 
212 void
213 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  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 
223 Real
224 LeadFluidProperties::T_from_p_rho(Real /*p*/, Real rho) const
225 {
226  return (rho - 11441) / -1.2795;
227 }
228 
229 void
230 LeadFluidProperties::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 
237 Real
238 LeadFluidProperties::T_from_v_e(Real v, Real /*e*/) const
239 {
240  return (1 / v - 11441) / -1.2795;
241 }
242 
243 void
244 LeadFluidProperties::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 
251 Real
252 LeadFluidProperties::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 
347 void
348 LeadFluidProperties::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 
358 Real
359 LeadFluidProperties::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 
364 void
365 LeadFluidProperties::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 
372 Real
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 
379 void
380 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  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 
390 Real
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 
398 void
399 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  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 
411 Real
412 LeadFluidProperties::cv_from_p_T(Real p, Real T) const
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 
422 void
423 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  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 
446 Real
447 LeadFluidProperties::mu_from_p_T(Real /*p*/, Real T) const
448 {
449  return 4.55e-4 * std::exp(1069 / T);
450 }
451 
452 void
453 LeadFluidProperties::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 
460 Real
461 LeadFluidProperties::k_from_p_T(Real /*p*/, Real T) const
462 {
463  return 0.011 * T + 9.2;
464 }
465 
466 void
467 LeadFluidProperties::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 }
Real T_from_p_rho(Real p, Real rho) const
Temperature from pressure and density.
Real e_from_p_rho(Real p, Real rho) const override
Real T_from_p_h(Real p, Real h) const override
Real cp_from_v_e(Real v, Real e) const override
static const std::string cv
Definition: NS.h:122
Real k_from_v_e(Real v, Real e) const override
Real cv_from_p_T(Real p, Real T) const override
auto exp(const T &)
static InputParameters validParams()
Real mu_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.
static constexpr Real _T_mo
Melting temperature of Lead.
Fluid properties for (Lead) .
Real mu_from_v_e(Real v, Real e) const override
DualNumber< Real, DNDerivativeType, true > ADReal
Real p_from_v_e(Real v, Real e) const override
Real h_from_p_T(Real p, Real T) const override
registerMooseObject("FluidPropertiesApp", LeadFluidProperties)
static const std::string cp
Definition: NS.h:121
e e e e s T T T T T rho v v T e h
LeadFluidProperties(const InputParameters &parameters)
Real T_from_v_e(Real v, Real e) const override
static const std::string mu
Definition: NS.h:123
Common class for single phase fluid properties.
Real v_from_p_T(Real p, Real T) const override
Real c_from_v_e(Real v, Real e) const override
static InputParameters validParams()
Real h_from_v_e(Real v, Real e) const override
Real e_from_p_T(Real p, Real T) const override
Real rho_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
Real molarMass() const override
Molar mass [kg/mol].
static const std::string alpha
Definition: NS.h:134
void addClassDescription(const std::string &doc_string)
T pow(T x, int e)
virtual std::string fluidName() const override
Fluid name.
MooseUnits pow(const MooseUnits &, int)
static const std::string k
Definition: NS.h:130
Real k_from_p_T(Real p, Real T) const override
Real cp_from_p_T(Real p, Real T) const override
Real cv_from_v_e(Real v, Real e) const override