LCOV - code coverage report
Current view: top level - src/Model/Gas/EOS - EOS.H (source / functions) Coverage Total Hit
Test: coverage_merged.info Lines: 40.0 % 20 8
Test Date: 2026-06-29 14:20:01 Functions: - 0 0

            Line data    Source code
       1              : #ifndef MODEL_GAS_EOS_H_
       2              : #define MODEL_GAS_EOS_H_
       3              : 
       4              : #include <vector>
       5              : #include <memory>
       6              : #include <cmath>
       7              : 
       8              : #include "Set/Set.H"
       9              : #include "IO/ParmParse.H"
      10              : 
      11              : namespace Model {
      12              : namespace Gas {
      13              : namespace EOS {
      14              : 
      15              : template<typename... OBJ>
      16              : class EOS {
      17              : private:
      18              :     friend IO::ParmParse;
      19              :     std::tuple<OBJ...> obj;
      20              :     static constexpr const char* names[] = { OBJ::name... };
      21              :     int selected = -1;
      22              : 
      23              : public:
      24              :     // Temperature, K
      25              :     template<typename GAS, int I = 0>
      26              :     AMREX_FORCE_INLINE
      27              :     AMREX_GPU_HOST_DEVICE
      28              :     double ComputeT(const GAS &gas, double density, double momentumx, double momentumy, double E, double Tguess,
      29              :                     Set::Patch<const Set::Scalar>& X, int i, int j, int k, double rtol) const
      30              :     {
      31              :         if constexpr (I < sizeof...(OBJ))
      32              :         {
      33    125784200 :             if (selected == I)
      34    251568400 :                 return std::get<I>(obj).ComputeT(gas,density,momentumx,momentumy,E,Tguess,X,i,j,k,rtol);
      35              :             else
      36            0 :                 return ComputeT<GAS, I+1>(gas,density,momentumx,momentumy,E,Tguess,X,i,j,k,rtol);
      37              :         }
      38              :         else {
      39            0 :             Util::Abort(INFO, selected);
      40            0 :             return NAN;
      41              :         }
      42              :     }
      43              : 
      44              :     // Temperature, K
      45              :     template<int I = 0>
      46              :     AMREX_FORCE_INLINE
      47              :     AMREX_GPU_HOST_DEVICE
      48              :     double ComputeT(double pressure, double density, 
      49              :                     double R) const
      50              :     {
      51              :         if constexpr (I < sizeof...(OBJ))
      52              :         {
      53        22248 :             if (selected == I)
      54        44496 :                 return std::get<I>(obj).ComputeT(pressure, density, R);
      55              :             else
      56            0 :                 return ComputeT<I+1>(pressure, density, R);
      57              :         }
      58              :         else {
      59            0 :             Util::Abort(INFO, selected);
      60            0 :             return NAN;
      61              :         }
      62              :     }
      63              : 
      64              : 
      65              :     // Pressure, Pa
      66              :     template<int I = 0>
      67              :     AMREX_FORCE_INLINE
      68              :     AMREX_GPU_HOST_DEVICE
      69              :     double ComputeP(double density, double T, double R) const
      70              :     // Energy, J/m^3
      71              :     {
      72              :         if constexpr (I < sizeof...(OBJ))
      73              :         {
      74    125784200 :             if (selected == I)
      75    251568400 :                 return std::get<I>(obj).ComputeP(density, T, R);
      76              :             else
      77            0 :                 return ComputeP<I+1>(density, T, R);
      78              :         }
      79              :         else {
      80            0 :             Util::Abort(INFO, selected);
      81            0 :             return NAN;
      82              :         }
      83              :     }
      84              : 
      85              :     template<int I = 0>
      86              :     AMREX_FORCE_INLINE
      87              :     AMREX_GPU_HOST_DEVICE
      88              :     double ComputeE(double density, double momentumx, double momentumy, double T, 
      89              :                     double R, double gamma) const
      90              :     {
      91              :         if constexpr (I < sizeof...(OBJ))
      92              :         {
      93        22248 :             if (selected == I)
      94        44496 :                 return std::get<I>(obj).ComputeE(density, momentumx, momentumy, T, R, gamma);
      95              :             else
      96            0 :                 return ComputeE<I+1>(density, momentumx, momentumy, T, R, gamma);
      97              :         }
      98              :         else {
      99            0 :             Util::Abort(INFO, selected);
     100            0 :             return NAN;
     101              :         }
     102              :     }
     103              : }; // class EOS
     104              : } // namespace EOS
     105              : } // namespace Gas
     106              : } // namespace Model
     107              : 
     108              : #endif
        

Generated by: LCOV version 2.0-1