DUNE-FEM (unstable)

albertareader.hh
1// SPDX-FileCopyrightText: Copyright © DUNE Project contributors, see file LICENSE.md in module root
2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
3// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
4// vi: set et ts=4 sw=2 sts=2:
5#ifndef DUNE_ALBERTA_ALBERTAREADER_HH
6#define DUNE_ALBERTA_ALBERTAREADER_HH
7
9
12
14
15#if HAVE_ALBERTA
16
17namespace Dune
18{
19
20 template< class Grid >
21 class AlbertaReader
22 {
23 typedef AlbertaReader< Grid > This;
24
25 public:
26 typedef Dune::GridFactory< Grid > GridFactory;
27
28 typedef typename Grid::ctype ctype;
29
30 static const int dimension = Grid::dimension;
31 static const int dimensionworld = Grid::dimensionworld;
32
33 private:
34 static_assert(dimensionworld == Alberta::dimWorld,
35 "AlbertaReader: world dimension must match ALBERTA's world dimension.");
36
37 typedef Alberta::MacroData< dimension > MacroData;
38
39 MacroData macroData_;
40
41 AlbertaReader ( const This & );
42 This &operator= ( const This & );
43
44 public:
45 AlbertaReader ()
46 {}
47
48 void readGrid ( const std::string &fileName, GridFactory &factory )
49 {
50 // read ALBERTA macro triangulation
51 macroData_.read( fileName, false );
52
53 // insert all vertices into the factory
54 const int numVertices = macroData_.vertexCount();
55 for( int i = 0; i < numVertices; ++i )
56 {
57 FieldVector< ctype, dimensionworld > v;
58 const Alberta::GlobalVector &coords = macroData_.vertex( i );
59 for( int j = 0; j < dimensionworld; ++j )
60 v[ j ] = coords[ j ];
61 factory.insertVertex( v );
62 }
63
64 // insert all elements into the factory
65 std::vector< unsigned int > vertices( dimension+1 );
66 const int numElements = macroData_.elementCount();
67 for( int i = 0; i < numElements; ++i )
68 {
69 const typename MacroData::ElementId &id = macroData_.element( i );
70 for( int j = 0; j <= dimension; ++j )
71 vertices[ j ] = id[ j ];
72 factory.insertElement( GeometryTypes::simplex( dimension ), vertices );
73 }
74
75 // release ALBERTA macro data
76 macroData_.release();
77 }
78 };
79
80}
81
82#endif // #if HAVE_ALBERTA
83
84#endif
static constexpr int dimension
The dimension of the grid.
Definition: grid.hh:387
static constexpr int dimensionworld
The dimension of the world the grid lives in.
Definition: grid.hh:390
ct ctype
Define type used for coordinates in grid module.
Definition: grid.hh:518
Different resources needed by all grid implementations.
Provide a generic factory class for unstructured grids.
constexpr GeometryType simplex(unsigned int dim)
Returns a GeometryType representing a simplex of dimension dim.
Definition: type.hh:453
provides a wrapper for ALBERTA's macro_data structure
Dune namespace.
Definition: alignedallocator.hh:13
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 (Nov 12, 23:30, 2024)