8 #ifndef HIPACE_INSITUUTIL_H_
9 #define HIPACE_INSITUUTIL_H_
16 #include <type_traits>
32 DataNode (
const std::string& name,
const T* data, std::size_t size = 1) :
m_name{name} {
33 std::string type_letter =
"";
34 if (std::is_integral_v<T> && std::is_signed_v<T>) type_letter =
"i";
35 else if (std::is_integral_v<T> && std::is_unsigned_v<T>) type_letter =
"u";
37 else if (std::is_floating_point_v<T>) type_letter =
"f";
42 +
"<" + type_letter + std::to_string(
sizeof(T));
54 const std::string& indent =
"") {
63 ofs << indent <<
"{\n" << indent <<
" \"names\": [\n";
64 for (
int i=0;
i<nodes.
size(); ++
i) {
65 ofs << indent <<
" \"" << nodes[
i].m_name <<
"\"" << (
i+1==nodes.
size()?
"\n":
",\n");
67 ofs << indent <<
" ],\n" << indent <<
" \"formats\": [\n";
68 for (
int i=0;
i<nodes.
size(); ++
i) {
69 if (nodes[
i].m_data_location) {
70 ofs << indent <<
" \"" << nodes[
i].m_format <<
"\"";
75 ofs << (
i+1==nodes.
size()?
"\n":
",\n");
77 ofs << indent <<
" ]\n" << indent <<
"}";
82 for (
auto& dn : nodes) {
83 if (dn.m_data_location) {
84 ofs.write(dn.m_data_location, dn.m_data_size);
Long size() const noexcept
int i
Definition: MakeOpenBoundary.py:152
AMREX_GPU_HOST_DEVICE Long size(T const &b) noexcept
void Abort(const std::string &msg)
Definition: InsituUtil.H:20
void write_header(const amrex::Vector< DataNode > &nodes, std::ofstream &ofs, const std::string &indent="")
Definition: InsituUtil.H:53
void write_data(const amrex::Vector< DataNode > &nodes, std::ofstream &ofs)
Definition: InsituUtil.H:81
Definition: InsituUtil.H:23
std::size_t m_data_size
Definition: InsituUtil.H:27
const char * m_data_location
Definition: InsituUtil.H:26
std::string m_format
Definition: InsituUtil.H:25
std::string m_name
Definition: InsituUtil.H:24
amrex::Vector< DataNode > m_structured_format
Definition: InsituUtil.H:28
DataNode(const std::string &name, const amrex::Vector< DataNode > &structured_format)
Definition: InsituUtil.H:48
DataNode(const std::string &name, const T *data, std::size_t size=1)
Definition: InsituUtil.H:32