LCOV - code coverage report
Current view: top level - src/fluidproperties - FlibeFluidProperties.C (source / functions) Hit Total Coverage
Test: idaholab/moose fluid_properties: #31706 (f8ed4a) with base bb0a08 Lines: 126 168 75.0 %
Date: 2025-11-03 17:24:35 Functions: 31 39 79.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 "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             : ADReal
     152           0 : FlibeFluidProperties::T_from_p_h(const ADReal & /* p */, const ADReal & h) const
     153             : {
     154           0 :   return h / _cp;
     155             : }
     156             : 
     157          60 : Real FlibeFluidProperties::cp_from_v_e(Real /*v*/, Real /*e*/) const { return _cp; }
     158             : 
     159             : void
     160           1 : FlibeFluidProperties::cp_from_v_e(Real v, Real e, Real & cp, Real & dcp_dv, Real & dcp_de) const
     161             : {
     162           1 :   cp = cp_from_v_e(v, e);
     163           1 :   dcp_dv = 0.0;
     164           1 :   dcp_de = 0.0;
     165           1 : }
     166             : 
     167             : Real
     168           9 : FlibeFluidProperties::cv_from_v_e(Real v, Real e) const
     169             : {
     170             :   // definition of Cv by replacing e by h + p * v
     171           9 :   Real cp = cp_from_v_e(v, e);
     172           9 :   return cp - _dp_dT_at_constant_v * v;
     173             : }
     174             : 
     175             : void
     176           1 : FlibeFluidProperties::cv_from_v_e(Real v, Real e, Real & cv, Real & dcv_dv, Real & dcv_de) const
     177             : {
     178           1 :   cv = cv_from_v_e(v, e);
     179           1 :   dcv_dv = -_dp_dT_at_constant_v;
     180           1 :   dcv_de = 0.0;
     181           1 : }
     182             : 
     183             : void
     184           0 : FlibeFluidProperties::cv_from_v_e(
     185             :     const ADReal & v, const ADReal & e, ADReal & cv, ADReal & dcv_dv, ADReal & dcv_de) const
     186             : {
     187           0 :   cv = SinglePhaseFluidProperties::cv_from_v_e(v, e);
     188           0 :   dcv_dv = -_dp_dT_at_constant_v;
     189           0 :   dcv_de = 0.0;
     190           0 : }
     191             : 
     192             : Real
     193           1 : FlibeFluidProperties::mu_from_v_e(Real v, Real e) const
     194             : {
     195           1 :   Real temperature = T_from_v_e(v, e);
     196           1 :   return 1.16e-4 * std::exp(3755.0 / temperature);
     197             : }
     198             : 
     199             : Real
     200           1 : FlibeFluidProperties::k_from_v_e(Real v, Real e) const
     201             : {
     202           1 :   Real temperature = T_from_v_e(v, e);
     203           1 :   return 5.0e-4 * temperature + 0.63;
     204             : }
     205             : 
     206             : Real
     207          14 : FlibeFluidProperties::rho_from_p_T(Real pressure, Real temperature) const
     208             : {
     209          14 :   return _drho_dT * temperature + _drho_dp * (pressure - _p_atm) + _c0;
     210             : }
     211             : 
     212             : void
     213           1 : FlibeFluidProperties::rho_from_p_T(
     214             :     Real pressure, Real temperature, Real & rho, Real & drho_dp, Real & drho_dT) const
     215             : {
     216           1 :   rho = rho_from_p_T(pressure, temperature);
     217           1 :   drho_dp = _drho_dp;
     218           1 :   drho_dT = _drho_dT;
     219           1 : }
     220             : 
     221             : void
     222           0 : FlibeFluidProperties::rho_from_p_T(const ADReal & pressure,
     223             :                                    const ADReal & temperature,
     224             :                                    ADReal & rho,
     225             :                                    ADReal & drho_dp,
     226             :                                    ADReal & drho_dT) const
     227             : {
     228           0 :   rho = SinglePhaseFluidProperties::rho_from_p_T(pressure, temperature);
     229           0 :   drho_dp = _drho_dp;
     230           0 :   drho_dT = _drho_dT;
     231           0 : }
     232             : 
     233             : ADReal
     234           0 : FlibeFluidProperties::v_from_p_T(const ADReal & pressure, const ADReal & temperature) const
     235             : {
     236           0 :   return 1.0 / (_drho_dT * temperature + _drho_dp * (pressure - _p_atm) + _c0);
     237             : }
     238             : 
     239             : Real
     240          15 : FlibeFluidProperties::v_from_p_T(Real pressure, Real temperature) const
     241             : {
     242          15 :   return 1.0 / (_drho_dT * temperature + _drho_dp * (pressure - _p_atm) + _c0);
     243             : }
     244             : 
     245             : void
     246           1 : FlibeFluidProperties::v_from_p_T(
     247             :     Real pressure, Real temperature, Real & v, Real & dv_dp, Real & dv_dT) const
     248             : {
     249           1 :   v = v_from_p_T(pressure, temperature);
     250           1 :   dv_dp = -v * v * _drho_dp;
     251           1 :   dv_dT = -v * v * _drho_dT;
     252           1 : }
     253             : 
     254             : Real
     255           8 : FlibeFluidProperties::h_from_p_T(Real /*pressure*/, Real temperature) const
     256             : {
     257             :   // definition of h for constant Cp
     258           8 :   Real cp = cp_from_v_e(0.0 /* dummy */, 0.0 /* dummy */);
     259           8 :   return cp * temperature;
     260             : }
     261             : 
     262             : void
     263           1 : FlibeFluidProperties::h_from_p_T(
     264             :     Real pressure, Real temperature, Real & h, Real & dh_dp, Real & dh_dT) const
     265             : {
     266           1 :   h = h_from_p_T(pressure, temperature);
     267           1 :   Real cp = cp_from_v_e(0.0 /* dummy */, 0.0 /* dummy */);
     268             : 
     269           1 :   dh_dp = 0.0;
     270           1 :   dh_dT = cp;
     271           1 : }
     272             : 
     273             : Real
     274          14 : FlibeFluidProperties::e_from_p_T(Real pressure, Real temperature) const
     275             : {
     276             :   // definition of h = e + p * v
     277          14 :   Real v = v_from_p_T(pressure, temperature);
     278          14 :   Real cp = cp_from_v_e(v, 0.0 /* dummy */);
     279          14 :   return cp * temperature - pressure * v;
     280             : }
     281             : 
     282             : void
     283           1 : FlibeFluidProperties::e_from_p_T(
     284             :     Real pressure, Real temperature, Real & e, Real & de_dp, Real & de_dT) const
     285             : {
     286           1 :   e = e_from_p_T(pressure, temperature);
     287             : 
     288             :   Real v, dv_dp, dv_dT;
     289           1 :   v_from_p_T(pressure, temperature, v, dv_dp, dv_dT);
     290             : 
     291             :   // definition of e = h - p * v
     292           1 :   de_dp = -pressure * dv_dp - v;
     293             : 
     294             :   // definition of e = h - p * v
     295           1 :   Real cp = cp_from_v_e(v, e);
     296           1 :   de_dT = cp - pressure * dv_dT;
     297           1 : }
     298             : 
     299             : Real
     300           1 : FlibeFluidProperties::e_from_p_rho(Real p, Real rho) const
     301             : {
     302           1 :   return e_from_p_T(p, T_from_p_rho(p, rho));
     303             : }
     304             : 
     305             : Real
     306           2 : FlibeFluidProperties::T_from_p_rho(Real p, Real rho) const
     307             : {
     308           2 :   Real temperature = (rho - (p - _p_atm) * _drho_dp - _c0) / _drho_dT;
     309           2 :   return temperature;
     310             : }
     311             : 
     312           7 : Real FlibeFluidProperties::cp_from_p_T(Real /*pressure*/, Real /*temperature*/) const
     313             : {
     314           7 :   return _cp;
     315             : }
     316             : 
     317             : void
     318           1 : FlibeFluidProperties::cp_from_p_T(
     319             :     Real pressure, Real temperature, Real & cp, Real & dcp_dp, Real & dcp_dT) const
     320             : {
     321           1 :   cp = cp_from_p_T(pressure, temperature);
     322           1 :   dcp_dp = 0.0;
     323           1 :   dcp_dT = 0.0;
     324           1 : }
     325             : 
     326             : Real
     327           0 : FlibeFluidProperties::cv_from_p_T(Real pressure, Real temperature) const
     328             : {
     329           0 :   Real v = v_from_p_T(pressure, temperature);
     330           0 :   Real e = e_from_p_T(pressure, temperature);
     331           0 :   return cv_from_v_e(v, e);
     332             : }
     333             : 
     334             : void
     335           0 : FlibeFluidProperties::cv_from_p_T(
     336             :     Real pressure, Real temperature, Real & cv, Real & dcv_dp, Real & dcv_dT) const
     337             : {
     338           0 :   cv = cv_from_p_T(pressure, temperature);
     339           0 :   dcv_dp = 0.0;
     340           0 :   dcv_dT = 0.0;
     341           0 : }
     342             : 
     343             : Real
     344           7 : FlibeFluidProperties::mu_from_p_T(Real /*pressure*/, Real temperature) const
     345             : {
     346           7 :   return 1.16e-4 * std::exp(3755.0 / temperature);
     347             : }
     348             : 
     349             : void
     350           1 : FlibeFluidProperties::mu_from_p_T(
     351             :     Real pressure, Real temperature, Real & mu, Real & dmu_dp, Real & dmu_dT) const
     352             : {
     353           1 :   mu = this->mu_from_p_T(pressure, temperature);
     354           1 :   dmu_dp = 0.0;
     355           1 :   dmu_dT = -1.16e-4 * std::exp(3755.0 / temperature) * 3755.0 / (temperature * temperature);
     356           1 : }
     357             : 
     358             : Real
     359           7 : FlibeFluidProperties::k_from_p_T(Real /*pressure*/, Real temperature) const
     360             : {
     361           7 :   return 5.0e-4 * temperature + 0.63;
     362             : }
     363             : 
     364             : void
     365           1 : FlibeFluidProperties::k_from_p_T(
     366             :     Real pressure, Real temperature, Real & k, Real & dk_dp, Real & dk_dT) const
     367             : {
     368           1 :   k = this->k_from_p_T(pressure, temperature);
     369           1 :   dk_dp = 0.0;
     370           1 :   dk_dT = 5.0e-4;
     371           1 : }

Generated by: LCOV version 1.14