LCOV - code coverage report
Current view: top level - include/fluidproperties - CaloricallyImperfectGas.h (source / functions) Hit Total Coverage
Test: idaholab/moose fluid_properties: #31405 (292dce) with base fef103 Lines: 13 14 92.9 %
Date: 2025-09-04 07:53:14 Functions: 4 6 66.7 %
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             : #include "Function.h"
      15             : 
      16             : #pragma GCC diagnostic push
      17             : #pragma GCC diagnostic ignored "-Woverloaded-virtual"
      18             : 
      19             : /**
      20             :  * A calorically imperfect gas fluid property class
      21             :  * This fluid property assumes that internal energy is
      22             :  * a general monotonic function of temperature; behaves
      23             :  * like an ideal gas otherwise. In particular, it assumes:
      24             :  * p v = R_s T
      25             :  */
      26             : class CaloricallyImperfectGas : public SinglePhaseFluidProperties, public NaNInterface
      27             : {
      28             : public:
      29             :   static InputParameters validParams();
      30             : 
      31             :   CaloricallyImperfectGas(const InputParameters & parameters);
      32             : 
      33             :   virtual void initialSetup() override;
      34             : 
      35             :   virtual Real p_from_v_e(Real v, Real e) const override;
      36             :   virtual ADReal p_from_v_e(const ADReal & v, const ADReal & e) const override;
      37             :   virtual void p_from_v_e(Real v, Real e, Real & p, Real & dp_dv, Real & dp_de) const override;
      38             :   virtual Real T_from_v_e(Real v, Real e) const override;
      39             :   virtual ADReal T_from_v_e(const ADReal & v, const ADReal & e) const override;
      40             :   virtual void T_from_v_e(Real v, Real e, Real & T, Real & dT_dv, Real & dT_de) const override;
      41             : 
      42             :   virtual Real cp_from_v_e(Real v, Real e) const override;
      43             :   virtual void cp_from_v_e(Real v, Real e, Real & cp, Real & dcp_dv, Real & dcp_de) const override;
      44             :   virtual Real cv_from_v_e(Real v, Real e) const override;
      45             :   virtual ADReal cv_from_v_e(ADReal v, ADReal e) const;
      46             :   virtual void cv_from_v_e(Real v, Real e, Real & cv, Real & dcv_dv, Real & dcv_de) const override;
      47             :   virtual Real mu_from_v_e(Real v, Real e) const override;
      48             :   virtual void mu_from_v_e(Real v, Real e, Real & mu, Real & dmu_dv, Real & dmu_de) const override;
      49             :   virtual Real k_from_v_e(Real v, Real e) const override;
      50             :   virtual void k_from_v_e(Real v, Real e, Real & k, Real & dk_dv, Real & dk_de) const override;
      51             :   virtual Real s_from_v_e(Real v, Real e) const override;
      52             :   virtual void s_from_v_e(Real v, Real e, Real & s, Real & ds_dv, Real & ds_de) const override;
      53             :   virtual Real s_from_p_T(Real p, Real T) const override;
      54             :   virtual void s_from_p_T(Real p, Real T, Real & s, Real & ds_dp, Real & ds_dT) const override;
      55             :   virtual Real s_from_h_p(Real h, Real p) const override;
      56             :   virtual void s_from_h_p(Real h, Real p, Real & s, Real & ds_dh, Real & ds_dp) const override;
      57             :   virtual Real rho_from_p_s(Real p, Real s) const override;
      58             :   virtual Real e_from_v_h(Real v, Real h) const override;
      59             :   virtual void e_from_v_h(Real v, Real h, Real & e, Real & de_dv, Real & de_dh) const override;
      60             :   virtual Real rho_from_p_T(Real p, Real T) const override;
      61             :   virtual ADReal rho_from_p_T(const ADReal & p, const ADReal & T) const override;
      62             :   virtual void
      63             :   rho_from_p_T(Real p, Real T, Real & rho, Real & drho_dp, Real & drho_dT) const override;
      64             :   virtual void rho_from_p_T(const ADReal & p,
      65             :                             const ADReal & T,
      66             :                             ADReal & rho,
      67             :                             ADReal & drho_dp,
      68             :                             ADReal & drho_dT) const override;
      69             :   propfuncWithDefinitionOverride(e, p, rho);
      70             :   virtual Real e_from_T_v(Real T, Real v) const override;
      71             :   virtual void e_from_T_v(Real T, Real v, Real & e, Real & de_dT, Real & de_dv) const override;
      72             :   virtual ADReal e_from_T_v(const ADReal & T, const ADReal & v) const override;
      73             :   virtual Real p_from_T_v(Real T, Real v) const override;
      74             :   virtual void p_from_T_v(Real T, Real v, Real & p, Real & dp_dT, Real & dp_dv) const override;
      75             :   virtual Real h_from_T_v(Real T, Real v) const override;
      76             :   virtual void h_from_T_v(Real T, Real v, Real & h, Real & dh_dT, Real & dh_dv) const override;
      77             :   virtual Real s_from_T_v(Real T, Real v) const override;
      78             :   virtual void s_from_T_v(Real T, Real v, Real & s, Real & ds_dT, Real & ds_dv) const override;
      79             :   virtual Real cv_from_T_v(Real T, Real v) const override;
      80             :   virtual Real e_spndl_from_v(Real v) const override;
      81             :   virtual void v_e_spndl_from_T(Real T, Real & v, Real & e) const override;
      82             :   virtual Real h_from_p_T(Real p, Real T) const override;
      83             :   virtual void h_from_p_T(Real p, Real T, Real & h, Real & dh_dp, Real & dh_dT) const override;
      84             :   virtual Real e_from_p_T(Real p, Real T) const override;
      85             :   virtual ADReal e_from_p_T(ADReal p, ADReal T) const;
      86             :   virtual void e_from_p_T(Real p, Real T, Real & e, Real & de_dp, Real & de_dT) const override;
      87             :   virtual Real T_from_p_h(Real p, Real h) const override;
      88             :   virtual void T_from_p_h(Real p, Real h, Real & T, Real & dT_dp, Real & dT_dh) const override;
      89             :   virtual Real cv_from_p_T(Real p, Real T) const override;
      90             :   virtual void cv_from_p_T(Real p, Real T, Real & cv, Real & dcv_dp, Real & dcv_dT) const override;
      91             :   virtual Real cp_from_p_T(Real p, Real T) const override;
      92             :   virtual void cp_from_p_T(Real p, Real T, Real & cp, Real & dcp_dp, Real & dcp_dT) const override;
      93             :   virtual Real mu_from_p_T(Real p, Real T) const override;
      94             :   virtual void mu_from_p_T(Real p, Real T, Real & mu, Real & dmu_dp, Real & dmu_dT) const override;
      95             :   virtual Real k_from_p_T(Real pressure, Real temperature) const override;
      96             :   virtual void
      97             :   k_from_p_T(Real pressure, Real temperature, Real & k, Real & dk_dp, Real & dk_dT) const override;
      98             :   virtual std::string fluidName() const override;
      99             :   virtual Real molarMass() const override;
     100             :   virtual Real criticalTemperature() const override;
     101             :   virtual Real criticalDensity() const override;
     102             :   virtual Real criticalInternalEnergy() const override;
     103             :   virtual Real gamma_from_v_e(Real v, Real e) const override;
     104             :   virtual ADReal gamma_from_v_e(ADReal v, ADReal e) const;
     105             :   virtual void
     106             :   gamma_from_v_e(Real v, Real e, Real & gamma, Real & dgamma_dv, Real & dgamma_de) const override;
     107             :   virtual Real gamma_from_p_T(Real p, Real T) const override;
     108             :   virtual ADReal gamma_from_p_T(ADReal p, ADReal T) const;
     109             :   virtual void
     110             :   gamma_from_p_T(Real p, Real T, Real & gamma, Real & dgamma_dp, Real & dgamma_dT) const override;
     111             :   virtual Real g_from_v_e(Real v, Real e) const override;
     112             :   virtual Real p_from_h_s(Real h, Real s) const override;
     113             :   virtual void p_from_h_s(Real h, Real s, Real & p, Real & dp_dh, Real & dp_ds) const override;
     114             :   virtual Real c_from_v_e(Real v, Real e) const override;
     115             :   virtual ADReal c_from_v_e(const ADReal & v, const ADReal & e) const override;
     116             :   virtual void c_from_v_e(Real v, Real e, Real & c, Real & dc_dv, Real & dc_de) const override;
     117             :   virtual Real c_from_p_T(Real p, Real T) const override;
     118             :   virtual ADReal c_from_p_T(const ADReal & p, const ADReal & T) const override;
     119             :   virtual void c_from_p_T(Real /*p*/, Real T, Real & c, Real & dc_dp, Real & dc_dT) const override;
     120             : 
     121             : protected:
     122             :   /// sets up the T(e) reverse lookup table
     123             :   void setupLookupTables();
     124             : 
     125             :   /// function that handles exceeding parameter limits
     126             :   void outOfBounds(const std::string & function, Real value, Real min, Real max) const;
     127             : 
     128             :   ///@{ helper functions for e(T) and h(T), T(e), T(h), cv(T), cp(T)
     129             :   Real e_from_T(Real T) const;
     130             :   Real h_from_T(Real T) const;
     131             :   Real T_from_e(Real e) const;
     132             :   Real T_from_h(Real h) const;
     133             :   template <typename CppType>
     134             :   Real cv_from_T(const CppType & T) const;
     135             :   Real cp_from_T(Real T) const;
     136             :   void cv_from_T(Real T, Real & cv, Real & dcv_dT) const;
     137             :   void cp_from_T(Real T, Real & cp, Real & dcp_dT) const;
     138             :   Real Z_from_T(Real T) const;
     139             :   ///@}
     140             : 
     141             :   /// molar mass
     142             :   const Real & _molar_mass;
     143             : 
     144             :   /// Specific gas constant (R / molar mass)
     145             :   const Real _R_specific;
     146             : 
     147             :   // properties at critical point (used by IdealRealGasMixtureFluidProperties (primary component))
     148             :   Real _T_c;
     149             :   Real _rho_c;
     150             :   Real _e_c;
     151             : 
     152             :   ///@{ temperature limits when creating lookup tables
     153             :   Real _min_temperature;
     154             :   Real _max_temperature;
     155             :   ///@}
     156             : 
     157             :   /// temperature interval in lookup tables
     158             :   Real _delta_T;
     159             : 
     160             :   /// Flag to error if out of bounds
     161             :   const bool _out_of_bound_error;
     162             : 
     163             :   // tolerance for checking monotonicity of T for h(T) & e(T)
     164             :   Real _tol;
     165             : 
     166             :   /// Internal energy as a function of temperature
     167             :   const Function * _e_T;
     168             :   /// Dynamic viscosity
     169             :   const Function * _mu_T;
     170             :   /// Thermal conductivity
     171             :   const Function * _k_T;
     172             : 
     173             :   ///@{ internal energy and enthalpy limits when creating lookup tables
     174             :   Real _min_e;
     175             :   Real _max_e;
     176             :   Real _min_h;
     177             :   Real _max_h;
     178             :   ///@}
     179             : 
     180             :   ///@{ step size in internal energy and enthalpy
     181             :   Real _delta_e;
     182             :   Real _delta_h;
     183             :   ///@}
     184             : 
     185             :   ///@{ inverse lookup table data
     186             :   std::vector<Real> _T_h_lookup;
     187             :   std::vector<Real> _T_e_lookup;
     188             :   ///@}
     189             : 
     190             :   /// Z(T) lookup table on uniform grid between _min_temperature and _max_temperature
     191             :   std::vector<Real> _Z_T_lookup;
     192             : };
     193             : 
     194             : #pragma GCC diagnostic pop
     195             : 
     196             : template <typename CppType>
     197             : CppType
     198         406 : CaloricallyImperfectGas::e_from_p_rho_template(const CppType & p, const CppType & rho) const
     199             : {
     200         406 :   CppType T = p / (rho * _R_specific);
     201         406 :   return e_from_p_T(p, T);
     202             : }
     203             : 
     204             : template <typename CppType>
     205             : void
     206           2 : CaloricallyImperfectGas::e_from_p_rho_template(
     207             :     const CppType & p, const CppType & rho, CppType & e, CppType & de_dp, CppType & de_drho) const
     208             : {
     209           2 :   CppType T = p / (rho * _R_specific);
     210           2 :   e = e_from_p_rho_template(p, rho);
     211           2 :   CppType cv = cv_from_T(T);
     212           2 :   de_dp = cv / (rho * _R_specific);
     213           2 :   de_drho = -cv * p / (rho * rho * _R_specific);
     214           2 : }
     215             : 
     216             : template <typename CppType>
     217             : Real
     218      303715 : CaloricallyImperfectGas::cv_from_T(const CppType & T) const
     219             : {
     220             :   const auto raw_T = MetaPhysicL::raw_value(T);
     221      303715 :   if (raw_T < _min_temperature || raw_T > _max_temperature)
     222           0 :     outOfBounds("cv_from_T", raw_T, _min_temperature, _max_temperature);
     223             : 
     224      303715 :   return _e_T->timeDerivative(raw_T, Point());
     225             : }

Generated by: LCOV version 1.14