LCOV - code coverage report
Current view: top level - src/fluidproperties - FlibeFluidProperties.C (source / functions) Hit Total Coverage
Test: idaholab/moose fluid_properties: #31405 (292dce) with base fef103 Lines: 126 166 75.9 %
Date: 2025-09-04 07:53:14 Functions: 31 38 81.6 %
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 "FlibeFluidProperties.h"
      11             : 
      12             : registerMooseObject("FluidPropertiesApp", FlibeFluidProperties);
      13             : 
      14             : InputParameters
      15          22 : FlibeFluidProperties::validParams()
      16             : {
      17          22 :   InputParameters params = SinglePhaseFluidProperties::validParams();
      18          66 :   params.addRangeCheckedParam<Real>(
      19             :       "drho_dp",
      20          44 :       1.7324E-7,
      21             :       "drho_dp > 0.0",
      22             :       "derivative of density with respect to pressure (at constant temperature)");
      23          22 :   params.addClassDescription("Fluid properties for flibe");
      24          22 :   return params;
      25           0 : }
      26             : 
      27          11 : FlibeFluidProperties::FlibeFluidProperties(const InputParameters & parameters)
      28             :   : SinglePhaseFluidProperties(parameters),
      29          11 :     _drho_dp(getParam<Real>("drho_dp")),
      30          11 :     _drho_dT(-0.4884),
      31          11 :     _p_atm(101325.0),
      32          11 :     _cp(2416.0),
      33          11 :     _c0(2413.0),
      34          11 :     _dp_dT_at_constant_v(-_drho_dT / _drho_dp)
      35             : {
      36          11 : }
      37             : 
      38             : std::string
      39           1 : FlibeFluidProperties::fluidName() const
      40             : {
      41           1 :   return "flibe";
      42             : }
      43             : 
      44             : Real
      45           1 : FlibeFluidProperties::molarMass() const
      46             : {
      47           1 :   return 99.037703E-3;
      48             : }
      49             : 
      50             : Real
      51           9 : FlibeFluidProperties::p_from_v_e(Real v, Real e) const
      52             : {
      53           9 :   Real temperature = T_from_v_e(v, e);
      54           9 :   return (1.0 / v - _drho_dT * temperature - _c0) / _drho_dp + _p_atm;
      55             : }
      56             : 
      57             : void
      58           1 : FlibeFluidProperties::p_from_v_e(Real v, Real e, Real & p, Real & dp_dv, Real & dp_de) const
      59             : {
      60           1 :   p = p_from_v_e(v, e);
      61             : 
      62             :   // chain rule, (dp_de)_v = (dp_dT)_v * (dT_de)_v
      63             :   Real T, dT_dv, dT_de;
      64           1 :   T_from_v_e(v, e, T, dT_dv, dT_de);
      65           1 :   dp_de = _dp_dT_at_constant_v * dT_de;
      66             : 
      67             :   // cyclic relation, (dP_dv)_e = - (dp_de)_v * (de_dv)_p
      68           1 :   Real cp = cp_from_v_e(v, e);
      69           1 :   Real dT_dv_at_constant_p = -1.0 / (_drho_dT * v * v);
      70           1 :   Real de_dv_at_constant_p = cp * dT_dv_at_constant_p - p;
      71           1 :   dp_dv = -dp_de * de_dv_at_constant_p;
      72           1 : }
      73             : 
      74             : void
      75           0 : FlibeFluidProperties::p_from_v_e(
      76             :     const ADReal & v, const ADReal & e, ADReal & p, ADReal & dp_dv, ADReal & dp_de) const
      77             : {
      78           0 :   p = SinglePhaseFluidProperties::p_from_v_e(v, e);
      79             : 
      80             :   // chain rule, (dp_de)_v = (dp_dT)_v * (dT_de)_v
      81             :   ADReal T, dT_dv, dT_de;
      82           0 :   T_from_v_e(v, e, T, dT_dv, dT_de);
      83           0 :   dp_de = _dp_dT_at_constant_v * dT_de;
      84             : 
      85             :   // cyclic relation, (dP_dv)_e = - (dp_de)_v * (de_dv)_p
      86           0 :   auto cp = SinglePhaseFluidProperties::cp_from_v_e(v, e);
      87           0 :   auto dT_dv_at_constant_p = -1.0 / (_drho_dT * v * v);
      88           0 :   auto de_dv_at_constant_p = cp * dT_dv_at_constant_p - p;
      89           0 :   dp_dv = -dp_de * de_dv_at_constant_p;
      90           0 : }
      91             : 
      92             : Real
      93          19 : FlibeFluidProperties::T_from_v_e(Real v, Real e) const
      94             : {
      95             :   // We need to write these in a somewhat strange manner to ensure that pressure
      96             :   // and temperature do not depend implicitly on each other, causing a circular
      97             :   // logic problem. Substituting the definition for pressure based on the
      98             :   // rho * (h - e) = P, where h = Cp * T into the density correlation for flibe,
      99             :   // we can rearrange and get temperature in terms of only v and e
     100             : 
     101             :   // p = (Cp * T - e) / v
     102             :   // T = (1 / v - drho_dp * [p                - p_atm] + _c0) / drho_dT
     103             :   //   = (1 / v - drho_dp * [(Cp * T - e) / v - p_atm] + _c0) / drho_dT
     104             :   //   = (1 + drho_dp * e + p_atm * v * drho_dp - _c0 * v) / (drho_dT * v + drho_dp * Cp)
     105             : 
     106          19 :   Real cp = cp_from_v_e(v, e);
     107          19 :   Real numerator = 1.0 + _drho_dp * (e + _p_atm * v) - _c0 * v;
     108          19 :   Real denominator = _drho_dT * v + _drho_dp * cp;
     109          19 :   return numerator / denominator;
     110             : }
     111             : 
     112             : void
     113           2 : FlibeFluidProperties::T_from_v_e(Real v, Real e, Real & T, Real & dT_dv, Real & dT_de) const
     114             : {
     115           2 :   T = T_from_v_e(v, e);
     116             : 
     117             :   // reciprocity relation based on the definition of cv
     118           2 :   Real cv = cv_from_v_e(v, e);
     119           2 :   dT_de = 1.0 / cv;
     120             : 
     121             :   // cyclic relation, (dT_dv)_e = -(dT_de)_v * (de_dv)_T
     122           2 :   Real p = p_from_v_e(v, e);
     123           2 :   Real dp_dv_at_constant_T = -1.0 / (_drho_dp * v * v);
     124           2 :   Real de_dv_at_constant_T = -(p + v * dp_dv_at_constant_T);
     125           2 :   dT_dv = -dT_de * de_dv_at_constant_T;
     126           2 : }
     127             : 
     128             : void
     129           0 : FlibeFluidProperties::T_from_v_e(
     130             :     const ADReal & v, const ADReal & e, ADReal & T, ADReal & dT_dv, ADReal & dT_de) const
     131             : {
     132           0 :   T = SinglePhaseFluidProperties::T_from_v_e(v, e);
     133             : 
     134             :   // reciprocity relation based on the definition of cv
     135           0 :   auto cv = SinglePhaseFluidProperties::cv_from_v_e(v, e);
     136           0 :   dT_de = 1.0 / cv;
     137             : 
     138             :   // cyclic relation, (dT_dv)_e = -(dT_de)_v * (de_dv)_T
     139           0 :   auto p = SinglePhaseFluidProperties::p_from_v_e(v, e);
     140           0 :   auto dp_dv_at_constant_T = -1.0 / (_drho_dp * v * v);
     141           0 :   auto de_dv_at_constant_T = -(p + v * dp_dv_at_constant_T);
     142           0 :   dT_dv = -dT_de * de_dv_at_constant_T;
     143           0 : }
     144             : 
     145             : Real
     146           1 : FlibeFluidProperties::T_from_p_h(Real /* p */, Real h) const
     147             : {
     148           1 :   return h / _cp;
     149             : }
     150             : 
     151          60 : Real FlibeFluidProperties::cp_from_v_e(Real /*v*/, Real /*e*/) const { return _cp; }
     152             : 
     153             : void
     154           1 : FlibeFluidProperties::cp_from_v_e(Real v, Real e, Real & cp, Real & dcp_dv, Real & dcp_de) const
     155             : {
     156           1 :   cp = cp_from_v_e(v, e);
     157           1 :   dcp_dv = 0.0;
     158           1 :   dcp_de = 0.0;
     159           1 : }
     160             : 
     161             : Real
     162           9 : FlibeFluidProperties::cv_from_v_e(Real v, Real e) const
     163             : {
     164             :   // definition of Cv by replacing e by h + p * v
     165           9 :   Real cp = cp_from_v_e(v, e);
     166           9 :   return cp - _dp_dT_at_constant_v * v;
     167             : }
     168             : 
     169             : void
     170           1 : FlibeFluidProperties::cv_from_v_e(Real v, Real e, Real & cv, Real & dcv_dv, Real & dcv_de) const
     171             : {
     172           1 :   cv = cv_from_v_e(v, e);
     173           1 :   dcv_dv = -_dp_dT_at_constant_v;
     174           1 :   dcv_de = 0.0;
     175           1 : }
     176             : 
     177             : void
     178           0 : FlibeFluidProperties::cv_from_v_e(
     179             :     const ADReal & v, const ADReal & e, ADReal & cv, ADReal & dcv_dv, ADReal & dcv_de) const
     180             : {
     181           0 :   cv = SinglePhaseFluidProperties::cv_from_v_e(v, e);
     182           0 :   dcv_dv = -_dp_dT_at_constant_v;
     183           0 :   dcv_de = 0.0;
     184           0 : }
     185             : 
     186             : Real
     187           1 : FlibeFluidProperties::mu_from_v_e(Real v, Real e) const
     188             : {
     189           1 :   Real temperature = T_from_v_e(v, e);
     190           1 :   return 1.16e-4 * std::exp(3755.0 / temperature);
     191             : }
     192             : 
     193             : Real
     194           1 : FlibeFluidProperties::k_from_v_e(Real v, Real e) const
     195             : {
     196           1 :   Real temperature = T_from_v_e(v, e);
     197           1 :   return 5.0e-4 * temperature + 0.63;
     198             : }
     199             : 
     200             : Real
     201          14 : FlibeFluidProperties::rho_from_p_T(Real pressure, Real temperature) const
     202             : {
     203          14 :   return _drho_dT * temperature + _drho_dp * (pressure - _p_atm) + _c0;
     204             : }
     205             : 
     206             : void
     207           1 : FlibeFluidProperties::rho_from_p_T(
     208             :     Real pressure, Real temperature, Real & rho, Real & drho_dp, Real & drho_dT) const
     209             : {
     210           1 :   rho = rho_from_p_T(pressure, temperature);
     211           1 :   drho_dp = _drho_dp;
     212           1 :   drho_dT = _drho_dT;
     213           1 : }
     214             : 
     215             : void
     216           0 : FlibeFluidProperties::rho_from_p_T(const ADReal & pressure,
     217             :                                    const ADReal & temperature,
     218             :                                    ADReal & rho,
     219             :                                    ADReal & drho_dp,
     220             :                                    ADReal & drho_dT) const
     221             : {
     222           0 :   rho = SinglePhaseFluidProperties::rho_from_p_T(pressure, temperature);
     223           0 :   drho_dp = _drho_dp;
     224           0 :   drho_dT = _drho_dT;
     225           0 : }
     226             : 
     227             : ADReal
     228           0 : FlibeFluidProperties::v_from_p_T(const ADReal & pressure, const ADReal & temperature) const
     229             : {
     230           0 :   return 1.0 / (_drho_dT * temperature + _drho_dp * (pressure - _p_atm) + _c0);
     231             : }
     232             : 
     233             : Real
     234          15 : FlibeFluidProperties::v_from_p_T(Real pressure, Real temperature) const
     235             : {
     236          15 :   return 1.0 / (_drho_dT * temperature + _drho_dp * (pressure - _p_atm) + _c0);
     237             : }
     238             : 
     239             : void
     240           1 : FlibeFluidProperties::v_from_p_T(
     241             :     Real pressure, Real temperature, Real & v, Real & dv_dp, Real & dv_dT) const
     242             : {
     243           1 :   v = v_from_p_T(pressure, temperature);
     244           1 :   dv_dp = -v * v * _drho_dp;
     245           1 :   dv_dT = -v * v * _drho_dT;
     246           1 : }
     247             : 
     248             : Real
     249           8 : FlibeFluidProperties::h_from_p_T(Real /*pressure*/, Real temperature) const
     250             : {
     251             :   // definition of h for constant Cp
     252           8 :   Real cp = cp_from_v_e(0.0 /* dummy */, 0.0 /* dummy */);
     253           8 :   return cp * temperature;
     254             : }
     255             : 
     256             : void
     257           1 : FlibeFluidProperties::h_from_p_T(
     258             :     Real pressure, Real temperature, Real & h, Real & dh_dp, Real & dh_dT) const
     259             : {
     260           1 :   h = h_from_p_T(pressure, temperature);
     261           1 :   Real cp = cp_from_v_e(0.0 /* dummy */, 0.0 /* dummy */);
     262             : 
     263           1 :   dh_dp = 0.0;
     264           1 :   dh_dT = cp;
     265           1 : }
     266             : 
     267             : Real
     268          14 : FlibeFluidProperties::e_from_p_T(Real pressure, Real temperature) const
     269             : {
     270             :   // definition of h = e + p * v
     271          14 :   Real v = v_from_p_T(pressure, temperature);
     272          14 :   Real cp = cp_from_v_e(v, 0.0 /* dummy */);
     273          14 :   return cp * temperature - pressure * v;
     274             : }
     275             : 
     276             : void
     277           1 : FlibeFluidProperties::e_from_p_T(
     278             :     Real pressure, Real temperature, Real & e, Real & de_dp, Real & de_dT) const
     279             : {
     280           1 :   e = e_from_p_T(pressure, temperature);
     281             : 
     282             :   Real v, dv_dp, dv_dT;
     283           1 :   v_from_p_T(pressure, temperature, v, dv_dp, dv_dT);
     284             : 
     285             :   // definition of e = h - p * v
     286           1 :   de_dp = -pressure * dv_dp - v;
     287             : 
     288             :   // definition of e = h - p * v
     289           1 :   Real cp = cp_from_v_e(v, e);
     290           1 :   de_dT = cp - pressure * dv_dT;
     291           1 : }
     292             : 
     293             : Real
     294           1 : FlibeFluidProperties::e_from_p_rho(Real p, Real rho) const
     295             : {
     296           1 :   return e_from_p_T(p, T_from_p_rho(p, rho));
     297             : }
     298             : 
     299             : Real
     300           2 : FlibeFluidProperties::T_from_p_rho(Real p, Real rho) const
     301             : {
     302           2 :   Real temperature = (rho - (p - _p_atm) * _drho_dp - _c0) / _drho_dT;
     303           2 :   return temperature;
     304             : }
     305             : 
     306           7 : Real FlibeFluidProperties::cp_from_p_T(Real /*pressure*/, Real /*temperature*/) const
     307             : {
     308           7 :   return _cp;
     309             : }
     310             : 
     311             : void
     312           1 : FlibeFluidProperties::cp_from_p_T(
     313             :     Real pressure, Real temperature, Real & cp, Real & dcp_dp, Real & dcp_dT) const
     314             : {
     315           1 :   cp = cp_from_p_T(pressure, temperature);
     316           1 :   dcp_dp = 0.0;
     317           1 :   dcp_dT = 0.0;
     318           1 : }
     319             : 
     320             : Real
     321           0 : FlibeFluidProperties::cv_from_p_T(Real pressure, Real temperature) const
     322             : {
     323           0 :   Real v = v_from_p_T(pressure, temperature);
     324           0 :   Real e = e_from_p_T(pressure, temperature);
     325           0 :   return cv_from_v_e(v, e);
     326             : }
     327             : 
     328             : void
     329           0 : FlibeFluidProperties::cv_from_p_T(
     330             :     Real pressure, Real temperature, Real & cv, Real & dcv_dp, Real & dcv_dT) const
     331             : {
     332           0 :   cv = cv_from_p_T(pressure, temperature);
     333           0 :   dcv_dp = 0.0;
     334           0 :   dcv_dT = 0.0;
     335           0 : }
     336             : 
     337             : Real
     338           7 : FlibeFluidProperties::mu_from_p_T(Real /*pressure*/, Real temperature) const
     339             : {
     340           7 :   return 1.16e-4 * std::exp(3755.0 / temperature);
     341             : }
     342             : 
     343             : void
     344           1 : FlibeFluidProperties::mu_from_p_T(
     345             :     Real pressure, Real temperature, Real & mu, Real & dmu_dp, Real & dmu_dT) const
     346             : {
     347           1 :   mu = this->mu_from_p_T(pressure, temperature);
     348           1 :   dmu_dp = 0.0;
     349           1 :   dmu_dT = -1.16e-4 * std::exp(3755.0 / temperature) * 3755.0 / (temperature * temperature);
     350           1 : }
     351             : 
     352             : Real
     353           7 : FlibeFluidProperties::k_from_p_T(Real /*pressure*/, Real temperature) const
     354             : {
     355           7 :   return 5.0e-4 * temperature + 0.63;
     356             : }
     357             : 
     358             : void
     359           1 : FlibeFluidProperties::k_from_p_T(
     360             :     Real pressure, Real temperature, Real & k, Real & dk_dp, Real & dk_dT) const
     361             : {
     362           1 :   k = this->k_from_p_T(pressure, temperature);
     363           1 :   dk_dp = 0.0;
     364           1 :   dk_dT = 5.0e-4;
     365           1 : }

Generated by: LCOV version 1.14