Shamrock 2025.10.0
Astrophysical Code
Loading...
Searching...
No Matches
KarrasRadixTreeAABB.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
22#include "shambackends/math.hpp"
27#include <functional>
28#include <utility>
29
30namespace shamtree {
39 template<class Tvec>
40 class KarrasRadixTreeAABB;
41} // namespace shamtree
42
43template<class Tvec>
45
46 public:
49
52
55 sham::DeviceBuffer<Tvec> &&buf_cell_min, sham::DeviceBuffer<Tvec> &&buf_cell_max)
56 : buf_aabb_min(std::move(buf_cell_min)), buf_aabb_max(std::move(buf_cell_max)) {}
57
58 static inline KarrasRadixTreeAABB make_empty(sham::DeviceScheduler_ptr dev_sched) {
60 sham::DeviceBuffer<Tvec>(0, dev_sched), sham::DeviceBuffer<Tvec>(0, dev_sched)};
61 }
62};
63
64namespace shamtree {
65
66 template<class Tvec>
67 KarrasRadixTreeAABB<Tvec> new_empty_karras_radix_tree_aabb() {
68 auto dev_sched = shamsys::instance::get_compute_scheduler_ptr();
69 return KarrasRadixTreeAABB<Tvec>(
70 sham::DeviceBuffer<Tvec>(0, dev_sched), sham::DeviceBuffer<Tvec>(0, dev_sched));
71 }
72
85 template<class Tvec>
86 KarrasRadixTreeAABB<Tvec> prepare_karras_radix_tree_aabb(
87 const KarrasRadixTree &tree, KarrasRadixTreeAABB<Tvec> &&recycled_tree_aabb);
88
103 template<class Tvec>
104 void propagate_aabb_up(KarrasRadixTreeAABB<Tvec> &tree_aabb, const KarrasRadixTree &tree);
105
116 template<class Tvec>
117 KarrasRadixTreeAABB<Tvec> compute_tree_aabb(
118 const KarrasRadixTree &tree,
119 KarrasRadixTreeAABB<Tvec> &&recycled_tree_aabb,
120 const std::function<void(KarrasRadixTreeAABB<Tvec> &, u32)> &fct_fill_leaf);
121
135 template<class Tvec>
136 KarrasRadixTreeAABB<Tvec> compute_tree_aabb_from_positions(
137 const KarrasRadixTree &tree,
138 const LeafCellIterator &cell_it,
139 KarrasRadixTreeAABB<Tvec> &&recycled_tree_aabb,
140 sham::DeviceBuffer<Tvec> &positions);
141
143 template<class Tvec>
144 KarrasRadixTreeAABB<Tvec> compute_tree_aabb_from_position_ranges(
145 const KarrasRadixTree &tree,
146 const LeafCellIterator &cell_it,
147 KarrasRadixTreeAABB<Tvec> &&recycled_tree_aabb,
150
151} // namespace shamtree
void propagate_aabb_up(KarrasRadixTreeAABB< Tvec > &tree_aabb, const KarrasRadixTree &tree)
Propagates the axis-aligned bounding boxes (AABBs) upwards in the tree.
KarrasRadixTreeAABB< Tvec > compute_tree_aabb(const KarrasRadixTree &tree, KarrasRadixTreeAABB< Tvec > &&recycled_tree_aabb, const std::function< void(KarrasRadixTreeAABB< Tvec > &, u32)> &fct_fill_leaf)
Compute the AABB of all cells in the tree.
KarrasRadixTreeAABB< Tvec > compute_tree_aabb_from_position_ranges(const KarrasRadixTree &tree, const LeafCellIterator &cell_it, KarrasRadixTreeAABB< Tvec > &&recycled_tree_aabb, sham::DeviceBuffer< Tvec > &min, sham::DeviceBuffer< Tvec > &max)
same but for position ranges
KarrasRadixTreeAABB< Tvec > compute_tree_aabb_from_positions(const KarrasRadixTree &tree, const LeafCellIterator &cell_it, KarrasRadixTreeAABB< Tvec > &&recycled_tree_aabb, sham::DeviceBuffer< Tvec > &positions)
Compute the AABB of all cells in the tree from positions.
KarrasRadixTreeAABB< Tvec > prepare_karras_radix_tree_aabb(const KarrasRadixTree &tree, KarrasRadixTreeAABB< Tvec > &&recycled_tree_aabb)
Prepare a KarrasRadixTreeAABB from a KarrasRadixTree.
Header file describing a Node Instance.
std::uint32_t u32
32 bit unsigned integer
A buffer allocated in USM (Unified Shared Memory)
size_t get_size() const
Gets the number of elements in the buffer.
sham::DeviceBuffer< Tvec > buf_aabb_max
right child id (size = internal_count)
KarrasRadixTreeAABB(sham::DeviceBuffer< Tvec > &&buf_cell_min, sham::DeviceBuffer< Tvec > &&buf_cell_max)
CTOR.
u32 get_total_cell_count()
Get internal cell count.
sham::DeviceBuffer< Tvec > buf_aabb_min
left child id (size = internal_count)
STL namespace.