diff options
| author | Claudius "keldu" Holeksa <mail@keldu.de> | 2026-02-11 17:28:23 +0100 |
|---|---|---|
| committer | Claudius "keldu" Holeksa <mail@keldu.de> | 2026-02-11 17:28:23 +0100 |
| commit | 3e7f672b35f4a2196be8f27d35ef527eec79179d (patch) | |
| tree | 58d09a5937c4d0d471bbd17a1b07f52e4d5cf410 | |
| parent | 595cdfd51594af7cee4258a1ed92b06c6bf0171d (diff) | |
| download | libs-lbm-3e7f672b35f4a2196be8f27d35ef527eec79179d.tar.gz | |
Too lazy to ammend last commit. Moving to particle based HLBM and
others. Also implemented rotational movement properly now
| -rw-r--r-- | default.nix | 2 | ||||
| -rw-r--r-- | examples/poiseulle_particles_2d_gpu/sim.cpp | 83 | ||||
| -rw-r--r-- | shell.nix | 18 |
3 files changed, 78 insertions, 25 deletions
diff --git a/default.nix b/default.nix index 7c19841..706c48f 100644 --- a/default.nix +++ b/default.nix @@ -68,7 +68,7 @@ let src = builtins.fetchurl { url = "https://git.keldu.de/forstio-forstio/snapshot/master.tar.gz"; - sha256 = "e91c18fef798dd7b3afbd1615c2e320b90d74aa2d7ef726801a76e3f7f77ae81"; + sha256 = "sha256:10dffxzkyvm705l75vypl95dg40b68p5qqfizcx7ppcqyzz1h779"; }; phases = [ "unpackPhase" "installPhase" ]; diff --git a/examples/poiseulle_particles_2d_gpu/sim.cpp b/examples/poiseulle_particles_2d_gpu/sim.cpp index 0ad1b61..691ec93 100644 --- a/examples/poiseulle_particles_2d_gpu/sim.cpp +++ b/examples/poiseulle_particles_2d_gpu/sim.cpp @@ -1,5 +1,6 @@ #include <kel/lbm/sycl/lbm.hpp> #include <kel/lbm/lbm.hpp> +#include <kel/lbm/particle.hpp> #include <forstio/io/io.hpp> #include <forstio/remote/filesystem/easy.hpp> @@ -9,8 +10,9 @@ namespace kel { namespace lbm { -constexpr uint64_t dim_x = 1024u; -constexpr uint64_t dim_y = 512u; +constexpr uint64_t dim_x = 1024ul; +constexpr uint64_t dim_y = 512ul; +constexpr uint64_t particle_size = 128ul; namespace sch { using namespace saw::schema; @@ -21,10 +23,15 @@ template<typename T, typename Desc> using DfChunk = Chunk<FixedArray<T,Desc::Q>, 1u, dim_x, dim_y>; template<typename T, typename Desc> +using ScalarChunk = Chunk<Scalar<T>, 0u, dim_x, dim_y>; + +template<typename T, typename Desc> using ChunkStruct = Struct< Member<InfoChunk, "info">, Member<DfChunk<T,Desc>, "dfs">, - Member<DfChunk<T,Desc>, "dfs_old"> + Member<DfChunk<T,Desc>, "dfs_old">, + Member<ScalarChunk<T,Desc>, "particle_N">, + Member<ScalarChunk<T,Desc>, "particle_D"> >; template<typename T, typename Desc> @@ -36,17 +43,21 @@ using RhoChunk = Chunk<Scalar<T>, 0u, dim_x, dim_y>; template<typename T, typename Desc> using MacroStruct = Struct< Member<VelChunk<T,Desc>, "velocity">, - Member<RhoChunk<T>, "density"> + Member<RhoChunk<T>, "density">, + Member<ScalarChunk<T,Desc>, "porosity"> >; -// template<typename T, typename Desc> -// using Particles = Particle< +//template<typename T, typename Desc> +//using ParticleArray = Array< +// Particle<T,Desc::D> +//>; } 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::MacroStruct<T,Desc>>& macros, + saw::data<sch::FixedArray<sch::Particle<T,Desc::D>, particle_size>>& particles ){ auto& info_f = fields.template get<"info">(); // Set everything as walls @@ -122,6 +133,10 @@ saw::error_or<void> setup_initial_conditions( {{1u,1u}} ); + for(saw::data<sch::UInt64> i{0u}; i < saw::data<sch::UInt64>{particle_size}; ++i){ + auto& part = particles.at(i); + } + return saw::make_void(); } @@ -138,7 +153,7 @@ saw::error_or<void> step( // auto coll_ev = q.submit([&](acpp::sycl::handler& h){ // Need nicer things to handle the flow. I see improvement here - component<T,Desc,cmpt::BGK,encode::Sycl<saw::encode::Native>> collision{0.6}; + component<T,Desc,cmpt::HLBM,encode::Sycl<saw::encode::Native>> collision{0.6}; component<T,Desc,cmpt::BounceBack,encode::Sycl<saw::encode::Native>> bb; saw::data<sch::Scalar<T>> rho_b; @@ -232,8 +247,17 @@ saw::error_or<void> lbm_main(int argc, char** argv){ 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"; + { + std::error_code ec; + std::filesystem::create_directories(out_dir,ec); + if(ec != std::errc{}){ + return saw::make_error<saw::err::critical>("Could not create output directory"); + } + } + converter<sch::Float64> conv { // delta_x {{1.0}}, @@ -244,6 +268,7 @@ 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_size>>>(); auto eo_aio = saw::setup_async_io(); if(eo_aio.is_error()){ @@ -267,7 +292,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); + auto eov = setup_initial_conditions<T,Desc>(*lbm_data_ptr,*lbm_macro_data_ptr,*lbm_particle_data_ptr); if(eov.is_error()){ return eov; } @@ -275,7 +300,9 @@ 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_size>, encode::Sycl<saw::encode::Native>> lbm_sycl_particle_data{sycl_q}; sycl_q.wait(); + auto lsd_view = make_chunk_struct_view(lbm_sycl_data); auto lsdm_view = make_chunk_struct_view(lbm_sycl_macro_data); { @@ -290,33 +317,41 @@ 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{4096ul}; + saw::data<sch::UInt64> time_steps{particle_size}; for(saw::data<sch::UInt64> i{0u}; i < time_steps and krun; ++i){ { - std::string file_name = "tmp/t_"; - file_name += std::to_string(i.get()); - file_name += ".vtk"; - { - auto eov = write_vtk_file(file_name, *lbm_macro_data_ptr); + std::string file_name = "t_"; + file_name += std::to_string(i.get()); + file_name += ".vtk"; + auto eov = write_vtk_file(out_dir/file_name, *lbm_macro_data_ptr); if(eov.is_error()){ return eov; } } - { - auto eov = saw::easy::encode_and_write_file<sch::ChunkStruct<T,Desc>,saw::encode::KelSimple>(file_name, *lbm_macro_data_ptr); + /*{ + std::string file_name = "p_"; + file_name += std::to_string(i.get()); + file_name += ".json"; + auto eov = saw::easy::encode_and_write_file<sch::FixedArray<sch::Particle<T,Desc::D>,particle_size>,saw::encode::Json>(out_dir, *lbm_particle_data_ptr); if(eov.is_error()){ return eov; } - } + }*/ } { - std::string file_name = "tmp/df_"; + std::string file_name = "df_"; file_name += std::to_string(i.get()); file_name += ".vtk"; - auto eov = write_vtk_file(file_name, *lbm_data_ptr); + auto eov = write_vtk_file(out_dir/file_name, *lbm_data_ptr); if(eov.is_error()){ return eov; } @@ -348,19 +383,19 @@ saw::error_or<void> lbm_main(int argc, char** argv){ } sycl_q.wait(); { - std::string file_name = "tmp/t_"; + std::string file_name = "t_"; file_name += std::to_string(time_steps.get()); file_name += ".vtk"; - auto eov = write_vtk_file(file_name, *lbm_macro_data_ptr); + auto eov = write_vtk_file(out_dir/file_name, *lbm_macro_data_ptr); if(eov.is_error()){ return eov; } } { - std::string file_name = "tmp/df_"; + std::string file_name = "df_"; file_name += std::to_string(time_steps.get()); file_name += ".vtk"; - auto eov = write_vtk_file(file_name, *lbm_data_ptr); + auto eov = write_vtk_file(out_dir/file_name, *lbm_data_ptr); if(eov.is_error()){ return eov; } diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..0c22e94 --- /dev/null +++ b/shell.nix @@ -0,0 +1,18 @@ +{ pkgs ? import <nixpkgs> {} +, ... +}: + +pkgs.mkShell { + buildInputs = [ + pkgs.scons + pkgs.clang + pkgs.clang-tools + ]; + + shellHook = '' + if [ ! -f compile_commands.json ]; then + printf "Generating compile_commands.json...\n" + scons cdb + fi + ''; +} |
