21 #ifndef FUB_CUTCELL_DATA_HPP
22 #define FUB_CUTCELL_DATA_HPP
29 inline std::array<double, 2>
Intersect(
const std::array<double, 2>& i1,
30 const std::array<double, 2>& i2) {
31 return {std::max(i1[0], i2[0]), std::min(i1[1], i2[1])};
35 static constexpr
auto sRank =
static_cast<std::size_t
>(Rank);
49 std::array<PatchDataView<const double, Rank>,
sRank>
52 std::array<PatchDataView<const double, Rank>,
sRank>
54 std::array<PatchDataView<const double, Rank>,
sRank>
56 std::array<PatchDataView<const double, Rank>,
sRank>
61 const std::array<std::ptrdiff_t, 2>&
index);
64 const std::array<std::ptrdiff_t, 3>&
index);
66 [[nodiscard]] Eigen::Vector2d
68 const std::array<std::ptrdiff_t, 2>&
index);
70 [[nodiscard]] Eigen::Vector3d
72 const std::array<std::ptrdiff_t, 3>&
index);
74 [[nodiscard]] Eigen::Vector2d
76 const std::array<std::ptrdiff_t, 2>&
index);
78 [[nodiscard]] Eigen::Vector3d
80 const std::array<std::ptrdiff_t, 3>&
index);
82 [[nodiscard]] Eigen::Vector2d
84 const std::array<std::ptrdiff_t, 2>&
index);
86 [[nodiscard]] Eigen::Vector3d
88 const std::array<std::ptrdiff_t, 3>&
index);
92 const Eigen::Vector2d& dx,
95 template <std::
size_t Rank>
96 Eigen::Matrix<double, Rank, 1>
GetOffset(
const std::array<std::ptrdiff_t, Rank>&
index) {
97 static constexpr
int iRank =
static_cast<int>(Rank);
98 Eigen::Matrix<double, iRank, 1> offset;
99 for (
int i = 0; i < iRank; ++i) {
100 offset[i] =
static_cast<double>(
index[i]);
106 Eigen::Matrix<double, Rank, 1>
109 const Eigen::Matrix<double, Rank, 1>& dx) {
110 const Eigen::Matrix<double, Rank, 1> relative_xM =
112 const Eigen::Matrix<double, Rank, 1> offset = GetOffset<Rank>(
index);
113 const Eigen::Matrix<double, Rank, 1> xM =
114 (offset + relative_xM).array() * dx.array() + 0.5 * dx.array();
119 Eigen::Matrix<double, Rank, 1>
122 const Eigen::Matrix<double, Rank, 1>& dx) {
123 const Eigen::Matrix<double, Rank, 1> relative_xB =
125 const Eigen::Matrix<double, Rank, 1> offset = GetOffset<Rank>(
index);
126 const Eigen::Matrix<double, Rank, 1> xB =
127 (offset + relative_xB).array() * dx.array() + 0.5 * dx.array();
The fub namespace.
Definition: AnyBoundaryCondition.hpp:31
Eigen::Vector2d GetBoundaryNormal(const CutCellData< 2 > &ccdata, const std::array< std::ptrdiff_t, 2 > &index)
Eigen::Vector2d GetUnshieldedCentroid(const CutCellData< 2 > &geom, const Index< 2 > &face, const Eigen::Vector2d &dx, Direction dir)
Eigen::Vector2d GetBoundaryCentroid(const CutCellData< 2 > &ccdata, const std::array< std::ptrdiff_t, 2 > &index)
Eigen::Matrix< double, Rank, 1 > GetAbsoluteBoundaryCentroid(const CutCellData< Rank > &geom, const Index< Rank > &index, const Eigen::Matrix< double, Rank, 1 > &dx)
Definition: CutCellData.hpp:120
Eigen::Matrix< double, Rank, 1 > GetAbsoluteVolumeCentroid(const CutCellData< Rank > &geom, const Index< Rank > &index, const Eigen::Matrix< double, Rank, 1 > &dx)
Definition: CutCellData.hpp:107
bool IsCutCell(const CutCellData< 2 > &geom, const std::array< std::ptrdiff_t, 2 > &index)
Direction
This is a type safe type to denote a dimensional split direction.
Definition: Direction.hpp:30
Eigen::Matrix< double, Rank, 1 > GetOffset(const std::array< std::ptrdiff_t, Rank > &index)
Definition: CutCellData.hpp:96
std::array< std::ptrdiff_t, static_cast< std::size_t >(Rank)> Index
Definition: PatchDataView.hpp:34
std::array< double, 2 > Intersect(const std::array< double, 2 > &i1, const std::array< double, 2 > &i2)
Definition: CutCellData.hpp:29
Eigen::Vector2d GetVolumeCentroid(const CutCellData< 2 > &ccdata, const std::array< std::ptrdiff_t, 2 > &index)
std::ptrdiff_t index
Definition: type_traits.hpp:179
Definition: CutCellData.hpp:34
std::array< PatchDataView< const double, Rank >, sRank > shielded_right_fractions
Definition: CutCellData.hpp:48
std::array< PatchDataView< const double, Rank >, sRank > shielded_right_fractions_rel
Definition: CutCellData.hpp:55
std::array< PatchDataView< const double, Rank >, sRank > unshielded_fractions
Definition: CutCellData.hpp:46
static constexpr auto sRank
Definition: CutCellData.hpp:35
PatchDataView< const double, Rank > volume_fractions
Definition: CutCellData.hpp:38
PatchDataView< const double, Rank+1 > distance_to_boundary_right
Definition: CutCellData.hpp:45
std::array< PatchDataView< const double, Rank >, sRank > shielded_left_fractions
Definition: CutCellData.hpp:47
std::array< PatchDataView< const double, Rank >, sRank > unshielded_fractions_rel
Definition: CutCellData.hpp:51
PatchDataView< const double, Rank+1 > boundary_centeroids
Definition: CutCellData.hpp:42
std::array< PatchDataView< const double, Rank >, sRank > face_fractions
Definition: CutCellData.hpp:40
std::array< PatchDataView< const double, Rank >, sRank > doubly_shielded_fractions_rel
Definition: CutCellData.hpp:57
PatchDataView< const double, Rank+1 > boundary_normals
Definition: CutCellData.hpp:41
PatchDataView< const double, Rank+1 > volume_centeroid
Definition: CutCellData.hpp:39
std::array< PatchDataView< const double, Rank >, sRank > shielded_left_fractions_rel
Definition: CutCellData.hpp:53
std::array< PatchDataView< const double, Rank >, sRank > doubly_shielded_fractions
Definition: CutCellData.hpp:50
PatchDataView< const double, Rank+1 > distance_to_boundary_left
Definition: CutCellData.hpp:44