20#ifndef PAVE_DYNAMIC_SOURCE_DATA_HPP
21#define PAVE_DYNAMIC_SOURCE_DATA_HPP
28#include <unordered_map>
34template <
typename Scalar>
63 using ElmT = std::remove_cv_t<T>;
71 return this->begin_[this->index(i)];
81 template <
typename Ret = SourceDataSpan&>
82 constexpr std::enable_if_t<! std::is_const_v<T>, Ret>
85 this->begin_[this->index(i)] = value;
96 template <
typename U,
typename Ret = SourceDataSpan&>
97 constexpr std::enable_if_t<! std::is_const_v<T>, Ret>
100 std::copy_n(src.begin_, NumItems, this->begin_);
106 static constexpr auto NumItems =
107 static_cast<std::size_t
>(Item::Last_Do_Not_Use);
116 explicit SourceDataSpan(T* begin)
124 constexpr std::size_t index(
const Item i)
const
126 const auto ix =
static_cast<std::size_t
>(i);
127 if (ix >= NumItems) {
128 throw std::invalid_argument {
129 "Index out of bounds"
159 [[nodiscard]] SourceDataSpan<Scalar>
172 [[nodiscard]] SourceDataSpan<const Scalar>
192 [[nodiscard]] SourceDataSpan<Scalar>
193 sourceTerm(
const std::size_t ix, std::vector<Scalar>& src);
204 void reconstruct(
const std::vector<std::size_t>& sourceLocations);
220 std::unordered_map<std::size_t, typename std::vector<Scalar>::size_type> ix_{};
230 void buildLocationMapping(
const std::vector<std::size_t>& sourceLocations);
237 [[nodiscard]] std::optional<typename std::vector<Scalar>::size_type>
238 index(
const std::size_t source)
const;
249 [[nodiscard]]
virtual typename std::vector<Scalar>::size_type
250 storageIndex(
typename std::vector<Scalar>::size_type elemIndex)
const
Ad hoc implementation of fixed-width span/view of an underlying contiguous range of elements.
Definition PAvgDynamicSourceData.hpp:45
constexpr ElmT operator[](const Item i) const
Read-only access to numerical value of specified item.
Definition PAvgDynamicSourceData.hpp:69
constexpr std::enable_if_t<! std::is_const_v< T >, Ret > set(const Item i, const ElmT value)
Assign specified item.
Definition PAvgDynamicSourceData.hpp:83
constexpr std::enable_if_t<! std::is_const_v< T >, Ret > operator=(const SourceDataSpan< U > src)
Assign all items.
Definition PAvgDynamicSourceData.hpp:98
Item
Supported items of dynamic data per source location.
Definition PAvgDynamicSourceData.hpp:52
Dynamic source data for block-average pressure calculations.
Definition PAvgDynamicSourceData.hpp:36
PAvgDynamicSourceData(const std::vector< std::size_t > &sourceLocations)
Constructor.
Definition PAvgDynamicSourceData.cpp:35
virtual ~PAvgDynamicSourceData()
Destructor.
Definition PAvgDynamicSourceData.hpp:147
SourceDataSpan< Scalar > operator[](const std::size_t source)
Acquire read/write span of data items corresponding to a single source location.
Definition PAvgDynamicSourceData.cpp:43
static constexpr std::size_t numSpanItems() noexcept
Provide number of span items using function syntax.
Definition PAvgDynamicSourceData.hpp:212
void reconstruct(const std::vector< std::size_t > &sourceLocations)
Reconstruct Source Data backing storage and internal mapping tables.
Definition PAvgDynamicSourceData.cpp:79
std::vector< Scalar > src_
Contiguous array of data items for all source locations.
Definition PAvgDynamicSourceData.hpp:180
SourceDataSpan< Scalar > sourceTerm(const std::size_t ix, std::vector< Scalar > &src)
Form mutable data span into non-default backing store.
Definition PAvgDynamicSourceData.cpp:71
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition Exceptions.hpp:30