dune-vtk 2.8
Loading...
Searching...
No Matches
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
11namespace 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
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
Base class for grid creators in a CRTP style.
Definition: gridcreatorinterface.hh:25
GridFactory< Grid > & factory()
Return the associated GridFactory.
Definition: gridcreatorinterface.hh:77
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
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