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

Generated by: LCOV version 1.14