diff options
author | Claudius "keldu" Holeksa <mail@keldu.de> | 2025-06-23 20:48:21 +0200 |
---|---|---|
committer | Claudius "keldu" Holeksa <mail@keldu.de> | 2025-06-23 20:48:21 +0200 |
commit | ccd27ef48151c3ab24943e6f0bafde6991f5a476 (patch) | |
tree | 9ce4e5952a43d1f9416f39c9e29ea315ac80410e /c++/collision.hpp | |
parent | 5a166a02efe011931faa7a9ff9fe4043e3a8017a (diff) |
Working on making cavity code available to everyone else :)
Diffstat (limited to 'c++/collision.hpp')
-rw-r--r-- | c++/collision.hpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/c++/collision.hpp b/c++/collision.hpp index 9143862..7ca7c9f 100644 --- a/c++/collision.hpp +++ b/c++/collision.hpp @@ -11,7 +11,13 @@ struct BGK {}; template<typename T, typename Descriptor> class component<T, Descriptor, cmpt::BGK> { +private: + typename saw::native_data_type<T>::type relaxation_; public: + component(typename saw::native_data_type<T>::type relaxation__): + relaxation_{relaxation__} + {} + using Component = cmpt::BGK; /** @@ -31,14 +37,22 @@ public: /** * Raw setup */ - void apply(saw::data<sch::CellField>& field, saw::data<sch::FixedArray<sch::UInt64,Descriptor::D>> index, uint64_t time_step){ + template<typename CellFieldSchema> + void apply(saw::data<CellFieldSchema>& field, saw::data<sch::FixedArray<sch::UInt64,Descriptor::D>> index, uint64_t time_step){ bool is_even = ((time_step % 2) == 0); auto& cell = field.at(index); auto& dfs_old = is_even ? cell.template get<"dfs_old">() : cell.template get<"dfs">(); auto& dfs = (!is_even) ? cell.template get<"dfs_old">() : cell.template get<"dfs">(); + typename saw::native_data_type<T>::type rho; + std::array<typename saw::native_data_type<T>::type, Descriptor::D> vel; + compute_rho_u<T,Descriptor>(dfs,rho,vel); + auto eq = equilibrium<Descriptor>(rho,vel); + for(uint64_t i = 0u; i < Descriptor::Q; ++i){ + dfs({i}).set(dfs({i}).get() + (1.0 / relaxation_) * (eq[i] - dfs({i}).get())); + } } |