Alamo
Thermo.H
Go to the documentation of this file.
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
11namespace Model {
12namespace Gas {
13namespace Thermo {
14
15template<typename... OBJ>
16class Thermo {
17private:
18 friend IO::ParmParse;
19 std::tuple<OBJ...> obj;
20 static constexpr const char* names[] = { OBJ::name... };
21 int selected = -1;
22
23
24public:
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 if (selected == I)
32 return std::get<I>(obj).cp_mol(T,X,i,j,k);
33 else
34 return cp_mol<I+1>(T,X,i,j,k);
35 }
36 else {
38 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 if (selected == I)
50 return std::get<I>(obj).enthalpy_mol(T,X,i,j,k);
51 else
52 return enthalpy_mol<I+1>(T,X,i,j,k);
53 }
54 else {
56 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 if (selected == I)
67 return std::get<I>(obj).entropy_mol(T,X,i,j,k);
68 else
69 return entropy_mol<I+1>(T,X,i,j,k);
70 }
71 else {
73 return NAN;
74 }
75 }
76
77 ~Thermo() = default;
78}; // class Thermo
79
80} // namespace Thermo
81} // namespace Gas
82} // namespace Model
83
84#endif
#define X(name)
#define INFO
Definition Util.H:24
AMREX_FORCE_INLINE double cp_mol(double T, Set::Patch< const Set::Scalar > &X, int i, int j, int k) const
Definition Thermo.H:27
AMREX_FORCE_INLINE double entropy_mol(double T, Set::Patch< const Set::Scalar > &X, int i, int j, int k) const
Definition Thermo.H:62
AMREX_FORCE_INLINE double enthalpy_mol(double T, Set::Patch< const Set::Scalar > &X, int i, int j, int k) const
Definition Thermo.H:45
static constexpr const char * names[]
Definition Thermo.H:20
std::tuple< OBJ... > obj
Definition Thermo.H:19
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, 1 > Vector
Definition Base.H:21
void Abort(const char *msg)
Definition Util.cpp:268