21 #ifndef FUB_AMREX_INITIAL_DATA_HPP
22 #define FUB_AMREX_INITIAL_DATA_HPP
37 template <
typename Gr
iddingAlgorithm>
struct InitialDataStrategy {
38 using PatchLevel =
typename GridTraits<GriddingAlgorithm>::PatchLevel;
40 virtual ~InitialDataStrategy() =
default;
42 virtual void InitializeData(PatchLevel& patch_level,
46 virtual std::unique_ptr<InitialDataStrategy> Clone()
const = 0;
64 template <
typename T,
typename = std::enable_if_t<
105 template <
typename T,
typename Gr
iddingAlgorithm>
106 struct InitialDataWrapper :
public InitialDataStrategy<GriddingAlgorithm> {
109 InitialDataWrapper(
const T& initial_data) :
initial_data_{initial_data} {}
110 InitialDataWrapper(T&& initial_data)
114 int level,
Duration time)
override {
115 initial_data_.InitializeData(patch_level, grid, level, time);
118 std::unique_ptr<InitialDataStrategy<GriddingAlgorithm>>
119 Clone()
const override {
120 return std::make_unique<InitialDataWrapper<T, GriddingAlgorithm>>(
128 template <
typename Gr
iddingAlgorithm>
129 template <
typename T,
typename>
132 std::make_unique<detail::InitialDataWrapper<std::decay_t<T>,
GriddingAlgorithm>>(
133 std::forward<T>(initial_data))} {}
135 template <
typename Gr
iddingAlgorithm>
137 : initial_data_(other.initial_data_->Clone()) {}
139 template <
typename Gr
iddingAlgorithm>
143 return *
this = std::move(tmp);
149 template <
typename Gr
iddingAlgorithm>
154 return initial_data_->InitializeData(patch_level, grid, level, time);
This class is a polymoprhic value type which stores components to initialize a gridding algorithm dur...
Definition: AnyInitialData.hpp:53
AnyInitialData(AnyInitialData &&) noexcept=default
Moves the other implementation without allocation and leaves an empty object.
AnyInitialData & operator=(const AnyInitialData &other)
Copies the other implementation and invokes a memory allocation.
Definition: AnyInitialData.hpp:141
void InitializeData(PatchLevel &patch_level, const GriddingAlgorithm &grid, int level, Duration time)
Initializes a patch level within a gridding algorithm.
Definition: AnyInitialData.hpp:150
AnyInitialData()=default
Constructs an empty object that does no initialization.
typename GridTraits< GriddingAlgorithm >::PatchLevel PatchLevel
Definition: AnyInitialData.hpp:55
std::unique_ptr< detail::InitialDataStrategy< GriddingAlgorithm > > initial_data_
Definition: AnyInitialData.hpp:95
The fub namespace.
Definition: AnyBoundaryCondition.hpp:31
std::chrono::duration< double > Duration
Definition: Duration.hpp:31
std::is_same< std::decay_t< X >, Y > decays_to
Definition: type_traits.hpp:296
This file adds basic type traits utilities which are not yet implemented in all standard libraries.