12#include "algebra/impl/vc_aos_approximately_equal.hpp"
13#include "algebra/impl/vc_aos_concepts.hpp"
14#include "algebra/impl/vc_aos_getter.hpp"
15#include "algebra/impl/vc_aos_transform3.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_aos {
39using index_type = std::size_t;
41template <concepts::value T>
44template <concepts::value T>
47template <concepts::value T, index_type N>
48using storage_type = Vc::SimdArray<T, N>;
50template <concepts::value T>
53template <concepts::value T>
56template <concepts::value T, std::
size_t N>
57using vector_type = algebra::storage::vector<N, T, storage_type>;
59template <concepts::value T, index_type ROWS, index_type COLS>
60using matrix_type = algebra::storage::matrix<storage_type, T, ROWS, COLS>;
63template <concepts::value T>
64using vector2 = vector_type<T, 2>;
66template <concepts::value T>
67using point2 = vector2<T>;
69template <concepts::value T>
70using vector3 = vector_type<T, 3>;
72template <concepts::value T>
73using point3 = vector3<T>;
75template <concepts::value T>
76using vector6 = vector_type<T, 6>;
78template <concepts::value T>
79using vector8 = vector_type<T, 8>;
82template <concepts::value T>
83using transform3 = vc_aos::math::transform3<vc_aos::storage_type, T>;
86using element_getter = algebra::storage::element_getter;
88using block_getter = algebra::storage::block_getter;
92DETRAY_ALGEBRA_DEFINE_TYPE_TRAITS(algebra::vc_aos)
97template <
typename T, auto N>
98struct index<algebra::vc_aos::storage_type<T, N>> {
100 using type = algebra::vc_aos::index_type;
104template <
typename T, auto N>
105struct index<Vc_1::Vector<T, Vc_1::simd_abi::fixed_size<N>>> {
107 using type = algebra::vc_aos::index_type;
111template <
typename T, auto N>
112struct value<algebra::vc_aos::storage_type<T, N>> {
118template <
typename T, auto N>
119struct value<Vc_1::Vector<T, Vc_1::simd_abi::fixed_size<N>>> {
126template <
typename T, auto N>
141template <
typename T, auto N>
142struct dimensions<Vc_1::Vector<T, Vc_1::simd_abi::fixed_size<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 _columns
Number of vector columns.
Definition vc_aos_types.hpp:151
algebra::vc_aos::index_type index_type
Index type used for the vector dimensions.
Definition vc_aos_types.hpp:144
static constexpr index_type _dim
Number of logical dimensions represented by the vector.
Definition vc_aos_types.hpp:147
static constexpr index_type _rows
Number of vector components.
Definition vc_aos_types.hpp:149
algebra::vc_aos::index_type index_type
Index type used for the storage dimensions.
Definition vc_aos_types.hpp:129
static constexpr index_type _columns
Number of storage columns.
Definition vc_aos_types.hpp:136
static constexpr index_type _rows
Number of stored vector components.
Definition vc_aos_types.hpp:134
static constexpr index_type _dim
Number of logical dimensions represented by the storage.
Definition vc_aos_types.hpp:132
Matrix dimensions.
Definition type_traits.hpp:82
algebra::vc_aos::index_type type
Index type used by the Vc AoS backend.
Definition vc_aos_types.hpp:107
algebra::vc_aos::index_type type
Index type used by the Vc AoS backend.
Definition vc_aos_types.hpp:100
Matrix traits.
Definition type_traits.hpp:26
T type
Scalar element type carried by the Vc vector.
Definition vc_aos_types.hpp:121
T type
Scalar element type carried by the Vc array.
Definition vc_aos_types.hpp:114
Value type that is used with the matrix (e.g.
Definition type_traits.hpp:35