#include #include #include #include namespace kel { namespace lbm { constexpr uint64_t dim_x = 256u; constexpr uint64_t dim_y = 16u; namespace sch { using namespace saw::schema; template using CellStruct = Struct< Member, "dfs">, Member, "dfs_old">, Member, Member, "velocity">, Member, "force"> >; using InfoChunk = Chunk; template using DfChunk = Chunk, 1u, dim_x, dim_y>; template using ChunkStruct = Struct< Member //,Member, "dfs"> >; } template saw::error_or setup_initial_conditions(saw::data>& fields){ auto& info_f = fields.template get<"info">(); // Set everything as walls iterator::apply( [&](auto& index){ info_f.at(index).set(2u); }, {}, info_f.get_dims(), {} ); // Fluid iterator::apply( [&](auto& index){ info_f.at(index).set(1u); }, {}, info_f.get_dims(), {{1u,1u}} ); // Inflow iterator::apply( [&](auto& index){ info_f.at(index).set(3u); }, {{0u,0u}}, {{1u, dim_y}}, {{0u,1u}} ); // Outflow iterator::apply( [&](auto& index){ info_f.at(index).set(4u); }, {{dim_x-1u,0u}}, {{dim_x, dim_y}}, {{0u,1u}} ); /* // auto& df_f = fields.template get<"dfs">(); saw::data rho{1}; saw::data> vel{}; auto eq = equilibrium(rho,vel); iterator::apply( [&](auto& index){ auto& df = df_f.at(index); df = eq; }, {},// 0-index df_f.get_dims() ); */ return saw::make_void(); } template saw::error_or step(saw::data,encode::Sycl>& fields, saw::data t_i, device& dev){ auto& q = dev.get_handle(); return saw::make_void(); } } } template saw::error_or lbm_main(int argc, char** argv){ using namespace kel::lbm; using dfi = df_info; auto eo_lbm_dir = output_directory(); if(eo_lbm_dir.is_error()){ return std::move(eo_lbm_dir.get_error()); } auto& lbm_dir = eo_lbm_dir.get_value(); auto out_dir = lbm_dir / "poiseulle_particles_2d_gpu"; converter conv { // delta_x {{1.0}}, // delta_t {{1.0}} }; // saw::data> meta{{dim_x,dim_y}}; saw::data> lbm_data{}; device dev; auto& sycl_q = dev.get_handle(); sycl_q.wait(); { auto eov = setup_initial_conditions(lbm_data); if(eov.is_error()){ return eov; } } { std::cout<<"Hey"<, encode::Sycl> lbm_sycl_data{sycl_q}; sycl_q.wait(); std::cout<<"Hey2"< i{0u}; i < saw::data{32ul}; ++i){ auto eov = step(lbm_sycl_data,i,dev); if(eov.is_error()){ return eov; } } } sycl_q.wait(); std::cout<<"Hey4"<::apply( [&](auto& index){ std::cout<().at(index).template cast_to().get()<<"\n"; }, {{0u,0u}}, {{dim_x, dim_y}} ); */ sycl_q.wait(); return saw::make_void(); } using FloatT = kel::lbm::sch::Float32; int main(int argc, char** argv){ auto eov = lbm_main(argc, argv); if(eov.is_error()){ auto& err = eov.get_error(); std::cerr<<"[Error] "< 0u){ std::cerr<<" - "<