6 #include <dune/grid/common/mcmgmapper.hh> 8 #include <amdis/Output.hpp> 9 #include <amdis/typetree/TreeContainer.hpp> 18 enum class DataTransferOperation {
25 template <
class Container>
33 virtual std::unique_ptr<DataTransferInterface> clone()
const = 0;
36 virtual void preAdapt(Container
const& container,
bool mightCoarsen) = 0;
39 virtual void adapt(Container& container) = 0;
42 virtual void postAdapt(Container& container) = 0;
50 template <
class Container>
57 std::unique_ptr<Interface>
clone()
const override 59 return std::make_unique<NoDataTransfer>();
62 void preAdapt(Container
const&,
bool)
override {}
64 void adapt(Container& container)
override 73 template <
class Node,
class Container,
class Basis>
81 template <
class Container,
class Basis>
87 using GridView =
typename Basis::GridView;
88 using Grid =
typename GridView::Grid;
90 using Element =
typename GridView::template Codim<0>::Entity;
91 using Geometry =
typename Element::Geometry;
92 using LocalCoordinate =
typename Geometry::LocalCoordinate;
93 using IdType =
typename Grid::LocalIdSet::IdType;
96 using NodeElementData =
typename NodeDataTransfer<Node, Container, Basis>::NodeElementData;
104 std::unique_ptr<Interface>
clone()
const override 106 return std::make_unique<DataTransfer<Container, Basis>>(basis_);
112 void preAdapt(Container
const& coeff,
bool mightCoarsen)
override;
119 void adapt(Container& coeff)
override;
124 void postAdapt(Container& coeff)
override;
128 std::shared_ptr<Basis const> basis_;
131 using PersistentContainer = std::map<IdType, ElementData>;
132 PersistentContainer persistentContainer_;
135 using Mapper = Dune::LeafMultipleCodimMultipleGeomTypeMapper<Grid>;
139 template <
class Node>
142 NodeDataTransferContainer nodeDataTransfer_;
147 template <
class Container>
153 template <
class Basis>
154 static std::unique_ptr<Interface> create(DataTransferOperation op, std::shared_ptr<Basis> basis)
158 case DataTransferOperation::NO_OPERATION:
159 return std::make_unique<NoDataTransfer<Container>>();
160 case DataTransferOperation::INTERPOLATE:
161 return std::make_unique<DataTransfer<Container, Basis>>(std::move(basis));
176 template <
class Container>
184 template <
class Basis>
186 : impl_(std::move(Factory::create(op, basis)))
190 : impl_(std::move(that.impl_->clone()))
197 impl_ = std::move(that.impl_->clone());
201 Self& operator=(
Self&& that) =
default;
203 void preAdapt(Container
const& c,
bool b) { impl_->preAdapt(c, b); }
205 void adapt(Container& c) { impl_->adapt(c); }
207 void postAdapt(Container& c) { impl_->postAdapt(c); }
210 std::unique_ptr<Interface> impl_;
217 #include "DataTransfer.inc.hpp" std::unique_ptr< Interface > clone() const override
Clone method.
Definition: DataTransfer.hpp:57
void adapt(Container &container) override
Interpolate data to new grid after grid adaption.
Definition: DataTransfer.hpp:64
void error_exit(std::string const &str, Args &&... args)
print a message and exit
Definition: Output.hpp:142
void preAdapt(Container const &, bool) override
Collect data that is needed before grid adaption.
Definition: DataTransfer.hpp:62
Definition: DataTransfer.hpp:74
Contains all classes needed for solving linear and non linear equation systems.
Definition: AdaptBase.hpp:6
constexpr bool LocalView
A Dune::Functions::LocalView type.
Definition: Concepts.hpp:182
Node_t< typename GlobalBasis::PreBasis, PrefixPath > Tree
Tree of local finite elements / local shape function sets.
Definition: LocalView.hpp:40
Interface for Containers allowing data transfer between grid changes.
Definition: DataTransfer.hpp:26
std::unique_ptr< Interface > clone() const override
Clone method.
Definition: DataTransfer.hpp:104
Factory to create DataTransfer objects based on the DataTransferOperation.
Definition: DataTransfer.hpp:148
Definition: DataTransfer.hpp:177
Definition: DataTransfer.hpp:82
Implementation of DataTransferInterface that does not interpolate, but just resizes the containers to...
Definition: DataTransfer.hpp:51
TYPEOF(makeTreeContainer< NodeData, leafOnly >(std::declval< const Tree & >())) TreeContainer
Definition: TreeContainer.hpp:354
void postAdapt(Container &) override
Perform cleanup after grid adaption.
Definition: DataTransfer.hpp:69