aboutsummaryrefslogtreecommitdiff
path: root/CarpetAttic/CarpetIOFlexIOCheckpoint/src/checkpointrestart.cc
diff options
context:
space:
mode:
Diffstat (limited to 'CarpetAttic/CarpetIOFlexIOCheckpoint/src/checkpointrestart.cc')
-rw-r--r--CarpetAttic/CarpetIOFlexIOCheckpoint/src/checkpointrestart.cc62
1 files changed, 55 insertions, 7 deletions
diff --git a/CarpetAttic/CarpetIOFlexIOCheckpoint/src/checkpointrestart.cc b/CarpetAttic/CarpetIOFlexIOCheckpoint/src/checkpointrestart.cc
index 69d332648..192167b9f 100644
--- a/CarpetAttic/CarpetIOFlexIOCheckpoint/src/checkpointrestart.cc
+++ b/CarpetAttic/CarpetIOFlexIOCheckpoint/src/checkpointrestart.cc
@@ -48,7 +48,7 @@
#include "ioflexio.hh"
extern "C" {
- static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIOCheckpoint/src/checkpointrestart.cc,v 1.8 2003/09/24 08:35:30 cvs_anon Exp $";
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIOCheckpoint/src/checkpointrestart.cc,v 1.9 2003/09/25 08:38:04 cvs_anon Exp $";
CCTK_FILEVERSION(Carpet_CarpetIOFlexIO_checkpointrestart_cc);
}
@@ -158,6 +158,7 @@ namespace CarpetCheckpointRestart {
"Time to dump datasets: ",
"Total time to checkpoint:"};
const ioGH *ioUtilGH;
+
// const int varindex = CCTK_VarIndex("ADMBASE:gxx");
int varindex = 0;
@@ -171,6 +172,17 @@ namespace CarpetCheckpointRestart {
DECLARE_CCTK_PARAMETERS
// CCTK_VInfo (CCTK_THORNSTRING, "boguscheck reflevel,component,mglevel %d,%d,%d",reflevel,component,mglevel);
+ CarpetIOFlexIOGH *myGH;
+ myGH = (CarpetIOFlexIOGH *) CCTK_GHExtension (cgh, "CarpetIOFlexIO");
+
+ /* check if CarpetIOFlexIO was registered as I/O method */
+ if (myGH == NULL)
+ {
+ CCTK_WARN (-1, "No CarpetIOFlexIO I/O methods registered");
+ return (-1);
+ }
+
+
myproc = CCTK_MyProc (cgh);
ioUtilGH = (const ioGH *) CCTK_GHExtension (cgh, "IO");
@@ -193,8 +205,8 @@ namespace CarpetCheckpointRestart {
assert (0);
}
- sprintf(cp_tempname,"%s.tmp.%s",cp_filename,extension);
- sprintf(cp_filename,"%s.%s",cp_filename,extension);
+ sprintf(cp_tempname,"%s.tmp%s",cp_filename,extension);
+ sprintf(cp_filename,"%s%s",cp_filename,extension);
if (CCTK_MyProc(cgh)==0)
@@ -206,6 +218,20 @@ namespace CarpetCheckpointRestart {
writer = new IEEEIO(cp_tempname, IObase::Create);
+ if (CCTK_Equals(out3D_format, "IEEE")) {
+ writer = new IEEEIO(cp_tempname, IObase::Create);
+#ifdef HDF4
+ } else if (CCTK_Equals(out3D_format, "HDF4")) {
+ writer = new HDFIO(cp_tempname, IObase::Create);
+#endif
+#ifdef HDF5
+ } else if (CCTK_Equals(out3D_format, "HDF5")) {
+ writer = new H5IO(cp_tempname, IObase::Create);
+#endif
+ } else {
+ assert (0);
+ }
+
if (! (writer->isValid()) )
{
CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
@@ -318,9 +344,7 @@ namespace CarpetCheckpointRestart {
} END_REFLEVEL_LOOP;
-
-
- // Close the file
+ // Close the temporary file
if (CCTK_MyProc(cgh)==0) {
delete amrwriter;
amrwriter = 0;
@@ -328,9 +352,33 @@ namespace CarpetCheckpointRestart {
writer = 0;
}
+ if (retval == 0)
+ {
+ if (rename (cp_tempname, cp_filename))
+ {
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Could not rename temporary checkpoint file '%s' to '%s'",
+ cp_tempname, cp_filename);
+ retval = -1;
+ }
+ else
+ {
+ if (myGH->cp_filename_list[myGH->cp_filename_index])
+ {
+ if (checkpoint_keep > 0)
+ {
+ remove (myGH->cp_filename_list[myGH->cp_filename_index]);
+ }
+ free (myGH->cp_filename_list[myGH->cp_filename_index]);
+ }
+ myGH->cp_filename_list[myGH->cp_filename_index] = strdup (cp_filename);
+ myGH->cp_filename_index = (myGH->cp_filename_index+1) % abs (checkpoint_keep);
+ }
+ }
+
return 0;
- }
+ }
} // namespace CarpetCheckpointRestart