aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortradke <tradke@ebee0441-1374-4afa-a3b5-247f3ba15b9a>1999-10-28 16:24:58 +0000
committertradke <tradke@ebee0441-1374-4afa-a3b5-247f3ba15b9a>1999-10-28 16:24:58 +0000
commit07bfa6ab7f02f5db6ca444ad36683b4d4cf72bf7 (patch)
tree2306ea2f3392e798c11e7b47c9fd2707c024a9e0 /src
parentb446c2dab4d1a041f9d0dc1c2fcd740a5b512870 (diff)
Added checkpointing for parameters. Still needs some optimization.
Recovery will follow soon. Also reactivated timers for checkpoint/recovery. Output this info needs to be improved somewhat. I like your timer stuff, Tom ! Thomas git-svn-id: http://svn.cactuscode.org/arrangements/CactusPUGHIO/IOFlexIO/trunk@65 ebee0441-1374-4afa-a3b5-247f3ba15b9a
Diffstat (limited to 'src')
-rw-r--r--src/DumpGH.c207
-rw-r--r--src/DumpVar.c8
-rw-r--r--src/GHExtension.c53
-rw-r--r--src/RecoverGH.c130
-rw-r--r--src/RestoreFile.c6
-rw-r--r--src/Write3D.c8
-rw-r--r--src/ioFlexGH.h8
7 files changed, 309 insertions, 111 deletions
diff --git a/src/DumpGH.c b/src/DumpGH.c
index 9007189..2566d0c 100644
--- a/src/DumpGH.c
+++ b/src/DumpGH.c
@@ -18,6 +18,7 @@ static char *rcsid = "$Id$";
#include "cctk.h"
#include "cctk_parameters.h"
+#include "cctk_ParameterFunctions.h"
#include "CactusBase/IOUtil/src/ioGH.h"
#include "ioFlexGH.h"
@@ -131,7 +132,82 @@ void IOFlexIO_InitialDataDumpGH (cGH *GH)
}
-void IOFlexIO_IEEEIOStructDump (cGH *GH, IOFile iof)
+void IOFlexIO_DumpParams (cGH *GH, IOFile iof)
+{
+ int first;
+ const char *param;
+
+
+ first = 1;
+ while ((param = ParameterWalk (first, NULL)) != NULL) {
+ char *impl, *name, *msg;
+
+ first = 0;
+
+ if (Util_SplitString (&impl, &name, param, "::") != 0) {
+
+ msg = (char *) malloc (100 + strlen (param));
+ sprintf (msg, "Cannot dump parameter '%s' (SplitString failed)", param);
+ CCTK_WARN (2, msg);
+ free (msg);
+
+ } else {
+ int type;
+ void *data;
+
+ data = ParameterGet (name, CCTK_ImplementationThorn (impl), &type);
+ if (data == NULL) {
+
+ msg = (char *) malloc (100 + strlen (param));
+ sprintf(msg, "Cannot dump parameter '%s' (ParameterGet failed)", param);
+ CCTK_WARN (2, msg);
+ free (msg);
+
+ } else {
+ CCTK_INT4 i_tmp;
+
+ switch (type) {
+ case PARAMETER_KEYWORD:
+ case PARAMETER_STRING:
+ case PARAMETER_SENTENCE:
+ CACTUS_IEEEIO_ERROR (IOwriteAttribute (iof, param, FLEXIO_CHAR,
+ strlen (*(char **) data) + 1, *(char **)data));
+ break;
+
+ case PARAMETER_INT:
+ case PARAMETER_BOOLEAN:
+ /* CCTK_INTs are stored as 4 byte integers */
+ i_tmp = (CCTK_INT4) (*(CCTK_INT *) data);
+ CACTUS_IEEEIO_ERROR (IOwriteAttribute (iof, param, FLEXIO_INT4, 1,
+ &i_tmp));
+ break;
+
+ case PARAMETER_REAL:
+ CACTUS_IEEEIO_ERROR (IOwriteAttribute (iof, param, FLEXIO_REAL, 1,
+ data));
+ break;
+
+ default:
+ msg = (char *) malloc (100 + strlen (param));
+ sprintf (msg, "Cannot dump parameter '%s' (unknown type)", param);
+ CCTK_WARN (2, msg);
+ free (msg);
+ break;
+ }
+ }
+
+ free (impl);
+ free (name);
+
+ }
+
+ free ((void *) param);
+
+ } /* end of loop walking over all parameters */
+}
+
+
+void IOFlexIO_DumpGHExtensions (cGH *GH, IOFile iof)
{
CCTK_INT4 i_temp;
CCTK_REAL d_temp;
@@ -196,28 +272,20 @@ void IOFlexIO_DumpGH (cGH *GH, int called_from)
int old_downsample_x, old_downsample_y, old_downsample_z;
int old_out_single;
ioGH *ioUtilGH;
-#if 0
- cTimer total_time, write_time;
-#endif
+ flexioGH *myGH;
+ int total_time_handle, write_time_handle;
static char **dumpfnames = NULL; /* dump filename ring buffer */
static int findex = 0; /* index into ring buffer */
+ /* Get the handles for IOUtil and IOFlexIO extensions */
+ ioUtilGH = (ioGH *) GH->extensions [CCTK_GHExtensionHandle ("IO")];
+ myGH = (flexioGH *) GH->extensions [CCTK_GHExtensionHandle ("IOFlexIO")];
+
/* allocate the ring buffer for filenames */
if (! dumpfnames)
dumpfnames = (char **) calloc (checkpoint_keep, sizeof (char *));
-#if 0
- /* initialize timers */
- CactusResetTimer (&total_time);
- CactusResetTimer (&write_time);
-
- CactusStartTimer (&total_time);
-#endif
-
- /* Get the handle for IOUtil xtensions */
- ioUtilGH = (ioGH *) GH->extensions [CCTK_GHExtensionHandle ("IO")];
-
/* disable downsampling after saving original downsampling params */
old_downsample_x = ioUtilGH->downsample_x;
old_downsample_y = ioUtilGH->downsample_y;
@@ -228,6 +296,10 @@ void IOFlexIO_DumpGH (cGH *GH, int called_from)
old_out_single = ioUtilGH->out_single;
ioUtilGH->out_single = 0;
+ /* start the total timer */
+ if (print_timing_info)
+ CCTK_TimerStartI (myGH->checkpointTotalTimer);
+
/* sync all groups */
for (index = 0; index < CCTK_NumGroups (); index++) {
char *gname = CCTK_GroupName (index);
@@ -257,24 +329,29 @@ void IOFlexIO_DumpGH (cGH *GH, int called_from)
} else
iof = (IOFile) NULL;
-#if 0
/* Great; Now start dumping away! */
- CactusResetTimer (&write_time);
- CactusStartTimer (&write_time);
-#endif
+
+ /* start timer for dumping parameters */
+ if (print_timing_info) {
+ CCTK_TimerResetI (myGH->dumpParamsTimer);
+ CCTK_TimerStartI (myGH->dumpParamsTimer);
+ }
if (verbose)
printf ("Dumping Params ...\n -- ");
/* first the parameters ... */
if (iof) {
-/*** FIXME ***/
-#if 0
if (out3D_parameters)
- IOFlexIO_IEEEIOparamDump (iof);
-#endif
- if (out3D_structures)
- IOFlexIO_IEEEIOStructDump (GH, iof);
+ IOFlexIO_DumpParams (GH, iof);
+ IOFlexIO_DumpGHExtensions (GH, iof);
+ }
+
+ /* stop parameter timer and start timer for dumping datasets */
+ if (print_timing_info) {
+ CCTK_TimerStopI (myGH->dumpParamsTimer);
+ CCTK_TimerResetI (myGH->dumpVarsTimer);
+ CCTK_TimerStartI (myGH->dumpVarsTimer);
}
wrotech = 0;
@@ -283,8 +360,7 @@ void IOFlexIO_DumpGH (cGH *GH, int called_from)
for (index = 0; index < CCTK_NumVars (); index++) {
/* let only variables pass which have storage assigned */
- if (! CCTK_QueryGroupStorageI (GH,
- CCTK_GroupIndexFromVarI (index)))
+ if (! CCTK_QueryGroupStorageI (GH, CCTK_GroupIndexFromVarI (index)))
continue;
if (verbose) {
@@ -308,34 +384,22 @@ void IOFlexIO_DumpGH (cGH *GH, int called_from)
IOFlexIO_DumpVar (GH, index, timelevel, iof);
} /* end of loop over all variables */
-#if 0
- CactusStopTimer (&write_time);
-#endif
+ /* stop timer for dumping datasets */
+ if (print_timing_info)
+ CCTK_TimerStopI (myGH->dumpVarsTimer);
CACTUS_IEEEIO_ERROR (IOclose (iof));
- if (verbose)
-#if 0
- printf ("\nTime to write: %f sec (%f sec per Grid Func)\n",
-/*** FIXME: choose right component of basic[] ***/
- write_time.total.basic [0],
- write_time.total.basic [0] / CCTK_NumVars ());
-#endif
-#ifndef WIN32
- /* PW: This should work on WIN32 also, since it
- is in stdio.h. Someone should check this
- if/when we go into WIN32 production.
- */
if (CCTK_MyProc (GH) == ioUtilGH->ioproc) {
if (rename (tmpfname, dumpfname)) {
char msg [512];
- sprintf (msg, "Could not rename temporary checkpoint file %s to %s", tmpfname, dumpfname);
+ sprintf (msg, "Could not rename temporary checkpoint file %s to %s",
+ tmpfname, dumpfname);
CCTK_WARN (0, msg);
/* should not return here */
}
}
-#endif
/* delete the oldest dumpfile if checkpoint_keep_all isn't set
and put the new filename into the ring buffer */
@@ -355,15 +419,52 @@ void IOFlexIO_DumpGH (cGH *GH, int called_from)
ioUtilGH->downsample_y = old_downsample_y;
ioUtilGH->downsample_z = old_downsample_z;
-#if 0
- CactusStopTimer (&total_time);
-#endif
+ /* stop total checkpoint timer and print timing info */
+ if (print_timing_info) {
+ t_TimerInfo *info;
- if (verbose) {
-#if 0
-/*** FIXME: choose right component of basic[] ***/
- printf ("Time to checkpoint: %f sec\n", total_time.total.basic [0]);
- printf ("------------------------------------------------------------\n");
-#endif
+ CCTK_TimerStopI (myGH->checkpointTotalTimer);
+
+ printf ("%s timing information for checkpointing:\n", CCTK_THORNSTRING);
+
+ info = CCTK_TimerCreateInfo ();
+ if (info) {
+
+ if (myGH->dumpParamsTimer >= 0) {
+ CCTK_TimerGetI (myGH->dumpParamsTimer, info);
+{
+/*** FIXME: select right timers and value types !!! ***/
+
+#include <assert.h>
+assert (info->n_vals >= 2);
+assert (info->vals [0].type == val_double && info->vals [1].type == val_double);
+}
+ printf (" Time to dump parameters: %5.1f sec (GetTimeOfDay), "
+ "%5.1f sec (GetrUsage)\n",
+ info->vals [0].val.d, info->vals [1].val.d);
+ }
+
+ if (myGH->dumpVarsTimer >= 0) {
+ CCTK_TimerGetI (myGH->dumpVarsTimer, info);
+ printf (" Time to dump datasets: %5.1f sec (GetTimeOfDay), "
+ "%5.1f sec (GetrUsage)\n",
+ info->vals [0].val.d, info->vals [1].val.d);
+ }
+
+ if (myGH->checkpointTotalTimer >= 0) {
+ CCTK_TimerGetI (myGH->checkpointTotalTimer, info);
+ printf (" Total time to checkpoint: %5.1f sec (GetTimeOfDay), "
+ "%5.1f sec (GetrUsage)\n",
+ info->vals [0].val.d, info->vals [1].val.d);
+ }
+
+ CCTK_TimerDestroyInfo (info);
+ } else
+ CCTK_WARN (1, "Couldn't create timer info structure ! No timing output "
+ "available.");
+
+ printf ("----------------------------------------------------------------"
+ "-----------\n");
}
+
}
diff --git a/src/DumpVar.c b/src/DumpVar.c
index 96561fd..b47fe01 100644
--- a/src/DumpVar.c
+++ b/src/DumpVar.c
@@ -520,12 +520,12 @@ void IOFlexIO_AddCommonAttributes (cGH *GH, int index, int timelevel,
ioUtilGH = (ioGH *) GH->extensions [CCTK_GHExtensionHandle ("IO")];
name = CCTK_FullName (index);
- CACTUS_IEEEIO_ERROR (IOwriteAttribute (iof, "name", BYTE,
+ CACTUS_IEEEIO_ERROR (IOwriteAttribute (iof, "name", FLEXIO_CHAR,
strlen (name) + 1, name));
free (name);
gname = CCTK_GroupNameFromVarI (index);
- CACTUS_IEEEIO_ERROR (IOwriteAttribute (iof, "groupname", BYTE,
+ CACTUS_IEEEIO_ERROR (IOwriteAttribute (iof, "groupname", FLEXIO_CHAR,
strlen (gname) + 1, gname));
free (gname);
@@ -542,7 +542,7 @@ void IOFlexIO_AddCommonAttributes (cGH *GH, int index, int timelevel,
1, &i_to_IO));
if (char_time_date && out3D_datestamp)
- CACTUS_IEEEIO_ERROR (IOwriteAttribute (iof, "date", BYTE,
+ CACTUS_IEEEIO_ERROR (IOwriteAttribute (iof, "date", FLEXIO_CHAR,
strlen (char_time_date) + 1, char_time_date));
CACTUS_IEEEIO_ERROR (IOwriteAttribute (iof, "time", FLEXIO_REAL, 1,&GH->cctk_time));
@@ -629,7 +629,7 @@ void IOFlexIO_AddChunkAttributes (cGH *GH, int index, CCTK_INT4 chunk_origin [3]
1, &i_to_IO));
name = CCTK_FullName (index);
- CACTUS_IEEEIO_ERROR (IOwriteAttribute (iof, "name", BYTE,
+ CACTUS_IEEEIO_ERROR (IOwriteAttribute (iof, "name", FLEXIO_CHAR,
strlen (name)+1, name));
}
diff --git a/src/GHExtension.c b/src/GHExtension.c
index eebb0cb..38edd5f 100644
--- a/src/GHExtension.c
+++ b/src/GHExtension.c
@@ -31,6 +31,7 @@ void SetupSliceCenter (cGH *GH);
void *IOFlexIO_SetupGH (tFleshConfig *config, int convergence_level, cGH *GH)
{
+ DECLARE_CCTK_PARAMETERS
int i, numvars;
flexioGH *newGH;
@@ -122,8 +123,60 @@ int IOFlexIO_InitGH (cGH *GH)
/* set up 2D planes to plot */
SetupSliceCenter (GH);
+ /* create timers if timing info was requested */
+ if (print_timing_info) {
+ myGH->dumpVarsTimer = CCTK_TimerCreateI ();
+ myGH->dumpParamsTimer = CCTK_TimerCreateI ();
+ myGH->checkpointTotalTimer = CCTK_TimerCreateI ();
+ myGH->recoverVarsTimer = CCTK_TimerCreateI ();
+ myGH->recoverParamsTimer = CCTK_TimerCreateI ();
+ myGH->recoverTotalTimer = CCTK_TimerCreateI ();
+
+ if (myGH->dumpVarsTimer < 0)
+ CCTK_WARN (1, "Could not create timer ! Timing info on dumping datasets "
+ "will not be available.");
+ if (myGH->dumpParamsTimer < 0)
+ CCTK_WARN (1, "Could not create timer ! Timing info on dumping parameters"
+ " will not be available.");
+ if (myGH->checkpointTotalTimer < 0)
+ CCTK_WARN (1, "Could not create timer ! Timing info on total checkpoint "
+ "time will not be available.");
+
+ if (myGH->recoverVarsTimer < 0)
+ CCTK_WARN (1, "Could not create timer ! Timing info on recovering "
+ "datasets will not be available.");
+ if (myGH->recoverParamsTimer < 0)
+ CCTK_WARN (1, "Could not create timer ! Timing info on recovering "
+ " parameters will not be available.");
+ if (myGH->recoverTotalTimer < 0)
+ CCTK_WARN (1, "Could not create timer ! Timing info on total recovery "
+ "time will not be available.");
+
+ CCTK_TimerResetI (myGH->checkpointTotalTimer);
+ CCTK_TimerResetI (myGH->recoverTotalTimer);
+ }
+
+ return (0);
+}
+
+
+#if 0
+int IOFlexIO_Terminate (cGH *GH)
+{
+ DECLARE_CCTK_PARAMETERS
+
+ if (print_timing_info) {
+ CCTK_TimerDestroyI (myGH->dumpVarsTimer);
+ CCTK_TimerDestroyI (myGH->dumpParamsTimer);
+ CCTK_TimerDestroyI (myGH->checkpointTotalTimer);
+ CCTK_TimerDestroyI (myGH->recoverVarsTimer);
+ CCTK_TimerDestroyI (myGH->recoverParamsTimer);
+ CCTK_TimerDestroyI (myGH->recoverTotalTimer);
+ }
+
return (0);
}
+#endif
/****************************************************************************/
diff --git a/src/RecoverGH.c b/src/RecoverGH.c
index a8fd02b..8472167 100644
--- a/src/RecoverGH.c
+++ b/src/RecoverGH.c
@@ -81,9 +81,7 @@ int IOFlexIO_RecoverGH (cGH *GH, const char *basename, int called_from)
char msg [512];
pGH *pughGH;
ioGH *ioUtilGH;
-#if 0
- cTimer total_time, dataset_time, param_time;
-#endif
+ flexioGH *myGH;
#ifdef MPI
CCTK_INT info [3];
#endif
@@ -95,22 +93,18 @@ int IOFlexIO_RecoverGH (cGH *GH, const char *basename, int called_from)
file_ioproc_every = 0;
file_unchunked = 0;
- /* Get the handles for PUGH and IOUtil extensions */
+ /* Get the handles for PUGH, IOUtil, and IOFlexIO extensions */
pughGH = (pGH *) GH->extensions [CCTK_GHExtensionHandle ("PUGH")];
ioUtilGH = (ioGH *) GH->extensions [CCTK_GHExtensionHandle ("IO")];
+ myGH = (flexioGH *) GH->extensions [CCTK_GHExtensionHandle ("IOFlexIO")];
/* identify myself */
nprocs = CCTK_nProcs (GH);
myproc = CCTK_MyProc (GH);
-#if 0
- /* initialize timers */
- CactusResetTimer (&total_time);
- CactusResetTimer (&dataset_time);
- CactusResetTimer (&param_time);
-
- CactusStartTimer (&total_time);
-#endif
+ /* start the total timer */
+ if (print_timing_info)
+ CCTK_TimerStartI (myGH->recoverTotalTimer);
/* Examine base file to find whether recovering from
* one (recombined) file or from multiple files
@@ -266,14 +260,20 @@ int IOFlexIO_RecoverGH (cGH *GH, const char *basename, int called_from)
printf ("Recovering %schunked data with ioproc %d, ioproc_every %d.\n",
file_unchunked ? "un" : "", file_ioproc, file_ioproc_every);
-#if 0
- CactusStartTimer (&dataset_time);
-#endif
+ /* start timer for restoring variables */
+ if (print_timing_info) {
+ CCTK_TimerResetI (myGH->recoverVarsTimer);
+ CCTK_TimerStartI (myGH->recoverVarsTimer);
+ }
+
+ /* restore all variables from checkpoint file */
IOFlexIO_RestoreIEEEIOfile (GH, ifp, file_ioproc, file_ioproc_every,
file_unchunked);
-#if 0
- CactusStopTimer (&dataset_time);
-#endif
+
+ /* stop variable timer */
+ if (print_timing_info)
+ CCTK_TimerStopI (myGH->recoverVarsTimer);
+
/* Close the file. */
if (myproc == file_ioproc) {
if (verbose)
@@ -282,10 +282,8 @@ int IOFlexIO_RecoverGH (cGH *GH, const char *basename, int called_from)
}
if (called_from == CP_RECOVER_DATA) {
+
/* Must read in parameters and scalars on all processors. */
-#if 0
- CactusStartTimer (&param_time);
-#endif
for (proc = file_ioproc;
proc < file_ioproc+file_ioproc_every && proc < nprocs;
proc++) {
@@ -293,6 +291,12 @@ int IOFlexIO_RecoverGH (cGH *GH, const char *basename, int called_from)
/* Only have the file open by one proc at any time. */
if (proc == myproc) {
+ /* start timer for restoring parameters */
+ if (print_timing_info) {
+ CCTK_TimerResetI (myGH->recoverParamsTimer);
+ CCTK_TimerStartI (myGH->recoverParamsTimer);
+ }
+
/* Open file, make sure the file is valid */
ifp = IEEEopen (fname, "r");
if (! IOisValid (ifp)) {
@@ -304,16 +308,8 @@ int IOFlexIO_RecoverGH (cGH *GH, const char *basename, int called_from)
/* Restore the parameters. */
if (verbose)
printf ("Recovering parameters on processor %d.\n", myproc);
-/*** FIXME ***/
-#if 0
- IO_IEEEIOparamRestore (ifp, myproc);
+ IOFlexIO_restoreParams (ifp, myproc);
- /* Restore the structure variables. */
- if (verbose)
- printf ("Recovering GH variables.\n");
- IO_IEEEIOStructRestore (GH, ifp);
-#endif
-
/* Restore global variables */
/* Get the main loop index. */
@@ -362,30 +358,72 @@ int IOFlexIO_RecoverGH (cGH *GH, const char *basename, int called_from)
if (verbose)
printf ("Closing '%s' after recovery.\n", fname);
IOclose (ifp);
+
+ /* stop timer for restoring parameters */
+ if (print_timing_info)
+ CCTK_TimerStopI (myGH->recoverParamsTimer);
+
}
/* Synchronise all processors */
CCTK_Barrier (GH);
}
-#if 0
- CactusStopTimer (&param_time);
-#endif
}
- /* print timing output */
- if (verbose && called_from == CP_RECOVER_DATA && myproc == 0) {
-#if 0
- printf (
- "----------------------------------------------------------------\n");
-/*** FIXME: choose right component of basic[] ***/
- printf ("Time to restore data: %10.3f sec\n",
- dataset_time.total.basic [0]);
- printf ("Time to restore parameters: %10.3f sec\n",
- param_time.total.basic [0]);
- printf ("Time to recover from checkpoint: %10.3f sec\n",
- total_time.total.basic [0]);
-#endif
+ /* stop total recovery timer and print timing info */
+ if (print_timing_info && called_from == CP_RECOVER_DATA) {
+ t_TimerInfo *info;
+
+ CCTK_TimerStopI (myGH->recoverTotalTimer);
+
+ printf ("%s timing information for recovery:\n", CCTK_THORNSTRING);
+
+ info = CCTK_TimerCreateInfo ();
+ if (info) {
+
+ if (myGH->recoverVarsTimer >= 0) {
+ CCTK_TimerGetI (myGH->recoverVarsTimer, info);
+{
+/*** FIXME: select right timers and value types !!! ***/
+
+#include <assert.h>
+assert (info->n_vals >= 2);
+assert (info->vals [0].type == val_double && info->vals [1].type == val_double);
+}
+ printf ("Time to recover datasets: %5.1f sec (GetTimeOfDay), "
+ "%5.1f sec (GetrUsage)\n",
+ info->vals [0].val.d, info->vals [1].val.d);
+ }
+
+ if (myGH->recoverParamsTimer >= 0) {
+ CCTK_TimerGetI (myGH->recoverParamsTimer, info);
+ printf ("Time to recover parameters: %5.1f sec (GetTimeOfDay), "
+ "%5.1f sec (GetrUsage)\n",
+ info->vals [0].val.d, info->vals [1].val.d);
+ }
+
+ if (myGH->recoverTotalTimer >= 0) {
+ CCTK_TimerGetI (myGH->recoverTotalTimer, info);
+ printf ("Total time to recover: %5.1f sec (GetTimeOfDay), "
+ "%5.1f sec (GetrUsage)\n",
+ info->vals [0].val.d, info->vals [1].val.d);
+ }
+
+ CCTK_TimerDestroyInfo (info);
+ } else
+ CCTK_WARN (1, "Couldn't create timer info structure ! No timing output "
+ "available.");
+
+ printf ("----------------------------------------------------------------"
+ "---------\n");
}
return (0);
}
+
+int IOFlexIO_restoreParams (IOFile ifp, int myproc)
+{
+ CCTK_INFO ("Called IOFlexIO_restoreParams()\n");
+
+ return (0);
+}
diff --git a/src/RestoreFile.c b/src/RestoreFile.c
index eec8999..9207000 100644
--- a/src/RestoreFile.c
+++ b/src/RestoreFile.c
@@ -74,7 +74,7 @@ int GetCommonAttributes (cGH *GH, IOFile ifp, int unchunked, int *index,
/* retrieve the name attribute */
i = IOreadAttributeInfo (ifp, "name", &atype, &asize);
- if (i < 0 || (atype != BYTE && atype != CHAR) || asize >= sizeof (fullname)) {
+ if (i < 0 || atype != FLEXIO_CHAR || asize >= sizeof (fullname)) {
CCTK_WARN (2, "Can't read name attribute");
return (1);
}
@@ -90,7 +90,7 @@ int GetCommonAttributes (cGH *GH, IOFile ifp, int unchunked, int *index,
/* read and verify the group name */
i = IOreadAttributeInfo (ifp, "groupname", &atype, &asize);
- if (i < 0 || (atype != BYTE && atype != CHAR) || asize >= sizeof (groupname_stored)) {
+ if (i < 0 || atype != FLEXIO_CHAR || asize >= sizeof (groupname_stored)) {
sprintf (msg, "Can't read groupname attribute of '%s'", fullname);
CCTK_WARN (2, msg);
return (1);
@@ -232,7 +232,7 @@ int GetChunkAttributes (cGH *GH, IOFile ifp, int index)
/* retrieve the name attribute */
i = IOreadAttributeInfo (ifp, "name", &atype, &asize);
- if (i < 0 || (atype != BYTE && atype != CHAR) || asize >= sizeof (fullname)) {
+ if (i < 0 || atype != FLEXIO_CHAR || asize >= sizeof (fullname)) {
CCTK_WARN (2, "Can't read name attribute");
return (1);
}
diff --git a/src/Write3D.c b/src/Write3D.c
index 453559c..ce69ad5 100644
--- a/src/Write3D.c
+++ b/src/Write3D.c
@@ -195,11 +195,9 @@ void IOFlexIO_Write3D (cGH *GH, int index, const char *alias)
if (IEEEfile_3D) {
/* output parameters necessary for filereader datafiles */
if (isNewFile)
- IOFlexIO_IEEEIOStructDump (GH, IEEEfile_3D->iofile);
-#if 0
- if (ioUtilGH->parameters)
- IOFlexIO_IEEEIOparamDump (IEEEfile_3D->iofile);
-#endif
+ IOFlexIO_DumpGHExtensions (GH, IEEEfile_3D->iofile);
+ if (out3D_parameters)
+ IOFlexIO_DumpParams (GH, IEEEfile_3D->iofile);
/* close the file */
IOFlexIO_Write3D_closeFile (GH, IEEEfile_3D);
}
diff --git a/src/ioFlexGH.h b/src/ioFlexGH.h
index 69d3d73..69f9cc9 100644
--- a/src/ioFlexGH.h
+++ b/src/ioFlexGH.h
@@ -97,6 +97,14 @@ typedef struct IOFlexIOGH {
/* slice point for 2D output */
int sp2xyz [3];
+ /* handles for different timers */
+ int dumpVarsTimer;
+ int dumpParamsTimer;
+ int checkpointTotalTimer;
+ int recoverVarsTimer;
+ int recoverParamsTimer;
+ int recoverTotalTimer;
+
} flexioGH;