diff options
author | Claudius "keldu" Holeksa <mail@keldu.de> | 2025-06-24 16:49:31 +0200 |
---|---|---|
committer | Claudius "keldu" Holeksa <mail@keldu.de> | 2025-06-24 16:49:31 +0200 |
commit | 573bfdc0bbffdb1d68259bc348e36d57471d56be (patch) | |
tree | afd9dd629144623998479febcdda767698839620 | |
parent | ccd27ef48151c3ab24943e6f0bafde6991f5a476 (diff) |
Broken cavity2d. why?
-rw-r--r-- | c++/collision.hpp | 10 | ||||
-rw-r--r-- | examples/cavity_2d.cpp | 22 | ||||
-rw-r--r-- | examples/poiseulle_2d.cpp | 4 |
3 files changed, 22 insertions, 14 deletions
diff --git a/c++/collision.hpp b/c++/collision.hpp index 7ca7c9f..128a499 100644 --- a/c++/collision.hpp +++ b/c++/collision.hpp @@ -40,18 +40,18 @@ public: template<typename CellFieldSchema> void apply(saw::data<CellFieldSchema>& field, saw::data<sch::FixedArray<sch::UInt64,Descriptor::D>> index, uint64_t time_step){ bool is_even = ((time_step % 2) == 0); - auto& cell = field.at(index); + auto& cell = field(index); auto& dfs_old = is_even ? cell.template get<"dfs_old">() : cell.template get<"dfs">(); auto& dfs = (!is_even) ? cell.template get<"dfs_old">() : cell.template get<"dfs">(); - typename saw::native_data_type<T>::type rho; - std::array<typename saw::native_data_type<T>::type, Descriptor::D> vel; + saw::data<T> rho; + saw::data<sch::FixedArray<T,Descriptor::D>> vel; compute_rho_u<T,Descriptor>(dfs,rho,vel); - auto eq = equilibrium<Descriptor>(rho,vel); + auto eq = equilibrium<T,Descriptor>(rho,vel); for(uint64_t i = 0u; i < Descriptor::Q; ++i){ - dfs({i}).set(dfs({i}).get() + (1.0 / relaxation_) * (eq[i] - dfs({i}).get())); + dfs({i}).set(dfs({i}).get() + (1.0 / relaxation_) * (eq.at(i).get() - dfs({i}).get())); } } diff --git a/examples/cavity_2d.cpp b/examples/cavity_2d.cpp index 5683d85..bb6c6d8 100644 --- a/examples/cavity_2d.cpp +++ b/examples/cavity_2d.cpp @@ -237,7 +237,8 @@ void set_initial_conditions(saw::data<kel::lbm::sch::CavityFieldD2Q9>& latt){ void lbm_step( saw::data<kel::lbm::sch::CavityFieldD2Q9>& latt, - bool even_step + bool even_step, + uint64_t time_step ){ using namespace kel::lbm; using dfi = df_info<sch::T,sch::D2Q9>; @@ -251,6 +252,20 @@ void lbm_step( component<sch::T, sch::D2Q9, cmpt::MovingWall> bb_lid; bb_lid.lid_vel = {0.1,0.0}; + auto dim = latt.meta(); + + for(saw::data<sch::UInt64> i{0u}; i < dim.at(0u); ++i){ + for(saw::data<sch::UInt64> j{0u}; j < dim.at(1u); ++j ){ + auto& cell = latt({{i,j}}); + auto& info = cell.template get<"info">(); + + switch(info({0u}).get()){ + case 1u: { + coll.apply(latt, {{i,j}}, time_step); + } break; + } + } + } // Collide apply_for_cells([&](auto& cell, std::size_t i, std::size_t j){ auto& df = even_step ? cell.template get<"dfs_old">() : cell.template get<"dfs">(); @@ -258,9 +273,6 @@ void lbm_step( auto info_val = info({0u}).get(); switch(info_val){ - case 1u: - coll.apply(df); - break; case 2u: // bb.apply(df); bb_lid.apply(df); @@ -460,7 +472,7 @@ int main(){ ++file_no; } - lbm_step(lattice, even_step); + lbm_step(lattice, even_step, step); even_step = not even_step; } diff --git a/examples/poiseulle_2d.cpp b/examples/poiseulle_2d.cpp index 4ecf500..f5a7981 100644 --- a/examples/poiseulle_2d.cpp +++ b/examples/poiseulle_2d.cpp @@ -72,13 +72,9 @@ int main(int argc, char** argv){ print_lbm_meta<sch::Float64,sch::Descriptor<2,9>>(conv, {conf.template get<"kinematic_viscosity">()}); - saw::data<sch::FixedArray<sch::UInt64,sch::D2Q9::D>> dim{{128, 128}}; saw::data<sch::CavityFieldD2Q9, saw::encode::Native> lattice{dim}; - - - return 0; } |