3#ifndef DUNE_STARCD_READER_HH
4#define DUNE_STARCD_READER_HH
7#include <dune/common/to_unique_ptr.hh>
49 template <
class Gr
idType>
66 const int dim = GridType::dimension;
71 "Reading Star-CD format is not implemented for dimension " << dim);
77 std::string vertexFileName = fileName +
".vrt";
80 std::ifstream vertexFile(vertexFileName.c_str());
86 int numberOfVertices = 0;
87 while (vertexFile >> dummyIdx) {
92 for (
int k = 0; k < dim; k++)
93 vertexFile >> position[k];
98 std::cout << numberOfVertices <<
" vertices read." << std::endl;
101 std::string elementFileName = fileName +
".cel";
104 std::ifstream elementFile(elementFileName.c_str());
109 int numberOfElements = 0;
110 int numberOfSimplices = 0;
111 int numberOfPyramids = 0;
112 int numberOfPrisms = 0;
113 int numberOfCubes = 0;;
114 int maxNumberOfVertices = (int)pow(2, dim);
116 while (elementFile >> dummyIdx) {
117 std::vector<unsigned int> vertices(maxNumberOfVertices);
118 for (
int k = 0; k < maxNumberOfVertices; k++)
119 elementFile >> vertices[k];
122 elementFile >> boundaryId;
124 int volumeOrSurface[2];
125 elementFile >> volumeOrSurface[0] >> volumeOrSurface[1];
127 if (volumeOrSurface[0] == isVolume) {
130 if (vertices[2] == vertices[3]) {
131 if (vertices[4] == vertices[5]) {
133 std::vector<unsigned int> simplexVertices(4);
134 for (
int k = 0; k < 3; k++)
135 simplexVertices[k] = vertices[k] - 1;
136 simplexVertices[3] = vertices[4] - 1;
141 std::vector<unsigned int> prismVertices(6);
142 for (
int k = 0; k < 3; k++)
143 prismVertices[k] = vertices[k] - 1;
144 for (
int k = 3; k < 6; k++)
145 prismVertices[k] = vertices[k+1] - 1;
150 if (vertices[4] == vertices[5]) {
152 std::vector<unsigned int> pyramidVertices(5);
153 for (
int k = 0; k < 5; k++)
154 pyramidVertices[k] = vertices[k] - 1;
159 std::vector<unsigned int> cubeVertices(8);
160 for (
int k = 0; k < 8; k++)
161 cubeVertices[k] = vertices[k] - 1;
162 std::swap(cubeVertices[2], cubeVertices[3]);
163 std::swap(cubeVertices[6], cubeVertices[7]);
170 std::cout << numberOfElements <<
" elements read: "
171 << numberOfSimplices <<
" simplices, " << numberOfPyramids <<
" pyramids, "
172 << numberOfPrisms <<
" prisms, " << numberOfCubes <<
" cubes." << std::endl;
176 std::cout <<
"Starting createGrid() ... " << std::flush;
vector space out of a tensor product of fields.
Definition: fvector.hh:96
Provide a generic factory class for unstructured grids.
Definition: gridfactory.hh:269
virtual void insertElement(const GeometryType &type, const std::vector< unsigned int > &vertices)
Insert an element into the coarse grid.
Definition: gridfactory.hh:301
virtual ToUniquePtr< GridType > createGrid()
Finalize grid creation and hand over the grid.
Definition: gridfactory.hh:327
virtual void insertVertex(const FieldVector< ctype, dimworld > &pos)
Insert a vertex into the coarse grid.
Definition: gridfactory.hh:290
Default exception class for I/O errors.
Definition: exceptions.hh:229
Default exception for dummy implementations.
Definition: exceptions.hh:261
File reader for the Star-CD format.
Definition: starcdreader.hh:50
static ToUniquePtr< GridType > read(const std::string &fileName, bool verbose=true)
Read grid from a Star-CD file.
Definition: starcdreader.hh:63
An owning pointer wrapper that can be assigned to (smart) pointers. Cannot be copied....
Definition: to_unique_ptr.hh:37
Provide a generic factory class for unstructured grids.
A few common exception classes.
#define DUNE_THROW(E, m)
Definition: exceptions.hh:216
constexpr GeometryType prism
GeometryType representing a 3D prism.
Definition: type.hh:833
constexpr GeometryType hexahedron
GeometryType representing a hexahedron.
Definition: type.hh:839
constexpr GeometryType pyramid
GeometryType representing a 3D pyramid.
Definition: type.hh:827
constexpr GeometryType tetrahedron
GeometryType representing a tetrahedron.
Definition: type.hh:821
Dune namespace.
Definition: alignedallocator.hh:14
A unique label for each type of element that can occur in a grid.