summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorClaudius "keldu" Holeksa <mail@keldu.de>2026-02-09 16:49:12 +0100
committerClaudius "keldu" Holeksa <mail@keldu.de>2026-02-09 16:49:12 +0100
commit5fee9c698f5f1ebe6ef8bf07f5a75e04dab92681 (patch)
tree8c3adef346837c54fa2618e276708e4a8b3bea4d /lib
parent08d1d887e47ddbd61236c36193b3ef304e69fc0b (diff)
downloadlibs-lbm-5fee9c698f5f1ebe6ef8bf07f5a75e04dab92681.tar.gz
Add rar as dep and implement collision
Diffstat (limited to 'lib')
-rw-r--r--lib/core/c++/collision.hpp6
-rw-r--r--lib/core/c++/hlbm.hpp10
-rw-r--r--lib/core/c++/psm.hpp35
3 files changed, 47 insertions, 4 deletions
diff --git a/lib/core/c++/collision.hpp b/lib/core/c++/collision.hpp
index 6c39646..349833f 100644
--- a/lib/core/c++/collision.hpp
+++ b/lib/core/c++/collision.hpp
@@ -118,8 +118,8 @@ public:
auto& dfs_old = (is_even) ? cell.template get<"dfs_old">() : cell.template get<"dfs">();
// auto& dfs = (not is_even) ? cell.template get<"dfs_old">() : cell.template get<"dfs">();
- saw::data<T> rho;
- saw::data<sch::FixedArray<T,Descriptor::D>> vel;
+ saw::data<sch::Scalar<T>> rho;
+ saw::data<sch::Vector<T,Descriptor::D>> vel;
compute_rho_u<T,Descriptor>(dfs_old,rho,vel);
auto eq = equilibrium<T,Descriptor>(rho,vel);
@@ -131,7 +131,7 @@ public:
// saw::data<T> ci_min_u{0};
saw::data<T> ci_dot_u{0};
for(uint64_t d = 0u; d < Descriptor::D; ++d){
- ci_dot_u = ci_dot_u + vel.at({d}) * saw::data<T>{static_cast<typename saw::native_data_type<T>::type>(dfi::directions[i][d])};
+ ci_dot_u = ci_dot_u + vel.at({{d}}) * saw::data<T>{static_cast<typename saw::native_data_type<T>::type>(dfi::directions[i][d])};
}
saw::data<T> F_i{0};// = saw::data<T>{dfi::weights[i]} * (ci_dot_F * dfi::inv_cs2 + ci_dot_u * ci_dot_F * (dfi::inv_cs2 * dfi::inv_cs2));
diff --git a/lib/core/c++/hlbm.hpp b/lib/core/c++/hlbm.hpp
index 1c665ce..f8f0118 100644
--- a/lib/core/c++/hlbm.hpp
+++ b/lib/core/c++/hlbm.hpp
@@ -13,11 +13,19 @@ struct HLBM {};
/**
* HLBM collision operator for LBM
*/
-template<typename T, typename Descriptor>
+template<typename T, typename Descriptor, typename Encode>
class component<T, Descriptor, cmpt::HLBM> {
private:
public:
component() = default;
+
+ template<typename CellFieldSchema, typename MacroFieldSchema>
+ void apply(const saw::data<CellFieldSchema, Encode>& field, const saw::data<MacroFieldSchema,Encode>& macros, saw::data<sch::FixedArray<sch::UInt64,Descriptor::D>> index, saw::data<sch::UInt64> time_step) const {
+
+ bool is_even = ((time_step.get() % 2) == 0);
+
+
+ }
};
}
diff --git a/lib/core/c++/psm.hpp b/lib/core/c++/psm.hpp
new file mode 100644
index 0000000..8e151c3
--- /dev/null
+++ b/lib/core/c++/psm.hpp
@@ -0,0 +1,35 @@
+#pragma once
+
+#include "macroscopic.hpp"
+#include "component.hpp"
+#include "equilibrium.hpp"
+
+namespace kel {
+namespace lbm {
+namespace cmpt {
+struct PSM {};
+}
+
+/**
+ * HLBM collision operator for LBM
+ */
+template<typename T, typename Descriptor, typename Encode>
+class component<T, Descriptor, cmpt::PSM> {
+private:
+public:
+ component() = default;
+
+ template<typename CellFieldSchema, typename MacroFieldSchema>
+ void apply(const saw::data<CellFieldSchema, Encode>& field, const saw::data<MacroFieldSchema,Encode>& macros, saw::data<sch::FixedArray<sch::UInt64,Descriptor::D>> index, saw::data<sch::UInt64> time_step) const {
+
+ bool is_even = ((time_step.get() % 2) == 0);
+
+ auto& dfs_old_f = (is_even) ? field.template get<"dfs_old">() : field.template get<"dfs">();
+ auto& porous = field.template get<"porosity">();
+
+
+ }
+};
+
+}
+}