Line data Source code
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 :
10 : namespace Model {
11 : namespace Gas {
12 : namespace Transport {
13 :
14 : template<typename... OBJ>
15 : class Transport {
16 : private:
17 : friend IO::ParmParse;
18 : std::tuple<OBJ...> obj;
19 : static constexpr const char* names[] = { OBJ::name... };
20 : int selected = -1;
21 : public:
22 :
23 8 : 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 13235200 : if (selected == I) return std::get<I>(obj).dynamic_viscosity(T,X,i,j,k);
32 0 : else return dynamic_viscosity<I+1>(T,X,i,j,k);
33 : }
34 : else {
35 0 : Util::Abort(INFO, selected);
36 0 : 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 0 : if (selected == I) return std::get<I>(obj).thermal_conductivity(T,X,i,j,k);
48 0 : else return thermal_conductivity<I+1>(T,X,i,j,k);
49 : }
50 : else {
51 0 : Util::Abort(INFO, selected);
52 0 : 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 0 : if (selected == I) return std::get<I>(obj).diffusion_coeffs(DKM,T,P,X,i,j,k);
64 0 : else return diffusion_coeffs<I+1>(DKM,T,P,X,i,j,k);
65 : }
66 : else {
67 0 : Util::Abort(INFO, selected);
68 : }
69 0 : }
70 :
71 8 : ~Transport() = default;
72 : }; // class Transport
73 :
74 : } // namespace Transport
75 : } // namespace Gas
76 : } // namespace Model
77 :
78 : #endif
|