BioCMAMC-ST
data_exporter.hpp
1#ifndef __CORE_DATA_EXPORTER_HPP__
2#define __CORE_DATA_EXPORTER_HPP__
3
4#include <common/execinfo.hpp>
5#include <core/simulation_parameters.hpp>
6#include <cstddef>
7#include <cstdint>
8#include <memory>
9#include <optional>
10#include <span>
11#include <string>
12#include <string_view>
13#include <unordered_map>
14#include <variant>
15#include <vector>
16#include <common/common.hpp>
17namespace Core
18{
19
20 // static inline std::string get_filename(std::string_view filename, std::size_t current_rank)
21 // {
22 // return std::string(filename) + "_partial_" + std::to_string(current_rank) + ".h5";
23 // }
42 {
43 public:
44 DataExporter(const DataExporter&) = delete;
48 DataExporter() = default;
61 void do_link(std::string_view filename, std::string_view link_name, std::string_view groupname);
62
63 protected:
75 {
76 std::string name;
77 std::vector<size_t> dims;
78 std::vector<size_t> max_dims;
79 std::optional<std::vector<unsigned long long>>
83 };
84
85 // Using type definitions with aligned comments
87 std::variant<uint64_t, int, std::string>;
89 std::unordered_map<std::string,
92 Kokkos::View<double**, Kokkos::LayoutRight, HostSpace>;
94 std::variant<size_t, std::string, std::vector<size_t>, double, uint32_t>;
97 std::unordered_map<std::string,
99
100 using matrix_variant_t = std::variant<std::span<const double>,
101 std::span<const std::size_t>,
102 double>;
103
104 // Methods
105
106 explicit DataExporter(const ExecInfo& info,
107 std::string_view _filename,
108 std::optional<export_metadata_t> user_description = std::nullopt);
110
111 void write_matrix(std::string_view name, std::span<const double> values, bool compress = false);
112
113 void write_matrix(std::string_view name,
114 std::span<const double> values,
115 size_t n_row,
116 size_t n_col,
117 bool compress = false);
118
119 void prepare_matrix(MultiMatrixDescription description);
120
121 void append_matrix(std::string_view name, matrix_variant_t data);
122
123 void append_array(std::string_view name, std::span<const double> data, uint64_t last_size = 0);
124
125 void write_properties(std::optional<std::string> specific_dataspace,
126 const export_metadata_kv& values);
127
128 void write_simple(const export_initial_kv& values, std::string_view root);
129
130 void write_simple(std::string specific_dataspace, const simple_export_t& values);
131
133 uint64_t export_counter = 0;
134
135 private:
136 std::unordered_map<std::string, MultiMatrixDescription> descriptors;
137 class impl;
138 std::unique_ptr<impl> pimpl;
139 };
140
141} // namespace Core
142#endif
Definition impl_default_dataexporter.cpp:9
A class responsible for exporting various types of data such as matrices, arrays, and metadata in a s...
Definition data_exporter.hpp:42
void append_matrix(std::string_view name, matrix_variant_t data)
Definition impl_default_dataexporter.cpp:35
void append_array(std::string_view name, std::span< const double > data, uint64_t last_size=0)
Definition impl_default_dataexporter.cpp:39
void do_link(std::string_view filename, std::string_view link_name, std::string_view groupname)
Creates a link to a specified file.
Definition impl_default_dataexporter.cpp:11
std::variant< std::span< const double >, std::span< const std::size_t >, double > matrix_variant_t
Variant for matrix data types.
Definition data_exporter.hpp:100
std::variant< uint64_t, int, std::string > export_metadata_t
Metadata types for export.
Definition data_exporter.hpp:86
void write_simple(const export_initial_kv &values, std::string_view root)
Definition impl_default_dataexporter.cpp:59
std::unordered_map< std::string, MultiMatrixDescription > descriptors
Definition data_exporter.hpp:136
Kokkos::View< double **, Kokkos::LayoutRight, HostSpace > ViewParticleProperties
View for particle properties.
Definition data_exporter.hpp:91
void write_matrix(std::string_view name, std::span< const double > values, bool compress=false)
Definition impl_default_dataexporter.cpp:25
uint64_t export_counter
Definition data_exporter.hpp:133
void write_properties(std::optional< std::string > specific_dataspace, const export_metadata_kv &values)
Definition impl_default_dataexporter.cpp:46
DataExporter()=default
void prepare_matrix(MultiMatrixDescription description)
Definition impl_default_dataexporter.cpp:31
DataExporter(const DataExporter &)=delete
std::variant< size_t, std::string, std::vector< size_t >, double, uint32_t > simple_export_t
Definition data_exporter.hpp:93
DataExporter & operator=(DataExporter &&)=delete
std::unordered_map< std::string, export_metadata_t > export_metadata_kv
Key-value pairs for metadata.
Definition data_exporter.hpp:88
export_metadata_kv metadata
Definition data_exporter.hpp:132
std::unordered_map< std::string, simple_export_t > export_initial_kv
Initial export key-value pairs.
Definition data_exporter.hpp:96
std::unique_ptr< impl > pimpl
Definition data_exporter.hpp:138
DataExporter(DataExporter &&)=delete
DataExporter & operator=(const DataExporter &)=delete
Core component to perform simulation.
Definition data_exporter.hpp:18
bool check_results_file_name(Core::UserControlParameters &params)
Definition main_exporter.cpp:170
Describes the properties of a multi-dimensional matrix for export operations.
Definition data_exporter.hpp:75
std::vector< size_t > dims
Dataset dimensions.
Definition data_exporter.hpp:77
std::optional< std::vector< unsigned long long > > chunk_dims
Data chunk along each dimension.
Definition data_exporter.hpp:80
bool is_integer
Matrix data is integer type or floating point.
Definition data_exporter.hpp:82
std::vector< size_t > max_dims
Expected dataset max dimensions.
Definition data_exporter.hpp:78
bool compression
Matrix data has to be compressed or not.
Definition data_exporter.hpp:81
std::string name
Dataset name.
Definition data_exporter.hpp:76
A structure to hold user-defined control parameters for simulation settings.
Definition simulation_parameters.hpp:24
Definition execinfo.hpp:12