5#ifndef DUNE_STARCD_READER_HH 
    6#define DUNE_STARCD_READER_HH 
   51  template <
class Gr
idType>
 
   65    static std::unique_ptr<GridType> 
read(
const std::string& fileName, 
bool verbose = 
true)
 
   68      const int dim = GridType::dimension;
 
   73                   "Reading Star-CD format is not implemented for dimension " << dim);
 
   79      std::string vertexFileName = fileName + 
".vrt";
 
   82      std::ifstream vertexFile(vertexFileName.c_str());
 
   88      int numberOfVertices = 0;
 
   89      while (vertexFile >> dummyIdx) {
 
   94        for (
int k = 0; k < dim; k++)
 
   95          vertexFile >> position[k];
 
  100        std::cout << numberOfVertices << 
" vertices read." << std::endl;
 
  103      std::string elementFileName = fileName + 
".cel";
 
  106      std::ifstream elementFile(elementFileName.c_str());
 
  111      int numberOfElements = 0;
 
  112      int numberOfSimplices = 0;
 
  113      int numberOfPyramids = 0;
 
  114      int numberOfPrisms = 0;
 
  115      int numberOfCubes = 0;;
 
  116      int maxNumberOfVertices = (int)pow(2, dim);
 
  118      while (elementFile >> dummyIdx) {
 
  119        std::vector<unsigned int> vertices(maxNumberOfVertices);
 
  120        for (
int k = 0; k < maxNumberOfVertices; k++)
 
  121          elementFile >> vertices[k];
 
  124        elementFile >> boundaryId;
 
  126        int volumeOrSurface[2];
 
  127        elementFile >> volumeOrSurface[0] >> volumeOrSurface[1];
 
  129        if (volumeOrSurface[0] == isVolume) {
 
  132          if (vertices[2] == vertices[3]) {           
 
  133            if (vertices[4] == vertices[5]) {             
 
  135              std::vector<unsigned int> simplexVertices(4);
 
  136              for (
int k = 0; k < 3; k++)
 
  137                simplexVertices[k] = vertices[k] - 1;
 
  138              simplexVertices[3] = vertices[4] - 1;
 
  143              std::vector<unsigned int> prismVertices(6);
 
  144              for (
int k = 0; k < 3; k++)
 
  145                prismVertices[k] = vertices[k] - 1;
 
  146              for (
int k = 3; k < 6; k++)
 
  147                prismVertices[k] = vertices[k+1] - 1;
 
  152            if (vertices[4] == vertices[5]) {             
 
  154              std::vector<unsigned int> pyramidVertices(5);
 
  155              for (
int k = 0; k < 5; k++)
 
  156                pyramidVertices[k] = vertices[k] - 1;
 
  161              std::vector<unsigned int> cubeVertices(8);
 
  162              for (
int k = 0; k < 8; k++)
 
  163                cubeVertices[k] = vertices[k] - 1;
 
  164              std::swap(cubeVertices[2], cubeVertices[3]);
 
  165              std::swap(cubeVertices[6], cubeVertices[7]);
 
  172        std::cout << numberOfElements << 
" elements read: " 
  173                  << numberOfSimplices << 
" simplices, " << numberOfPyramids << 
" pyramids, " 
  174                  << numberOfPrisms << 
" prisms, " << numberOfCubes << 
" cubes." << std::endl;
 
  178        std::cout << 
"Starting createGrid() ... " << std::flush;
 
vector space out of a tensor product of fields.
Definition: fvector.hh:97
 
Provide a generic factory class for unstructured grids.
Definition: gridfactory.hh:275
 
virtual void insertElement(const GeometryType &type, const std::vector< unsigned int > &vertices)
Insert an element into the coarse grid.
Definition: gridfactory.hh:307
 
virtual void insertVertex(const FieldVector< ctype, dimworld > &pos)
Insert a vertex into the coarse grid.
Definition: gridfactory.hh:296
 
virtual std::unique_ptr< GridType > createGrid()
Finalize grid creation and hand over the grid.
Definition: gridfactory.hh:333
 
Default exception class for I/O errors.
Definition: exceptions.hh:325
 
Default exception for dummy implementations.
Definition: exceptions.hh:357
 
File reader for the Star-CD format.
Definition: starcdreader.hh:52
 
static std::unique_ptr< GridType > read(const std::string &fileName, bool verbose=true)
Read grid from a Star-CD file.
Definition: starcdreader.hh:65
 
Provide a generic factory class for unstructured grids.
 
A few common exception classes.
 
#define DUNE_THROW(E,...)
Definition: exceptions.hh:314
 
constexpr GeometryType prism
GeometryType representing a 3D prism.
Definition: type.hh:528
 
constexpr GeometryType hexahedron
GeometryType representing a hexahedron.
Definition: type.hh:534
 
constexpr GeometryType pyramid
GeometryType representing a 3D pyramid.
Definition: type.hh:522
 
constexpr GeometryType tetrahedron
GeometryType representing a tetrahedron.
Definition: type.hh:516
 
Dune namespace.
Definition: alignedallocator.hh:13
 
A unique label for each type of element that can occur in a grid.