Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,53 @@ namespace shammodels::basegodunov::modules {
*/
template<class UserAcc, class... T>
void gen_refine_block_changes(
shambase::DistributedData<sham::DeviceBuffer<u32>> &refine_list,
shambase::DistributedData<sham::DeviceBuffer<u32>> &derefine_list,
shambase::DistributedData<sham::DeviceBuffer<u32>> &refine_flags,
shambase::DistributedData<sham::DeviceBuffer<u32>> &derefine_flags,
T &&...args);

/**
* @brief Enforces the 2:1 refinement ratio for blocks.
*
* This function iterates through blocks marked for refinement and ensures that
* adjacent, coarser blocks are also marked for refinement to maintain the 2:1
* grid balance. This is done iteratively to propagate the refinement as needed.
* @param refine_flags refinement flags
* @param refine_list refinement maps
*/
void enforce_two_to_one_for_refinement(
shambase::DistributedData<sham::DeviceBuffer<u32>> &refine_flags,
shambase::DistributedData<sham::DeviceBuffer<u32>> &refine_list);

/**
* @brief Check geometrical validity for derefinement
*
* This function iterates over all blocks flagged for derefinement and checks
* whether all of their siblings also request derefinement, and if the merge operation can
* be done. If these conditions are satisfied, the merge (coarsening) operation is
* considered valid.
*
* To avoid duplicate operations, only the first block among each group of
* eight siblings is retained when all validity checks succeed.
*
* @param derefine_flags Derefinement flags
* @param refine_flags Refinement flags
*/
void check_geometrical_validity_for_derefinement(
shambase::DistributedData<sham::DeviceBuffer<u32>> &derefine_flags,
shambase::DistributedData<sham::DeviceBuffer<u32>> &refine_flags);

/**
* @brief Enforces the 2:1 derefinement ratio for blocks.
*
* This function iterates through blocks marked for derefinement and ensures that
* after derefinement the 2:1 is still valid.
* @param derefine_flags derefinement flags
* @param derefine_list derefinement maps
*/
void enforce_two_to_one_for_derefinement(
shambase::DistributedData<sham::DeviceBuffer<u32>> &derefine_flags,
shambase::DistributedData<sham::DeviceBuffer<u32>> &derefine_list);

template<class UserAcc>
bool internal_refine_grid(shambase::DistributedData<sham::DeviceBuffer<u32>> &&refine_list);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ namespace shammodels::basegodunov {
using Tscal = shambase::VecComponent<Tvec>;
using Tgridscal = shambase::VecComponent<TgridVec>;
static constexpr u32 dim = shambase::VectorProperties<Tvec>::dimension;
using TgridUint = typename std::make_unsigned<shambase::VecComponent<TgridVec>>::type;

using RTree = RadixTree<Tmorton, TgridVec>;

Expand Down Expand Up @@ -141,6 +142,9 @@ namespace shammodels::basegodunov {

std::shared_ptr<shamrock::solvergraph::DDSharedBuffers<u32>> idx_in_ghost;

std::shared_ptr<shamrock::solvergraph::ScalarsEdge<TgridVec>> level0_size;
std::shared_ptr<shamrock::solvergraph::Field<TgridUint>> amr_block_levels;

std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>> rho_face_xp;
std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>> rho_face_xm;
std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>> rho_face_yp;
Expand Down
Loading