#pragma once #include "lbm_unit.hpp" namespace kel { namespace lbm { 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_; } }; } }