16#include <dune/geometry/referenceelements.hh>
17#include <dune/geometry/type.hh>
29 [[maybe_unused]]
int ec = std::remove(filenameMesh_.c_str());
31 for (
auto const& timestep : timesteps_) {
32 ec = std::remove(timestep.second.c_str());
36 std::remove(tmpDir_.string().c_str());
42 ::writeTimestep (
double time, std::string
const& fn, std::optional<std::string> tmpDir,
bool writeCollection)
const
45 auto tmpBase = tmpDir ?
Vtk::Path(*tmpDir) : tmpDir_;
49 vtkWriter_.dataCollector_->update();
51 std::string filenameBase = tmp.string();
53 if (vtkWriter_.comm().size() > 1)
54 filenameBase = tmp.string() +
"_p" + std::to_string(vtkWriter_.comm().rank());
60 filenameMesh_ = filenameBase +
".mesh.vtkdata";
61 std::ofstream out(filenameMesh_, std::ios_base::ate | std::ios::binary);
62 vtkWriter_.writeGridAppended(out, blocks_);
66 std::string filenameData = filenameBase +
"_t" + std::to_string(timesteps_.size()) +
".vtkdata";
67 std::ofstream out(filenameData, std::ios_base::ate | std::ios::binary);
68 vtkWriter_.writeDataAppended(out, blocks_);
69 timesteps_.emplace_back(time, filenameData);
78 ::write (std::string
const& fn, std::optional<std::string> dir)
const
80 assert( initialized_ );
90 std::string serial_fn = fn_dir.
string() +
'/' + name.string() +
"_ts";
91 std::string parallel_fn = data_dir.
string() +
'/' + name.string() +
"_ts";
92 std::string rel_fn = rel_dir.
string() +
'/' + name.string() +
"_ts";
94 int commRank = vtkWriter_.comm().rank();
95 int commSize = vtkWriter_.comm().size();
97 serial_fn +=
"_p" + std::to_string(commRank);
99 std::string outputFilename;
102 outputFilename = serial_fn +
"." + vtkWriter_.getFileExtension();
103 std::ofstream serial_out(outputFilename, std::ios_base::ate | std::ios::binary);
104 assert(serial_out.is_open());
106 serial_out.imbue(std::locale::classic());
108 ? std::numeric_limits<float>::digits10+2
109 : std::numeric_limits<double>::digits10+2);
111 vtkWriter_.writeTimeseriesSerialFile(serial_out, filenameMesh_, timesteps_, blocks_);
114 if (commSize > 1 && commRank == 0) {
116 outputFilename = parallel_fn +
".p" + vtkWriter_.getFileExtension();
117 std::ofstream parallel_out(outputFilename, std::ios_base::ate | std::ios::binary);
118 assert(parallel_out.is_open());
120 parallel_out.imbue(std::locale::classic());
122 ? std::numeric_limits<float>::digits10+2
123 : std::numeric_limits<double>::digits10+2);
125 vtkWriter_.writeTimeseriesParallelFile(parallel_out, rel_fn, commSize, timesteps_);
128 return outputFilename;
Path relative(Path const &a, Path const &b)
Find the path of a relative to directory of b
Definition: filesystem.cc:173
bool createDirectories(Path const &p)
Create directory and non existing parent directories.
Definition: filesystem.cc:140
Definition: filesystem.hh:15
Path stem() const
Returns the stem path component.
Definition: filesystem.cc:66
std::string string() const
Return the path as string.
Definition: filesystem.cc:27
File-Writer for Vtk timeseries .vtu files.
Definition: vtktimeserieswriter.hh:25
~VtkTimeseriesWriter()
Remove all written intermediate files and remove temporary directory.
Definition: vtktimeserieswriter.impl.hh:26