Skip to content
Snippets Groups Projects
Commit c69738e4 authored by Praetorius, Simon's avatar Praetorius, Simon
Browse files

Revert "added vtksequencewriter"

This reverts commit 62155381.
parent a79d1a4a
No related branches found
No related tags found
1 merge request!71write only rank 0 in parallel
...@@ -71,7 +71,6 @@ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/amdis) ...@@ -71,7 +71,6 @@ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/amdis)
add_subdirectory("common") add_subdirectory("common")
add_subdirectory("functions") add_subdirectory("functions")
add_subdirectory("gridfunctions") add_subdirectory("gridfunctions")
add_subdirectory("io")
add_subdirectory("linearalgebra") add_subdirectory("linearalgebra")
add_subdirectory("localoperators") add_subdirectory("localoperators")
add_subdirectory("operations") add_subdirectory("operations")
......
install(FILES
VtkSequenceWriter.hpp
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/amdis/io)
#pragma once
#include <vector>
#include <iostream>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <memory>
#include <dune/grid/io/file/vtk/common.hh>
#include <dune/common/path.hh>
#include <dune/grid/io/file/vtk/vtkwriter.hh>
namespace AMDiS
{
/// \brief class to write pvd-files which contains a list of all collected vtk-files
/**
* Write pvd-file suitable for easy visualization with
* <a href="http://www.vtk.org/">The Visualization Toolkit (VTK)</a>.
*
* \tparam GridView Grid view of the grid we are writing
*/
template <class GridView>
class VTKSequenceWriter
{
using VTKWriter = Dune::VTKWriter<GridView>;
public:
/// \brief Set up the VTKSequenceWriter class
/**
* \param vtkWriter Writer object used to write the individual time step data files
*/
VTKSequenceWriter(std::shared_ptr<VTKWriter> vtkWriter)
: vtkWriter_(std::move(vtkWriter))
{}
/// \brief Set up the VTKSequenceWriter class by creating a timestep writer of type \ref VTKWriter
/**
* \param gridView GridView object passed to the constructor of the VTKWriter
* \param args... Additional arguments forwarded to the VTKWriter constructor.
*/
template <class... Args>
VTKSequenceWriter(GridView const& gridView, Args&&... args)
: VTKSequenceWriter<GridView>(std::make_shared<VTKWriter>(gridView, FWD(args)...))
{}
/// accessor for the underlying VTKWriter instance
std::shared_ptr<VTKWriter> const& vtkWriter() const
{
return vtkWriter_;
}
/// \brief Adds a field of cell data to the VTK file
template <class... Args>
void addCellData(Args&&... args)
{
vtkWriter_->addCellData(FWD(args)...);
}
/// \brief Adds a field of vertex data to the VTK file
template <class... Args>
void addVertexData (Args&&... args)
{
vtkWriter_->addVertexData(FWD(args)...);
}
/// \brief Writes VTK data for the given time,
/**
* \param time The time(step) for the data to be written.
* \param name The basename of the .pvd file (without file extension)
* \param type VTK output type.
*/
virtual void write(double time, std::string const& name, Dune::VTK::OutputType type = Dune::VTK::ascii)
{
pwrite(time, name, ".", "", type);
}
/// \brief Writes VTK data for the given time,
/**
* \param time The time(step) for the data to be written.
* \param name The basename of the .pvd file (without file extension)
* \param path The directory where to put the .pvd file
* \param extendpath The (relative) subdirectory to path, where to put the timestep files
* \param type VTK output type.
*/
virtual void pwrite(double time, std::string const& name, std::string const& path, std::string const& extendpath,
Dune::VTK::OutputType type = Dune::VTK::ascii)
{
// remember current time step
unsigned int count = timesteps_.size();
timesteps_.push_back(time);
// write VTK file
vtkWriter_->pwrite(seqName(name, count), concatPaths(path, extendpath), "", type);
// write pvd file ... only on rank 0
if (Environment::mpiRank() == 0) {
std::ofstream pvdFile;
pvdFile.exceptions(std::ios_base::badbit | std::ios_base::failbit |
std::ios_base::eofbit);
std::string pvdname = path + "/" + name + ".pvd";
pvdFile.open(pvdname.c_str());
pvdFile << "<?xml version=\"1.0\"?> \n"
<< "<VTKFile type=\"Collection\" version=\"0.1\" byte_order=\"" << VTK::getEndiannessString() << "\"> \n"
<< "<Collection> \n";
for (unsigned int i = 0; i <= count; ++i) {
std::string piecepath = concatPaths(path, extendpath);
std::string fullname = vtkWriter_->getParallelHeaderName(seqName(name,i), piecepath, Environment::mpiSize());
pvdFile << "<DataSet timestep=\"" << timesteps_[i]
<< "\" group=\"\" part=\"0\" name=\"\" file=\""
<< fullname << "\"/> \n";
}
pvdFile << "</Collection> \n"
<< "</VTKFile> \n" << std::flush;
pvdFile.close();
}
}
private:
// create sequence name
std::string seqName(std::string const& name, unsigned int count) const
{
std::stringstream n;
n.fill('0');
n << name << "-" << std::setw(5) << count;
return n.str();
}
private:
std::shared_ptr<VTKWriter> vtkWriter_;
std::vector<double> timesteps_;
};
} // end namespace AMDiS
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment