summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorClaudius "keldu" Holeksa <mail@keldu.de>2025-12-10 17:08:14 +0100
committerClaudius "keldu" Holeksa <mail@keldu.de>2025-12-10 17:08:14 +0100
commit434607c33deab6ad91cfeb203050138c108958ed (patch)
treebd5a5ea6733b8f7a87756b1d75632b56dfecb853 /examples
parenteeb01452fe46fcb5efdc9c34b660305262097ca4 (diff)
downloadlibs-lbm-434607c33deab6ad91cfeb203050138c108958ed.tar.gz
Geometry for poiseulle setupdev
Diffstat (limited to 'examples')
-rw-r--r--examples/poiseulle_2d_gpu/poiseulle_2d_gpu.cpp84
1 files changed, 64 insertions, 20 deletions
diff --git a/examples/poiseulle_2d_gpu/poiseulle_2d_gpu.cpp b/examples/poiseulle_2d_gpu/poiseulle_2d_gpu.cpp
index d52af6a..56bcdaf 100644
--- a/examples/poiseulle_2d_gpu/poiseulle_2d_gpu.cpp
+++ b/examples/poiseulle_2d_gpu/poiseulle_2d_gpu.cpp
@@ -64,21 +64,45 @@ struct PressureBoundaryRestrictedVelocityTo {};
*
*/
-void set_geometry(
- std::vector<saw::data<sch::Float64>, SyclDeviceAlloc<sch::Float64>>& dfs,
- std::vector<saw::data<sch::Float64>, SyclDeviceAlloc<sch::Float64>>& dfs_old,
- std::vector<saw::data<sch::UInt8>, SyclDeviceAlloc<sch::UInt8>>& info,
+saw::error_or<void> set_geometry(
+ saw::data<sch::CellStruct>* cells,
const saw::data<sch::FixedArray<sch::UInt64,sch::D2Q9::D>>& meta,
acpp::sycl::queue& sycl_q
){
using namespace kel::lbm;
+ sycl_q.submit([&](acpp::sycl::handler& h){
+ h.parallel_for(acpp::sycl::range<2>{meta.at({0}).get(), meta.at({1}).get()},[=](acpp::sycl::id<2> idx){
+ size_t i = idx[0];
+ size_t j = idx[1];
+
+ size_t acc_id = j * meta.at({0u}).get() + i;
+ auto& c = cells[acc_id];
+ auto& info = c.template get<"info">()({0});
+
+ if(i >= 2u and j >= 2u and (i+2u) < meta.at({0u}).get() and (j+2u) < meta.at({1u}).get()){
+ // Fluid
+ info.set({2u});
+ }else if(((j+2u) == meta.at({1u}).get() or j == 1u) and (i>=1u and (i+1u)<meta.at({0u}).get() )){
+ // Wall
+ info.set({1u});
+ }else if((i==1u) and (j >= 1 and (j+1 < meta.at({1u}).get()) ) ){
+ // Left input
+ info.set({3u});
+ }else if((i+2u) == meta.at({0u}).get() and (j >= 1 and (j+1) < meta.at({1u}).get() )){
+ // Left output
+ info.set({4u});
+ }else {
+ info.set({0u});
+ }
+ });
+ });
+
+ return saw::make_void();
}
void set_initial_conditions(
- std::vector<saw::data<sch::Float64>, SyclDeviceAlloc<sch::Float64>>& dfs,
- std::vector<saw::data<sch::Float64>, SyclDeviceAlloc<sch::Float64>>& dfs_old,
- std::vector<saw::data<sch::UInt8>, SyclDeviceAlloc<sch::UInt8>>& info,
+ saw::data<sch::CellStruct>* cells,
const saw::data<sch::FixedArray<sch::UInt64,sch::D2Q9::D>>& meta,
acpp::sycl::queue& sycl_q
){
@@ -91,9 +115,7 @@ void set_initial_conditions(
}
void lbm_step(
- std::vector<saw::data<sch::Float64>, SyclDeviceAlloc<sch::Float64>>& dfs,
- std::vector<saw::data<sch::Float64>, SyclDeviceAlloc<sch::Float64>>& dfs_old,
- std::vector<saw::data<sch::UInt8>, SyclDeviceAlloc<sch::UInt8>>& info,
+ saw::data<sch::CellStruct>* cells,
const saw::data<sch::FixedArray<sch::UInt64,sch::D2Q9::D>>& meta,
uint64_t time_step,
acpp::sycl::queue& sycl_q
@@ -105,11 +127,12 @@ void lbm_step(
/**
* 1. Relaxation parameter \tau
*/
+ /*
component<sch::T, sch::D2Q9, cmpt::BGK> coll{0.5384};
component<sch::T, sch::D2Q9, cmpt::BounceBack> bb;
component<sch::T, sch::D2Q9, cmpt::PressureBoundaryRestrictedVelocityTo<true>> inlet{1.01 * dfi::cs2};
component<sch::T, sch::D2Q9, cmpt::PressureBoundaryRestrictedVelocityTo<false>> outlet{1.0 * dfi::cs2};
-
+ */
}
}
}
@@ -130,36 +153,57 @@ saw::error_or<void> kel_main(int argc, char** argv){
// Create Dir TODO
//
- lbm::converter<sch::Float64> conv {
+ lbm::converter<lbm::sch::Float64> conv {
// delta_x
{{1.0}},
// delta_t
{{1.0}}
};
- uint64_t x_d = 1024u;
- uint64_t y_d = 128u;
+ uint64_t x_d = 256u;
+ uint64_t y_d = 64u;
acpp::sycl::queue sycl_q;
- SyclHostAlloc<sch::CellStruct> sycl_host_alloc{sycl_q};
- SyclDeviceAlloc<sch::CellStruct> sycl_dev_alloc{sycl_q};
+ SyclHostAlloc<lbm::sch::CellStruct> sycl_host_alloc{sycl_q};
+ // SyclDeviceAlloc<lbm::sch::CellStruct> sycl_dev_alloc{sycl_q};
+
+ std::vector<saw::data<lbm::sch::CellStruct>, SyclHostAlloc<lbm::sch::CellStruct>> host_cells{x_d * y_d,sycl_host_alloc};
- std::vector<saw::data<sch::CellStruct>, SyclHostAlloc<sch::CellStruct>> cells{x_d * y_d,sycl_alloc};
- std::vector<saw::data<sch::CellStruct>, SyclDeviceAlloc<sch::CellStruct>> cells{x_d * y_d,sycl_alloc};
+ saw::data<lbm::sch::CellStruct>* cells = acpp::sycl::malloc_device<saw::data<lbm::sch::CellStruct>>(x_d * y_d,sycl_q);
{
- auto eov = set_geometry(cells);
+ auto eov = lbm::set_geometry(cells,{{x_d,y_d}},sycl_q);
if(eov.is_error()){
return eov;
}
}
+ sycl_q.wait();
+ sycl_q.memcpy(&host_cells[0u], cells, x_d * y_d * sizeof(saw::data<lbm::sch::CellStruct>) );
+ sycl_q.wait();
+ acpp::sycl::free(cells, sycl_q);
+ sycl_q.wait();
+
+ std::string vtk_f_name{"tmp/poiseulle_2d_gpu_"};
+ vtk_f_name += std::to_string(0u) + ".vtk";
+ // write_vtk_file(vtk_f_name,host_cells);
+
+ for(uint64_t i = 0u; i < x_d; ++i){
+ for(uint64_t j = 0u; j < y_d; ++j){
+
+ size_t acc_id = j * x_d + i;
+
+ std::cout<<static_cast<uint64_t>(host_cells.at(acc_id).template get<"info">()({0u}).get())<<" ";
+ }
+ std::cout<<"\n";
+ }
+ std::cout<<std::endl;
return saw::make_void();
}
int main(int argc, char** argv){
- auto eov = kel_main(argc, argv);
+ auto eov = kel_main<kel::lbm::sch::T,kel::lbm::sch::D2Q9>(argc, argv);
if(eov.is_error()){
auto& err = eov.get_error();
std::cerr<<"[Error] "<<err.get_category();