Shamrock 2025.10.0
Astrophysical Code
Loading...
Searching...
No Matches
AMRGridRefinementHandler.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/vec.hpp"
24
26
27 template<class Tvec, class TgridVec>
29
30 class AMRBlockFinder;
31 class AMRLowering;
32
33 public:
34 using Tscal = shambase::VecComponent<Tvec>;
35 using Tgridscal = shambase::VecComponent<TgridVec>;
37 static constexpr u32 split_count = shambase::pow_constexpr<dim>(2);
38
41 using u_morton = u64;
42 using AMRBlock = typename Config::AMRBlock;
44 using OrientedAMRGraph = OrientedAMRGraph<Tvec, TgridVec>;
45
46 ShamrockCtx &context;
47 Config &solver_config;
48 Storage &storage;
49
50 AMRGridRefinementHandler(ShamrockCtx &context, Config &solver_config, Storage &storage)
51 : context(context), solver_config(solver_config), storage(storage) {}
52
53 void update_refinement();
54
55 private:
70 template<class UserAcc, class... T>
71 void gen_refine_block_changes(
74 T &&...args);
75
76 template<class UserAcc>
77 bool internal_refine_grid(shambase::DistributedData<sham::DeviceBuffer<u32>> &&refine_list);
78
79 template<class UserAcc>
80 bool internal_derefine_grid(
82
83 template<class UserAccCrit, class UserAccSplit, class UserAccMerge>
84 void internal_update_refinement();
85
86 inline PatchScheduler &scheduler() { return shambase::get_check_ref(context.sched); }
87 };
88
89} // namespace shammodels::basegodunov::modules
std::uint32_t u32
32 bit unsigned integer
std::uint64_t u64
64 bit unsigned integer
The MPI scheduler.
A buffer allocated in USM (Unified Shared Memory)
Represents a collection of objects distributed across patches identified by a u64 id.
void throw_with_loc(std::string message, SourceLocation loc=SourceLocation{})
Throw an exception and append the source location to it.
T & get_check_ref(const std::unique_ptr< T > &ptr, SourceLocation loc=SourceLocation())
Takes a std::unique_ptr and returns a reference to the object it holds. It throws a std::runtime_erro...
Definition memory.hpp:110
namespace for the basegodunov model modules
utility class to handle AMR blocks
Definition AMRBlock.hpp:35