LCOV - code coverage report
Current view: top level - src/Model/Gas/Thermo - Thermo.H (source / functions) Coverage Total Hit
Test: coverage_merged.info Lines: 18.8 % 16 3
Test Date: 2026-06-29 14:20:01 Functions: 100.0 % 1 1

            Line data    Source code
       1              : #ifndef MODEL_GAS_THERMO_H_
       2              : #define MODEL_GAS_THERMO_H_
       3              : 
       4              : #include <vector>
       5              : #include <memory>
       6              : #include "Set/Set.H"
       7              : #include <cmath>
       8              : #include "IO/ParmParse.H"
       9              : #include "Set/Set.H"
      10              : 
      11              : namespace Model {
      12              : namespace Gas {
      13              : namespace Thermo {
      14              : 
      15              : template<typename... OBJ>
      16              : class Thermo {
      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              : 
      24              : public:
      25              :     template<int I = 0>
      26              :     AMREX_FORCE_INLINE
      27              :     double cp_mol(double T, Set::Patch<const Set::Scalar>& X, int i, int j, int k) const
      28              :     {
      29              :         if constexpr (I < sizeof...(OBJ))
      30              :         {
      31    463376096 :             if (selected == I)
      32    463376096 :                 return std::get<I>(obj).cp_mol(T,X,i,j,k);
      33              :             else
      34            0 :                 return cp_mol<I+1>(T,X,i,j,k);
      35              :         }
      36              :         else {
      37            0 :             Util::Abort(INFO, selected);
      38            0 :             return NAN;
      39              :         }
      40              :     }
      41              : 
      42              : 
      43              :     template<int I = 0>
      44              :     AMREX_FORCE_INLINE
      45              :     double enthalpy_mol(double T, Set::Patch<const Set::Scalar>& X, int i, int j, int k) const
      46              :     {
      47              :         if constexpr (I < sizeof...(OBJ))
      48              :         {
      49            0 :             if (selected == I)
      50            0 :                 return std::get<I>(obj).enthalpy_mol(T,X,i,j,k);
      51              :             else
      52            0 :                 return enthalpy_mol<I+1>(T,X,i,j,k);
      53              :         }
      54              :         else {
      55            0 :             Util::Abort(INFO, selected);
      56            0 :             return NAN;
      57              :         }
      58              :     }
      59              : 
      60              :     template<int I = 0>
      61              :     AMREX_FORCE_INLINE
      62              :     double entropy_mol(double T, Set::Patch<const Set::Scalar>& X, int i, int j, int k) const
      63              :     {
      64              :         if constexpr (I < sizeof...(OBJ))
      65              :         {
      66            0 :             if (selected == I)
      67            0 :                 return std::get<I>(obj).entropy_mol(T,X,i,j,k);
      68              :             else
      69            0 :                 return entropy_mol<I+1>(T,X,i,j,k);
      70              :         }
      71              :         else {
      72            0 :             Util::Abort(INFO, selected);
      73            0 :             return NAN;
      74              :         }
      75              :     }
      76              : 
      77           24 :     ~Thermo() = default;
      78              : }; // class Thermo
      79              : 
      80              : } // namespace Thermo
      81              : } // namespace Gas
      82              : } // namespace Model
      83              : 
      84              : #endif
        

Generated by: LCOV version 2.0-1