diff options
| -rw-r--r-- | default.nix | 2 | ||||
| -rw-r--r-- | examples/poiseulle_particles_2d_ibm_gpu/sim.cpp | 2 | ||||
| -rw-r--r-- | lib/core/c++/particle/particle.hpp | 15 |
3 files changed, 11 insertions, 8 deletions
diff --git a/default.nix b/default.nix index c4fe8d1..52c7b5f 100644 --- a/default.nix +++ b/default.nix @@ -46,7 +46,7 @@ let src = builtins.fetchurl { url = "https://git.keldu.de/forstio-forstio/snapshot/master.tar.gz"; - sha256 = "sha256:026scvd9015blphbj49d0cv5wfrxh1szzdv3p212wzk4iw643akj"; + sha256 = "sha256:1ra0z2z0hbhrc372kbs6bs7qh00xc9xj3b40pvs0cjfdpvcfb538"; }; phases = [ "unpackPhase" "installPhase" ]; diff --git a/examples/poiseulle_particles_2d_ibm_gpu/sim.cpp b/examples/poiseulle_particles_2d_ibm_gpu/sim.cpp index 2e0aee6..77ecda2 100644 --- a/examples/poiseulle_particles_2d_ibm_gpu/sim.cpp +++ b/examples/poiseulle_particles_2d_ibm_gpu/sim.cpp @@ -289,7 +289,7 @@ saw::error_or<void> step( /// Calculate the shift from the mask saw::data<sch::Vector<T,Desc::D>> index_shift; for(uint64_t i = 0u; i < Desc::D; ++i){ - index_shift.at({{i}}) = index.at({i}).template cast_to<T>() - com.at({{i}}); + index_shift.at({{i}}) = index.at({i}).template cast_to<T>() - com.at({}).at({{i}}); } /// TODO 1. Calculate force pickup from neigbouring u_vel cells diff --git a/lib/core/c++/particle/particle.hpp b/lib/core/c++/particle/particle.hpp index 7249e6a..5449b88 100644 --- a/lib/core/c++/particle/particle.hpp +++ b/lib/core/c++/particle/particle.hpp @@ -55,8 +55,8 @@ template<typename T, uint64_t D, typename CollisionType = ParticleCollisionSpher using ParticleGroup = Struct< Member<Array<T,D>, "mask">, Member<FixedArray<Scalar<T>,1u>, "density">, - Member<Vector<T,D>, "center_of_mass">, - Member<Scalar<T>, "total_mass">, + Member<FixedArray<Vector<T,D>,1u>, "center_of_mass">, + Member<FixedArray<Scalar<T>,1u>, "total_mass">, Member<Array<Particle<T,D>>, "particles"> >; } @@ -71,7 +71,7 @@ saw::data<sch::ParticleGroup<T,D, sch::ParticleCollisionSpheroid<T,radius>>> cre auto& mask = part.template get<"mask">(); auto& density = part.template get<"density">().at({{0u}}); - auto& total_mass = part.template get<"total_mass">(); + auto& total_mass = part.template get<"total_mass">().at({{0u}}); // Paranoia total_mass.at({}) = {}; @@ -89,7 +89,7 @@ saw::data<sch::ParticleGroup<T,D, sch::ParticleCollisionSpheroid<T,radius>>> cre mask = {mask_dims}; - auto& com = part.template get<"center_of_mass">(); + auto& com = part.template get<"center_of_mass">().at({{0u}}); // Paranoia for(uint64_t i = 0u; i < D; ++i){ com.at({{i}}) = {}; @@ -115,13 +115,16 @@ saw::data<sch::ParticleGroup<T,D, sch::ParticleCollisionSpheroid<T,radius>>> cre auto& dpi = mask.at(index); for(uint64_t i = 0u; i < D; ++i){ - com.at({{i}}) = com.at({{i}}) + index.at({i}).template cast_to<T>() * dpi.at({}); + com.at({{i}}) = com.at({{i}}) + index.at({i}).template cast_to<T>() * dpi; } - total_mass = total_mass + dpi; + total_mass.at({}) = total_mass.at({}) + dpi; },{},mask_dims); + for(uint64_t i = 0u; i < D; ++i){ + com.at({{i}}) = com.at({{i}}) / total_mass.at({}); + } return part; } |
