diff options
Diffstat (limited to 'modules/core/c++')
| -rw-r--r-- | modules/core/c++/hlbm.hpp | 2 | ||||
| -rw-r--r-- | modules/core/c++/particle/aabb.hpp | 14 | ||||
| -rw-r--r-- | modules/core/c++/particle/particle.hpp | 6 | ||||
| -rw-r--r-- | modules/core/c++/particle/particle_opa.hpp | 2 | ||||
| -rw-r--r-- | modules/core/c++/particle/porosity.hpp | 12 | ||||
| -rw-r--r-- | modules/core/c++/particle/schema.hpp | 4 |
6 files changed, 22 insertions, 18 deletions
diff --git a/modules/core/c++/hlbm.hpp b/modules/core/c++/hlbm.hpp index 9a89697..9ddc6c6 100644 --- a/modules/core/c++/hlbm.hpp +++ b/modules/core/c++/hlbm.hpp @@ -125,7 +125,7 @@ public: auto& mvel = macros.template get<"velocity">(); { auto& parts = part_spheroid_group.template get<"particles">(); - auto parts_size = parts.meta().at({0u}); + auto parts_size = parts.dims().at({0u}); auto& pi = parts.at(index); auto& pirb = pi.template get<"rigid_body">(); diff --git a/modules/core/c++/particle/aabb.hpp b/modules/core/c++/particle/aabb.hpp index 18426d5..a838401 100644 --- a/modules/core/c++/particle/aabb.hpp +++ b/modules/core/c++/particle/aabb.hpp @@ -10,12 +10,12 @@ class particle_aabb final { static_assert(saw::always_false<PGroup>, "Not supported"); }; -template<typename T, uint64_t D> +template<typename T, uint64_t D, uint64_t PC> class particle_aabb< - sch::ParticleGroup<T,D,coll::Spheroid<T>> + sch::ParticleGroup<T,D,PC,coll::Spheroid<T>> > final { public: - using Schema = sch::ParticleGroup<T,D,coll::Spheroid<T>>; + using Schema = sch::ParticleGroup<T,D,PC,coll::Spheroid<T>>; using AABB = sch::Struct< sch::Member<sch::FixedArray<sch::UInt64,D>,"a">, @@ -23,7 +23,11 @@ public: >; public: template<typename Encode> - static constexpr saw::data<AABB> calculate(const saw::data<Schema,Encode>& p_grp, const saw::data<sch::FixedArray<sch::UInt64,1u>>& i, const saw::data<sch::FixedArray<sch::UInt64,D>>& meta){ + static constexpr saw::error_or<saw::data<AABB>> calculate(const saw::data<Schema,Encode>& p_grp, const saw::data<sch::FixedArray<sch::UInt64,1u>>& i, const saw::data<sch::FixedArray<sch::UInt64,D>>& meta){ + static_assert(PC > 0u, "Can't calculate from no particles"); + if(not (i.at({0u}).get() < PC) ){ + return saw::make_error<saw::err::critical>("Too large i in particle_aabb"); + } saw::data<AABB> aabb; auto& parts = p_grp.template get<"particles">(); @@ -35,7 +39,7 @@ public: auto& a = aabb.template get<"a">(); auto& b = aabb.template get<"b">(); - const saw::data<sch::Scalar<T>>& rad_d = p_grp.template get<"collision">().at({0u}).template get<"radius">(); + const saw::data<sch::Scalar<T>>& rad_d = p_grp.template get<"collision">().at(i).template get<"radius">(); saw::data<sch::Vector<T,D>> lower; saw::data<sch::Vector<T,D>> upper; diff --git a/modules/core/c++/particle/particle.hpp b/modules/core/c++/particle/particle.hpp index 8e75e5a..3c3630a 100644 --- a/modules/core/c++/particle/particle.hpp +++ b/modules/core/c++/particle/particle.hpp @@ -13,13 +13,13 @@ namespace kel { namespace lbm { -template<typename T, uint64_t D> -saw::data<sch::ParticleGroup<T,D, coll::Spheroid<T>>> create_spheroid_particle_group( +template<typename T, uint64_t D,uint64_t PartAmount> +saw::data<sch::ParticleGroup<T, D, PartAmount, coll::Spheroid<T>>> create_spheroid_particle_group( saw::data<sch::Scalar<T>> radius_p, saw::data<sch::Scalar<T>> density_p, const saw::data<sch::UInt64>& mask_resolution ){ - saw::data<sch::ParticleGroup<T,D,coll::Spheroid<T>>> part; + saw::data<sch::ParticleGroup<T,D,PartAmount,coll::Spheroid<T>>> part; auto& rad_s = part.template get<"collision">().at({0u}).template get<"radius">(); rad_s = radius_p; diff --git a/modules/core/c++/particle/particle_opa.hpp b/modules/core/c++/particle/particle_opa.hpp index 30a8ade..ce1ecb7 100644 --- a/modules/core/c++/particle/particle_opa.hpp +++ b/modules/core/c++/particle/particle_opa.hpp @@ -41,7 +41,7 @@ public: // Write out value auto diff = pos_ind.template cast_to<T>() - pos_; auto diff_dot = saw::math::dot(diff,diff); - porous = particle_porosity<T,Descriptor::D,por::ParticleSpheroid<T>>::calculate(diff, rad_, eps_); + porous = particle_porosity<T,Descriptor::D,1u,por::ParticleSpheroid<T>>::calculate(diff, rad_, eps_); } }; } diff --git a/modules/core/c++/particle/porosity.hpp b/modules/core/c++/particle/porosity.hpp index 2f39d2e..353cd58 100644 --- a/modules/core/c++/particle/porosity.hpp +++ b/modules/core/c++/particle/porosity.hpp @@ -11,11 +11,11 @@ template<typename T> struct ParticleSpheroid {}; } -template<typename T, uint64_t D, typename Coll> +template<typename T, uint64_t D, uint64_t PC, typename Coll> class particle_porosity { public: - static saw::data<sch::Scalar<T>> calculate(const saw::data<sch::ParticleGroup<T,D,Coll>>& part_group, uint64_t p_i, const saw::data<sch::Vector<T,D>>& lbm_pos){ + static saw::data<sch::Scalar<T>> calculate(const saw::data<sch::ParticleGroup<T,D,PC,Coll>>& part_group, uint64_t p_i, const saw::data<sch::Vector<T,D>>& lbm_pos){ auto& mask = part_group.template get<"mask">(); auto& particles = part_group.template get<"particles">(); @@ -33,7 +33,7 @@ public: }; template<typename T, uint64_t D> -class particle_porosity<T, D, por::ParticleSpheroid<T>> final { +class particle_porosity<T, D, 1u, por::ParticleSpheroid<T>> final { public: static saw::data<sch::Scalar<T>> calculate(const saw::data<sch::Vector<T,D>>& lbm_rel_dist, saw::data<sch::Scalar<T>> rad, saw::data<sch::Scalar<T>> eps){ saw::data<sch::Scalar<T>> por; @@ -68,10 +68,10 @@ public: }; -template<typename T, uint64_t D> -class particle_porosity<T, D, coll::Spheroid<T>> final { +template<typename T, uint64_t D, uint64_t PC> +class particle_porosity<T, D, PC, coll::Spheroid<T>> final { public: - static saw::data<sch::Scalar<T>> calculate(const saw::data<sch::ParticleGroup<T,D,coll::Spheroid<T> > >& part_group, uint64_t i, const saw::data<sch::Vector<T,D>>& lbm_pos) { + static saw::data<sch::Scalar<T>> calculate(const saw::data<sch::ParticleGroup<T,D,PC,coll::Spheroid<T> > >& part_group, uint64_t i, const saw::data<sch::Vector<T,D>>& lbm_pos) { saw::data<sch::Scalar<T>> por; auto& parts = part_group.template get<"particles">(); diff --git a/modules/core/c++/particle/schema.hpp b/modules/core/c++/particle/schema.hpp index 714a16f..221137a 100644 --- a/modules/core/c++/particle/schema.hpp +++ b/modules/core/c++/particle/schema.hpp @@ -52,7 +52,7 @@ using Particle = Struct< // Member<Array<Float64,D>, "mask">, >; -template<typename T, uint64_t D, typename CollisionType = coll::Spheroid<T>> +template<typename T, uint64_t D, uint64_t PartAmount, typename CollisionType = coll::Spheroid<T>> using ParticleGroup = Struct< Member<Array<T,D>, "mask">, Member<FixedArray<typename CollisionType::Schema,1u>, "collision">, @@ -61,7 +61,7 @@ using ParticleGroup = Struct< Member<FixedArray<Scalar<T>,1u>, "density">, Member<FixedArray<Vector<T,D>,1u>, "center_of_mass">, Member<FixedArray<Scalar<T>,1u>, "total_mass">, - Member<Array<Particle<T,D>,1u>, "particles"> + Member<FixedArray<Particle<T,D>,PartAmount>, "particles"> >; } } |
