summaryrefslogtreecommitdiff
path: root/modules/core/c++/descriptor/d3q27.hpp
blob: 7b3c84fb3938a5877a8d95cb3fc598dd22811078 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#pragma once

namespace kel {
namespace lbm {
namespace sch {
using D3Q27 = Descriptor<3u,27u>;
}

template<typename T>
class df_info<T,sch::Descriptor<3, 27>> {
public:
	using Descriptor = sch::Descriptor<3,27>;

	static constexpr uint64_t D = 3u;
	static constexpr uint64_t Q = 27u;

	static constexpr std::array<std::array<int32_t, D>, Q> directions = {{
		{ 0, 0, 0},  // 0
		// Into 1D
		{-1, 0, 0},  // 1
		{ 1, 0, 0},  // 2
		// Expand into 2D
		{ 0, -1, 0}, // 3
		{-1, -1, 0}, // 4
		{ 1, -1, 0}, // 5
		{ 0, 1, 0},  // 6
		{-1, 1, 0},  // 7
		{ 1, 1, 0},  // 8
		// Expand into 3D
		{ 0, 0, -1}, // 9
		{-1, 0, -1}, // 10
		{ 1, 0, -1}, // 11
		{ 0, -1, -1},// 12
		{-1, -1, -1},// 13
		{ 1, -1, -1},// 14
		{ 0, 1, -1}, // 15
		{-1, 1, -1}, // 16
		{ 1, 1, -1}, // 17
		{ 0, 0, 1},  // 18
		{-1, 0, 1},  // 19
		{ 1, 0, 1},  // 20
		{ 0, -1, 1}, // 21
		{-1, -1, 1}, // 22
		{ 1, -1, 1}, // 23
		{ 0, 1, 1},  // 24
		{-1, 1, 1},  // 25
		{ 1, 1, 1}   // 26
	}};

	static constexpr std::array<typename saw::native_data_type<T>::type,Q> weights = {
		8./27.,
		// 1D
		1./36.,
		1./36.,
		// 2D
		1./36.,
		1./54.,
		1./54.,
		1./36.,
		1./54.,
		1./54.,
		// 3D
		1./36.,
		1./54.,
		1./54.,
		1./54.,
		1./216.,
		1./216.,
		1./54.,
		1./216.,
		1./216.,
		1./36.,
		1./54.,
		1./54.,
		1./54.,
		1./216.,
		1./216.,
		1./54.,
		1./216.,
		1./216.
	};

	static constexpr std::array<uint64_t,Q> opposite_index = {
		0,2,1,
		6,8,7,3,5,4,
		18,20,19,24,26,25,21,23,22,9,11,10,15,17,16,12,14,13
	};

	static constexpr typename saw::native_data_type<T>::type inv_cs2 = 3.0;
	static constexpr typename saw::native_data_type<T>::type cs2 = 1./3.;
};
}
}