aboutsummaryrefslogtreecommitdiff
path: root/CarpetDev/CarpetIONirvana/src/CarpetIONirvana.hh
diff options
context:
space:
mode:
Diffstat (limited to 'CarpetDev/CarpetIONirvana/src/CarpetIONirvana.hh')
-rw-r--r--CarpetDev/CarpetIONirvana/src/CarpetIONirvana.hh139
1 files changed, 139 insertions, 0 deletions
diff --git a/CarpetDev/CarpetIONirvana/src/CarpetIONirvana.hh b/CarpetDev/CarpetIONirvana/src/CarpetIONirvana.hh
new file mode 100644
index 000000000..399b37e38
--- /dev/null
+++ b/CarpetDev/CarpetIONirvana/src/CarpetIONirvana.hh
@@ -0,0 +1,139 @@
+#ifndef CARPETIONIRVANA_HH
+#define CARPETIONIRVANA_HH
+
+#include "CarpetN5.hh"
+#include "metadata.hh"
+
+#include <vector>
+
+#include "cctk_Arguments.h"
+#include "CactusBase/IOUtil/src/ioutil_Utils.h"
+#include "carpet.hh"
+
+
+
+
+// CarpetIONirvana GH extension structure
+typedef struct
+{
+ // default number of times to output
+ int out_every_default;
+
+ // list of variables to output
+ char *out_vars;
+
+ // stop on I/O parameter parsing errors ?
+ int stop_on_parse_errors;
+
+ // I/O request description list (for all variables)
+ vector<ioRequest*> requests;
+
+ // directory in which to output
+ char *out_dir;
+
+ // ring buffer for list of successfully created cp files
+ int checkpoint_keep;
+ int cp_filename_index;
+ char **cp_filename_list;
+
+ // list of recovery files to remove
+ int recovery_num_filenames;
+ char **recovery_filename_list;
+
+ // iteration number of the last checkpoint
+ int last_checkpoint_iteration;
+
+ // hdf5 datatype for complex variables; to be set at run time
+ hid_t HDF5_COMPLEX, HDF5_COMPLEX8, HDF5_COMPLEX16, HDF5_COMPLEX32;
+
+} CarpetIONirvanaGH;
+
+
+namespace CarpetIONirvana
+{
+
+ // worker routines to write a single variable
+ int WriteVar (const cGH* const cctkGH,
+ const string& filename,
+ const int filenum,
+ CCTK_REAL & io_bytes,
+ const ioRequest* const request);
+
+ // returns an HDF5 datatype corresponding to the given CCTK datatype
+ hid_t CCTKtoHDF5_Datatype (const cGH* const cctkGH,
+ int cctk_type,
+ bool single_precision);
+
+
+ // Everything is a class template, so that it can easily be
+ // instantiated for all output dimensions
+
+/* template<int outdim>
+ struct IONirvana {
+
+ // name of the output directory
+ static char* my_out_slice_dir;
+
+ // list of variables to output
+ static char* my_out_slice_vars;
+
+ // I/O request description list (for all variables)
+ static vector<ioRequest*> slice_requests;
+
+
+
+ // Scheduled functions
+ static int Startup();
+
+ // Registered functions
+ static void* SetupGH (tFleshConfig* fc, int convLevel, cGH* cctkGH);
+
+ static int OutputGH (const cGH* cctkGH);
+ static int OutputVarAs (const cGH* cctkGH,
+ const char* varname, const char* alias);
+ static int TimeToOutput (const cGH* cctkGH, int vindex);
+ static int TriggerOutput (const cGH* cctkGH, int vindex);
+
+ // Other functions
+ static void CheckSteerableParameters (const cGH* cctkGH);
+
+ static bool DidOutput (const cGH* cctkGH,
+ int vindex,
+ string basefilename,
+ bool& is_new_file, bool& truncate_file);
+
+ static bool DirectionIsRequested (const vect<int,outdim>& dirs);
+
+ static void OutputDirection (const cGH* cctkGH,
+ int vindex,
+ string alias,
+ string basefilename,
+ const vect<int,outdim>& dirs,
+ bool is_new_file,
+ bool truncate_file);
+
+
+ static ivect GetOutputOffset (const cGH* cctkGH, int m,
+ const vect<int,outdim>& dirs);
+
+ };*/ // struct IONirvana
+
+ // scheduled routines (must be declared as C according to schedule.ccl)
+ extern "C" {
+
+ int CarpetIONirvana_RecoverParameters (void);
+ int CarpetIONirvana_SetNumRefinementLevels (void);
+ int CarpetIONirvana_Startup (void);
+ void CarpetIONirvana_Init (CCTK_ARGUMENTS);
+ void CarpetIONirvana_InitCheckpointingIntervals (CCTK_ARGUMENTS);
+ void CarpetIONirvana_RecoverGridStructure (CCTK_ARGUMENTS);
+ void CarpetIONirvana_CloseFiles (CCTK_ARGUMENTS);
+ void CarpetIONirvana_InitialDataCheckpoint (CCTK_ARGUMENTS);
+ void CarpetIONirvana_EvolutionCheckpoint (CCTK_ARGUMENTS);
+ void CarpetIONirvana_TerminationCheckpoint (CCTK_ARGUMENTS);
+
+ } // extern "C"
+
+} // namespace CarpetIONirvana
+
+#endif // !defined(CarpetIONirvana_HH)