summaryrefslogtreecommitdiff
path: root/examples/settling_cubes_2d_ibm_gpu
diff options
context:
space:
mode:
Diffstat (limited to 'examples/settling_cubes_2d_ibm_gpu')
-rw-r--r--examples/settling_cubes_2d_ibm_gpu/sim.cpp50
1 files changed, 28 insertions, 22 deletions
diff --git a/examples/settling_cubes_2d_ibm_gpu/sim.cpp b/examples/settling_cubes_2d_ibm_gpu/sim.cpp
index 4501a54..3281239 100644
--- a/examples/settling_cubes_2d_ibm_gpu/sim.cpp
+++ b/examples/settling_cubes_2d_ibm_gpu/sim.cpp
@@ -49,17 +49,19 @@ using MacroStruct = Struct<
Member<VectorChunk<T,Desc>, "force">
>;
-//template<typename T, typename Desc>
-//using ParticleArray = Array<
-// Particle<T,Desc::D>
-//>;
+template<typename T, typename Desc>
+using ParticleGroups = Tuple<
+ ParticleGroup<
+ T,Desc::D,sch::ParticleCollisionSpheroid<T>
+ >
+>;
}
template<typename T, typename Desc>
saw::error_or<void> setup_initial_conditions(
saw::data<sch::ChunkStruct<T,Desc>>& fields,
saw::data<sch::MacroStruct<T,Desc>>& macros,
- saw::data<sch::FixedArray<sch::Particle<T,Desc::D>, particle_amount>>& particles
+ saw::data<sch::ParticleGroups<T,Desc>>& particles
){
auto& info_f = fields.template get<"info">();
// Set everything as walls
@@ -99,6 +101,19 @@ saw::error_or<void> setup_initial_conditions(
df_f.get_dims()
);
+ // Particles
+ {
+ saw::data<sch::Scalar<T>> rad_p, dense_p;
+ rad_p.at({}).set(2.0);
+ dense_p.at({}).set(1);
+ auto& spheroid_group = particles.template get<0u>();
+ spheroid_group = create_spheroid_particle_group<T,Desc::D>(
+ rad_p,
+ dense_p,
+ {64u}
+ );
+ }
+
return saw::make_void();
}
@@ -106,7 +121,6 @@ template<typename T, typename Desc>
saw::error_or<void> step(
saw::data<sch::Ptr<sch::ChunkStruct<T,Desc>>,encode::Sycl<saw::encode::Native>>& fields,
saw::data<sch::Ptr<sch::MacroStruct<T,Desc>>,encode::Sycl<saw::encode::Native>>& macros,
- saw::data<sch::FixedArray<sch::Particle<T,Desc::D>, particle_amount>>& particles,
saw::data<sch::UInt64> t_i,
device& dev
){
@@ -114,15 +128,13 @@ saw::error_or<void> step(
auto& info_f = fields.template get<"info">();
{
- auto& p = particles.at({{0u}});
-
- auto& p_coll = p.template get<"collision">();
- auto& p_rad = p_coll.template get<"radius">();
}
// auto coll_ev =
q.submit([&](acpp::sycl::handler& h){
+ saw::data<sch::Vector<T,Desc::D>> force;
+ force.at({{1}}).set(-1.0);
// Need nicer things to handle the flow. I see improvement here
component<T,Desc,cmpt::BGKGuo, encode::Sycl<saw::encode::Native>> collision{0.8};
component<T,Desc,cmpt::BounceBack,encode::Sycl<saw::encode::Native>> bb;
@@ -148,9 +160,10 @@ saw::error_or<void> step(
break;
}
});
+
+
}).wait();
-
// Step
/*
q.submit([&](acpp::sycl::handler& h){
@@ -197,8 +210,8 @@ saw::error_or<void> lbm_main(int argc, char** argv){
// saw::data<sch::FixedArray<sch::UInt64,Desc::D>> meta{{dim_x,dim_y}};
auto lbm_data_ptr = saw::heap<saw::data<sch::ChunkStruct<T,Desc>>>();
auto lbm_macro_data_ptr = saw::heap<saw::data<sch::MacroStruct<T,Desc>>>();
- auto lbm_particle_data_ptr = saw::heap<saw::data<sch::FixedArray<sch::Particle<T,Desc::D>, particle_amount>>>();
-
+ auto lbm_particles_data = saw::data<sch::ParticleGroups<T,Desc>>();
+
std::cout<<"Estimated Bytes: "<<memory_estimate<sch::ChunkStruct<T,Desc>,sch::MacroStruct<T,Desc>>().get()<<std::endl;
auto eo_aio = saw::setup_async_io();
@@ -223,7 +236,7 @@ saw::error_or<void> lbm_main(int argc, char** argv){
sycl_q.wait();
{
- auto eov = setup_initial_conditions<T,Desc>(*lbm_data_ptr,*lbm_macro_data_ptr,*lbm_particle_data_ptr);
+ auto eov = setup_initial_conditions<T,Desc>(*lbm_data_ptr,*lbm_macro_data_ptr,lbm_particles_data);
if(eov.is_error()){
return eov;
}
@@ -237,7 +250,6 @@ saw::error_or<void> lbm_main(int argc, char** argv){
saw::data<sch::ChunkStruct<T,Desc>, encode::Sycl<saw::encode::Native>> lbm_sycl_data{sycl_q};
saw::data<sch::MacroStruct<T,Desc>, encode::Sycl<saw::encode::Native>> lbm_sycl_macro_data{sycl_q};
- saw::data<sch::FixedArray<sch::Particle<T,Desc::D>, particle_amount>, encode::Sycl<saw::encode::Native>> lbm_sycl_particle_data{sycl_q};
sycl_q.wait();
auto lsd_view = make_chunk_struct_view(lbm_sycl_data);
@@ -254,12 +266,6 @@ saw::error_or<void> lbm_main(int argc, char** argv){
return eov;
}
}
- {
- auto eov = dev.copy_to_device(*lbm_particle_data_ptr,lbm_sycl_particle_data);
- if(eov.is_error()){
- return eov;
- }
- }
sycl_q.wait();
saw::data<sch::UInt64> time_steps{16u*4096ul};
@@ -268,7 +274,7 @@ saw::error_or<void> lbm_main(int argc, char** argv){
for(saw::data<sch::UInt64> i{0u}; i < time_steps and krun; ++i){
// BC + Collision
{
- auto eov = step<T,Desc>(lsd_view,lsdm_view,*lbm_particle_data_ptr,i,dev);
+ auto eov = step<T,Desc>(lsd_view,lsdm_view,i,dev);
if(eov.is_error()){
return eov;
}