Alamo
Transport.H
Go to the documentation of this file.
1#ifndef MODEL_GAS_TRANSPORT_H_
2#define MODEL_GAS_TRANSPORT_H_
3
4#include <vector>
5#include <memory>
6#include <cmath>
7#include "Set/Set.H"
8#include "IO/ParmParse.H"
9
10namespace Model {
11namespace Gas {
12namespace Transport {
13
14template<typename... OBJ>
15class Transport {
16private:
17 friend IO::ParmParse;
18 std::tuple<OBJ...> obj;
19 static constexpr const char* names[] = { OBJ::name... };
20 int selected = -1;
21public:
22
23 Transport() {} ;
24
25 template<int I = 0>
26 AMREX_FORCE_INLINE
27 double dynamic_viscosity(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) return std::get<I>(obj).dynamic_viscosity(T,X,i,j,k);
32 else return dynamic_viscosity<I+1>(T,X,i,j,k);
33 }
34 else {
36 return NAN;
37 }
38 }
39
40
41 template<int I = 0>
42 AMREX_FORCE_INLINE
43 double thermal_conductivity(double T, Set::Patch<const Set::Scalar>& X, int i, int j, int k) const
44 {
45 if constexpr (I < sizeof...(OBJ))
46 {
47 if (selected == I) return std::get<I>(obj).thermal_conductivity(T,X,i,j,k);
48 else return thermal_conductivity<I+1>(T,X,i,j,k);
49 }
50 else {
52 return NAN;
53 }
54 }
55
56 template<int I = 0>
57 AMREX_FORCE_INLINE
58 void diffusion_coeffs( Set::Patch<Set::Scalar>& DKM, double T, double P,
59 Set::Patch<const Set::Scalar>& X, int i, int j, int k) const
60 {
61 if constexpr (I < sizeof...(OBJ))
62 {
63 if (selected == I) return std::get<I>(obj).diffusion_coeffs(DKM,T,P,X,i,j,k);
64 else return diffusion_coeffs<I+1>(DKM,T,P,X,i,j,k);
65 }
66 else {
68 }
69 }
70
71 ~Transport() = default;
72}; // class Transport
73
74} // namespace Transport
75} // namespace Gas
76} // namespace Model
77
78#endif
#define X(name)
#define INFO
Definition Util.H:24
std::tuple< OBJ... > obj
Definition Transport.H:18
AMREX_FORCE_INLINE void diffusion_coeffs(Set::Patch< Set::Scalar > &DKM, double T, double P, Set::Patch< const Set::Scalar > &X, int i, int j, int k) const
Definition Transport.H:58
AMREX_FORCE_INLINE double dynamic_viscosity(double T, Set::Patch< const Set::Scalar > &X, int i, int j, int k) const
Definition Transport.H:27
static constexpr const char * names[]
Definition Transport.H:19
AMREX_FORCE_INLINE double thermal_conductivity(double T, Set::Patch< const Set::Scalar > &X, int i, int j, int k) const
Definition Transport.H:43
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, 1 > Vector
Definition Base.H:21
void Abort(const char *msg)
Definition Util.cpp:268