diff options
Diffstat (limited to 'CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexio.hh')
-rw-r--r-- | CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexio.hh | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexio.hh b/CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexio.hh new file mode 100644 index 000000000..4f42bdf5b --- /dev/null +++ b/CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexio.hh @@ -0,0 +1,173 @@ +// $Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIOCheckpoint/src/ioflexio.hh,v 1.13 2004/01/12 10:50:31 cott Exp $ + +#ifndef CARPETIOFLEXIO_HH +#define CARPETIOFLEXIO_HH + + +#include <vector> + +#include "cctk.h" +#include "cctk_Arguments.h" + +#include "CactusBase/IOUtil/src/ioGH.h" +#include "CactusBase/IOUtil/src/ioutil_CheckpointRecovery.h" +#include "CactusBase/IOUtil/src/ioutil_Utils.h" + +#include "ioflexio.h" +#include "ioflexioGH.h" + +/* define the IOFlexIO datatypes according to CCTK_??? datatypes */ +#define FLEXIO_CHAR IObase::Char + +#ifdef CCTK_INT2 +#define FLEXIO_INT2 IObase::Int16 +#endif +#ifdef CCTK_INT4 +#define FLEXIO_INT4 IObase::Int32 +#endif +#ifdef CCTK_INT8 +#define FLEXIO_INT8 IObase::Int64 +#endif + +#ifdef CCTK_REAL4 +#define FLEXIO_REAL4 IObase::Float32 +#endif +#ifdef CCTK_REAL8 +#define FLEXIO_REAL8 IObase::Float64 +#endif +#ifdef CCTK_REAL16 +#define FLEXIO_REAL16 -1 +#endif + +/* define the FlexIO types for the generic CCTK_INT and CCTK_REAL datatypes */ +#ifdef CCTK_INTEGER_PRECISION_8 +#define FLEXIO_INT IObase::Int64 +#elif CCTK_INTEGER_PRECISION_4 +#define FLEXIO_INT IObase::Int32 +#elif CCTK_INTEGER_PRECISION_2 +#define FLEXIO_INT IObase::Int16 +#endif + +#ifdef CCTK_REAL_PRECISION_4 +#define FLEXIO_REAL FLEXIO_REAL4 +#elif CCTK_REAL_PRECISION_8 +#define FLEXIO_REAL FLEXIO_REAL8 +#elif CCTK_REAL_PRECISION_16 +#define FLEXIO_REAL FLEXIO_REAL16 +#endif + +/* some macros needed for recovery */ +#ifdef CCTK_MPI + +#define CACTUS_MPI_ERROR(fn_call) \ + do { \ + int errcode; \ + \ + if ((errcode = fn_call) != MPI_SUCCESS) \ + { \ + char mpi_error_string[MPI_MAX_ERROR_STRING+1]; \ + int resultlen; \ + \ + MPI_Error_string (errcode, mpi_error_string, &resultlen); \ + fprintf (stderr, "MPI call '%s' returned error code %d (%s)\n", \ + #fn_call, errcode, mpi_error_string); \ + fprintf(stderr, "At line %d of file %s\n", __LINE__, __FILE__); \ + } \ + } while (0) + + +#ifdef CCTK_INT4 +#define CARPET_MPI_INT4 (sizeof (CCTK_INT4) == sizeof (int) ? MPI_INT : \ + sizeof (CCTK_INT4) == sizeof (short) ? MPI_SHORT : \ + MPI_DATATYPE_NULL) +#endif + +#define CARPET_MPI_CHAR MPI_CHAR + +/* floating point types are architecture-independent, + ie. a float has always 4 bytes, and a double has 8 bytes + + PUGH_MPI_REAL is used for communicating reals of the generic CCTK_REAL type + PUGH_MPI_REALn is used to explicitely communicate n-byte reals */ +#ifdef CCTK_REAL4 +#define CARPET_MPI_REAL4 MPI_FLOAT +#endif +#ifdef CCTK_REAL8 +#define CARPET_MPI_REAL8 MPI_DOUBLE +#endif +#ifdef CCTK_REAL16 +#define CARPET_MPI_REAL16 (sizeof (CCTK_REAL16) == sizeof (long double) ? \ + MPI_LONG_DOUBLE : MPI_DATATYPE_NULL) +#endif + + +#ifdef CCTK_REAL_PRECISION_16 +#define CARPET_MPI_REAL CARPET_MPI_REAL16 +#elif CCTK_REAL_PRECISION_8 +#define CARPET_MPI_REAL CARPET_MPI_REAL8 +#elif CCTK_REAL_PRECISION_4 +#define CARPET_MPI_REAL CARPET_MPI_REAL4 +#endif + + +#endif + +namespace CarpetIOFlexIO { + + // Variable definitions + extern int GHExtension; + extern int IOMethod; + extern vector<bool> do_truncate; + extern vector<vector<int> > last_output; + + void* SetupGH (tFleshConfig* const fc, + const int convLevel, cGH* const cgh); + + int OutputGH (const cGH* const cgh); + int OutputVarAs (const cGH* const cgh, const char* const varname, + const char* const alias); + int TimeToOutput (const cGH* const cgh, const int vindex); + int TriggerOutput (const cGH* const cgh, const int vindex); + + int InputGH (const cGH* const cgh); + int InputVarAs (const cGH* const cgh, const char* const varname, + const char* const alias); + + static const char* GetStringParameter (const char* const parametername, + const char* const fallback); + + int WriteGF (const cGH* const cgh, IObase* writer, AMRwriter* amrwriter, ioRequest* request, const int called_from_checkpoint); + int ReadGF (const cGH* const cgh, IObase* reader, AmrGridReader* amrreader, int currdataset); + +} // namespace CarpetIOFlexIO + +namespace CarpetIOFlexIOUtil { + + IObase::DataType FlexIODataType (int cctk_type); + + void WriteAttribute (IObase* writer, const char* name, + int value); + void WriteAttribute (IObase* writer, const char* name, + const int* values, int nvalues); + void WriteAttribute (IObase* writer, const char* name, + CCTK_REAL value); + void WriteAttribute (IObase* writer, const char* name, + const CCTK_REAL* values, int nvalues); + void WriteAttribute (IObase* writer, const char* name, + const char* valuestring); + + void DumpCommonAttributes (const cGH *cgh, IObase* writer, ioRequest* request); +} + +namespace CarpetCheckpointRestart { + + int CarpetIOFlexIO_Recover (cGH* cgh, const char *basefilename, int called_from); + +} + + +#endif // !defined(CARPETIOFLEXIO_HH) + + + + |