bitrl & cuberl Documentation
Simulation engine for reinforcement learning agents
Loading...
Searching...
No Matches
csv_mesh_writer.h
Go to the documentation of this file.
1#ifndef CSV_MESH_WRITER_H
2#define CSV_MESH_WRITER_H
3
4#include "kernel/base/types.h"
5#include "kernel/discretization/mesh_predicates.h"
6#include "kernel/discretization/node_mesh_iterator.h"
7#include "kernel/utilities/csv_file_writer.h"
8
9#include <initializer_list>
10#include <tuple>
11#include <vector>
12
13namespace kernel
14{
15
16namespace numerics
17{
18template <int dim> class LineMesh;
19}
20
25{
26
27 public:
31 static char default_delimiter() { return ','; }
32
36 CSVMeshWriter(const std::string &filename,
37 char delim = kernel::utilities::CSVWriter::default_delimiter(),
38 bool open_file = false, const std::ios_base::openmode mode = std::ios_base::out);
39
43 void write_column_names(const std::vector<std::string> &col_names, bool write_header = true);
44
48 void write_column_names(const std::vector<std::string_view> &col_names,
49 bool write_header = true);
50
54 void write_column_names(const std::initializer_list<std::string_view> &col_names,
55 bool write_header = true);
56
60 template <typename T> void write_row(const std::vector<T> &vals);
61
65 template <typename T> void write_row(const DynVec<T> &vals);
66
70 template <typename... T> void write_row(const std::tuple<T...> &row);
71
75 void set_delimiter(char delim) noexcept { writer_.set_delimiter(delim); }
76
80 char get_delimiter() const noexcept { return writer_.get_delimiter(); }
81
85 bool is_open() const { return writer_.is_open(); }
86
90 void write_mesh(const numerics::LineMesh<2> &mesh);
91
95 template <typename MeshTp> void write_mesh_nodes(const MeshTp &mesh);
96
97 private:
101 kernel::utilities::CSVWriter writer_;
102};
103
104inline void CSVMeshWriter::write_column_names(const std::vector<std::string> &col_names,
105 bool write_header)
106{
107
108 writer_.write_column_names(col_names, write_header);
109}
110
111inline void CSVMeshWriter::write_column_names(const std::vector<std::string_view> &col_names,
112 bool write_header)
113{
114
115 writer_.write_column_names(col_names, write_header);
116}
117
118inline void
119CSVMeshWriter::write_column_names(const std::initializer_list<std::string_view> &col_names,
120 bool write_header)
121{
122
123 std::vector<std::string_view> names(col_names);
124 write_column_names(names, write_header);
125}
126
127template <typename T> void CSVMeshWriter::write_row(const std::vector<T> &vals)
128{
129 writer_.write_row(vals);
130}
131
132template <typename T> void CSVMeshWriter::write_row(const DynVec<T> &vals)
133{
134
135 writer_.write_row(vals);
136}
137
138template <typename MeshTp> void CSVMeshWriter::write_mesh_nodes(const MeshTp &mesh)
139{
140
142 if (!is_open())
143 {
144 throw std::logic_error("File " + writer_.get_filename() + " is not open");
145 }
146
147 numerics::ConstNodeMeshIterator<numerics::Active, MeshTp> filter(mesh);
148 auto &file_stream = writer_.get_file_stream();
149
150 auto begin = filter.begin();
151 auto end = filter.end();
152
153 for (; begin != end; ++begin)
154 {
155 auto *node = *begin;
156
157 for (uint_t d = 0; d < MeshTp::dimension; ++d)
158 {
159
160 file_stream << (*node)[d];
161
162 if (d == MeshTp::dimension - 1)
163 {
164 file_stream << std::endl;
165 }
166 else
167 {
168 file_stream << ",";
169 }
170 }
171 }
172
173 file_stream.flush();
174 file_stream.close();
175}
176
177template <typename... T> void CSVMeshWriter::write_row(const std::tuple<T...> &row)
178{
179 writer_.write_row(row);
180}
181
182} // namespace kernel
183
184#endif // CSV_FILE_WRITER_H
The CSVWriter class. Handles writing into CSV file format.
Definition csv_mesh_writer.h:25
void write_mesh_nodes(const MeshTp &mesh)
Write the nodes of the given Mesh.
Definition csv_mesh_writer.h:138
void write_row(const std::vector< T > &vals)
Write a row of the file.
Definition csv_mesh_writer.h:127
void set_delimiter(char delim) noexcept
Set the delimiter.
Definition csv_mesh_writer.h:75
void write_column_names(const std::vector< std::string > &col_names, bool write_header=true)
Write the column names.
Definition csv_mesh_writer.h:104
static char default_delimiter()
The default column delimiter.
Definition csv_mesh_writer.h:31
char get_delimiter() const noexcept
Returns the column delimiter.
Definition csv_mesh_writer.h:80
void write_mesh(const numerics::LineMesh< 2 > &mesh)
Write the given LineMesh into csv format.
Definition csv_mesh_writer.cpp:16
bool is_open() const
Returns true if the file is open.
Definition csv_mesh_writer.h:85
Definition line_mesh_utils.h:17
Definition line_mesh_utils.cpp:13