Dune Core Modules (2.6.0)

gnuplot.hh
Go to the documentation of this file.
1 // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // vi: set et ts=4 sw=2 sts=2:
3 #ifndef DUNE_IO_GNUPLOT_HH
4 #define DUNE_IO_GNUPLOT_HH
5 
11 #include <vector>
12 #include <string>
13 #include <iostream>
14 #include <fstream>
15 
16 #include <dune/common/fvector.hh>
17 
18 #include <dune/grid/common/grid.hh>
19 
20 namespace Dune {
21 
27  template<class GridView>
28  class GnuplotWriter {
29 
30  typedef typename GridView::Grid::ctype ctype;
31 
32  enum {dimworld = GridView::dimensionworld};
33 
34  public:
35  GnuplotWriter (const GridView & gv) : _is(gv.indexSet()), _gv(gv)
36  {
37  static_assert(dimworld==1 || dimworld==2, "GnuPlot export only works for worlddim==1 and worlddim==2");
38  // allocate _data buffer
39  _data.resize(_is.size(0)*2);
40  }
41 
46  template <class DataContainer>
47  void addCellData(const DataContainer& data, const std::string & name)
48  {
49  if (dimworld!=1)
50  DUNE_THROW(IOError, "Gnuplot cell data writing is only supported for grids in a 1d world!");
51  addData(cellData, data, name);
52  }
53 
58  template <class DataContainer>
59  void addVertexData(const DataContainer& data, const std::string & name)
60  {
61  addData(vertexData, data, name);
62  }
63 
67  void write(const std::string& filename) const;
68 
69  private:
70  enum DataType { vertexData, cellData };
71  const typename GridView::IndexSet & _is;
72  const GridView _gv;
73  std::vector< std::vector< float > > _data;
74  std::vector< std::string > _names;
75 
76  template <class DataContainer>
77  void addData(DataType t, const DataContainer& data, const std::string & name);
78 
79  void writeRow(std::ostream & file,
80  const FieldVector<ctype, dimworld>& position,
81  const std::vector<float> & data) const;
82  };
83 
87  template<class G>
88  class LeafGnuplotWriter : public GnuplotWriter<typename G::LeafGridView>
89  {
90  public:
92  LeafGnuplotWriter (const G& grid)
93  : GnuplotWriter<typename G::LeafGridView>(grid.leafGridView())
94  {}
95  };
96 
100  template<class G>
101  class LevelGnuplotWriter : public GnuplotWriter<typename G::LevelGridView>
102  {
103  public:
105  LevelGnuplotWriter (const G& grid, int level)
106  : GnuplotWriter<typename G::LevelGridView>(grid.levelGridView(level))
107  {}
108  };
109 
110 }
111 
112 #include "gnuplot/gnuplot.cc"
113 
114 #endif // DUNE_IO_GNUPLOT_HH
Writer for 1D grids in gnuplot format.
Definition: gnuplot.hh:28
void addVertexData(const DataContainer &data, const std::string &name)
Add vertex data.
Definition: gnuplot.hh:59
void addCellData(const DataContainer &data, const std::string &name)
Add cell data.
Definition: gnuplot.hh:47
void write(const std::string &filename) const
Write Gnuplot file to disk.
Definition: gnuplot.cc:17
Grid view abstract base class.
Definition: gridview.hh:60
Default exception class for I/O errors.
Definition: exceptions.hh:229
GnuplotWriter on the leaf grid.
Definition: gnuplot.hh:89
LeafGnuplotWriter(const G &grid)
Construct a Gnuplot writer for the leaf level of a given grid.
Definition: gnuplot.hh:92
GnuplotWriter on a given level grid.
Definition: gnuplot.hh:102
LevelGnuplotWriter(const G &grid, int level)
Construct a Gnuplot writer for a certain level of a given grid.
Definition: gnuplot.hh:105
Different resources needed by all grid implementations.
Implements a vector constructed from a given type representing a field and a compile-time given size.
Implementation of gnuplot output for 1D and 2D grids.
#define DUNE_THROW(E, m)
Definition: exceptions.hh:216
Grid< dim, dimworld, ct, GridFamily >::LeafGridView leafGridView(const Grid< dim, dimworld, ct, GridFamily > &grid)
leaf grid view for the given grid
Definition: grid.hh:809
Traits ::IndexSet IndexSet
type of the index set
Definition: gridview.hh:80
Grid< dim, dimworld, ct, GridFamily >::LevelGridView levelGridView(const Grid< dim, dimworld, ct, GridFamily > &grid, int level)
level grid view for the given grid and level.
Definition: grid.hh:792
const IndexSet & indexSet() const
obtain the index set
Definition: gridview.hh:172
@ dimensionworld
The dimension of the world the grid lives in.
Definition: gridview.hh:131
Dune namespace.
Definition: alignedallocator.hh:10
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.80.0 (May 5, 22:29, 2024)