12#include "detray/algebra/common/math.hpp"
13#include "detray/algebra/concepts.hpp"
14#include "detray/algebra/generic/generic.hpp"
15#include "detray/definitions/detail/qualifiers.hpp"
17namespace detray::algebra::array {
20template <concepts::matrix matrix_t>
21 requires(std::is_scalar_v<typename matrix_t::value_type::value_type>)
22DETRAY_HOST_DEVICE
constexpr matrix_t zero() {
25 for (std::size_t j = 0; j < detray::traits::columns<matrix_t>; ++j) {
26 for (std::size_t i = 0; i < detray::traits::rows<matrix_t>; ++i) {
35template <concepts::matrix matrix_t>
36 requires(std::is_scalar_v<typename matrix_t::value_type::value_type>)
37DETRAY_HOST_DEVICE
constexpr auto identity() {
38 auto ret{zero<matrix_t>()};
40 for (std::size_t i = 0; i < detray::traits::max_rank<matrix_t>; ++i) {
48template <std::size_t ROWS, std::size_t COLS, concepts::scalar scalar_t,
49 template <
typename, std::
size_t>
class array_t>
50DETRAY_HOST_DEVICE
constexpr void set_zero(
51 array_t<array_t<scalar_t, ROWS>, COLS> &m) {
52 m = zero<array_t<array_t<scalar_t, ROWS>, COLS>>();
56template <std::size_t ROWS, std::size_t COLS, concepts::scalar scalar_t,
57 template <
typename, std::
size_t>
class array_t>
58DETRAY_HOST_DEVICE
constexpr void set_identity(
59 array_t<array_t<scalar_t, ROWS>, COLS> &m) {
60 m = identity<array_t<array_t<scalar_t, ROWS>, COLS>>();
64template <std::size_t ROWS, std::size_t COLS, concepts::scalar scalar_t,
65 template <
typename, std::
size_t>
class array_t>
66DETRAY_HOST_DEVICE
constexpr auto transpose(
67 const array_t<array_t<scalar_t, ROWS>, COLS> &m) {
68 return algebra::generic::math::transpose(m);
72template <std::size_t ROWS, std::size_t COLS, concepts::scalar scalar_t,
73 template <
typename, std::
size_t>
class array_t>
74DETRAY_HOST_DEVICE
constexpr scalar_t determinant(
75 const array_t<array_t<scalar_t, ROWS>, COLS> &m) {
76 return algebra::generic::math::determinant(m);
80template <std::size_t ROWS, std::size_t COLS, concepts::scalar scalar_t,
81 template <
typename, std::
size_t>
class array_t>
82DETRAY_HOST_DEVICE
constexpr auto inverse(
83 const array_t<array_t<scalar_t, ROWS>, COLS> &m) {
84 return algebra::generic::math::inverse(m);
constexpr double m
Meter.
Definition Units.hpp:97