Shamrock 2025.10.0
Astrophysical Code
Loading...
Searching...
No Matches
matrix_legacy.hpp
Go to the documentation of this file.
1// -------------------------------------------------------//
2//
3// SHAMROCK code for hydrodynamics
4// Copyright (c) 2021-2026 Timothée David--Cléris <tim.shamrock@proton.me>
5// SPDX-License-Identifier: CeCILL Free Software License Agreement v2.1
6// Shamrock is licensed under the CeCILL 2.1 License, see LICENSE for more information
7//
8// -------------------------------------------------------//
9
10#pragma once
11
19#include "shambackends/sycl.hpp"
20#include <array>
21
22namespace shammath {
23
24 template<class T>
25 inline auto compute_inv_33(std::array<sycl::vec<T, 3>, 3> mat)
26 -> std::array<sycl::vec<T, 3>, 3> {
27
28 using vec = sycl::vec<T, 3>;
29
30 T a00 = mat[0].x();
31 T a10 = mat[1].x();
32 T a20 = mat[2].x();
33
34 T a01 = mat[0].y();
35 T a11 = mat[1].y();
36 T a21 = mat[2].y();
37
38 T a02 = mat[0].z();
39 T a12 = mat[1].z();
40 T a22 = mat[2].z();
41
42 T det
43 = (-a02 * a11 * a20 + a01 * a12 * a20 + a02 * a10 * a21 - a00 * a12 * a21
44 - a01 * a10 * a22 + a00 * a11 * a22);
45
46 return {
47 (vec{-a12 * a21 + a11 * a22, a02 * a21 - a01 * a22, -a02 * a11 + a01 * a12} / det),
48 (vec{a12 * a20 - a10 * a22, -a02 * a20 + a00 * a22, a02 * a10 - a00 * a12} / det),
49 (vec{-a11 * a20 + a10 * a21, a01 * a20 - a00 * a21, -a01 * a10 + a00 * a11} / det)};
50 }
51
52 template<class T>
53 inline auto mat_prod_33(
54 std::array<sycl::vec<T, 3>, 3> mat_a, std::array<sycl::vec<T, 3>, 3> mat_b)
55 -> std::array<sycl::vec<T, 3>, 3> {
56
57 using vec = sycl::vec<T, 3>;
58
59 T a00 = mat_a[0].x();
60 T a10 = mat_a[1].x();
61 T a20 = mat_a[2].x();
62
63 T a01 = mat_a[0].y();
64 T a11 = mat_a[1].y();
65 T a21 = mat_a[2].y();
66
67 T a02 = mat_a[0].z();
68 T a12 = mat_a[1].z();
69 T a22 = mat_a[2].z();
70
71 T b00 = mat_b[0].x();
72 T b10 = mat_b[1].x();
73 T b20 = mat_b[2].x();
74
75 T b01 = mat_b[0].y();
76 T b11 = mat_b[1].y();
77 T b21 = mat_b[2].y();
78
79 T b02 = mat_b[0].z();
80 T b12 = mat_b[1].z();
81 T b22 = mat_b[2].z();
82
83 return {
84 vec{a00 * b00 + a01 * b10 + a02 * b20,
85 a00 * b01 + a01 * b11 + a02 * b21,
86 a00 * b02 + a01 * b12 + a02 * b22},
87 vec{a10 * b00 + a11 * b10 + a12 * b20,
88 a10 * b01 + a11 * b11 + a12 * b21,
89 a10 * b02 + a11 * b12 + a12 * b22},
90 vec{a20 * b00 + a21 * b10 + a22 * b20,
91 a20 * b01 + a21 * b11 + a22 * b21,
92 a20 * b02 + a21 * b12 + a22 * b22}};
93 }
94} // namespace shammath
namespace for math utility
Definition AABB.hpp:26