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;
91 std::shared_ptr<DataArrayWriter<float> > arraywriter;
99 virtual std::string
name()
const {
return func->name(); }
103 if(func->ncomps() == 2)
return 3;
104 else return func->ncomps();
116 return !arraywriter->writeIsNoop();
122 for(
int d = 0; d < func->ncomps(); ++d)
123 arraywriter->write(func->evaluate(d, cell, xl));
124 for(
unsigned d = func->ncomps(); d <
ncomps(); ++d)
125 arraywriter->write(0);
140 template<
typename Cell>
146 std::shared_ptr<DataArrayWriter<float> > arraywriter;
151 virtual std::string
name()
const {
return "Coordinates"; }
154 virtual unsigned ncomps()
const {
return 3; }
165 return !arraywriter->writeIsNoop();
170 FieldVector<typename Base::Cell::Geometry::ctype, Base::Cell::Geometry::coorddimension> xg
171 = cell.geometry().global(xl);
172 for(
unsigned d = 0; d < 3 && d < Base::Cell::Geometry::coorddimension; ++d)
173 arraywriter->write(xg[d]);
174 for(
unsigned d = Base::Cell::Geometry::coorddimension; d < 3; ++d)
175 arraywriter->write(0);
184 template<
typename IteratorFactory>
189 static const unsigned mydim = Base::Cell::mydimension;
191 const IteratorFactory& factory;
192 std::shared_ptr<DataArrayWriter<unsigned> > arraywriter;
193 std::vector<unsigned> pointIndices;
202 virtual std::string
name()
const {
return "connectivity"; }
205 virtual unsigned ncomps()
const {
return 1; }
216 if(arraywriter->writeIsNoop())
220 pointIndices.resize(factory.indexSet().size(mydim));
221 const typename IteratorFactory::PointIterator& pend =
223 typename IteratorFactory::PointIterator pit = factory.beginPoints();
224 unsigned counter = 0;
226 pointIndices[factory.indexSet().subIndex
227 (pit->cell(), pit->duneIndex(), mydim)] = counter;
237 if(pointIndices.size() == 0)
239 arraywriter->write(pointIndices[factory.indexSet().subIndex
240 (cell, cornerIndex, mydim)]);
245 pointIndices.clear();
250 template<
typename Cell>
254 std::shared_ptr<DataArrayWriter<unsigned> > arraywriter;
259 virtual std::string
name()
const {
return "connectivity"; }
262 virtual unsigned ncomps()
const {
return 1; }
274 return !arraywriter->writeIsNoop();
277 virtual void write(
const Cell& cell,
unsigned cornerIndex)
279 arraywriter->write(counter);
289 template<
typename Cell>
295 std::shared_ptr<DataArrayWriter<unsigned> > arraywriter;
300 virtual std::string
name()
const {
return "offsets"; }
303 virtual unsigned ncomps()
const {
return 1; }
315 return !arraywriter->writeIsNoop();
319 offset += cell.geometry().corners();
320 arraywriter->write(offset);
329 template<
typename Cell>
335 std::shared_ptr<DataArrayWriter<unsigned char> > arraywriter;
339 virtual std::string
name()
const {
return "types"; }
342 virtual unsigned ncomps()
const {
return 1; }
353 return !arraywriter->writeIsNoop();
Common stuff for the VTKWriter.
Data array writers for the VTKWriter.
Include standard header files.
Definition agrid.hh:60
GeometryType geometryType(const Dune::GeometryType &t)
mapping from GeometryType to VTKGeometryType
Definition common.hh:195
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 &cell, const Domain &xl)
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
virtual std::string name() const
return name
Definition functionwriter.hh:99
virtual unsigned ncomps() const
return number of components of the vector
Definition functionwriter.hh:102
virtual bool beginWrite(VTUWriter &writer, std::size_t nitems)
start writing with the given writer
Definition functionwriter.hh:113
VTKFunctionWriter(const std::shared_ptr< const Func > &func_)
Definition functionwriter.hh:94
virtual void addArray(PVTUWriter &writer)
add this field to the given parallel writer
Definition functionwriter.hh:108
virtual void write(const typename Base::Cell &cell, const typename Base::Domain &xl)
write at the given position
Definition functionwriter.hh:120
virtual void endWrite()
signal end of writing
Definition functionwriter.hh:129
writer for the Coordinates array
Definition functionwriter.hh:143
virtual void write(const typename Base::Cell &cell, const typename Base::Domain &xl)
write at the given position
Definition functionwriter.hh:168
virtual std::string name() const
return name
Definition functionwriter.hh:151
virtual void endWrite()
signal end of writing
Definition functionwriter.hh:178
virtual unsigned ncomps() const
return number of components of the vector
Definition functionwriter.hh:154
virtual void addArray(PVTUWriter &writer)
add this field to the given parallel writer
Definition functionwriter.hh:157
virtual bool beginWrite(VTUWriter &writer, std::size_t nitems)
start writing with the given writer
Definition functionwriter.hh:162
writer for the connectivity array in conforming mode
Definition functionwriter.hh:187
virtual void addArray(PVTUWriter &writer)
add this field to the given parallel writer
Definition functionwriter.hh:208
virtual std::string name() const
return name
Definition functionwriter.hh:202
virtual void write(const typename Base::Cell &cell, unsigned cornerIndex)
write at the given corner
Definition functionwriter.hh:234
ConformingConnectivityWriter(const IteratorFactory &factory_)
create a writer with the given iteratorfactory
Definition functionwriter.hh:197
virtual unsigned ncomps() const
return number of components of the vector
Definition functionwriter.hh:205
virtual bool beginWrite(VTUWriter &writer, std::size_t nitems)
start writing with the given writer
Definition functionwriter.hh:213
virtual void endWrite()
signal end of writing
Definition functionwriter.hh:243
writer for the connectivity array in nonconforming mode
Definition functionwriter.hh:253
virtual unsigned ncomps() const
return number of components of the vector
Definition functionwriter.hh:262
virtual std::string name() const
return name
Definition functionwriter.hh:259
virtual void addArray(PVTUWriter &writer)
add this field to the given parallel writer
Definition functionwriter.hh:265
virtual void write(const Cell &cell, unsigned cornerIndex)
write at the given corner
Definition functionwriter.hh:277
virtual bool beginWrite(VTUWriter &writer, std::size_t nitems)
start writing with the given writer
Definition functionwriter.hh:270
virtual void endWrite()
signal end of writing
Definition functionwriter.hh:283
writer for the offsets array
Definition functionwriter.hh:292
virtual void addArray(PVTUWriter &writer)
add this field to the given parallel writer
Definition functionwriter.hh:306
virtual void endWrite()
signal end of writing
Definition functionwriter.hh:323
virtual std::string name() const
return name
Definition functionwriter.hh:300
virtual void write(const Cell &cell, const typename Base::Domain &)
write at the given position
Definition functionwriter.hh:318
virtual bool beginWrite(VTUWriter &writer, std::size_t nitems)
start writing with the given writer
Definition functionwriter.hh:311
virtual unsigned ncomps() const
return number of components of the vector
Definition functionwriter.hh:303
writer for the types array
Definition functionwriter.hh:332
virtual unsigned ncomps() const
return number of components of the vector
Definition functionwriter.hh:342
virtual bool beginWrite(VTUWriter &writer, std::size_t nitems)
start writing with the given writer
Definition functionwriter.hh:350
virtual std::string name() const
return name
Definition functionwriter.hh:339
virtual void write(const Cell &cell, const typename Base::Domain &)
write at the given position
Definition functionwriter.hh:356
virtual void addArray(PVTUWriter &writer)
add this field to the given parallel writer
Definition functionwriter.hh:345
virtual void endWrite()
signal end of writing
Definition functionwriter.hh:360
Dump a .vtu/.vtp files contents to a stream.
Definition pvtuwriter.hh:60
void addArray(const std::string &name, unsigned ncomps)
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< T > * makeArrayWriter(const std::string &name, unsigned ncomps, unsigned nitems)
acquire a DataArrayWriter
Definition vtuwriter.hh:379