#pragma once #include "../component.hpp" #include "common.hpp" #include "schema.hpp" #include "porosity.hpp" namespace kel { namespace lbm { namespace cmpt { struct OneParticleAt {}; } template class component final { private: saw::data> pos_; saw::data> rad_; saw::data> eps_; public: component( const saw::data> pos__, const saw::data> rad__, const saw::data> eps__ ): pos_{pos__}, rad_{rad__}, eps_{eps__} {} template void apply(const saw::data& macros, const saw::data> index, saw::data time_step) const { using dfi = df_info; auto& porous_f = macros.template get<"porosity">(); auto& porous = porous_f.at(index); auto pos_ind = saw::math::vectorize_data(index); // Write out value auto diff = pos_ind.template cast_to() - pos_; auto diff_dot = saw::math::dot(diff,diff); porous = particle_porosity>::calculate(diff, rad_, eps_); } }; } }