From 0da1e57a924e3aee62e84b942cb8e03433c8df80 Mon Sep 17 00:00:00 2001 From: ralfulrich <ralf.ulrich@kit.edu> Date: Thu, 28 Oct 2021 11:58:47 +0200 Subject: [PATCH] finally made this running for quantities and doubles --- corsika/detail/framework/geometry/Vector.inl | 7 ++++++- corsika/framework/geometry/Vector.hpp | 22 ++++++++++++++++++++ tests/framework/testGeometry.cpp | 11 ++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/corsika/detail/framework/geometry/Vector.inl b/corsika/detail/framework/geometry/Vector.inl index 703f2c222..0e2cfdd61 100644 --- a/corsika/detail/framework/geometry/Vector.inl +++ b/corsika/detail/framework/geometry/Vector.inl @@ -241,9 +241,14 @@ namespace corsika { /* * scalar * vector multiplication */ + template <typename TDimension, typename UDimension> + inline Vector<phys::units::detail::product_d<TDimension, UDimension>> operator*( + quantity<UDimension> const n, Vector<TDimension> const& vec) { + return vec * n; + } + template <typename TDimension> inline Vector<TDimension> operator*(double const n, Vector<TDimension> const& vec) { return vec * n; } - } // namespace corsika diff --git a/corsika/framework/geometry/Vector.hpp b/corsika/framework/geometry/Vector.hpp index 5c97a6526..13d47d717 100644 --- a/corsika/framework/geometry/Vector.hpp +++ b/corsika/framework/geometry/Vector.hpp @@ -142,6 +142,28 @@ namespace corsika { auto dot(Vector<TDimension2> const& pV) const; }; + /** + * Free operator to allow commutative multiplications of quantities and Vector. + * + * @tparam TDimension + * @tparam UDimension + * @param n + * @param vec + * @return auto + */ + template <typename TDimension, typename UDimension> + Vector<phys::units::detail::product_d<TDimension, UDimension>> operator*( + quantity<UDimension> const n, Vector<TDimension> const& vec); + + /** + * Free operator to allow commutative multiplications of normal double with Vector. + * + * @tparam TDimension + * @tparam UDimension + * @param n + * @param vec + * @return auto + */ template <typename TDimension> Vector<TDimension> operator*(double const n, Vector<TDimension> const& vec); diff --git a/tests/framework/testGeometry.cpp b/tests/framework/testGeometry.cpp index f3b696931..19c311881 100644 --- a/tests/framework/testGeometry.cpp +++ b/tests/framework/testGeometry.cpp @@ -46,6 +46,17 @@ TEST_CASE("Geometry CoordinateSystems") { CHECK((p1.getCoordinates(rootCS) - coordinates).getNorm().magnitude() == Approx(0).margin(absMargin)); + SECTION("basic operations") { + auto testV0 = v1 * 6; + CHECK(testV0.getNorm() / tesla == Approx(6)); + auto testV1 = 6 * v1; + CHECK(testV1.getNorm() / tesla == Approx(6)); + auto testV2 = 6_m * v1; + CHECK(testV2.getNorm() / (tesla * meter) == Approx(6)); + auto testV3 = v1 * 6_m; + CHECK(testV3.getNorm() / (tesla * meter) == Approx(6)); + } + SECTION("translations") { QuantityVector<length_d> const translationVector{0_m, 4_m, 0_m}; CORSIKA_LOG_INFO("QuantityVector<length_d> translationVector={}", translationVector); -- GitLab