diff options
-rw-r--r-- | c++/converter.hpp | 27 | ||||
-rw-r--r-- | c++/lbm_unit.hpp | 24 | ||||
-rw-r--r-- | tests/converter.cpp | 11 |
3 files changed, 40 insertions, 22 deletions
diff --git a/c++/converter.hpp b/c++/converter.hpp index f3c3518..67058aa 100644 --- a/c++/converter.hpp +++ b/c++/converter.hpp @@ -8,34 +8,37 @@ namespace lbm { template<typename T> class converter { private: - saw::data<saw::unit_division<T, LbmMeter<T>, SiMeter<T> >> meter_conv_; - saw::data<saw::unit_division<T, LbmSecond<T>, SiSecond<T> >> second_conv_; + saw::data<typename saw::unit_division<sch::SiMeter<T>, sch::LbmMeter<T> >::Schema > meter_conv_; + saw::data<typename saw::unit_division<sch::SiSecond<T>, sch::LbmSecond<T> >::Schema > second_conv_; public: converter() = delete; converter( - saw::data<saw::unit_division<T, LbmMeter<T>, SiMeter<T> >> meter_conv__, - saw::data<saw::unit_division<T, LbmSecond<T>, SiSecond<T> >> second_conv__ + saw::data<typename saw::unit_division<sch::SiMeter<T>, sch::LbmMeter<T> >::Schema > meter_conv__, + saw::data<typename saw::unit_division<sch::SiSecond<T>, sch::LbmSecond<T> >::Schema > second_conv__ ): meter_conv_{meter_conv__}, second_conv_{second_conv__} {} - saw::data<sch::LbmMeter<T>> meter_si_to_lbm(const saw::data<sch::SiMeter<T>>& m_si){ - return m_si * meter_conv_; + saw::data<sch::LbmMeter<T>> meter_si_to_lbm(const saw::data<sch::SiMeter<T>>& m_si) const { + return m_si / meter_conv_; } - saw::data<sch::LbmSecond<T>> second_si_to_lbm(const saw::data<sch::SiSecond<T>>& s_si){ - return s_si * second_conv_; + saw::data<sch::LbmSecond<T>> second_si_to_lbm(const saw::data<sch::SiSecond<T>>& s_si) const { + return s_si / second_conv_; } - saw::data<sch::LbmVelocity<T>> velocity_si_to_lbm(const saw::data<sch::SiVelocity<T>>& vel_si){ - return vel_si * meter_conv_ / second_conv_; + saw::data<sch::LbmVelocity<T>> velocity_si_to_lbm(const saw::data<sch::SiVelocity<T>>& vel_si) const { + return vel_si * second_conv_ / meter_conv_; } - saw::data<sch::LbmAcceleration<T>> acceleration_si_to_lbm(const saw::data<sch::SiAcceleration<T>>& acc_si){ - return acc_si * meter_conv_ / (second_conv_ * second_conv_); + saw::data<sch::LbmAcceleration<T>> acceleration_si_to_lbm(const saw::data<sch::SiAcceleration<T>>& acc_si) const { + return acc_si * (second_conv_ * second_conv_) / meter_conv_; } + saw::data<sch::LbmKinematicViscosity<T>> kinematic_viscosity_si_to_lbm (const saw::data<sch::SiKinematicViscosity<T>>& kin_si) const { + return kin_si * second_conv_ / (meter_conv_ * meter_conv_); + } }; } } diff --git a/c++/lbm_unit.hpp b/c++/lbm_unit.hpp index 4cb9b52..e69323f 100644 --- a/c++/lbm_unit.hpp +++ b/c++/lbm_unit.hpp @@ -30,31 +30,37 @@ struct second { }; } -namesapce sch { +namespace sch { +using namespace saw::schema; +template<typename S> +using SiMeter = Unit<S, UnitElement<si_type::meter, 1>>; + +template<typename S> +using LbmMeter = Unit<S, UnitElement<lbm_type::meter, 1>>; template<typename S> -using SiMeter = schema::Unit<S, schema::UnitElement<si_type::meter, 1>>; +using SiSecond = Unit<S, UnitElement<si_type::meter, 1>>; template<typename S> -using LbmMeter = schema::Unit<S, schema::UnitElement<lbm_type::meter, 1>>; +using LbmSecond = Unit<S, UnitElement<lbm_type::second, 1>>; template<typename S> -using SiSecond = schema::Unit<S, schema::UnitElement<si_type::meter, 1>>; +using SiVelocity = Unit<S, UnitElement<si_type::meter, 1>, UnitElement<si_type::second, -1>>; template<typename S> -using LbmSecond = schema::Unit<S, schema::UnitElement<lbm_type::second, 1>>; +using LbmVelocity = Unit<S, UnitElement<lbm_type::meter, 1>, UnitElement<lbm_type::second, -1>>; template<typename S> -using SiVelocity = schema::Unit<S, schema::UnitElement<si_type::meter, 1>, schema::UnitElement<si_type::second, -1>>; +using SiAcceleration = Unit<S, UnitElement<si_type::meter, 1>, UnitElement<si_type::second, -2>>; template<typename S> -using LbmVelocity = schema::Unit<S, schema::UnitElement<lbm_type::meter, 1>, schema::UnitElement<lbm_type::second, -1>>; +using LbmAcceleration = Unit<S, UnitElement<lbm_type::meter, 1>, UnitElement<lbm_type::second, -2>>; template<typename S> -using SiAcceleration = schema::Unit<S, schema::UnitElement<si_type::meter, 1>, schema::UnitElement<si_type::second, -2>>; +using SiKinematicViscosity = Unit<S, UnitElement<si_type::meter, 2>, UnitElement<si_type::second, -1>>; template<typename S> -using LbmAcceleration = schema::Unit<S, schema::UnitElement<lbm_type::meter, 1>, schema::UnitElement<lbm_type::second, -2>>; +using LbmKinematicViscosity = Unit<S, UnitElement<lbm_type::meter, 2>, UnitElement<lbm_type::second, -1>>; } } diff --git a/tests/converter.cpp b/tests/converter.cpp index 3c66348..01cd4ce 100644 --- a/tests/converter.cpp +++ b/tests/converter.cpp @@ -13,6 +13,15 @@ using T = Float64; SAW_TEST("Meter"){ using namespace kel; - lbm::converter<sch::T> converter; + lbm::converter<sch::T> converter{ + {0.1}, + {0.1} + }; + + saw::data<sch::SiMeter<sch::T>> si_m{1.0}; + + auto lbm_m = converter.meter_si_to_lbm(si_m); + + SAW_EXPECT(lbm_m.handle().get() == 10.0, "Correct si to lbm conversion"); } } |