From c6e7dedec9e6ea4bfad9b2a22b75b5f6ba7e78bc Mon Sep 17 00:00:00 2001 From: cott <> Date: Wed, 7 Jan 2004 15:30:00 +0000 Subject: Saving a day's work... don't try recovery yet. darcs-hash:20040107153049-19929-d817dfcb9fcaae5f794d4648530bc781a2fa0982.gz --- .../src/checkpointrestart.cc | 45 ++++++---- .../CarpetIOFlexIOCheckpoint/src/ioflexio.cc | 95 +++++++++++++++++++++- .../CarpetIOFlexIOCheckpoint/src/ioflexio.hh | 3 +- 3 files changed, 124 insertions(+), 19 deletions(-) (limited to 'CarpetAttic') diff --git a/CarpetAttic/CarpetIOFlexIOCheckpoint/src/checkpointrestart.cc b/CarpetAttic/CarpetIOFlexIOCheckpoint/src/checkpointrestart.cc index c01c1d99b..e503d0bfc 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.18 2004/01/07 13:14:04 cott Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIOCheckpoint/src/checkpointrestart.cc,v 1.19 2004/01/07 16:30:49 cott Exp $"; CCTK_FILEVERSION(Carpet_CarpetIOFlexIO_checkpointrestart_cc); } @@ -63,7 +63,7 @@ namespace CarpetCheckpointRestart { int Checkpoint (const cGH* const cgh, int called_from); int RecoverParameters (IObase* reader); - int RecoverGHextensions (cGH* cgh, IObase* reader); + static int RecoverGHextensions (cGH* cgh, IObase* reader); int RecoverVariables (cGH* cgh, IObase* reader, AmrGridReader* amrreader); void CarpetIOFlexIO_EvolutionCheckpoint( const cGH* const cgh){ @@ -224,7 +224,6 @@ int CarpetIOFlexIO_Recover (cGH* cgh, const char *basefilename, int called_from) if (called_from == CP_RECOVER_PARAMETERS) { - CCTK_VInfo(CCTK_THORNSTRING,"called from recover parameters"); return (RecoverParameters (reader)); } @@ -236,21 +235,24 @@ int CarpetIOFlexIO_Recover (cGH* cgh, const char *basefilename, int called_from) BEGIN_REFLEVEL_LOOP(cgh) { BEGIN_MGLEVEL_LOOP(cgh) { + + /* make sure we are looking at the first dataset where + all the good stuff ist stored! */ + reader->seek(0); - /* Recover GH extentions */ + /* Recover GH extentions */ CCTK_INFO ("Recovering GH extensions"); - result = RecoverGHextensions (cgh, reader); - - if (! result) - { - /* Recover variables */ - CCTK_VInfo (CCTK_THORNSTRING, "Recovering data! "); - result = RecoverVariables (cgh, reader,amrreader); - } - + result += RecoverGHextensions (cgh, reader); } END_MGLEVEL_LOOP; - } END_REFLEVEL_LOOP; + } END_REFLEVEL_LOOP; + if (! result) + { + /* Recover variables */ + CCTK_VInfo (CCTK_THORNSTRING, "Recovering data! "); + result = RecoverVariables (cgh, reader,amrreader); + } + delete reader; delete amrreader; } @@ -772,14 +774,23 @@ int CarpetIOFlexIO_Recover (cGH* cgh, const char *basefilename, int called_from) int RecoverVariables (cGH* cgh, IObase* reader, AmrGridReader* amrreader){ - CCTK_VInfo(CCTK_THORNSTRING,"Starting to recover data for refinement level %d",reflevel); - + int retval = 0; + CCTK_VInfo(CCTK_THORNSTRING,"Starting to recover data!!!"); + int ndatasets = reader->nDatasets(); + //CCTK_VInfo (CCTK_THORNSTRING, "ndatasets=%d", ndatasets); + assert (ndatasets>=0); - return 0; + for (int currdataset=1;currdataset < ndatasets;currdataset++) { + //CCTK_VInfo(CCTK_THORNSTRING,"dataset: %d",currdataset); + reader->seek(currdataset); + ReadGF(cgh,reader,amrreader); } + return retval; + } + } // namespace CarpetCheckpointRestart diff --git a/CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexio.cc b/CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexio.cc index 3a817202a..384d6dde5 100644 --- a/CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexio.cc +++ b/CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexio.cc @@ -45,7 +45,7 @@ extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexio.cc,v 1.15 2004/01/07 13:14:04 cott Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexio.cc,v 1.16 2004/01/07 16:30:49 cott Exp $"; CCTK_FILEVERSION(Carpet_CarpetIOFlexIO_ioflexio_cc); } @@ -509,6 +509,99 @@ namespace CarpetIOFlexIO { return retval; } + + + int ReadGF (const cGH* const cgh, IObase* reader, AmrGridReader* amrreader) { + + /* this functions reads in a variable on the current reflevel from an already open file. At + some point it should be called from InputVarAs */ + + + DECLARE_CCTK_PARAMETERS; + + int tl = -1; + int mglevel = -1; + int rl = -1; + + int rank; + int dims[dim]; + int nbytes; + + char* varname; + char warnstring[256]; + int asize,i; + IObase::DataType datatype; + int group,varindex; + + // read the name of the variable + i = reader->readAttributeInfo ("name", datatype, asize); + if (i >= 0 && datatype == FLEXIO_CHAR && asize > 0) + { + varname = (char*) malloc(sizeof(char)*asize+1); + reader->readAttribute (i, varname); + } + else + { + CCTK_WARN (0, "Something is wrong! Can't read dataset names!!!"); + } + + varindex = CCTK_VarIndex(varname); + + CCTK_VInfo(CCTK_THORNSTRING,"Recovering varindex: %d varname: %s",varindex,varname); + free(varname); + assert(varindex > -1); + + group = CCTK_GroupIndexFromVarI(varindex); + assert(group > -1); + + // Check for storage + if (! CCTK_QueryGroupStorageI(cgh, group)) { + CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING, + "Cannot recover variable \"%s\" because it has no storage", + varname); + return 0; + } + + + // read reflevel + i = reader->readAttributeInfo ("reflevel", datatype, asize); + if (i >= 0 && datatype == FLEXIO_INT && asize > 0) + { + reader->readAttribute (i, &rl); + } + else + { + CCTK_WARN (0, "Something is wrong! Can't read refinement level!!!"); + } + + i = reader->readAttributeInfo ("timelevel", datatype, asize); + if (i >= 0 && datatype == FLEXIO_INT && asize > 0) + { + reader->readAttribute (i, &tl); + } + else + { + CCTK_WARN (0, "Something is wrong! Can't read timelevel!!!"); + } + + i = reader->readAttributeInfo ("mglevel", datatype, asize); + if (i >= 0 && datatype == FLEXIO_INT && asize > 0) + { + reader->readAttribute (i, &mglevel); + } + else + { + CCTK_WARN (0, "Something is wrong! Can't read multi group level!!!"); + } + + CCTK_VInfo(CCTK_THORNSTRING,"Recovering varindex: %d varname: %s tl: %d, rl: %d",varindex,varname,tl,rl); + + + + + return 0; + } + int InputGH (const cGH* const cgh) { diff --git a/CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexio.hh b/CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexio.hh index 181798404..ec4e06d20 100644 --- a/CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexio.hh +++ b/CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexio.hh @@ -1,4 +1,4 @@ -// $Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexio.hh,v 1.10 2004/01/07 13:14:04 cott Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexio.hh,v 1.11 2004/01/07 16:30:49 cott Exp $ #ifndef CARPETIOFLEXIO_HH #define CARPETIOFLEXIO_HH @@ -137,6 +137,7 @@ namespace CarpetIOFlexIO { const char* const fallback); int WriteGF (const cGH* const cgh, IObase* writer, AMRwriter* amrwriter, ioRequest* request); + int ReadGF (const cGH* const cgh, IObase* reader, AmrGridReader* amrreader); } // namespace CarpetIOFlexIO -- cgit v1.2.3