diff options
Diffstat (limited to 'CarpetDev/CarpetIOF5/src/data_region.cc')
-rw-r--r-- | CarpetDev/CarpetIOF5/src/data_region.cc | 121 |
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 |