aboutsummaryrefslogtreecommitdiff
path: root/CarpetDev/CarpetIOF5/src/data_region.cc
diff options
context:
space:
mode:
Diffstat (limited to 'CarpetDev/CarpetIOF5/src/data_region.cc')
-rw-r--r--CarpetDev/CarpetIOF5/src/data_region.cc121
1 files changed, 24 insertions, 97 deletions
diff --git a/CarpetDev/CarpetIOF5/src/data_region.cc b/CarpetDev/CarpetIOF5/src/data_region.cc
index 21728c2e6..99b188323 100644
--- a/CarpetDev/CarpetIOF5/src/data_region.cc
+++ b/CarpetDev/CarpetIOF5/src/data_region.cc
@@ -3,12 +3,14 @@
#include <sstream>
#include <string>
+#include <hdf5.h>
+
#include "cctk.h"
-#include "cctk_Parameters.h"
#include "carpet.hh"
#include "data_region.hh"
+#include "utils.hh"
@@ -21,54 +23,19 @@ namespace CarpetIOF5 {
data_region_t::
- data_region_t (tensor_component_t & tensor_component,
+ data_region_t (physical_quantity_t & physical_quantity,
bbox<int, dim> const & region)
- : m_tensor_component (tensor_component),
- m_region (region)
+ : m_physical_quantity (physical_quantity),
+ m_region (region),
+ m_name (string ("region-") + F5::name_from_ibbox (region))
{
- DECLARE_CCTK_PARAMETERS;
-
assert (not region.empty());
- ostringstream namebuf;
-#if 0
- namebuf << "map=" << Carpet::map << " "
- << "region=" << m_region;
-#else
- namebuf << "region=" << m_region;
-#endif
- string const namestr = namebuf.str();
- char const * const name = namestr.c_str();
- assert (name != 0);
-
- int const vartype = CCTK_VarTypeI (m_tensor_component.get_variable());
- assert (vartype >= 0);
- hid_t const hdf5_datatype = hdf5_datatype_from_cactus_datatype (vartype);
- assert (hdf5_datatype >= 0);
-
- vect<hsize_t, dim> const dims
- = (region.shape() / region.stride()).reverse();
- m_dataspace = H5Screate_simple (dim, & dims [0], 0);
- assert (m_dataspace >= 0);
-
- m_properties = H5Pcreate (H5P_DATASET_CREATE);
- assert (m_properties >= 0);
- if (compression_level > 0)
- {
- herr_t const herr1 = H5Pset_chunk (m_properties, dim, & dims [0]);
- assert (not herr1);
- herr_t const herr2 = H5Pset_deflate (m_properties, compression_level);
- assert (not herr2);
- }
-
- m_dataset
- = H5Dcreate (m_tensor_component.get_hdf5_tensor_component(), name,
- hdf5_datatype, m_dataspace,
- H5P_DEFAULT, m_properties, H5P_DEFAULT);
- assert (m_dataset >= 0);
-
- write_or_check_attribute
- (m_dataset, "iorigin", region.lower() / region.stride());
+ m_hdf5_data_region
+ = open_or_create_group (m_physical_quantity
+ .get_hdf5_physical_quantity(),
+ m_name.c_str());
+ assert (m_hdf5_data_region >= 0);
assert (invariant());
}
@@ -78,73 +45,35 @@ namespace CarpetIOF5 {
data_region_t::
~ data_region_t ()
{
- herr_t herr;
-
- herr = H5Dclose (m_dataset);
- assert (not herr);
-
- herr = H5Sclose (m_dataspace);
- assert (not herr);
-
- herr = H5Pclose (m_properties);
+ herr_t const herr = H5Gclose (m_hdf5_data_region);
assert (not herr);
}
- string data_region_t::
- name_from_region (bbox<int, dim> const & region)
+ physical_quantity_t & data_region_t::
+ get_physical_quantity ()
+ const
{
- ostringstream namebuf;
-#if 0
- namebuf << "map=" << Carpet::map << " "
- << "region=" << region;
-#else
- namebuf << "region=" << region;
-#endif
- return namebuf.str();
+ return m_physical_quantity;
}
- tensor_component_t & data_region_t::
- get_tensor_component ()
+ bbox<int, dim> const & data_region_t::
+ get_region ()
const
{
- return m_tensor_component;
+ return m_region;
}
- void data_region_t::
- write (void const * const data,
- int const cactus_datatype)
+ hid_t data_region_t::
+ get_hdf5_data_region ()
const
{
- hid_t const memory_hdf5_datatype
- = hdf5_datatype_from_cactus_datatype (cactus_datatype);
- assert (memory_hdf5_datatype >= 0);
-
- vect<hsize_t, dim> const dims
- = (m_region.shape() / m_region.stride()).reverse();
- hid_t const memory_dataspace
- = H5Screate_simple (dim, & dims [0], & dims [0]);
- assert (memory_dataspace >= 0);
-
- hid_t const transfer_properties = H5Pcreate (H5P_DATASET_XFER);
- assert (transfer_properties >= 0);
-
- herr_t herr;
- herr
- = H5Dwrite (m_dataset, memory_hdf5_datatype, memory_dataspace,
- m_dataspace, transfer_properties, data);
- assert (not herr);
-
- herr = H5Pclose (transfer_properties);
- assert (not herr);
-
- herr = H5Sclose (memory_dataspace);
- assert (not herr);
+ return m_hdf5_data_region;
}
@@ -154,9 +83,7 @@ namespace CarpetIOF5 {
const
{
return (not m_region.empty()
- and m_properties >= 0
- and m_dataset >= 0
- and m_dataspace >= 0);
+ and m_hdf5_data_region >= 0);
}
} // namespace F5