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.