12#include "algebra/impl/vc_aos_approximately_equal.hpp"
13#include "algebra/impl/vc_aos_transform3.hpp"
14#include "algebra/impl/vc_soa_casts.hpp"
15#include "algebra/impl/vc_soa_getter.hpp"
16#include "detray/algebra/common/matrix.hpp"
17#include "detray/algebra/common/vector.hpp"
18#include "detray/algebra/concepts.hpp"
19#include "detray/algebra/type_traits.hpp"
27#pragma warning(push, 0)
36namespace algebra::vc_soa {
39using index_type = std::size_t;
41template <concepts::value T>
44template <concepts::value T>
45using scalar_type = Vc::Vector<T>;
47template <concepts::simd_scalar T, index_type N>
48using storage_type = std::array<T, N>;
50template <concepts::value T, std::
size_t N>
51using vector_type = algebra::storage::vector<N, Vc::Vector<T>, storage_type>;
53template <concepts::value T, index_type ROWS, index_type COLS>
55 algebra::storage::matrix<storage_type, Vc::Vector<T>, ROWS, COLS>;
58template <concepts::value T>
59using vector2 = vector_type<T, 2>;
61template <concepts::value T>
62using point2 = vector2<T>;
64template <concepts::value T>
65using vector3 = vector_type<T, 3>;
67template <concepts::value T>
68using point3 = vector3<T>;
70template <concepts::value T>
71using vector6 = vector_type<T, 6>;
73template <concepts::value T>
74using vector8 = vector_type<T, 8>;
77template <concepts::value T>
79 vc_aos::math::transform3<vc_soa::storage_type, Vc::Vector<T>>;
82using element_getter = algebra::storage::element_getter;
84using block_getter = algebra::storage::block_getter;
88DETRAY_ALGEBRA_DEFINE_TYPE_TRAITS(algebra::vc_soa)
95template <concepts::value T, std::
size_t ROWS, std::
size_t COLS>
96struct scalar<algebra::storage::matrix<algebra::vc_soa::storage_type,
97 Vc::Vector<T>, ROWS, COLS>> {
99 using type = Vc::Vector<T>;
103template <concepts::value T, std::
size_t N>
105 algebra::storage::vector<N, Vc::Vector<T>, algebra::vc_soa::storage_type>> {
114template <concepts::value T>
123template <concepts::simd_scalar T, auto N>
constexpr double T
Magnetic field, native unit (eV*s)/(e*m²).
Definition Units.hpp:168
Detray include(s).
Definition array_operators.hpp:18
static constexpr index_type _dim
Number of logical dimensions represented by the storage.
Definition vc_soa_types.hpp:129
algebra::vc_soa::index_type index_type
Index type used for storage dimensions.
Definition vc_soa_types.hpp:126
static constexpr index_type _columns
Number of storage columns.
Definition vc_soa_types.hpp:133
static constexpr index_type _rows
Number of stored vector components.
Definition vc_soa_types.hpp:131
Matrix dimensions.
Definition type_traits.hpp:82
Vc::Vector< T > type
SIMD scalar type stored in each matrix entry.
Definition vc_soa_types.hpp:99
Vc::Vector< T > type
SIMD scalar type stored in each vector entry.
Definition vc_soa_types.hpp:107
Scalar type that is used with the matrix (can be multiple values in SoA).
Definition type_traits.hpp:52
T type
Scalar element type wrapped by the SIMD vector.
Definition vc_soa_types.hpp:117
Value type that is used with the matrix (e.g.
Definition type_traits.hpp:35