LCOV - code coverage report
Current view: top level - include/fluidproperties - StiffenedGasFluidProperties.h (source / functions) Hit Total Coverage
Test: idaholab/moose fluid_properties: #31405 (292dce) with base fef103 Lines: 63 81 77.8 %
Date: 2025-09-04 07:53:14 Functions: 21 23 91.3 %
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             : #pragma once
      11             : 
      12             : #include "SinglePhaseFluidProperties.h"
      13             : #include "NaNInterface.h"
      14             : 
      15             : #pragma GCC diagnostic push
      16             : #pragma GCC diagnostic ignored "-Woverloaded-virtual"
      17             : 
      18             : /**
      19             :  * Stiffened gas fluid properties
      20             :  */
      21             : class StiffenedGasFluidProperties : public SinglePhaseFluidProperties, public NaNInterface
      22             : {
      23             : public:
      24             :   static InputParameters validParams();
      25             : 
      26             :   StiffenedGasFluidProperties(const InputParameters & parameters);
      27             :   virtual ~StiffenedGasFluidProperties();
      28             : 
      29             :   virtual Real c_from_v_e(Real v, Real e) const override;
      30             :   virtual void c_from_v_e(Real v, Real e, Real & c, Real & dc_dv, Real & dc_de) const override;
      31             :   virtual Real cp_from_v_e(Real v, Real e) const override;
      32             :   virtual void cp_from_v_e(Real v, Real e, Real & cp, Real & dcp_dv, Real & dcp_de) const override;
      33             :   virtual Real cv_from_v_e(Real v, Real e) const override;
      34             :   virtual void cv_from_v_e(Real v, Real e, Real & cv, Real & dcv_dv, Real & dcv_de) const override;
      35             :   virtual Real mu_from_v_e(Real v, Real e) const override;
      36             :   virtual void mu_from_v_e(Real v, Real e, Real & mu, Real & dmu_dv, Real & dmu_de) const override;
      37             :   virtual Real k_from_v_e(Real v, Real e) const override;
      38             :   virtual void k_from_v_e(Real v, Real e, Real & k, Real & dk_dv, Real & dk_de) const override;
      39             :   virtual Real s_from_h_p(Real h, Real p) const override;
      40             :   virtual void s_from_h_p(Real h, Real p, Real & s, Real & ds_dh, Real & ds_dp) const override;
      41             :   virtual Real rho_from_p_s(Real p, Real s) const override;
      42             :   virtual void
      43             :   rho_from_p_s(Real p, Real s, Real & rho, Real & drho_dp, Real & drho_ds) const override;
      44             :   propfuncWithDefinitionOverride(rho, p, T);
      45             :   propfuncWithDefinitionOverride(e, p, rho);
      46             :   propfuncWithDefinitionOverride(s, v, e);
      47             :   propfuncWithDefinitionOverride(s, p, T);
      48             :   propfuncWithDefinitionOverride(T, v, e);
      49             :   propfuncWithDefinitionOverride(p, v, e);
      50             :   propfuncWithDefinitionOverride(T, p, h);
      51             :   virtual Real e_from_T_v(Real T, Real v) const override;
      52             :   virtual void e_from_T_v(Real T, Real v, Real & e, Real & de_dT, Real & de_dv) const override;
      53             :   virtual Real p_from_T_v(Real T, Real v) const override;
      54             :   virtual void p_from_T_v(Real T, Real v, Real & p, Real & dp_dT, Real & dp_dv) const override;
      55             :   virtual Real h_from_T_v(Real T, Real v) const override;
      56             :   virtual void h_from_T_v(Real T, Real v, Real & h, Real & dh_dT, Real & dh_dv) const override;
      57             :   virtual Real s_from_T_v(Real T, Real v) const override;
      58             :   virtual void s_from_T_v(Real T, Real v, Real & s, Real & ds_dT, Real & ds_dv) const override;
      59             :   virtual Real cv_from_T_v(Real T, Real v) const override;
      60             :   virtual Real e_spndl_from_v(Real v) const override;
      61             :   virtual void v_e_spndl_from_T(Real T, Real & v, Real & e) const override;
      62             :   virtual Real e_from_v_h(Real v, Real h) const override;
      63             :   virtual void e_from_v_h(Real v, Real h, Real & e, Real & de_dv, Real & de_dh) const override;
      64             :   virtual Real h_from_p_T(Real p, Real T) const override;
      65             :   virtual void h_from_p_T(Real p, Real T, Real & h, Real & dh_dp, Real & dh_dT) const override;
      66             :   virtual Real e_from_p_T(Real p, Real T) const override;
      67             :   virtual void e_from_p_T(Real p, Real T, Real & e, Real & de_dp, Real & de_dT) const override;
      68             :   virtual Real p_from_h_s(Real h, Real s) const override;
      69             :   virtual void p_from_h_s(Real h, Real s, Real & p, Real & dp_dh, Real & dp_ds) const override;
      70             :   virtual Real g_from_v_e(Real v, Real e) const override;
      71             :   virtual Real molarMass() const override;
      72             :   virtual Real criticalTemperature() const override;
      73             :   virtual Real criticalDensity() const override;
      74             :   virtual Real criticalInternalEnergy() const override;
      75             :   virtual Real cv_from_p_T(Real p, Real T) const override;
      76             :   virtual void cv_from_p_T(Real p, Real T, Real & cv, Real & dcv_dp, Real & dcv_dT) const override;
      77             :   virtual Real cp_from_p_T(Real p, Real T) const override;
      78             :   virtual void cp_from_p_T(Real p, Real T, Real & cp, Real & dcp_dp, Real & dcp_dT) const override;
      79             :   virtual Real mu_from_p_T(Real p, Real T) const override;
      80             :   virtual void mu_from_p_T(Real p, Real T, Real & mu, Real & dmu_dp, Real & dmu_dT) const override;
      81             :   virtual Real k_from_p_T(Real p, Real T) const override;
      82             :   virtual void k_from_p_T(Real p, Real T, Real & k, Real & dk_dp, Real & dk_dT) const override;
      83             :   virtual Real beta_from_p_T(Real p, Real T) const override;
      84             :   virtual void
      85             :   beta_from_p_T(Real p, Real T, Real & beta, Real & dbeta_dp, Real & dbeta_dT) const override;
      86             : 
      87             :   virtual Real c2_from_p_rho(Real pressure, Real rho) const;
      88             : 
      89             :   virtual Real pp_sat_from_p_T(Real /*p*/, Real /*T*/) const override;
      90             : 
      91             : protected:
      92             :   bool _allow_nonphysical_states;
      93             : 
      94             :   Real _gamma;
      95             :   Real _cv;
      96             :   Real _q;
      97             :   Real _q_prime;
      98             :   Real _p_inf;
      99             :   Real _cp;
     100             : 
     101             :   Real _mu;
     102             :   Real _k;
     103             :   Real _molar_mass;
     104             :   // properties at critical point
     105             :   Real _T_c;
     106             :   Real _rho_c;
     107             :   Real _e_c;
     108             : };
     109             : 
     110             : #pragma GCC diagnostic pop
     111             : 
     112             : template <typename CppType>
     113             : CppType
     114         325 : StiffenedGasFluidProperties::rho_from_p_T_template(const CppType & p, const CppType & T) const
     115             : {
     116             :   mooseAssert(((_gamma - 1.0) * _cv * T) != 0.0, "Invalid gamma or cv or temperature detected!");
     117         325 :   CppType rho = (p + _p_inf) / ((_gamma - 1.0) * _cv * T);
     118         325 :   if (!_allow_nonphysical_states && rho <= 0.)
     119           0 :     return getNaN();
     120             :   else
     121           7 :     return rho;
     122             : }
     123             : 
     124             : template <typename CppType>
     125             : void
     126           4 : StiffenedGasFluidProperties::rho_from_p_T_template(
     127             :     const CppType & p, const CppType & T, CppType & rho, CppType & drho_dp, CppType & drho_dT) const
     128             : {
     129             :   mooseAssert(((_gamma - 1.0) * _cv * T) != 0.0, "Invalid gamma or cv or temperature detected!");
     130           5 :   rho = (p + _p_inf) / ((_gamma - 1.0) * _cv * T);
     131           4 :   if (!_allow_nonphysical_states && rho <= 0.)
     132             :   {
     133           0 :     drho_dp = getNaN();
     134           0 :     drho_dT = getNaN();
     135             :   }
     136             :   else
     137             :   {
     138           6 :     drho_dp = 1. / ((_gamma - 1.0) * _cv * T);
     139           6 :     drho_dT = -(p + _p_inf) / ((_gamma - 1.0) * _cv * T * T);
     140             :   }
     141           4 : }
     142             : 
     143             : template <typename CppType>
     144             : CppType
     145           8 : StiffenedGasFluidProperties::e_from_p_rho_template(const CppType & p, const CppType & rho) const
     146             : {
     147             :   mooseAssert((_gamma - 1.0) * rho != 0., "Invalid gamma or density detected!");
     148          16 :   return (p + _gamma * _p_inf) / ((_gamma - 1.0) * rho) + _q;
     149             : }
     150             : 
     151             : template <typename CppType>
     152             : void
     153           2 : StiffenedGasFluidProperties::e_from_p_rho_template(
     154             :     const CppType & p, const CppType & rho, CppType & e, CppType & de_dp, CppType & de_drho) const
     155             : {
     156           2 :   e = e_from_p_rho_template(p, rho);
     157           4 :   de_dp = 1.0 / ((_gamma - 1.0) * rho);
     158           4 :   de_drho = -(p + _gamma * _p_inf) / ((_gamma - 1.0) * rho * rho);
     159           2 : }
     160             : 
     161             : template <typename CppType>
     162             : CppType
     163          15 : StiffenedGasFluidProperties::T_from_v_e_template(const CppType & v, const CppType & e) const
     164             : {
     165          45 :   return (1.0 / _cv) * (e - _q - _p_inf * v);
     166             : }
     167             : 
     168             : template <typename CppType>
     169             : void
     170          32 : StiffenedGasFluidProperties::T_from_v_e_template(
     171             :     const CppType & v, const CppType & e, CppType & T, CppType & dT_dv, CppType & dT_de) const
     172             : {
     173          32 :   T = T_from_v_e_template(v, e);
     174          32 :   dT_dv = -_p_inf / _cv;
     175          32 :   dT_de = 1.0 / _cv;
     176          32 : }
     177             : 
     178             : template <typename CppType>
     179             : CppType
     180           0 : StiffenedGasFluidProperties::T_from_p_h_template(const CppType & /*p*/, const CppType & h) const
     181             : {
     182           0 :   return (1.0 / _cv) * (h - _q) / _gamma;
     183             : }
     184             : 
     185             : template <typename CppType>
     186             : void
     187           0 : StiffenedGasFluidProperties::T_from_p_h_template(
     188             :     const CppType & p, const CppType & h, CppType & T, CppType & dT_dp, CppType & dT_dh) const
     189             : {
     190           0 :   T = T_from_p_h_template(p, h);
     191           0 :   dT_dp = 0;
     192           0 :   dT_dh = 1.0 / _cv / _gamma;
     193           0 : }
     194             : 
     195             : template <typename CppType>
     196             : CppType
     197          15 : StiffenedGasFluidProperties::p_from_v_e_template(const CppType & v, const CppType & e) const
     198             : {
     199          30 :   return (_gamma - 1.0) * (e - _q) / v - _gamma * _p_inf;
     200             : }
     201             : 
     202             : template <typename CppType>
     203             : void
     204          90 : StiffenedGasFluidProperties::p_from_v_e_template(
     205             :     const CppType & v, const CppType & e, CppType & p, CppType & dp_dv, CppType & dp_de) const
     206             : {
     207          90 :   p = p_from_v_e_template(v, e);
     208          92 :   dp_dv = -(_gamma - 1.0) * (e - _q) / v / v;
     209          92 :   dp_de = (_gamma - 1.0) / v;
     210          90 : }
     211             : 
     212             : template <typename CppType>
     213             : CppType
     214         746 : StiffenedGasFluidProperties::s_from_v_e_template(const CppType & v, const CppType & e) const
     215             : {
     216           7 :   CppType T = T_from_v_e_template(v, e);
     217           7 :   CppType p = p_from_v_e_template(v, e);
     218         753 :   CppType n = std::pow(T, _gamma) / std::pow(p + _p_inf, _gamma - 1.0);
     219         746 :   if (n <= 0.0)
     220           0 :     return getNaN();
     221             :   else
     222         753 :     return _cv * std::log(n) + _q_prime;
     223             : }
     224             : 
     225             : template <typename CppType>
     226             : void
     227          30 : StiffenedGasFluidProperties::s_from_v_e_template(
     228             :     const CppType & v, const CppType & e, CppType & s, CppType & ds_dv, CppType & ds_de) const
     229             : {
     230             :   CppType T, dT_dv, dT_de;
     231          30 :   T_from_v_e_template(v, e, T, dT_dv, dT_de);
     232             : 
     233             :   CppType p, dp_dv, dp_de;
     234          30 :   p_from_v_e_template(v, e, p, dp_dv, dp_de);
     235             : 
     236          31 :   const CppType n = std::pow(T, _gamma) / std::pow(p + _p_inf, _gamma - 1.0);
     237          30 :   if (n <= 0.0)
     238             :   {
     239           0 :     s = getNaN();
     240           0 :     ds_dv = getNaN();
     241           0 :     ds_de = getNaN();
     242             :   }
     243             :   else
     244             :   {
     245          31 :     s = _cv * std::log(n) + _q_prime;
     246             : 
     247          30 :     const CppType dn_dT = _gamma * std::pow(T, _gamma - 1.0) / std::pow(p + _p_inf, _gamma - 1.0);
     248          31 :     const CppType dn_dp = std::pow(T, _gamma) * (1.0 - _gamma) * std::pow(p + _p_inf, -_gamma);
     249             : 
     250          30 :     const CppType dn_dv = dn_dT * dT_dv + dn_dp * dp_dv;
     251          30 :     const CppType dn_de = dn_dT * dT_de + dn_dp * dp_de;
     252             : 
     253          30 :     ds_dv = _cv / n * dn_dv;
     254          30 :     ds_de = _cv / n * dn_de;
     255             :   }
     256          30 : }
     257             : 
     258             : template <typename CppType>
     259             : CppType
     260          12 : StiffenedGasFluidProperties::s_from_p_T_template(const CppType & p, const CppType & T) const
     261             : {
     262          18 :   CppType n = std::pow(T, _gamma) / std::pow(p + _p_inf, _gamma - 1.0);
     263          12 :   if (n <= 0.0)
     264           0 :     return getNaN();
     265             :   else
     266          18 :     return _cv * std::log(n) + _q_prime;
     267             : }
     268             : 
     269             : template <typename CppType>
     270             : void
     271           2 : StiffenedGasFluidProperties::s_from_p_T_template(
     272             :     const CppType & p, const CppType & T, CppType & s, CppType & ds_dp, CppType & ds_dT) const
     273             : {
     274           3 :   const CppType n = std::pow(T, _gamma) / std::pow(p + _p_inf, _gamma - 1.0);
     275           2 :   if (n <= 0.0)
     276             :   {
     277           0 :     s = getNaN();
     278           0 :     ds_dp = getNaN();
     279           0 :     ds_dT = getNaN();
     280             :   }
     281             :   else
     282             :   {
     283           3 :     s = _cv * std::log(n) + _q_prime;
     284             : 
     285           2 :     const CppType dn_dT = _gamma * std::pow(T, _gamma - 1.0) / std::pow(p + _p_inf, _gamma - 1.0);
     286           3 :     const CppType dn_dp = std::pow(T, _gamma) * (1.0 - _gamma) * std::pow(p + _p_inf, -_gamma);
     287             : 
     288           2 :     ds_dp = _cv / n * dn_dp;
     289           2 :     ds_dT = _cv / n * dn_dT;
     290             :   }
     291           2 : }

Generated by: LCOV version 1.14