Go to the documentation of this file.
18 #ifndef DUNE_GRIDGLUE_EXTRACTORS_EXTRACTOR_HH
19 #define DUNE_GRIDGLUE_EXTRACTORS_EXTRACTOR_HH
24 #include <dune/common/exceptions.hh>
25 #include <dune/common/fvector.hh>
26 #include <dune/common/version.hh>
27 #include <dune/grid/common/geometry.hh>
28 #include <dune/grid/common/grid.hh>
29 #include <dune/grid/common/mcmgmapper.hh>
30 #include <dune/geometry/multilineargeometry.hh>
42 template<
typename GV,
int cd>
48 static constexpr
auto dimworld = GV::dimensionworld;
49 static constexpr
auto dim = GV::dimension;
50 static constexpr
auto codim = cd;
55 typedef typename GridView::Grid
Grid;
57 typedef typename GV::Grid::ctype
ctype;
58 typedef Dune::FieldVector<ctype, dimworld>
Coords;
61 typedef typename GV::Traits::template Codim<dim>::Entity
Vertex;
64 typedef typename GV::Traits::template Codim<0>::Entity
Element;
69 #if DUNE_VERSION_NEWER(DUNE_GRID, 2, 6)
70 using CellMapper = MultipleCodimMultipleGeomTypeMapper<GridView>;
72 using CellMapper = MultipleCodimMultipleGeomTypeMapper<GridView, MCMGElementLayout>;
91 unsigned int idx : 28;
155 #if DUNE_VERSION_NEWER(DUNE_GEOMETRY, 2, 6)
165 const Dune::GeometryType& geometryType)
235 #if DUNE_VERSION_NEWER(DUNE_GRID, 2, 6)
252 std::vector<CoordinateInfo> dummy;
256 std::vector<SubEntityInfo> dummy;
273 void getCoords(std::vector<Dune::FieldVector<ctype, dimworld> >& coords)
const
276 for (
unsigned int i = 0; i <
coords_.size(); ++i)
302 void getFaces(std::vector<VertexVector>& faces)
const
305 for (
unsigned int i = 0; i <
subEntities_.size(); ++i) {
307 for (
unsigned int j = 0; j <
subEntities_[i].nCorners(); ++j)
323 typename ElementInfoMap::const_iterator it =
332 first = it->second.idx;
333 count = it->second.faces;
381 DUNE_THROW(Dune::GridError,
"invalid face index");
383 return grid().entity(seed);
397 DUNE_THROW(Dune::GridError,
"invalid coordinate index");
399 return grid().entity(seed);
413 template<
typename GV,
int cd>
416 std::vector<Coords> corners(subEntities_[index].nCorners());
417 for (
unsigned int i = 0; i < subEntities_[index].nCorners(); ++i)
418 corners[i] = coords_[subEntities_[index].corners[i].idx].coord;
420 return Geometry(subEntities_[index].geometryType_, corners);
425 template<
typename GV,
int cd>
428 std::vector<LocalCoords> corners(subEntities_[index].nCorners());
431 const SubEntityInfo & face = subEntities_[index];
432 Dune::GeometryType facetype = subEntities_[index].geometryType_;
435 const auto elmtseed = elmtInfo_.at(face.parent).p;
436 const auto elmt = grid().entity(elmtseed);
437 const Dune::GeometryType celltype = elmt.type();
438 const auto& re = Dune::ReferenceElements<ctype, dim>::general(celltype);
439 for (
unsigned int i = 0; i < subEntities_[index].nCorners(); ++i)
440 corners[i] = re.position(face.corners[i].num,dim);
449 #endif // DUNE_GRIDGLUE_EXTRACTORS_EXTRACTOR_HH
GV::Traits::template Codim< 0 >::Entity Element
Definition: extractor.hh:64
static constexpr auto codim
Definition: extractor.hh:50
ElementSeed p
the entity seed for the element
Definition: extractor.hh:141
Definition: gridglue.hh:35
Dune::GeometryType geometryType_
The GeometryType of the subentity.
Definition: extractor.hh:181
VertexInfo(unsigned int idx_, const Vertex &p_)
Definition: extractor.hh:119
ElementInfo(unsigned int idx_, const Element &p_, unsigned int f_)
Definition: extractor.hh:131
ElementInfoMap elmtInfo_
a map enabling faster access to elements and faces
Definition: extractor.hh:221
void getFaces(std::vector< VertexVector > &faces) const
Get the corners of the extracted subentities.
Definition: extractor.hh:302
CoordinateInfo(unsigned int index_, IndexType vtxindex_)
Definition: extractor.hh:100
SubEntityInfo(IndexType parent_, unsigned int num_in_parent_, const Dune::GeometryType &geometryType)
Definition: extractor.hh:164
IndexType vtxindex
the index of the parent element (from index set)
Definition: extractor.hh:105
std::vector< unsigned int > VertexVector
Definition: extractor.hh:67
unsigned int idx
Definition: extractor.hh:121
unsigned int faces
the number of extracted faces for this element
Definition: extractor.hh:138
unsigned int index
the index of this coordinate (in internal storage scheme) // NEEDED??
Definition: extractor.hh:111
Dune::FieldVector< ctype, dim > LocalCoords
Definition: extractor.hh:59
std::vector< CoordinateInfo > coords_
all information about the corner vertices of the extracted
Definition: extractor.hh:204
Definition: extractor.hh:95
static constexpr int cube_corners
Definition: extractor.hh:52
const GridView gv_
the grid object to extract the surface from
Definition: extractor.hh:199
static constexpr auto dim
Definition: extractor.hh:49
Geometry geometry(unsigned int index) const
Get world geometry of the extracted face.
Definition: extractor.hh:414
Element::EntitySeed ElementSeed
Definition: extractor.hh:65
Element element(unsigned int index) const
gets the parent element for a given face index, throws an exception if index not valid
Definition: extractor.hh:378
Holds some information about an element's subentity involved in a coupling.
Definition: extractor.hh:148
SubEntityInfo()
Definition: extractor.hh:150
CellMapper cellMapper_
Definition: extractor.hh:223
unsigned int nCorners() const
Definition: extractor.hh:169
unsigned int num_in_parent
the number of the face in the parent element
Definition: extractor.hh:178
unsigned int num
element corner
Definition: extractor.hh:92
IndexType parent
the index of the parent element (from index set)
Definition: extractor.hh:175
void getGeometryTypes(std::vector< Dune::GeometryType > &geometryTypes) const
Get the list of geometry types.
Definition: extractor.hh:291
GV::Grid::ctype ctype
Definition: extractor.hh:57
LocalGeometry geometryLocal(unsigned int index) const
Get geometry of the extracted face in element coordinates.
Definition: extractor.hh:426
int IndexType
Definition: extractor.hh:75
Helpful struct holding one index for the coordinate (vertex) to which it is associated and the elemen...
Definition: extractor.hh:89
unsigned int idx
the index of this element's first face in the internal list of extracted faces
Definition: extractor.hh:135
unsigned int nCoords() const
getter for the count of coordinates
Definition: extractor.hh:285
static constexpr auto dimworld
Definition: extractor.hh:48
Dune::FieldVector< ctype, dimworld > Coords
Definition: extractor.hh:58
void getCoords(std::vector< Dune::FieldVector< ctype, dimworld > > &coords) const
getter for the coordinates array
Definition: extractor.hh:273
GV::Traits::template Codim< dim >::Entity Vertex
Definition: extractor.hh:61
simple struct holding a vertex pointer and an index
Definition: extractor.hh:117
const GridView & gridView() const
give access to the Dune::GridView where this Patch belongs to
Definition: extractor.hh:361
Provides codimension-independent methods for grid extraction.
Definition: extractor.hh:43
void clear()
delete everything build up so far and free the memory
Definition: extractor.hh:247
int indexInInside(unsigned int index) const
gets the number face in the parent element
Definition: extractor.hh:343
GV GridView
Definition: extractor.hh:54
CoordinateInfo()
Definition: extractor.hh:97
GridView::Grid Grid
Definition: extractor.hh:55
VertexSeed p
Definition: extractor.hh:122
CornerInfo corners[cube_corners]
the corner indices plus the numbers of the vertices in the parent element
Definition: extractor.hh:189
bool faceIndices(const Element &e, int &first, int &count) const
gets index of first subentity as well as the total number of subentities that were extracted from thi...
Definition: extractor.hh:321
MultipleCodimMultipleGeomTypeMapper< GridView, MCMGElementLayout > CellMapper
Definition: extractor.hh:72
VertexInfoMap vtxInfo_
a map enabling faster access to vertices and coordinates
Definition: extractor.hh:214
Vertex::EntitySeed VertexSeed
Definition: extractor.hh:62
simple struct holding an element seed and an index
Definition: extractor.hh:129
std::map< IndexType, ElementInfo > ElementInfoMap
Definition: extractor.hh:193
Extractor(const GV &gv)
Constructor.
Definition: extractor.hh:233
std::map< IndexType, VertexInfo > VertexInfoMap
Definition: extractor.hh:194
Vertex vertex(unsigned int index) const
gets the vertex for a given coordinate index throws an exception if index not valid
Definition: extractor.hh:394
const Grid & grid() const
Definition: extractor.hh:366
Coords coord
the coordinate
Definition: extractor.hh:108
Dune::MultiLinearGeometry< ctype, dim-codim, dim > LocalGeometry
Definition: extractor.hh:80
Dune::MultiLinearGeometry< ctype, dim-codim, dimworld > Geometry
Definition: extractor.hh:79
unsigned int idx
index of the vertex
Definition: extractor.hh:91
std::vector< SubEntityInfo > subEntities_
all information about the extracted subEntities
Definition: extractor.hh:207