Shamrock 2025.10.0
Astrophysical Code
Loading...
Searching...
No Matches
ComputeAMRLevel.cpp
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
17#include "shambase/assert.hpp"
18#include "shambase/integer.hpp"
22#include "shambackends/math.hpp"
26
28
29 template<class TgridVec>
31 auto edges = get_edges();
32
33 edges.block_min.check_sizes(edges.sizes.indexes);
34 edges.block_max.check_sizes(edges.sizes.indexes);
35
36 edges.block_level.ensure_sizes(edges.sizes.indexes);
37
38 auto &q = shamsys::instance::get_compute_scheduler().get_queue();
39
40 const auto &spans_block_min = edges.block_min.get_spans();
41 const auto &spans_block_max = edges.block_max.get_spans();
42 auto &spans_block_level = edges.block_level.get_spans();
43
44 edges.sizes.indexes.for_each([&](u64 id, const u64 &n) {
45 TgridVec l0_ref = edges.level0_size.values.get(id);
46
48 q,
49 sham::MultiRef{spans_block_min.get(id), spans_block_max.get(id)},
50 sham::MultiRef{spans_block_level.get(id)},
51 n,
52 [l0_ref](
53 u64 id,
54 const TgridVec *__restrict block_min,
55 const TgridVec *__restrict block_max,
56 TgridUint *__restrict block_level) {
57 TgridVec block_size = block_max[id] - block_min[id];
58
59 SHAM_ASSERT(block_size.x() > 0 && block_size.y() > 0 && block_size.z() > 0);
60
61 Tgridscal l0 = (Tgridscal) l0_ref.x();
62 Tgridscal s = (Tgridscal) block_size.x();
63
64 SHAM_ASSERT(l0 >= s);
65
66 Tgridscal fact = l0 / s;
67
69
70 block_level[id] = sham::log2_pow2_num<Tgridscal>(fact);
71 });
72 });
73 }
74
75 template<class TgridVec>
77 return "TODO";
78 }
79
80} // namespace shammodels::basegodunov::modules
81
Header file describing a Node Instance.
std::uint64_t u64
64 bit unsigned integer
Shamrock assertion utility.
#define SHAM_ASSERT(x)
Shorthand for SHAM_ASSERT_NAMED without a message.
Definition assert.hpp:67
DeviceQueue & get_queue(u32 id=0)
Get a reference to a DeviceQueue.
virtual std::string _impl_get_tex() const
get the tex of the node
void kernel_call(sham::DeviceQueue &q, RefIn in, RefOut in_out, u32 n, Functor &&func, SourceLocation &&callsite=SourceLocation{})
Submit a kernel to a SYCL queue.
constexpr bool is_pow_of_two(T v) noexcept
determine if v is a power of two and check if v==0 Source : https://graphics.stanford....
Definition integer.hpp:49
namespace for the basegodunov model modules
A class that references multiple buffers or similar objects.