24namespace shamrock::details {
26 template<
class RT,
class T>
31 template<
class RT,
class T>
32 inline sycl::buffer<RT> to_vtk_buf_type(sycl::queue &q, sycl::buffer<T> &buf_in,
u64 len) {
33 sycl::buffer<RT> ret(len);
35 q.submit([=, &buf_in, &ret](sycl::handler &cgh) {
36 sycl::accessor acc_in{buf_in, cgh, sycl::read_only};
37 sycl::accessor acc_out{ret, cgh, sycl::write_only, sycl::no_init};
38 cgh.parallel_for(sycl::range<1>{len}, [=](sycl::item<1> id) {
39 acc_out[id] = to_vtk_type<RT>(acc_in[
id]);
46 template<
class RT,
class T,
int n>
47 inline sycl::buffer<RT> to_vtk_buf_type(
48 sycl::queue &q, sycl::buffer<sycl::vec<T, n>> &buf_in,
u64 len) {
49 sycl::buffer<RT> ret(len * n);
51 q.submit([=, &buf_in, &ret](sycl::handler &cgh) {
52 sycl::accessor acc_in{buf_in, cgh, sycl::read_only};
53 sycl::accessor acc_out{ret, cgh, sycl::write_only, sycl::no_init};
55 cgh.parallel_for(sycl::range<1>{len}, [=](sycl::item<1> id) {
56 u32 idx =
id.get_linear_id() * n;
58 if constexpr (n == 2) {
59 acc_out[idx] = to_vtk_type<RT>(acc_in[
id].x());
60 acc_out[idx + 1] = to_vtk_type<RT>(acc_in[
id].y());
63 if constexpr (n == 3) {
64 acc_out[idx] = to_vtk_type<RT>(acc_in[
id].x());
65 acc_out[idx + 1] = to_vtk_type<RT>(acc_in[
id].y());
66 acc_out[idx + 2] = to_vtk_type<RT>(acc_in[
id].z());
69 if constexpr (n == 4) {
70 acc_out[idx] = to_vtk_type<RT>(acc_in[
id].x());
71 acc_out[idx + 1] = to_vtk_type<RT>(acc_in[
id].y());
72 acc_out[idx + 2] = to_vtk_type<RT>(acc_in[
id].z());
73 acc_out[idx + 3] = to_vtk_type<RT>(acc_in[
id].w());
76 if constexpr (n == 8) {
77 acc_out[idx] = to_vtk_type<RT>(acc_in[
id].s0());
78 acc_out[idx + 1] = to_vtk_type<RT>(acc_in[
id].s1());
79 acc_out[idx + 2] = to_vtk_type<RT>(acc_in[
id].s2());
80 acc_out[idx + 3] = to_vtk_type<RT>(acc_in[
id].s3());
81 acc_out[idx + 4] = to_vtk_type<RT>(acc_in[
id].s4());
82 acc_out[idx + 5] = to_vtk_type<RT>(acc_in[
id].s5());
83 acc_out[idx + 6] = to_vtk_type<RT>(acc_in[
id].s6());
84 acc_out[idx + 7] = to_vtk_type<RT>(acc_in[
id].s7());
87 if constexpr (n == 16) {
88 acc_out[idx] = to_vtk_type<RT>(acc_in[
id].s0());
89 acc_out[idx + 1] = to_vtk_type<RT>(acc_in[
id].s1());
90 acc_out[idx + 2] = to_vtk_type<RT>(acc_in[
id].s2());
91 acc_out[idx + 3] = to_vtk_type<RT>(acc_in[
id].s3());
92 acc_out[idx + 4] = to_vtk_type<RT>(acc_in[
id].s4());
93 acc_out[idx + 5] = to_vtk_type<RT>(acc_in[
id].s5());
94 acc_out[idx + 6] = to_vtk_type<RT>(acc_in[
id].s6());
95 acc_out[idx + 7] = to_vtk_type<RT>(acc_in[
id].s7());
96 acc_out[idx + 8] = to_vtk_type<RT>(acc_in[
id].s8());
97 acc_out[idx + 9] = to_vtk_type<RT>(acc_in[
id].s9());
98 acc_out[idx + 10] = to_vtk_type<RT>(acc_in[
id].sA());
99 acc_out[idx + 11] = to_vtk_type<RT>(acc_in[
id].sB());
100 acc_out[idx + 12] = to_vtk_type<RT>(acc_in[
id].sC());
101 acc_out[idx + 13] = to_vtk_type<RT>(acc_in[
id].sD());
102 acc_out[idx + 14] = to_vtk_type<RT>(acc_in[
id].sE());
103 acc_out[idx + 15] = to_vtk_type<RT>(acc_in[
id].sF());
std::uint32_t u32
32 bit unsigned integer
std::uint64_t u64
64 bit unsigned integer
void throw_with_loc(std::string message, SourceLocation loc=SourceLocation{})
Throw an exception and append the source location to it.