From 1e2e1755beb592f86f61337524121b98063a0d89 Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Tue, 26 May 2026 19:19:47 +0200 Subject: Dangling --- lib/core/c++/particle/particle.hpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'lib/core/c++/particle') diff --git a/lib/core/c++/particle/particle.hpp b/lib/core/c++/particle/particle.hpp index 938131b..7249e6a 100644 --- a/lib/core/c++/particle/particle.hpp +++ b/lib/core/c++/particle/particle.hpp @@ -71,6 +71,10 @@ saw::data>> cre auto& mask = part.template get<"mask">(); auto& density = part.template get<"density">().at({{0u}}); + auto& total_mass = part.template get<"total_mass">(); + // Paranoia + total_mass.at({}) = {}; + static_assert(D >= 1u and D <= 3u, "Dimensions only supported for Dim 1,2 & 3."); density = density_p; @@ -86,6 +90,7 @@ saw::data>> cre mask = {mask_dims}; auto& com = part.template get<"center_of_mass">(); + // Paranoia for(uint64_t i = 0u; i < D; ++i){ com.at({{i}}) = {}; } @@ -97,12 +102,24 @@ saw::data>> cre saw::data> center; for(uint64_t i = 0u; i < D; ++i){ - com.at({{i}}) = ; + center.at({{i}}).set(radius); } iterator::apply([&](const auto& index){ ++ele_ctr; + saw::data> offset_index = saw::math::vectorize_data(index).template cast_to() - center; + + + + 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() * dpi.at({}); + } + + total_mass = total_mass + dpi; + },{},mask_dims); return part; -- cgit v1.2.3 From 960a3ef31095af11c7c764a1bcdcb4b424c529b8 Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Tue, 26 May 2026 22:24:09 +0200 Subject: Dangling changes. Fixed compilation issues which hurt my brain --- lib/core/c++/particle/particle.hpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'lib/core/c++/particle') 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, "mask">, Member,1u>, "density">, - Member, "center_of_mass">, - Member, "total_mass">, + Member,1u>, "center_of_mass">, + Member,1u>, "total_mass">, Member>, "particles"> >; } @@ -71,7 +71,7 @@ saw::data>> 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>> 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>> 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() * dpi.at({}); + com.at({{i}}) = com.at({{i}}) + index.at({i}).template cast_to() * 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; } -- cgit v1.2.3 From 346d979dcdea3e3f37d3ad55680b4f0469d7220c Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Wed, 27 May 2026 15:58:45 +0200 Subject: Dangliung --- lib/core/c++/particle/particle.hpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'lib/core/c++/particle') diff --git a/lib/core/c++/particle/particle.hpp b/lib/core/c++/particle/particle.hpp index 5449b88..37bdc28 100644 --- a/lib/core/c++/particle/particle.hpp +++ b/lib/core/c++/particle/particle.hpp @@ -51,22 +51,25 @@ using Particle = Struct< // Member, "mask">, >; -template> +template> using ParticleGroup = Struct< Member, "mask">, + Member,1u>, "mask_step">, Member,1u>, "density">, Member,1u>, "center_of_mass">, Member,1u>, "total_mass">, - Member>, "particles"> + Member,1u>, "particles"> >; } + + template::type radius> saw::data>> create_spheroid_particle_group( saw::data> density_p, const saw::data& mask_resolution ){ - saw::data>> part; + saw::data>> part; auto& mask = part.template get<"mask">(); auto& density = part.template get<"density">().at({{0u}}); @@ -82,13 +85,14 @@ saw::data>> cre for(uint64_t i = 0u; i < D; ++i){ mask_dims.at({i}) = mask_resolution; } - saw::data> mask_step; saw::data rad_d{radius}; saw::data dia_d = rad_d * 2; - mask_step.at({}) = dia_d / mask_resolution.template cast_to(); mask = {mask_dims}; + auto& mask_step = part.template get<"mask_step">().at({{0u}}); + mask_step.at({}) = dia_d.at({}) / mask_resolution.template cast_to(); + auto& com = part.template get<"center_of_mass">().at({{0u}}); // Paranoia for(uint64_t i = 0u; i < D; ++i){ @@ -110,8 +114,6 @@ saw::data>> cre saw::data> offset_index = saw::math::vectorize_data(index).template cast_to() - center; - - auto& dpi = mask.at(index); for(uint64_t i = 0u; i < D; ++i){ -- cgit v1.2.3 From 2dd7c95a111a930e8e23140ab3fec074e7de4c8c Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Fri, 29 May 2026 21:56:48 +0200 Subject: Dangling --- lib/core/c++/particle/particle.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/core/c++/particle') diff --git a/lib/core/c++/particle/particle.hpp b/lib/core/c++/particle/particle.hpp index 37bdc28..fec2eca 100644 --- a/lib/core/c++/particle/particle.hpp +++ b/lib/core/c++/particle/particle.hpp @@ -91,7 +91,7 @@ saw::data>> cre mask = {mask_dims}; auto& mask_step = part.template get<"mask_step">().at({{0u}}); - mask_step.at({}) = dia_d.at({}) / mask_resolution.template cast_to(); + mask_step.at({}) = dia_d / mask_resolution.template cast_to(); auto& com = part.template get<"center_of_mass">().at({{0u}}); // Paranoia -- cgit v1.2.3 From da25b3a1e7776a810d3bda5af3f363cf3e986cae Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Mon, 1 Jun 2026 20:36:51 +0200 Subject: Helping getting porosity checks against particles --- lib/core/c++/particle/porosity.hpp | 54 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 lib/core/c++/particle/porosity.hpp (limited to 'lib/core/c++/particle') diff --git a/lib/core/c++/particle/porosity.hpp b/lib/core/c++/particle/porosity.hpp new file mode 100644 index 0000000..aa1ce5b --- /dev/null +++ b/lib/core/c++/particle/porosity.hpp @@ -0,0 +1,54 @@ +#pragma once + +#include "particle.hpp" +#include "../math/n_closest.hpp" + +namespace kel { +namespace lbm { +template +class particle_porosity { +public: + saw::data> calculate(const saw::data<>& part_group, uint64_t p_i, const saw::data>& lbm_pos){ + auto& mask = part_group.template get<"mask">(); + + auto& particles = part_group.template get<"particles">(); + auto& part_i = particles.at({p_i}); + + auto& part_i_rb = part_i.template get<"rigid_body">(); + auto& pirb = part_i_rb.template get<"position">(); + + auto& dist = lbm_pos = lbm_pos - pirb; + + // index 0 is at + + return {}; + } +}; + + +template::type radius> +class particle_porosity> final { +public: + saw::data> calculate(const saw::data&, uint64_t i, const saw::data>& lbm_pos){ + saw::data> por; + por.at({}); + + saw::data> dps_2; + for(uint64_t i{0u}; i < D; ++i){ + auto& dps_i = lbm_pos.at({{i}}); + dps_2.at({}) = dps_i * dps_i; + } + + saw::data> rad_2; + rad_2.at({}).set(radius*radius); + + saw::data> inside; + if(dps_2.at({}).get() < rad_2.at({}).get()){ + inside.at({}).set(1); + } + return inside; + } +}; + +} +} -- cgit v1.2.3