OpenPFC  0.1.4
Phase Field Crystal simulation framework
Loading...
Searching...
No Matches
vtk_writer.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2025 VTT Technical Research Centre of Finland Ltd
2// SPDX-License-Identifier: AGPL-3.0-or-later
3
39#ifndef PFC_VTK_WRITER_HPP
40#define PFC_VTK_WRITER_HPP
41
43#include <array>
44#include <fstream>
45#include <iomanip>
46#include <mpi.h>
47#include <sstream>
48#include <string>
49#include <vector>
50
51namespace pfc {
52
59class VTKWriter : public ResultsWriter {
60private:
61 std::array<int, 3> m_global_size;
62 std::array<int, 3> m_local_size;
63 std::array<int, 3> m_offset;
64 std::array<double, 3> m_origin = {0.0, 0.0, 0.0};
65 std::array<double, 3> m_spacing = {1.0, 1.0, 1.0};
66 std::string m_field_name = "Field";
67 int m_rank = 0;
68 int m_num_ranks = 1;
69 MPI_Comm m_comm = MPI_COMM_WORLD;
70
74 std::string generate_filename(int increment, int rank = -1) const;
75
79 void write_vti_header(std::ofstream &file, int increment) const;
80
84 void write_vti_data(std::ofstream &file, const RealField &data) const;
85
89 void write_pvti_file(int increment) const;
90
91public:
97 explicit VTKWriter(const std::string &filename) : ResultsWriter(filename) {
98 MPI_Comm_rank(m_comm, &m_rank);
99 MPI_Comm_size(m_comm, &m_num_ranks);
100 }
101
105 void set_domain(const std::array<int, 3> &arr_global,
106 const std::array<int, 3> &arr_local,
107 const std::array<int, 3> &arr_offset) override;
108
112 void set_origin(const std::array<double, 3> &origin) { m_origin = origin; }
113
117 void set_spacing(const std::array<double, 3> &spacing) { m_spacing = spacing; }
118
122 void set_field_name(const std::string &name) { m_field_name = name; }
123
127 MPI_Status write(int increment, const RealField &data) override;
128
132 MPI_Status write(int increment, const ComplexField &data) override;
133};
134
135} // namespace pfc
136
137#endif // PFC_VTK_WRITER_HPP
Definition results_writer.hpp:182
VTK ImageData format writer.
Definition vtk_writer.hpp:59
void set_domain(const std::array< int, 3 > &arr_global, const std::array< int, 3 > &arr_local, const std::array< int, 3 > &arr_offset) override
Set domain decomposition.
MPI_Status write(int increment, const ComplexField &data) override
Write complex field to VTK file (writes magnitude)
void set_origin(const std::array< double, 3 > &origin)
Set origin of the domain.
Definition vtk_writer.hpp:112
VTKWriter(const std::string &filename)
Construct VTKWriter with filename pattern.
Definition vtk_writer.hpp:97
void set_spacing(const std::array< double, 3 > &spacing)
Set spacing of the domain.
Definition vtk_writer.hpp:117
void set_field_name(const std::string &name)
Set field name for VTK output.
Definition vtk_writer.hpp:122
MPI_Status write(int increment, const RealField &data) override
Write real field to VTK file.
Base interface for simulation output and I/O operations.
Represents the global simulation domain (the "world").
Definition world.hpp:91