4 #ifndef DUNE_GRID_IO_FILE_VTK_FUNCTIONWRITER_HH
5 #define DUNE_GRID_IO_FILE_VTK_FUNCTIONWRITER_HH
13 #include <dune/common/exceptions.hh>
14 #include <dune/common/fvector.hh>
16 #include <dune/geometry/referenceelements.hh>
31 template<
typename Cell_>
33 typedef typename Cell_::Geometry::ctype DF;
34 static const unsigned mydim = Cell_::mydimension;
35 typedef ReferenceElements<DF, mydim> Refelems;
38 typedef FieldVector<DF, mydim>
Domain;
42 virtual std::string
name()
const = 0;
58 DUNE_THROW(NotImplemented,
"FunctionWriterBase::write(const Cell&, "
59 "const Domain&): Either the derived class " <<
60 typeid(*this).name() <<
" failed to implement this method "
61 "or this method is not meant to be called on the derived "
62 "class and was called in error.");
69 virtual void write(
const Cell& cell,
unsigned cornerIndex) {
71 Refelems::general(cell.type()).position(cornerIndex, mydim));
85 template<
typename Func>
90 std::shared_ptr<const Func> func;
92 std::shared_ptr<DataArrayWriter> arraywriter;
97 : func(func_), precision_(prec)
101 virtual std::string
name()
const {
return func->name(); }
105 if(func->ncomps() == 2)
return 3;
106 else return func->ncomps();
117 nitems, precision_));
118 return !arraywriter->writeIsNoop();
124 for(
int d = 0; d < func->ncomps(); ++d)
125 arraywriter->write(func->evaluate(d, cell, xl));
126 for(
unsigned d = func->ncomps(); d <
ncomps(); ++d)
127 arraywriter->write(0);
142 template<
typename Cell>
149 std::shared_ptr<DataArrayWriter> arraywriter;
157 virtual std::string
name()
const {
return "Coordinates"; }
160 virtual unsigned ncomps()
const {
return 3; }
170 nitems, precision_));
171 return !arraywriter->writeIsNoop();
176 FieldVector<typename Base::Cell::Geometry::ctype, Base::Cell::Geometry::coorddimension> xg
177 = cell.geometry().global(xl);
178 for(
unsigned d = 0; d < 3 && d < Base::Cell::Geometry::coorddimension; ++d)
179 arraywriter->write(xg[d]);
180 for(
unsigned d = Base::Cell::Geometry::coorddimension; d < 3; ++d)
181 arraywriter->write(0);
190 template<
typename IteratorFactory>
195 static const unsigned mydim = Base::Cell::mydimension;
197 const IteratorFactory& factory;
198 std::shared_ptr<DataArrayWriter> arraywriter;
199 std::vector<unsigned> pointIndices;
208 virtual std::string
name()
const {
return "connectivity"; }
211 virtual unsigned ncomps()
const {
return 1; }
222 if(arraywriter->writeIsNoop())
226 pointIndices.resize(factory.indexSet().size(mydim));
227 const typename IteratorFactory::PointIterator& pend =
229 typename IteratorFactory::PointIterator pit = factory.beginPoints();
230 unsigned counter = 0;
232 pointIndices[factory.indexSet().subIndex
233 (pit->cell(), pit->duneIndex(), mydim)] = counter;
243 if(pointIndices.size() == 0)
245 arraywriter->write(pointIndices[factory.indexSet().subIndex
246 (cell, cornerIndex, mydim)]);
251 pointIndices.clear();
256 template<
typename Cell>
260 std::shared_ptr<DataArrayWriter> arraywriter;
265 virtual std::string
name()
const {
return "connectivity"; }
268 virtual unsigned ncomps()
const {
return 1; }
280 return !arraywriter->writeIsNoop();
285 arraywriter->write(counter);
295 template<
typename Cell>
301 std::shared_ptr<DataArrayWriter> arraywriter;
306 virtual std::string
name()
const {
return "offsets"; }
309 virtual unsigned ncomps()
const {
return 1; }
321 return !arraywriter->writeIsNoop();
325 offset += cell.geometry().corners();
326 arraywriter->write(offset);
335 template<
typename Cell>
341 std::shared_ptr<DataArrayWriter> arraywriter;
345 virtual std::string
name()
const {
return "types"; }
348 virtual unsigned ncomps()
const {
return 1; }
359 return !arraywriter->writeIsNoop();
Common stuff for the VTKWriter.
Data array writers for the VTKWriter.
Include standard header files.
Definition: agrid.hh:58
Precision
which precision to use when writing out data to vtk files
Definition: common.hh:269
GeometryType geometryType(const Dune::GeometryType &t)
mapping from GeometryType to VTKGeometryType
Definition: common.hh:149
Base class for function writers.
Definition: functionwriter.hh:32
virtual std::string name() const =0
return name
virtual unsigned ncomps() const =0
return number of components of the vector
virtual void write(const Cell &, const Domain &)
write at the given position
Definition: functionwriter.hh:57
Cell_ Cell
Definition: functionwriter.hh:39
virtual void addArray(PVTUWriter &writer)=0
add this field to the given parallel writer
virtual void endWrite()=0
signal end of writing
FieldVector< DF, mydim > Domain
Definition: functionwriter.hh:38
virtual bool beginWrite(VTUWriter &writer, std::size_t nitems)=0
start writing with the given writer
virtual ~FunctionWriterBase()
destructor
Definition: functionwriter.hh:76
virtual void write(const Cell &cell, unsigned cornerIndex)
write at the given corner
Definition: functionwriter.hh:69
Base class for function writers.
Definition: functionwriter.hh:88
VTKFunctionWriter(const std::shared_ptr< const Func > &func_, VTK::Precision prec=VTK::Precision::float32)
Definition: functionwriter.hh:95
virtual std::string name() const
return name
Definition: functionwriter.hh:101
virtual unsigned ncomps() const
return number of components of the vector
Definition: functionwriter.hh:104
virtual bool beginWrite(VTUWriter &writer, std::size_t nitems)
start writing with the given writer
Definition: functionwriter.hh:115
virtual void addArray(PVTUWriter &writer)
add this field to the given parallel writer
Definition: functionwriter.hh:110
virtual void write(const typename Base::Cell &cell, const typename Base::Domain &xl)
write at the given position
Definition: functionwriter.hh:122
virtual void endWrite()
signal end of writing
Definition: functionwriter.hh:131
writer for the Coordinates array
Definition: functionwriter.hh:145
virtual void write(const typename Base::Cell &cell, const typename Base::Domain &xl)
write at the given position
Definition: functionwriter.hh:174
virtual std::string name() const
return name
Definition: functionwriter.hh:157
virtual void endWrite()
signal end of writing
Definition: functionwriter.hh:184
virtual unsigned ncomps() const
return number of components of the vector
Definition: functionwriter.hh:160
virtual void addArray(PVTUWriter &writer)
add this field to the given parallel writer
Definition: functionwriter.hh:163
virtual bool beginWrite(VTUWriter &writer, std::size_t nitems)
start writing with the given writer
Definition: functionwriter.hh:168
CoordinatesWriter(VTK::Precision prec=VTK::Precision::float32)
Definition: functionwriter.hh:152
writer for the connectivity array in conforming mode
Definition: functionwriter.hh:193
virtual void addArray(PVTUWriter &writer)
add this field to the given parallel writer
Definition: functionwriter.hh:214
virtual std::string name() const
return name
Definition: functionwriter.hh:208
virtual void write(const typename Base::Cell &cell, unsigned cornerIndex)
write at the given corner
Definition: functionwriter.hh:240
ConformingConnectivityWriter(const IteratorFactory &factory_)
create a writer with the given iteratorfactory
Definition: functionwriter.hh:203
virtual unsigned ncomps() const
return number of components of the vector
Definition: functionwriter.hh:211
virtual bool beginWrite(VTUWriter &writer, std::size_t nitems)
start writing with the given writer
Definition: functionwriter.hh:219
virtual void endWrite()
signal end of writing
Definition: functionwriter.hh:249
writer for the connectivity array in nonconforming mode
Definition: functionwriter.hh:259
virtual unsigned ncomps() const
return number of components of the vector
Definition: functionwriter.hh:268
virtual std::string name() const
return name
Definition: functionwriter.hh:265
virtual void write(const Cell &, unsigned)
write at the given corner
Definition: functionwriter.hh:283
virtual void addArray(PVTUWriter &writer)
add this field to the given parallel writer
Definition: functionwriter.hh:271
virtual bool beginWrite(VTUWriter &writer, std::size_t nitems)
start writing with the given writer
Definition: functionwriter.hh:276
virtual void endWrite()
signal end of writing
Definition: functionwriter.hh:289
writer for the offsets array
Definition: functionwriter.hh:298
virtual void addArray(PVTUWriter &writer)
add this field to the given parallel writer
Definition: functionwriter.hh:312
virtual void endWrite()
signal end of writing
Definition: functionwriter.hh:329
virtual std::string name() const
return name
Definition: functionwriter.hh:306
virtual void write(const Cell &cell, const typename Base::Domain &)
write at the given position
Definition: functionwriter.hh:324
virtual bool beginWrite(VTUWriter &writer, std::size_t nitems)
start writing with the given writer
Definition: functionwriter.hh:317
virtual unsigned ncomps() const
return number of components of the vector
Definition: functionwriter.hh:309
writer for the types array
Definition: functionwriter.hh:338
virtual unsigned ncomps() const
return number of components of the vector
Definition: functionwriter.hh:348
virtual bool beginWrite(VTUWriter &writer, std::size_t nitems)
start writing with the given writer
Definition: functionwriter.hh:356
virtual std::string name() const
return name
Definition: functionwriter.hh:345
virtual void write(const Cell &cell, const typename Base::Domain &)
write at the given position
Definition: functionwriter.hh:362
virtual void addArray(PVTUWriter &writer)
add this field to the given parallel writer
Definition: functionwriter.hh:351
virtual void endWrite()
signal end of writing
Definition: functionwriter.hh:366
Dump a .vtu/.vtp files contents to a stream.
Definition: pvtuwriter.hh:60
void addArray(const std::string &name, unsigned ncomps, Precision prec)
Add an array to the output file.
Definition: pvtuwriter.hh:205
Dump a .vtu/.vtp files contents to a stream.
Definition: vtuwriter.hh:96
DataArrayWriter * makeArrayWriter(const std::string &name, unsigned ncomps, unsigned nitems, Precision prec)
acquire a DataArrayWriter
Definition: vtuwriter.hh:378