summaryrefslogtreecommitdiff
path: root/c++
diff options
context:
space:
mode:
Diffstat (limited to 'c++')
-rw-r--r--c++/collision.hpp2
-rw-r--r--c++/config.hpp3
-rw-r--r--c++/particle/geometry/circle.hpp43
-rw-r--r--c++/particle/particle.hpp18
4 files changed, 60 insertions, 6 deletions
diff --git a/c++/collision.hpp b/c++/collision.hpp
index ba35be1..9143862 100644
--- a/c++/collision.hpp
+++ b/c++/collision.hpp
@@ -40,6 +40,8 @@ public:
}
+
+
};
}
}
diff --git a/c++/config.hpp b/c++/config.hpp
index 64f7a0f..aefd833 100644
--- a/c++/config.hpp
+++ b/c++/config.hpp
@@ -16,7 +16,8 @@ template<typename T, typename Desc>
using LbmConfig = Struct<
Member<T, "delta_x">,
Member<T, "kinematic_viscosity">,
- Member<T, "delta_t">
+ Member<T, "delta_t">,
+ Member<FixedArray<UInt64,Desc::D>, "dims">
>;
}
diff --git a/c++/particle/geometry/circle.hpp b/c++/particle/geometry/circle.hpp
new file mode 100644
index 0000000..65b8966
--- /dev/null
+++ b/c++/particle/geometry/circle.hpp
@@ -0,0 +1,43 @@
+#pragma once
+
+namespace kel {
+namespace lbm {
+
+template<typename T>
+class particle_circle_geometry {
+private:
+ saw::data<T> radius_;
+public:
+ particle_circle_geometry(saw::data<T> radius__):
+ radius_{radius__}
+ {}
+
+ template<typename MT>
+ saw::data<sch::ParticleMask<MT,2>> generate_mask(uint64_t resolution, uint64_t boundary_nodes = 0) const {
+ saw::data<sch::ParticleMask<MT,2>> mask;
+
+ auto& grid = mask.template get<"grid">();
+
+ uint64_t size = resolution + 2*boundary_nodes;
+ grid = {{size,size}};
+
+ saw::data<T> radius_squared = radius_ * radius_;
+
+
+
+ for(uint64_t i = 0; i < size; ++i){
+ for(uint64_t j = 0; j < size; ++j){
+ if(i < boundary_nodes || j < boundary_nodes || i >= resolution+boundary_nodes || j >= resolution + boundary_nodes ){
+ grid.at({i,j}).set(0);
+ }else{
+
+ }
+ }
+ }
+
+ return mask;
+ }
+};
+
+}
+}
diff --git a/c++/particle/particle.hpp b/c++/particle/particle.hpp
index aeda17f..f893b9b 100644
--- a/c++/particle/particle.hpp
+++ b/c++/particle/particle.hpp
@@ -18,22 +18,30 @@ using ParticleRigidBody = Struct<
template<typename T, uint64_t D>
using ParticleMask = Struct<
- Member<Array<T,D>, "mask">
+ Member<Array<T,D>, "grid">
>;
template<typename T, uint64_t D>
using Particle = Struct<
- Member<ParticleRigidBody<T,D>, "rigid_body">
+ Member<ParticleRigidBody<T,D>, "rigid_body">,
+ Member<ParticleMask<Float32,D>, "mask">
>;
}
-template<typename T, uint64_t D>
+template<typename T, uint64_t D, typename Particle>
class particle_system {
private:
- saw::data<sch::Array<sch::Particle<T,D>>> particles_;
+ saw::data<sch::Array<Particle, D>> particles_;
public:
- void step(T time_step){
+ void step(T time_step_delta){
+ for(auto& iter : particles_){
+ verlet_step(time_step_delta);
+ }
+ }
+
+ template<typename LbmLattice>
+ void update_mask(saw::data<LbmLattice>& latt){
for(auto& iter : particles_){
}