21 #ifndef bempp_concrete_vtk_writer_hpp
22 #define bempp_concrete_vtk_writer_hpp
24 #include "../common/common.hpp"
26 #include "p0_vector_vtk_function.hpp"
27 #include "p1_vector_vtk_function.hpp"
28 #include "vtk_writer.hpp"
30 #include "../common/armadillo_fwd.hpp"
38 template<
typename DuneGr
idView>
class ConcreteGridView;
42 template <
typename DuneGr
idView>
45 Dune::VTKWriter<DuneGridView> m_dune_vtk_writer;
46 const DuneGridView* m_dune_gv;
49 Dune::VTK::DataMode dm)
const;
61 Dune::VTK::DataMode dm=Dune::VTK::conforming) :
62 m_dune_vtk_writer(dune_gv, dm), m_dune_gv(&dune_gv) {
67 m_dune_vtk_writer.clear();
70 virtual std::string
write(
const std::string &name,
72 return m_dune_vtk_writer.write(name, duneVtkOutputType(type));
75 virtual std::string
pwrite(
const std::string& name,
76 const std::string& path,
77 const std::string& extendpath,
79 return m_dune_vtk_writer.pwrite(name, path, extendpath,
80 duneVtkOutputType(type));
84 virtual void addCellDataDoubleImpl(
const arma::Mat<double>& data,
85 const std::string &name) {
86 addCellDataImpl(data, name);
89 virtual void addCellDataFloatImpl(
const arma::Mat<float>& data,
90 const std::string &name) {
91 addCellDataImpl(data, name);
94 template <
typename ValueType>
95 void addCellDataImpl(
const arma::Mat<ValueType>& data,
96 const std::string &name) {
97 const size_t ncomp = data.n_rows;
100 if ((
int)data.n_cols != m_dune_gv->size(0 ))
101 throw std::logic_error(
"VtkWriter::addCellData(): number of columns "
102 "of 'data' different from the number of cells");
104 typedef P0VectorVTKFunction<DuneGridView, arma::Mat<ValueType> > Function;
105 typedef Dune::shared_ptr<Dune::VTKFunction<DuneGridView> >
107 VTKFunctionPtr p(
new Function(*m_dune_gv, data, name, ncomp));
108 m_dune_vtk_writer.addCellData(p);
111 virtual void addVertexDataDoubleImpl(
const arma::Mat<double>& data,
112 const std::string &name) {
113 addVertexDataImpl(data, name);
116 virtual void addVertexDataFloatImpl(
const arma::Mat<float>& data,
117 const std::string &name) {
118 addVertexDataImpl(data, name);
121 template <
typename ValueType>
122 void addVertexDataImpl(
const arma::Mat<ValueType>& data,
123 const std::string &name) {
124 const size_t ncomp = data.n_rows;
127 if ((
int)data.n_cols !=
128 m_dune_gv->size(DuneGridView::dimension ))
129 throw std::logic_error(
"VtkWriter::addVertexData(): number of columns "
130 "of 'data' different from the number of vertices");
132 typedef P1VectorVTKFunction<DuneGridView, arma::Mat<ValueType> > Function;
133 typedef Dune::shared_ptr<Dune::VTKFunction<DuneGridView> >
135 VTKFunctionPtr p(
new Function(*m_dune_gv, data, name, ncomp));
136 m_dune_vtk_writer.addVertexData(p);
141 Dune::VTK::OutputType duneVtkOutputType(
OutputType type)
const
146 return Dune::VTK::ascii;
148 return Dune::VTK::base64;
150 return Dune::VTK::appendedraw;
152 return Dune::VTK::appendedbase64;
154 return static_cast<Dune::VTK::OutputType
>(type);
Abstract exporter of data in the vtk format.
Definition: vtk_writer.hpp:42
OutputType
How data should be stored in a VTK file.
Definition: vtk_writer.hpp:46
Output to the file is in inline base64 binary.
Definition: vtk_writer.hpp:50
Wrapper of a Dune VTK writer for a grid view of type DuneGridView.
Definition: concrete_vtk_writer.hpp:43
virtual void clear()
Clear the list of registered functions.
Definition: concrete_vtk_writer.hpp:66
Output to the file is in appended raw binary.
Definition: vtk_writer.hpp:52
ConcreteVtkWriter(const DuneGridView &dune_gv, Dune::VTK::DataMode dm=Dune::VTK::conforming)
Construct a VtkWriter working on a specific DuneGridView.
Definition: concrete_vtk_writer.hpp:60
virtual std::string pwrite(const std::string &name, const std::string &path, const std::string &extendpath, OutputType type=ASCII)
Write output (interface might change later).
Definition: concrete_vtk_writer.hpp:75
virtual std::auto_ptr< VtkWriter > vtkWriter(Dune::VTK::DataMode dm=Dune::VTK::conforming) const
Create a VtkWriter for this grid view.
Definition: concrete_grid_view.hpp:119
virtual std::string write(const std::string &name, OutputType type=ASCII)
Write output (interface might change later).
Definition: concrete_vtk_writer.hpp:70
Output to the file is in ascii.
Definition: vtk_writer.hpp:48
Output to the file is in appended base64 binary.
Definition: vtk_writer.hpp:54