3#ifndef DUNE_GRID_COMMON_GRIDFACTORY_HH
4#define DUNE_GRID_COMMON_GRIDFACTORY_HH
13#include <dune/common/deprecated.hh>
14#define DUNE_FUNCTION_HH_SILENCE_DEPRECATION
15#include <dune/common/function.hh>
16#include <dune/common/fvector.hh>
17#include <dune/common/parallel/mpihelper.hh>
19#include <dune/geometry/type.hh>
69 template <
class Gr
idType>
81 typedef typename GridType::ctype
ctype;
99 virtual void insertVertex(
const FieldVector<ctype,dimworld>& pos) = 0;
109 const std::vector<unsigned int>& vertices) = 0;
111 DUNE_NO_DEPRECATED_BEGIN
123 [[deprecated(
"[After Dune 2.7]: VirtualFunction is deprecated, use the "
124 "overload taking a std::function instead")]]
127 [[maybe_unused]]
const std::vector<unsigned int>& vertices,
128 [[maybe_unused]]
const std::shared_ptr<VirtualFunction<
129 FieldVector<ctype,dimension>,
130 FieldVector<ctype,dimworld>
131 > >& elementParametrization)
133 DUNE_THROW(
GridError,
"This grid does not support parametrized elements!");
135 DUNE_NO_DEPRECATED_END
150 const std::vector<unsigned int>& vertices,
151 std::function<FieldVector<ctype,dimworld>
152 (FieldVector<ctype,dimension>)>
153 elementParametrization)
158 using Domain = FieldVector<ctype,dimension>;
159 using Range = FieldVector<ctype,dimworld>;
160 DUNE_NO_DEPRECATED_BEGIN
162 makeVirtualFunction<Domain, Range>(std::move(elementParametrization));
164 std::make_unique<
decltype(f)>(std::move(f)));
165 DUNE_NO_DEPRECATED_END
193 DUNE_THROW(
GridError,
"This grid does not support parametrized boundary segments!");
220 DUNE_THROW( NotImplemented,
"insertion indices have not yet been implemented." );
241 DUNE_THROW( NotImplemented,
"insertion indices have not yet been implemented." );
264 insertionIndex ( [[maybe_unused]]
const typename GridType::LeafIntersection &intersection )
const
266 DUNE_THROW( NotImplemented,
"insertion indices have not yet been implemented." );
284 wasInserted ( [[maybe_unused]]
const typename GridType::LeafIntersection &intersection )
const
286 DUNE_THROW( NotImplemented,
"insertion indices have not yet been implemented." );
289 using Communication = Dune::CollectiveCommunication<typename MPIHelper::MPICommunicator>;
311 template <
class Gr
idType>
317 enum {dimworld = GridType::dimensionworld};
320 typedef typename GridType::ctype ctype;
329 DUNE_THROW(
GridError,
"There is no grid factory for this grid type!");
333 virtual void insertVertex([[maybe_unused]]
const FieldVector<ctype,dimworld>& pos) {
334 DUNE_THROW(
GridError,
"There is no grid factory for this grid type!");
345 [[maybe_unused]]
const std::vector<unsigned int>& vertices) {
346 DUNE_THROW(
GridError,
"There is no grid factory for this grid type!");
363 DUNE_THROW(
GridError,
"There is no grid factory for this grid type!");
371 DUNE_THROW(
GridError,
"There is no grid factory for this grid type!");
Base class for grid boundary segments of arbitrary geometry.
Include standard header files.
Definition: agrid.hh:58
Base class for classes implementing geometries of boundary segments.
Definition: boundarysegment.hh:92
Base class for exceptions in Dune grid modules.
Definition: exceptions.hh:18
Provide a generic factory class for unstructured grids.
Definition: common/gridfactory.hh:71
virtual void insertBoundarySegment(const std::vector< unsigned int > &vertices, const std::shared_ptr< BoundarySegment< dimension, dimworld > > &boundarySegment)
insert an arbitrarily shaped boundary segment
Definition: common/gridfactory.hh:190
virtual unsigned int insertionIndex(const typename Codim< 0 >::Entity &entity) const
obtain an element's insertion index
Definition: common/gridfactory.hh:218
virtual void insertElement(const GeometryType &type, const std::vector< unsigned int > &vertices)=0
Insert an element into the coarse grid.
virtual std::unique_ptr< GridType > createGrid()=0
Finalize grid creation and hand over the grid.
@ dimworld
Definition: common/gridfactory.hh:78
virtual void insertBoundarySegment(const std::vector< unsigned int > &vertices)=0
insert a boundary segment
virtual ~GridFactoryInterface()
virtual destructor
Definition: common/gridfactory.hh:95
virtual void insertVertex(const FieldVector< ctype, dimworld > &pos)=0
Insert a vertex into the coarse grid.
static const int dimension
dimension of the grid
Definition: common/gridfactory.hh:75
virtual unsigned int insertionIndex(const typename GridType::LeafIntersection &intersection) const
obtain a boundary's insertion index
Definition: common/gridfactory.hh:264
GridType::ctype ctype
Type used by the grid for coordinates.
Definition: common/gridfactory.hh:81
GridFactoryInterface()
Default constructor.
Definition: common/gridfactory.hh:91
Communication comm() const
Return the Communication used by the grid factory.
Definition: common/gridfactory.hh:295
virtual DUNE_NO_DEPRECATED_END void insertElement(const GeometryType &type, const std::vector< unsigned int > &vertices, std::function< FieldVector< ctype, dimworld >(FieldVector< ctype, dimension >)> elementParametrization)
Insert a parametrized element into the coarse grid.
Definition: common/gridfactory.hh:149
virtual unsigned int insertionIndex(const typename Codim< dimension >::Entity &entity) const
obtain a vertex' insertion index
Definition: common/gridfactory.hh:239
Dune::CollectiveCommunication< typename MPIHelper::MPICommunicator > Communication
Definition: common/gridfactory.hh:289
virtual bool wasInserted(const typename GridType::LeafIntersection &intersection) const
determine whether an intersection was inserted
Definition: common/gridfactory.hh:284
virtual DUNE_NO_DEPRECATED_BEGIN void insertElement(const GeometryType &type, const std::vector< unsigned int > &vertices, const std::shared_ptr< VirtualFunction< FieldVector< ctype, dimension >, FieldVector< ctype, dimworld > > > &elementParametrization)
Insert a parametrized element into the coarse grid.
Definition: common/gridfactory.hh:126
Definition: common/gridfactory.hh:86
GridType::template Codim< codim >::Entity Entity
Definition: common/gridfactory.hh:87
Provide a generic factory class for unstructured grids.
Definition: common/gridfactory.hh:312
virtual void insertElement(const GeometryType &type, const std::vector< unsigned int > &vertices)
Insert an element into the coarse grid.
Definition: common/gridfactory.hh:344
virtual void insertVertex(const FieldVector< ctype, dimworld > &pos)
Insert a vertex into the coarse grid.
Definition: common/gridfactory.hh:333
virtual void insertBoundarySegment(const std::vector< unsigned int > &vertices)
insert a boundary segment
Definition: common/gridfactory.hh:362
GridFactory()
Default constructor.
Definition: common/gridfactory.hh:328
virtual std::unique_ptr< GridType > createGrid()
Finalize grid creation and hand over the grid.
Definition: common/gridfactory.hh:370
Different resources needed by all grid implementations.