diff --git a/include/Directions.h b/include/Directions.h index bf060cee30ad2685c1170c9d1710a1eb70cb3843..60408bb66325ef7f59a7bd126e7fc0e0869a2e78 100644 --- a/include/Directions.h +++ b/include/Directions.h @@ -187,9 +187,9 @@ void radec2lmn::operator()(Arch, const Direction &reference, const C &ra, double sin_dec = std::sin(dec[i]); double cos_dec = std::cos(dec[i]); - lmn(i, 0) = cos_dec * sin_delta_ra; - lmn(i, 1) = sin_dec * cos_dec0 - cos_dec * sin_dec0 * cos_delta_ra; - lmn(i, 2) = sin_dec * sin_dec0 + cos_dec * cos_dec0 * cos_delta_ra; + lmn(0, i) = cos_dec * sin_delta_ra; + lmn(1, i) = sin_dec * cos_dec0 - cos_dec * sin_dec0 * cos_delta_ra; + lmn(2, i) = sin_dec * sin_dec0 + cos_dec * cos_dec0 * cos_delta_ra; } } diff --git a/tests/test_directions.cpp b/tests/test_directions.cpp index 984bd143e508718f064bb824e5547d748715b4a3..5db962c8fafd88b400cb60c894591501e70b0f9e 100644 --- a/tests/test_directions.cpp +++ b/tests/test_directions.cpp @@ -114,4 +114,31 @@ BOOST_AUTO_TEST_CASE(test_radec_to_lmn_xsimd) { } } +BOOST_AUTO_TEST_CASE(test_radec_to_lmn_xsimd_with_remainder) { + Direction reference(0.2, 0.3); + Direction dir_0(0.1, 0.2); + Direction dir_1(0.2, 0.3); + Direction dir_2(0.3, 0.4); + + xt::xtensor<double, 2> lmn_expected({3, 3}); + + dp3::base::radec2lmn(reference, dir_0, &lmn_expected(0, 0)); + dp3::base::radec2lmn(reference, dir_1, &lmn_expected(1, 0)); + dp3::base::radec2lmn(reference, dir_2, &lmn_expected(2, 0)); + + Directions directions; + directions.add(dir_0); + directions.add(dir_1); + directions.add(dir_2); + + xt::xtensor<double, 2> lmn_actual({3, 3}); + directions.radec2lmn<Directions::computation_strategy::MULTI_SIMD>( + reference, lmn_actual); + for (size_t i; i < 3; ++i) { + BOOST_CHECK_CLOSE(lmn_expected(i, 0), lmn_actual(i, 0), 1.e-6); + BOOST_CHECK_CLOSE(lmn_expected(i, 1), lmn_actual(i, 1), 1.e-6); + BOOST_CHECK_CLOSE(lmn_expected(i, 2), lmn_actual(i, 2), 1.e-6); + } +} + BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file