[cig-commits] r4281 - mc/3D/CitcomS/trunk/lib

luis at geodynamics.org luis at geodynamics.org
Mon Aug 14 04:22:52 PDT 2006


Author: luis
Date: 2006-08-14 04:22:51 -0700 (Mon, 14 Aug 2006)
New Revision: 4281

Modified:
   mc/3D/CitcomS/trunk/lib/Output_h5.c
   mc/3D/CitcomS/trunk/lib/hdf5_related.h
Log:
Added step column to the /time table dataset.


Modified: mc/3D/CitcomS/trunk/lib/Output_h5.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Output_h5.c	2006-08-14 11:01:56 UTC (rev 4280)
+++ mc/3D/CitcomS/trunk/lib/Output_h5.c	2006-08-14 11:22:51 UTC (rev 4281)
@@ -932,20 +932,21 @@
     long n;
     double x;
 
-    /* Modify dataset creation properties (enable chunking) */
-    dcpl_id = H5Pcreate(H5P_DATASET_CREATE);
-    status  = H5Pset_chunk(dcpl_id, 1, &chunkdim);
-
-    /* Create the dataspace */
-    dataspace = H5Screate_simple(1, &dim, &maxdim);
-
     /* Create the memory data type */
     datatype = H5Tcreate(H5T_COMPOUND, sizeof(struct HDF5_TIME));
+    status = H5Tinsert(datatype, "step", HOFFSET(struct HDF5_TIME, step), H5T_NATIVE_INT);
     status = H5Tinsert(datatype, "time", HOFFSET(struct HDF5_TIME, time), H5T_NATIVE_FLOAT);
     status = H5Tinsert(datatype, "time_step", HOFFSET(struct HDF5_TIME, time_step), H5T_NATIVE_FLOAT);
     status = H5Tinsert(datatype, "cpu", HOFFSET(struct HDF5_TIME, cpu), H5T_NATIVE_FLOAT);
     status = H5Tinsert(datatype, "cpu_step", HOFFSET(struct HDF5_TIME, cpu_step), H5T_NATIVE_FLOAT);
 
+    /* Create the dataspace */
+    dataspace = H5Screate_simple(1, &dim, &maxdim);
+
+    /* Modify dataset creation properties (enable chunking) */
+    dcpl_id = H5Pcreate(H5P_DATASET_CREATE);
+    status  = H5Pset_chunk(dcpl_id, 1, &chunkdim);
+
     /* Create the dataset */
     dataset = H5Dcreate(loc_id, "time", datatype, dataspace, dcpl_id);
 
@@ -959,7 +960,7 @@
     set_attribute_string(dataset, "VERSION", "2.6");
 
     n = 0;
-    set_attribute(dataset, "NROWS", H5T_NATIVE_LONG, &n);
+    set_attribute(dataset, "NROWS", H5T_NATIVE_LONG, &n); // TODO: LONG or LLONG??
 
     set_attribute_string(dataset, "FIELD_0_NAME", "time");
     set_attribute_string(dataset, "FIELD_1_NAME", "time_step");
@@ -1578,6 +1579,7 @@
     if(E->parallel.me == 0)
     {
         /* Prepare data */
+        row.step = cycles;
         row.time = E->monitor.elapsed_time;
         row.time_step = E->advection.timestep;
         row.cpu = current_time - E->monitor.cpu_time_at_start;
@@ -1586,39 +1588,39 @@
         /* Get dataset */
         dataset = H5Dopen(E->hdf5.file_id, "time");
 
-        /* Create property list for independent dataset write */
-        dxpl_id = H5Pcreate(H5P_DATASET_XFER);
-        status = H5Pset_dxpl_mpio(dxpl_id, H5FD_MPIO_INDEPENDENT);
-
         /* Extend dataset */
-        dim = cycles + 1;
+        dim = E->hdf5.count + 1;
         status = H5Dextend(dataset, &dim);
 
-        /* Get file dataspace */
-        filespace = H5Dget_space(dataset);
+        /* Get datatype */
+        datatype = H5Dget_type(dataset);
 
         /* Define memory dataspace */
         dim = 1;
         dataspace = H5Screate_simple(1, &dim, NULL);
 
-        /* Get datatype */
-        datatype = H5Dget_type(dataset);
+        /* Get file dataspace */
+        filespace = H5Dget_space(dataset);
 
-        /* Select hyperslab */
+        /* Select hyperslab in file dataspace */
+        offset = E->hdf5.count;
         count  = 1;
-        offset = cycles;
         status = H5Sselect_hyperslab(filespace, H5S_SELECT_SET,
                                      &offset, NULL, &count, NULL);
 
+        /* Create property list for independent dataset write */
+        dxpl_id = H5Pcreate(H5P_DATASET_XFER);
+        status = H5Pset_dxpl_mpio(dxpl_id, H5FD_MPIO_INDEPENDENT);
+
         /* Write to hyperslab selection */
         status = H5Dwrite(dataset, datatype, dataspace, filespace,
                           dxpl_id, &row);
 
         /* Release resources */
         status = H5Pclose(dxpl_id);
+        status = H5Sclose(filespace);
+        status = H5Sclose(dataspace);
         status = H5Tclose(datatype);
-        status = H5Sclose(dataspace);
-        status = H5Sclose(filespace);
         status = H5Dclose(dataset);
     }
 }

Modified: mc/3D/CitcomS/trunk/lib/hdf5_related.h
===================================================================
--- mc/3D/CitcomS/trunk/lib/hdf5_related.h	2006-08-14 11:01:56 UTC (rev 4280)
+++ mc/3D/CitcomS/trunk/lib/hdf5_related.h	2006-08-14 11:22:51 UTC (rev 4281)
@@ -40,6 +40,7 @@
 
 struct HDF5_TIME
 {
+    int step;
     float time;
     float time_step;
     float cpu;



More information about the cig-commits mailing list