LCOV - code coverage report
Current view: top level - src/fluidproperties - LeadFluidProperties.C (source / functions) Hit Total Coverage
Test: idaholab/moose fluid_properties: #31405 (292dce) with base fef103 Lines: 221 230 96.1 %
Date: 2025-09-04 07:53:14 Functions: 42 44 95.5 %
Legend: Lines: hit not hit

          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 : }

Generated by: LCOV version 1.14