#include #include #include #include namespace kel { namespace lbm { constexpr uint64_t dim_x = 16u; constexpr uint64_t dim_y = 4u; 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 >; } template saw::error_or setup_initial_conditions(saw::data>& fields){ auto& info_f = fields.get<"info">(); // Set everything as walls iterator::apply( [&](auto& index){ info_f.at(index).set(2u); }, {{0u,0u}}, {{dim_x, dim_y}}, {{0u,0u}} ); // Fluid iterator::apply( [&](auto& index){ info_f.at(index).set(1u); }, {{0u,0u}}, {{dim_x, dim_y}}, {{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}} ); return saw::make_void(); } template saw::error_or step(){ 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{}; acpp::sycl::queue sycl_q; sycl_q.wait(); { auto eov = setup_initial_conditions(lbm_data); if(eov.is_error()){ return eov; } } /* iterator::apply( [&](auto& index){ std::cout<().at(index).template cast_to().get()<<"\n"; }, {{0u,0u}}, {{dim_x, dim_y}} ); */ 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<<" - "<