aboutsummaryrefslogtreecommitdiff
path: root/CarpetDev/CarpetIOF5_standalone/src/meta_data_region.cc
diff options
context:
space:
mode:
Diffstat (limited to 'CarpetDev/CarpetIOF5_standalone/src/meta_data_region.cc')
-rw-r--r--CarpetDev/CarpetIOF5_standalone/src/meta_data_region.cc116
1 files changed, 116 insertions, 0 deletions
diff --git a/CarpetDev/CarpetIOF5_standalone/src/meta_data_region.cc b/CarpetDev/CarpetIOF5_standalone/src/meta_data_region.cc
new file mode 100644
index 000000000..88963ec34
--- /dev/null
+++ b/CarpetDev/CarpetIOF5_standalone/src/meta_data_region.cc
@@ -0,0 +1,116 @@
+#include <cassert>
+#include <cstdlib>
+#include <sstream>
+#include <string>
+
+#include <hdf5.h>
+
+#include "cctk.h"
+
+#include "carpet.hh"
+
+#include "defs.hh"
+
+#include "meta_data_region.hh"
+#include "utils.hh"
+
+
+
+namespace CarpetIOF5 {
+
+ namespace F5 {
+
+ using std::ostringstream;
+
+
+
+ meta_data_region_t::
+ meta_data_region_t (physical_quantity_t & physical_quantity,
+ bbox<int, dim> const & region)
+ : m_physical_quantity (physical_quantity),
+ m_region (region),
+ m_name (string ("region-") + F5::name_from_ibbox (region))
+ {
+ assert (not region.empty());
+
+ assert (invariant());
+ }
+
+
+
+ meta_data_region_t::
+ ~ meta_data_region_t ()
+ {
+ }
+
+
+
+ physical_quantity_t & meta_data_region_t::
+ get_physical_quantity ()
+ const
+ {
+ return m_physical_quantity;
+ }
+
+
+
+ void meta_data_region_t::
+ write (int const proc)
+ const
+ {
+ DECLARE_CCTK_PARAMETERS;
+
+ string filename;
+ string objectname;
+ get_physical_quantity().get_link_destination (proc, filename, objectname);
+
+ hid_t const hdf5_physical_quantity
+ = m_physical_quantity.get_hdf5_physical_quantity();
+
+ bool link_exists;
+ H5E_BEGIN_TRY {
+ H5L_info_t linkbuf;
+ herr_t const herr
+ = H5Lget_info (hdf5_physical_quantity, m_name.c_str(),
+ & linkbuf, H5P_DEFAULT);
+ link_exists = herr == 0;
+ } H5E_END_TRY;
+ if (veryverbose)
+ {
+ CCTK_VInfo (CCTK_THORNSTRING,
+ "Link \"%s\" %s",
+ m_name.c_str(),
+ link_exists ? "exists" : "does not exist");
+ }
+
+ if (not link_exists)
+ {
+ if (veryverbose)
+ {
+ CCTK_VInfo (CCTK_THORNSTRING,
+ "H5Lcreate_external "
+ "(filename=\"%s\", objectname=\"%s\", linkname=\"%s\")",
+ filename.c_str(),
+ objectname.c_str(),
+ m_name.c_str());
+ }
+ check (not H5Lcreate_external (filename.c_str(),
+ objectname.c_str(),
+ hdf5_physical_quantity,
+ m_name.c_str(),
+ H5P_DEFAULT, H5P_DEFAULT));
+ }
+ }
+
+
+
+ bool meta_data_region_t::
+ invariant ()
+ const
+ {
+ return not m_region.empty();
+ }
+
+ } // namespace F5
+
+} // namespace CarpetIOF5