DUNE PDELab (2.8)

gridfactory.hh
Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2// vi: set et ts=4 sw=2 sts=2:
3#ifndef DUNE_GRID_COMMON_GRIDFACTORY_HH
4#define DUNE_GRID_COMMON_GRIDFACTORY_HH
5
10#include <memory>
11#include <vector>
12
14#define DUNE_FUNCTION_HH_SILENCE_DEPRECATION
18
19#include <dune/geometry/type.hh>
20
23
24namespace Dune
25{
26
69 template <class GridType>
71 {
72
73 protected:
75 static const int dimension = GridType::dimension;
76
78 enum {dimworld = GridType::dimensionworld};
79
81 typedef typename GridType::ctype ctype;
82
83 public:
84 template< int codim >
85 struct Codim
86 {
87 typedef typename GridType::template Codim< codim >::Entity Entity;
88 };
89
92 {}
93
96 {}
97
99 virtual void insertVertex(const FieldVector<ctype,dimworld>& pos) = 0;
100
108 virtual void insertElement(const GeometryType& type,
109 const std::vector<unsigned int>& vertices) = 0;
110
123 [[deprecated("[After Dune 2.7]: VirtualFunction is deprecated, use the "
124 "overload taking a std::function instead")]]
125 virtual void
126 insertElement([[maybe_unused]] const GeometryType& type,
127 [[maybe_unused]] const std::vector<unsigned int>& vertices,
128 [[maybe_unused]] const std::shared_ptr<VirtualFunction<
131 > >& elementParametrization)
132 {
133 DUNE_THROW(GridError, "This grid does not support parametrized elements!");
134 }
136
148 virtual void
150 const std::vector<unsigned int>& vertices,
151 std::function<FieldVector<ctype,dimworld>
153 elementParametrization)
154 {
155 // note: this forward to the overload taking a Virtual function during
156 // the deprecation period, once that is over it should the throwing of
157 // the exception should be moved here directly
158 using Domain = FieldVector<ctype,dimension>;
159 using Range = FieldVector<ctype,dimworld>;
161 auto f =
162 makeVirtualFunction<Domain, Range>(std::move(elementParametrization));
163 insertElement(type, vertices,
164 std::make_unique<decltype(f)>(std::move(f)));
166 }
167
181 virtual void insertBoundarySegment(const std::vector<unsigned int>& vertices) = 0;
182
190 virtual void insertBoundarySegment([[maybe_unused]] const std::vector<unsigned int>& vertices,
191 [[maybe_unused]] const std::shared_ptr<BoundarySegment<dimension,dimworld> >& boundarySegment)
192 {
193 DUNE_THROW(GridError, "This grid does not support parametrized boundary segments!");
194 }
195
200 virtual std::unique_ptr<GridType> createGrid() = 0;
201
217 virtual unsigned int
218 insertionIndex ( [[maybe_unused]] const typename Codim< 0 >::Entity &entity ) const
219 {
220 DUNE_THROW( NotImplemented, "insertion indices have not yet been implemented." );
221 }
222
238 virtual unsigned int
239 insertionIndex ( [[maybe_unused]] const typename Codim< dimension >::Entity &entity ) const
240 {
241 DUNE_THROW( NotImplemented, "insertion indices have not yet been implemented." );
242 }
243
263 virtual unsigned int
264 insertionIndex ( [[maybe_unused]] const typename GridType::LeafIntersection &intersection ) const
265 {
266 DUNE_THROW( NotImplemented, "insertion indices have not yet been implemented." );
267 }
268
269
283 virtual bool
284 wasInserted ( [[maybe_unused]] const typename GridType::LeafIntersection &intersection ) const
285 {
286 DUNE_THROW( NotImplemented, "insertion indices have not yet been implemented." );
287 }
288
290
296 {
298 }
299 };
300
301
311 template <class GridType>
312 class GridFactory : public GridFactoryInterface<GridType> {
313
315
317 enum {dimworld = GridType::dimensionworld};
318
320 typedef typename GridType::ctype ctype;
321
322 public:
323
324 // use default implementation from base class
326
329 DUNE_THROW(GridError, "There is no grid factory for this grid type!");
330 }
331
333 virtual void insertVertex([[maybe_unused]] const FieldVector<ctype,dimworld>& pos) {
334 DUNE_THROW(GridError, "There is no grid factory for this grid type!");
335 }
336
344 virtual void insertElement([[maybe_unused]] const GeometryType& type,
345 [[maybe_unused]] const std::vector<unsigned int>& vertices) {
346 DUNE_THROW(GridError, "There is no grid factory for this grid type!");
347 }
348
362 virtual void insertBoundarySegment([[maybe_unused]] const std::vector<unsigned int>& vertices) {
363 DUNE_THROW(GridError, "There is no grid factory for this grid type!");
364 }
365
370 virtual std::unique_ptr<GridType> createGrid() {
371 DUNE_THROW(GridError, "There is no grid factory for this grid type!");
372 }
373
374 };
375
376}
377
378#endif
Base class for grid boundary segments of arbitrary geometry.
Collective communication interface and sequential default implementation.
Definition: communication.hh:98
Wrapper class for entities.
Definition: entity.hh:64
vector space out of a tensor product of fields.
Definition: fvector.hh:95
Unique label for each type of entities that can occur in DUNE grids.
Definition: type.hh:123
Base class for exceptions in Dune grid modules.
Definition: exceptions.hh:18
Provide a generic factory class for unstructured grids.
Definition: 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: gridfactory.hh:190
virtual unsigned int insertionIndex(const typename Codim< 0 >::Entity &entity) const
obtain an element's insertion index
Definition: 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.
virtual void insertBoundarySegment(const std::vector< unsigned int > &vertices)=0
insert a boundary segment
virtual ~GridFactoryInterface()
virtual destructor
Definition: 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: gridfactory.hh:75
virtual unsigned int insertionIndex(const typename GridType::LeafIntersection &intersection) const
obtain a boundary's insertion index
Definition: gridfactory.hh:264
GridType::ctype ctype
Type used by the grid for coordinates.
Definition: gridfactory.hh:81
GridFactoryInterface()
Default constructor.
Definition: gridfactory.hh:91
Communication comm() const
Return the Communication used by the grid factory.
Definition: 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: gridfactory.hh:149
virtual unsigned int insertionIndex(const typename Codim< dimension >::Entity &entity) const
obtain a vertex' insertion index
Definition: gridfactory.hh:239
virtual bool wasInserted(const typename GridType::LeafIntersection &intersection) const
determine whether an intersection was inserted
Definition: 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: gridfactory.hh:126
Provide a generic factory class for unstructured grids.
Definition: gridfactory.hh:312
virtual void insertElement(const GeometryType &type, const std::vector< unsigned int > &vertices)
Insert an element into the coarse grid.
Definition: gridfactory.hh:344
virtual void insertVertex(const FieldVector< ctype, dimworld > &pos)
Insert a vertex into the coarse grid.
Definition: gridfactory.hh:333
virtual void insertBoundarySegment(const std::vector< unsigned int > &vertices)
insert a boundary segment
Definition: gridfactory.hh:362
GridFactory()
Default constructor.
Definition: gridfactory.hh:328
virtual std::unique_ptr< GridType > createGrid()
Finalize grid creation and hand over the grid.
Definition: gridfactory.hh:370
static MPICommunicator getLocalCommunicator()
get a local communicator
Definition: mpihelper.hh:207
Default exception for dummy implementations.
Definition: exceptions.hh:261
Virtual base class template for function classes.
Definition: function.hh:85
Different resources needed by all grid implementations.
Definition of the DUNE_DEPRECATED macro for the case that config.h is not available.
Simple base class templates for functions.
Implements a vector constructed from a given type representing a field and a compile-time given size.
#define DUNE_NO_DEPRECATED_END
Ignore deprecation warnings (end)
Definition: deprecated.hh:61
#define DUNE_NO_DEPRECATED_BEGIN
Ignore deprecation warnings (start)
Definition: deprecated.hh:55
#define DUNE_THROW(E, m)
Definition: exceptions.hh:216
Helpers for dealing with MPI.
Dune namespace.
Definition: alignedallocator.hh:11
Base class for classes implementing geometries of boundary segments.
Definition: boundarysegment.hh:92
A unique label for each type of element that can occur in a grid.
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.111.3 (Jul 24, 22:29, 2024)