#pragma once #include "../common.hpp" namespace kel { namespace lbm { template void n_linear_interpolate(const saw::data& field, const saw::data>& pos){ auto pos_bound = pos; auto meta = field.dims(); saw::data ind; for(saw::data i{0u}; i < saw::data{D}; ++i){ pos_bound.at(i).set( std::max( std::min( meta.at(i).template cast_to().get(), pos.at(i).get() + 1.5 ), 1, ) -1 ); ind.at(i) = pos_bound.at(i).template cast_to(); } } } }