Shamrock
2025.10.0
Astrophysical Code
Loading...
Searching...
No Matches
shammodels
common
include
shammodels
common
amr
AMRBlockStencil.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
18
#include "
shambase/aliases_int.hpp
"
19
#include "
shambase/type_traits.hpp
"
20
#include <array>
21
#include <variant>
22
namespace
shammodels::amr::block {
23
24
struct
SameLevel
{
25
u32
block_idx;
26
};
27
28
struct
Levelp1
{
29
std::array<u32, 8> block_child_idxs;
30
};
31
32
struct
Levelm1
{
33
u32
block_idx;
34
};
35
36
struct
None
{};
37
42
struct
alignas
(8)
StencilElement
{
43
44
enum
{ SAME, LEVELP1, LEVELM1, NONE } tag = NONE;
45
46
union
{
47
SameLevel
level_d0;
48
Levelm1
level_dm1;
49
Levelp1
level_dp1;
50
None
none;
51
};
52
53
static
StencilElement
make_none() {
54
StencilElement
ret;
55
ret.tag = NONE;
56
ret.none = {};
57
return
ret;
58
}
59
static
StencilElement
make_same_level(
SameLevel
l) {
60
StencilElement
ret;
61
ret.tag = SAME;
62
ret.level_d0 = l;
63
return
ret;
64
}
65
static
StencilElement
make_level_p1(
Levelp1
l) {
66
StencilElement
ret;
67
ret.tag = LEVELP1;
68
ret.level_dp1 = l;
69
return
ret;
70
}
71
static
StencilElement
make_level_m1(
Levelm1
l) {
72
StencilElement
ret;
73
ret.tag = LEVELM1;
74
ret.level_dm1 = l;
75
return
ret;
76
}
77
78
template
<
class
Visitor1,
class
Visitor2,
class
Visitor3,
class
Visitor4>
79
inline
void
visitor(Visitor1 &&f1, Visitor2 &&f2, Visitor3 &&f3, Visitor4 &&f4) {
80
switch
(tag) {
81
case
SAME : f1(level_d0);
break
;
82
case
LEVELM1: f2(level_dm1);
break
;
83
case
LEVELP1: f3(level_dp1);
break
;
84
case
NONE : f4(none);
break
;
85
}
86
}
87
};
88
89
}
// namespace shammodels::amr::block
aliases_int.hpp
u32
std::uint32_t u32
32 bit unsigned integer
Definition
aliases_int.hpp:27
type_traits.hpp
Traits for C++ types.
shammodels::amr::block::Levelm1
Definition
AMRBlockStencil.hpp:32
shammodels::amr::block::Levelp1
Definition
AMRBlockStencil.hpp:28
shammodels::amr::block::None
Definition
AMRBlockStencil.hpp:36
shammodels::amr::block::SameLevel
Definition
AMRBlockStencil.hpp:24
shammodels::amr::block::StencilElement
Stencil element, describe the state of a cell relative to another.
Definition
AMRBlockStencil.hpp:42
Generated on Wed May 13 2026 13:21:49 for Shamrock by
1.9.8