From a6fe9599f7773de379c8093720410ce7da0c6424 Mon Sep 17 00:00:00 2001 From: cott <> Date: Mon, 12 Apr 2004 20:59:00 +0000 Subject: Writing and Reading variables of type 'complex' should now work. Please test. darcs-hash:20040412205904-19929-21858f81ba0fbfc5618ec47c5083fc3b146ddaa8.gz --- Carpet/CarpetIOHDF5/src/iohdf5.cc | 48 +++++++++++++++++++++++++++++----- Carpet/CarpetIOHDF5/src/iohdf5.hh | 22 +++++++++++++--- Carpet/CarpetIOHDF5/src/iohdf5GH.h | 4 +++ Carpet/CarpetIOHDF5/src/iohdf5utils.cc | 16 +++++++----- 4 files changed, 74 insertions(+), 16 deletions(-) diff --git a/Carpet/CarpetIOHDF5/src/iohdf5.cc b/Carpet/CarpetIOHDF5/src/iohdf5.cc index 83891a809..35f0ae08a 100644 --- a/Carpet/CarpetIOHDF5/src/iohdf5.cc +++ b/Carpet/CarpetIOHDF5/src/iohdf5.cc @@ -17,7 +17,7 @@ #include "cctk_Parameters.h" extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOHDF5/src/iohdf5.cc,v 1.26 2004/04/07 14:10:23 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOHDF5/src/iohdf5.cc,v 1.27 2004/04/12 22:59:04 cott Exp $"; CCTK_FILEVERSION(Carpet_CarpetIOHDF5_iohdf5_cc); } @@ -126,11 +126,41 @@ namespace CarpetIOHDF5 { myGH->open_output_files = NULL; + // Now set hdf5 complex datatypes + // Stolen from Thomas Radke + HDF5_ERROR (myGH->HDF5_COMPLEX = + H5Tcreate (H5T_COMPOUND, sizeof (CCTK_COMPLEX))); + HDF5_ERROR (H5Tinsert (myGH->HDF5_COMPLEX, "real", + offsetof (CCTK_COMPLEX, Re), HDF5_REAL)); + HDF5_ERROR (H5Tinsert (myGH->HDF5_COMPLEX, "imag", + offsetof (CCTK_COMPLEX, Im), HDF5_REAL)); +#ifdef CCTK_REAL4 + HDF5_ERROR (myGH->HDF5_COMPLEX8 = + H5Tcreate (H5T_COMPOUND, sizeof (CCTK_COMPLEX8))); + HDF5_ERROR (H5Tinsert (myGH->HDF5_COMPLEX8, "real", + offsetof (CCTK_COMPLEX8, Re), HDF5_REAL4)); + HDF5_ERROR (H5Tinsert (myGH->HDF5_COMPLEX8, "imag", + offsetof (CCTK_COMPLEX8, Im), HDF5_REAL4)); +#endif +#ifdef CCTK_REAL8 + HDF5_ERROR (myGH->HDF5_COMPLEX16 = + H5Tcreate (H5T_COMPOUND, sizeof (CCTK_COMPLEX16))); + HDF5_ERROR (H5Tinsert (myGH->HDF5_COMPLEX16, "real", + offsetof (CCTK_COMPLEX16, Re), HDF5_REAL8)); + HDF5_ERROR (H5Tinsert (myGH->HDF5_COMPLEX16, "imag", + offsetof (CCTK_COMPLEX16, Im), HDF5_REAL8)); +#endif +#ifdef CCTK_REAL16 + HDF5_ERROR (myGH->HDF5_COMPLEX32 = + H5Tcreate (H5T_COMPOUND, sizeof (CCTK_COMPLEX32))); + HDF5_ERROR (H5Tinsert (myGH->HDF5_COMPLEX32, "real", + offsetof (CCTK_COMPLEX32, Re), HDF5_REAL16)); + HDF5_ERROR (H5Tinsert (myGH->HDF5_COMPLEX32, "imag", + offsetof (CCTK_COMPLEX32, Im), HDF5_REAL16)); +#endif return (myGH); } - - int OutputGH (const cGH* const cctkGH) { for (int vindex=0; vindexHDF5_COMPLEX; break; + case CCTK_VARIABLE_COMPLEX: retval = myGH->HDF5_COMPLEX; break; #ifdef CCTK_INT1 case CCTK_VARIABLE_INT1: retval = HDF5_INT1; break; #endif @@ -486,15 +490,15 @@ namespace CarpetIOHDF5 { #endif #ifdef CCTK_REAL4 case CCTK_VARIABLE_REAL4: retval = HDF5_REAL4; break; - // case CCTK_VARIABLE_COMPLEX8: retval = myGH->HDF5_COMPLEX8; break; + case CCTK_VARIABLE_COMPLEX8: retval = myGH->HDF5_COMPLEX8; break; #endif #ifdef CCTK_REAL8 case CCTK_VARIABLE_REAL8: retval = HDF5_REAL8; break; - //case CCTK_VARIABLE_COMPLEX16: retval = myGH->HDF5_COMPLEX16; break; + case CCTK_VARIABLE_COMPLEX16: retval = myGH->HDF5_COMPLEX16; break; #endif #ifdef CCTK_REAL16 case CCTK_VARIABLE_REAL16: retval = HDF5_REAL16; break; - //case CCTK_VARIABLE_COMPLEX32: retval = myGH->HDF5_COMPLEX32; break; + case CCTK_VARIABLE_COMPLEX32: retval = myGH->HDF5_COMPLEX32; break; #endif default: CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, -- cgit v1.2.3