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