#pragma once #include "lbm_unit.hpp" #include "descriptor.hpp" namespace kel { namespace lbm { namespace sch { using namespace saw::schema; } /** * Helps converting from SI types to LBM types */ template class converter { private: saw::data, sch::LbmMeter >::Schema > meter_conv_; saw::data, sch::LbmSecond >::Schema > second_conv_; public: converter() = delete; converter( saw::data, sch::LbmMeter >::Schema > meter_conv__, saw::data, sch::LbmSecond >::Schema > second_conv__ ): meter_conv_{meter_conv__}, second_conv_{second_conv__} {} /** * Get the conversion parameter with the conversion type */ auto conversion_x() const { return meter_conv_; } /** * Get the conversion parameter with the conversion type */ auto conversion_t() const { return second_conv_; } auto delta_x() const { return meter_conv_*saw::data>{1.0}; } auto delta_t() const { return second_conv_*saw::data>{1.0}; } saw::data> meter_si_to_lbm(const saw::data>& m_si) const { return m_si / meter_conv_; } saw::data> second_si_to_lbm(const saw::data>& s_si) const { return s_si / second_conv_; } saw::data> velocity_si_to_lbm(const saw::data>& vel_si) const { return vel_si * second_conv_ / meter_conv_; } saw::data> acceleration_si_to_lbm(const saw::data>& acc_si) const { return acc_si * (second_conv_ * second_conv_) / meter_conv_; } saw::data> kinematic_viscosity_si_to_lbm (const saw::data>& kin_si) const { return (kin_si / (meter_conv_ * meter_conv_)) * second_conv_; } template saw::data> kinematic_viscosity_si_to_tau(const saw::data>& kin_si) const { return saw::data>{saw::data, sch::LbmKinematicViscosity>::Schema >{df_info::inv_cs2} * kinematic_viscosity_si_to_lbm(kin_si) + saw::data>{0.5}}; } }; } }