dune-vtk  0.2
serialgridcreator.hh
Go to the documentation of this file.
1 #pragma once
2 
3 #include <cstdint>
4 #include <string>
5 #include <vector>
6 
7 #include <dune/grid/common/gridfactory.hh>
10 
11 namespace Dune
12 {
13  namespace Vtk
14  {
15  // create a distributed grid on rank 0. Needs to be load balanced afterwards.
16  template <class Grid>
18  : public GridCreatorInterface<Grid, SerialGridCreator<Grid>>
19  {
23 
24  public:
25 
26  using Super::Super;
27 
28  void insertVerticesImpl (std::vector<GlobalCoordinate> const& points,
29  std::vector<std::uint64_t> const& /*point_ids*/)
30  {
31  shift_.push_back(points_.size());
32  points_.reserve(points_.size() + points.size());
33  points_.insert(points_.end(), points.begin(), points.end());
34  }
35 
36  void insertElementsImpl (std::vector<std::uint8_t> const& types,
37  std::vector<std::int64_t> const& offsets,
38  std::vector<std::int64_t> const& connectivity)
39  {
40  types_.reserve(types_.size() + types.size());
41  types_.insert(types_.end(), types.begin(), types.end());
42 
43  offsets_.reserve(offsets_.size() + offsets.size());
44  std::transform(offsets.begin(), offsets.end(), std::back_inserter(offsets_),
45  [shift=offsets_.empty() ? 0 : offsets_.back()](std::int64_t o) { return o + shift; });
46 
47  connectivity_.reserve(connectivity_.size() + connectivity.size());
48  std::transform(connectivity.begin(), connectivity.end(), std::back_inserter(connectivity_),
49  [shift=shift_.back()](std::int64_t idx) { return idx + shift; });
50  }
51 
52  void insertPiecesImpl (std::vector<std::string> const& pieces)
53  {
54  if (this->comm().rank() == 0) {
55  VtkReader<Grid, Self> pieceReader(*this);
56  for (std::string const& piece : pieces) {
57  pieceReader.read(piece, false);
58  pieceReader.fillGridCreator(false);
59  }
60 
61  DiscontinuousGridCreator<Grid> creator(this->factory());
62  creator.insertVertices(points_, {});
63  creator.insertElements(types_, offsets_, connectivity_);
64  }
65  }
66 
67  private:
68  std::vector<GlobalCoordinate> points_;
69  std::vector<std::uint8_t> types_;
70  std::vector<std::int64_t> offsets_;
71  std::vector<std::int64_t> connectivity_;
72  std::vector<std::int64_t> shift_;
73  };
74 
75  // deduction guides
76  template <class Grid>
77  SerialGridCreator(GridFactory<Grid>&)
79 
80  } // end namespace Vtk
81 } // end namespace Dune
Definition: writer.hh:13
SerialGridCreator(GridFactory< Grid > &) -> SerialGridCreator< Grid >
Base class for grid creators in a CRTP style.
Definition: gridcreatorinterface.hh:25
typename Grid::template Codim< 0 >::Entity::Geometry::GlobalCoordinate GlobalCoordinate
Definition: gridcreatorinterface.hh:28
auto comm() const
Return the mpi collective communicator.
Definition: gridcreatorinterface.hh:89
GridFactory< Grid > & factory()
Return the associated GridFactory.
Definition: gridcreatorinterface.hh:77
void insertVertices(std::vector< GlobalCoordinate > const &points, std::vector< std::uint64_t > const &point_ids)
Insert all points as vertices into the factory.
Definition: gridcreatorinterface.hh:50
void insertElements(std::vector< std::uint8_t > const &types, std::vector< std::int64_t > const &offsets, std::vector< std::int64_t > const &connectivity)
Create elements based on type and connectivity description.
Definition: gridcreatorinterface.hh:57
Definition: discontinuousgridcreator.hh:24
Definition: serialgridcreator.hh:19
void insertElementsImpl(std::vector< std::uint8_t > const &types, std::vector< std::int64_t > const &offsets, std::vector< std::int64_t > const &connectivity)
Definition: serialgridcreator.hh:36
void insertVerticesImpl(std::vector< GlobalCoordinate > const &points, std::vector< std::uint64_t > const &)
Definition: serialgridcreator.hh:28
typename Super::GlobalCoordinate GlobalCoordinate
Definition: serialgridcreator.hh:22
void insertPiecesImpl(std::vector< std::string > const &pieces)
Definition: serialgridcreator.hh:52
File-Reader for Vtk unstructured .vtu files.
Definition: vtkreader.hh:37
void read(std::string const &filename, bool fillCreator=true)
Read the grid from file with filename into the GridCreator.
Definition: vtkreader.impl.hh:20
void fillGridCreator(bool insertPieces=true)
Definition: vtkreader.impl.hh:681