diff options
| author | Claudius "keldu" Holeksa <mail@keldu.de> | 2026-08-07 18:15:51 +0200 |
|---|---|---|
| committer | Claudius "keldu" Holeksa <mail@keldu.de> | 2026-08-07 18:15:51 +0200 |
| commit | 9cc16e97489860ef1989c1bb16745a4dc0155b9f (patch) | |
| tree | 60636c39dad819388e6fd814a2a9c2efac5dded1 /modules/core/c++/descriptor | |
| parent | 5d4192c73c72f29debe0f3b6e73889f0204ab74a (diff) | |
| parent | 15ee0a4a9b398b86001c7a2542e8e98f9dedba70 (diff) | |
| download | libs-lbm-9cc16e97489860ef1989c1bb16745a4dc0155b9f.tar.gz | |
Diffstat (limited to 'modules/core/c++/descriptor')
| -rw-r--r-- | modules/core/c++/descriptor/common.hpp | 13 | ||||
| -rw-r--r-- | modules/core/c++/descriptor/d1q3.hpp | 31 | ||||
| -rw-r--r-- | modules/core/c++/descriptor/d2q5.hpp | 49 | ||||
| -rw-r--r-- | modules/core/c++/descriptor/d2q9.hpp | 54 | ||||
| -rw-r--r-- | modules/core/c++/descriptor/d3q19.hpp | 72 | ||||
| -rw-r--r-- | modules/core/c++/descriptor/d3q27.hpp | 93 |
6 files changed, 312 insertions, 0 deletions
diff --git a/modules/core/c++/descriptor/common.hpp b/modules/core/c++/descriptor/common.hpp index f821510..a20e2ef 100644 --- a/modules/core/c++/descriptor/common.hpp +++ b/modules/core/c++/descriptor/common.hpp @@ -4,6 +4,19 @@ namespace kel { namespace lbm { +namespace sch { +using namespace saw::schema; + +template<uint64_t DV, uint64_t QV> +struct Descriptor { + static constexpr uint64_t D = DV; + static constexpr uint64_t Q = QV; +}; + +} + +template<typename T, typename Desc> +class df_info{}; } } diff --git a/modules/core/c++/descriptor/d1q3.hpp b/modules/core/c++/descriptor/d1q3.hpp index 7fc8591..9ea0a35 100644 --- a/modules/core/c++/descriptor/d1q3.hpp +++ b/modules/core/c++/descriptor/d1q3.hpp @@ -4,6 +4,37 @@ namespace kel { namespace lbm { +namespace sch { +using D1Q3 = Descriptor<1u,3u>; +} + +template<typename T> +class df_info<T,sch::Descriptor<1,3>> { +public: + using Descriptor = sch::Descriptor<1,3>; + + static constexpr uint64_t D = 1u; + static constexpr uint64_t Q = 3u; + + static constexpr std::array<std::array<int32_t,D>,Q> directions = {{ + { 0}, + {-1}, + { 1} + }}; + + static constexpr std::array<typename saw::native_data_type<T>::type, Q> weights = { + 2./3., + 1./6., + 1./6. + }; + + static constexpr std::array<uint64_t,Q> opposite_index = { + 0,2,1 + }; + + 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.; +}; } } diff --git a/modules/core/c++/descriptor/d2q5.hpp b/modules/core/c++/descriptor/d2q5.hpp new file mode 100644 index 0000000..fef9c40 --- /dev/null +++ b/modules/core/c++/descriptor/d2q5.hpp @@ -0,0 +1,49 @@ +#pragma once + +#include "common.hpp" + +namespace kel { +namespace lbm { +namespace sch { +using D2Q5 = Descriptor<2u,5u>; +} + +template<typename T> +class df_info<T,sch::Descriptor<2, 5>> { +public: + using Descriptor = sch::Descriptor<2,5>; + + static constexpr uint64_t D = 2u; + static constexpr uint64_t Q = 5u; + + static constexpr std::array<std::array<int32_t, D>, Q> directions = {{ + { 0, 0}, // 0 + {-1, 0}, // 1 + { 1, 0}, // 2 + { 0,-1}, // 3 + { 0, 1} // 4 + }}; + + static constexpr std::array<typename saw::native_data_type<T>::type,Q> weights = { + 1./3., + 1./6., + 1./6., + 1./6., + 1./6. + }; + + static constexpr std::array<uint64_t,Q> opposite_index = { + 0, + 2, + 1, + 4, + 3 + }; + + 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.; +}; + + +} +} diff --git a/modules/core/c++/descriptor/d2q9.hpp b/modules/core/c++/descriptor/d2q9.hpp index f675a99..44c6e28 100644 --- a/modules/core/c++/descriptor/d2q9.hpp +++ b/modules/core/c++/descriptor/d2q9.hpp @@ -1,7 +1,61 @@ #pragma once +#include "common.hpp" + namespace kel { namespace lbm { +namespace sch { +using D2Q9 = Descriptor<2u,9u>; +} + +template<typename T> +class df_info<T,sch::Descriptor<2, 9>> { +public: + using Descriptor = sch::Descriptor<2,9>; + + static constexpr uint64_t D = 2u; + static constexpr uint64_t Q = 9u; + + static constexpr std::array<std::array<int32_t, D>, Q> directions = {{ + { 0, 0}, // 0 + {-1, 0}, // 1 + { 1, 0}, // 2 + { 0,-1}, // 3 + { 0, 1}, // 4 + {-1,-1}, // 5 + { 1, 1}, // 6 + {-1, 1}, // 7 + { 1,-1} // 8 + }}; + + static constexpr std::array<typename saw::native_data_type<T>::type,Q> weights = { + 4./9., + 1./9., + 1./9., + 1./9., + 1./9., + 1./36., + 1./36., + 1./36., + 1./36. + }; + + static constexpr std::array<uint64_t,Q> opposite_index = { + 0, + 2, + 1, + 4, + 3, + 6, + 5, + 8, + 7 + }; + + 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.; +}; + } } diff --git a/modules/core/c++/descriptor/d3q19.hpp b/modules/core/c++/descriptor/d3q19.hpp new file mode 100644 index 0000000..bbd1bd1 --- /dev/null +++ b/modules/core/c++/descriptor/d3q19.hpp @@ -0,0 +1,72 @@ +#pragma once + +namespace kel { +namespace lbm { +namespace sch { +using D3Q19 = Descriptor<3u,19u>; +} + +template<typename T> +class df_info<T, sch::Descriptor<3,19>> { +public: + using Descriptor = sch::Descriptor<3,19>; + + static constexpr uint64_t D = 3u; + static constexpr uint64_t Q = 19u; + + static constexpr std::array<std::array<int32_t,D>,Q> directions = {{ + { 0, 0, 0}, // 0 + + {-1, 0, 0}, // 1 + { 1, 0, 0}, // 2 + { 0, -1, 0}, // 3 + { 0, 1, 0}, // 4 + { 0, 0, -1}, // 5 + { 0, 0, 1}, // 6 + + {-1, -1, 0}, // 7 + { 1, -1, 0}, // 8 + {-1, 1, 0}, // 9 + { 1, 1, 0}, //10 + + {-1, 0, -1}, //11 + { 1, 0, -1}, //12 + {-1, 0, 1}, //13 + { 1, 0, 1}, //14 + + { 0, -1, -1}, //15 + { 0, 1, -1}, //16 + { 0, -1, 1}, //17 + { 0, 1, 1} //18 + }}; + + static constexpr std::array<typename saw::native_data_type<T>::type,Q> weights = { + 1./3., + + 1./18., 1./18., + 1./18., 1./18., + 1./18., 1./18., + + 1./36., 1./36., + 1./36., 1./36., + 1./36., 1./36., + 1./36., 1./36., + 1./36., 1./36., + 1./36., 1./36. + }; + + static constexpr std::array<uint64_t,Q> opposite_index = { + 0, + 2,1, + 4,3, + 6,5, + 10,9,8,7, + 14,13,12,11, + 18,17,16,15 + }; + + 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.; +}; +} +} diff --git a/modules/core/c++/descriptor/d3q27.hpp b/modules/core/c++/descriptor/d3q27.hpp new file mode 100644 index 0000000..7b3c84f --- /dev/null +++ b/modules/core/c++/descriptor/d3q27.hpp @@ -0,0 +1,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.; +}; +} +} |
