diff options
author | tradke <tradke@38c3d835-c875-442e-b0fe-21c19ce1d001> | 2002-04-23 16:41:31 +0000 |
---|---|---|
committer | tradke <tradke@38c3d835-c875-442e-b0fe-21c19ce1d001> | 2002-04-23 16:41:31 +0000 |
commit | cf7d25d425bb83833c99ff88a73ea4838b50feb5 (patch) | |
tree | 500f5d7deee8c35c0360f39f994b32b78fda25d9 /src | |
parent | a1063cbd7ddb585ac878ce431bc929a5fd8271e9 (diff) |
Code cleanup before moving into production mode.
git-svn-id: http://svn.cactuscode.org/arrangements/CactusPUGHIO/IOPanda/trunk@29 38c3d835-c875-442e-b0fe-21c19ce1d001
Diffstat (limited to 'src')
-rw-r--r-- | src/GHExtension.c | 159 | ||||
-rw-r--r-- | src/Output.c (renamed from src/Output3D.c) | 193 | ||||
-rw-r--r-- | src/Panda/c_interface.h | 7 | ||||
-rw-r--r-- | src/Startup.c | 213 | ||||
-rw-r--r-- | src/Write.c (renamed from src/DumpVar.c) | 2 | ||||
-rw-r--r-- | src/ioPandaGH.h | 45 | ||||
-rw-r--r-- | src/make.code.defn | 9 | ||||
-rw-r--r-- | src/make.configuration.defn | 13 |
8 files changed, 310 insertions, 331 deletions
diff --git a/src/GHExtension.c b/src/GHExtension.c deleted file mode 100644 index b3cdd1d..0000000 --- a/src/GHExtension.c +++ /dev/null @@ -1,159 +0,0 @@ - /*@@ - @file GHExtension.c - @date 01 Oct 1999 - @author Jonghyun Lee - @desc IOPanda GH extension stuff - @enddesc - @history - @endhistory - @@*/ - -/*#define DEBUG_IO*/ - -#include <stdlib.h> -#include <string.h> -#include <stdio.h> - -#include "cctk.h" -#include "cctk_Parameters.h" -#include "CactusBase/IOUtil/src/ioGH.h" -#include "ioPandaGH.h" - -void *IOPanda_SetupGH (tFleshConfig *config, - int convergence_level, - cGH *GH); -int IOPanda_InitGH (cGH *GH); -void Panda_Create(int, int); - - - /*@@ - @routine IOPanda_SetupGH - @date Fri 01 Oct 1999 - @author Jonghyun Lee - @desc - Allocates the IOPanda GH extension structure. - @enddesc - @calledby CCTK scheduler at CCTK_INITIALIZE - @var config - @vdesc flesh configuration structure (unused) - @vtype tFleshConfig * - @vio in - @endvar - @var convergence_level - @vdesc convergence level (unused) - @vtype int - @vio in - @endvar - @var GH - @vdesc pointer to grid hierarchy - @vtype cGH * - @vio in - @endvar - @history - - @endhistory -@@*/ -void *IOPanda_SetupGH (tFleshConfig *config, - int convergence_level, - cGH *GH) -{ - int numvars; - pandaGH *newGH; - - - /* avoid warnings about unused arguments */ - config = config; - convergence_level = convergence_level; - GH = GH; - - numvars = CCTK_NumVars (); - - newGH = (pandaGH *) malloc (sizeof (pandaGH)); - newGH->do_out3D = (char *) malloc (numvars * sizeof (char)); - newGH->out3D_last = (int *) malloc (numvars * sizeof (int)); - - return (newGH); -} - - - /*@@ - @routine IOPanda_InitGH - @date Fri 01 Oct 1999 - @author Jonghyun Lee - @desc - The GH initialization routine for IOFlexIO. - Necessary output dirs are created. - @enddesc - @calledby CCTK scheduler at CCTK_INITIALIZE - @var GH - @vdesc pointer to grid hierarchy - @vtype cGH * - @vio in - @endvar - @history - - @endhistory -@@*/ -int IOPanda_InitGH (cGH *GH) -{ - DECLARE_CCTK_PARAMETERS - int i; - ioGH *ioUtilGH; - pandaGH *myGH; - - - /* get the handles for IOUtil and IOPanda extensions */ - ioUtilGH = (ioGH *) GH->extensions [CCTK_GHExtensionHandle ("IO")]; - myGH = (pandaGH *) GH->extensions [CCTK_GHExtensionHandle ("IOPanda")]; - - /* How often to output */ - myGH->out3D_every = out_every > 0 ? out_every : -1; - if (out3D_every > 0) - { - myGH->out3D_every = out3D_every; - } - - /* Check whether "outdir3D" was set. - If so take this dir otherwise default to "IO::outdir" */ - if (CCTK_ParameterQueryTimesSet ("outdir3D", CCTK_THORNSTRING) > 0) - { - myGH->outdir3D = strdup (outdir3D); - } - else - { - myGH->outdir3D = strdup (outdir); - } - - /* Create the output directory */ - if (CCTK_MyProc (GH) == 0) - { - FILE *fp; - - - i = CCTK_CreateDirectory (0755, myGH->outdir3D); - if (i < 0) - { - CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, - "IOPanda_InitGH: Problem creating IOPanda 3D output " - "directory '%s'", myGH->outdir3D); - } - else if (i > 0) - { - CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING, - "IOPanda_InitGH: IOPanda 3D output directory '%s' already " - "exists", myGH->outdir3D); - } - fp = fopen ("FILEPREFIX", "w"); - fprintf (fp, "%s", myGH->outdir3D); - fclose (fp); - } - - for (i = 0; i < CCTK_NumVars (); i++) - { - myGH->out3D_last [i] = -1; - } - - Panda_Create (ioUtilGH->ioproc_every, 1); - - return (0); -} diff --git a/src/Output3D.c b/src/Output.c index 860f96a..4bb6a86 100644 --- a/src/Output3D.c +++ b/src/Output.c @@ -1,8 +1,9 @@ /*@@ - @file Output3D.c + @file Output.c @date 01 Oct 1999 @author Jonghyun Lee - @desc Functions to deal 3D output of GFs + @desc + Functions to deal with IOPanda output of grid variables @enddesc @version $Id$ @@*/ @@ -15,26 +16,18 @@ #include "cctk_Parameters.h" #include "CactusBase/IOUtil/src/ioGH.h" #include "CactusPUGH/PUGH/src/include/pugh.h" -#include "CactusExternal/FlexIO/src/IOProtos.h" + #include "ioPandaGH.h" #include "Panda/c_interface.h" /* the rcs ID and its dummy funtion to use it */ static const char *rcsid = "$Header$"; -CCTK_FILEVERSION(BetaThorns_IOPanda_Output3D_c) - +CCTK_FILEVERSION(BetaThorns_IOPanda_Output_c) -/* function prototypes */ -int IOPanda_Output3DGH (const cGH *GH); -int IOPanda_TriggerOutput3D (const cGH *GH, int vindex); -int IOPanda_Output3DVarAs (const cGH *GH, const char *var, const char *alias); -int IOPanda_TimeFor3D (const cGH *GH, int vindex); -void IOPanda_getDumpData (const cGH *GH, int vindex, int timelevel, void **outme, - int *free_outme, CCTK_INT4 *geom, int element_size); -void PandaTimestep(ArrayInfo *); -int PandaIsNewFile(char *); -void Panda_WriteAttribute(const char *, const char *, int, int, const void *); +/******************************************************************** + ******************** Internal Routines ************************ + ********************************************************************/ static int CheckOutputVar (int vindex); static void CheckSteerableParameters (pandaGH *myGH); static void SetOutputFlag (int vindex, const char *optstring, void *arg); @@ -43,13 +36,18 @@ static void IOPanda_IEEEIOStructDump (const cGH *GH, const char *fname); static void IOPanda_AddCommonAttributes (const cGH *GH, int vindex, int timelevel, int global_size[3], char *fname); static void IOPanda_AddChunkAttributes (const cGH *GH, int vindex, CCTK_INT4 *geom, char *fname); + /*@@ - @routine IOPanda_Output3DGH + @routine IOPanda_OutputGH @date Sat March 6 1999 @author Gabrielle Allen @desc Loops over all variables and outputs them if necessary @enddesc + + @calls IOPanda_TimeFor + IOPanda_Timestep + @var GH @vdesc Pointer to CCTK GH @vtype const cGH * @@ -62,12 +60,12 @@ static void IOPanda_AddChunkAttributes (const cGH *GH, int vindex, CCTK_INT4 *ge (or 0 if it wasn't time to output yet) @endreturndesc @@*/ -int IOPanda_Output3DGH (const cGH *GH) +int IOPanda_OutputGH (const cGH *GH) { int vindex, retval; + pandaGH *myGH; char *fullname; const char *name; - pandaGH *myGH; DECLARE_CCTK_PARAMETERS @@ -76,7 +74,7 @@ int IOPanda_Output3DGH (const cGH *GH) CheckSteerableParameters (myGH); - if (myGH->out3D_every <= 0) + if (myGH->out_every <= 0) { return (0); } @@ -84,23 +82,23 @@ int IOPanda_Output3DGH (const cGH *GH) /* Loop over all variables */ for (vindex = retval = 0; vindex < CCTK_NumVars (); vindex++) { - if (IOPanda_TimeFor3D (GH, vindex)) + if (IOPanda_TimeFor (GH, vindex)) { - name = CCTK_VarName (vindex); + name = CCTK_VarName (vindex); if (verbose) { fullname = CCTK_FullName (vindex); - CCTK_VInfo (CCTK_THORNSTRING, "IOPanda_Output3DGH: " + CCTK_VInfo (CCTK_THORNSTRING, "IOPanda_OutputGH: " "(fullname, name) = (%s, %s)", fullname, name); free (fullname); } - /* Do the 3D output */ + /* Do the output */ if (IOPanda_Timestep (GH, vindex, name) == 0) { - /* Register variable as having 3D output this iteration */ - myGH->out3D_last [vindex] = GH->cctk_iteration; + /* Register variable as having output this iteration */ + myGH->out_last [vindex] = GH->cctk_iteration; retval++; } } @@ -111,14 +109,15 @@ int IOPanda_Output3DGH (const cGH *GH) /*@@ - @routine IOPanda_Output3DVarAs + @routine IOPanda_OutputVarAs @date Sat March 6 1999 @author Gabrielle Allen @desc - Unconditional output of a variable - using the IOPanda 3D output method + Unconditional output of a variable using the IOPanda I/O method @enddesc - @calledby IOPanda_Output3DGH + + @calls IOPanda_Timestep + @var GH @vdesc Pointer to CCTK GH @vtype const cGH * @@ -141,24 +140,21 @@ int IOPanda_Output3DGH (const cGH *GH) return code of @seeroutine IOPanda_Timestep @endreturndesc @@*/ -int IOPanda_Output3DVarAs (const cGH *GH, - const char *fullname, - const char *alias) +int IOPanda_OutputVarAs (const cGH *GH, const char *fullname, const char *alias) { int vindex, retval; DECLARE_CCTK_PARAMETERS - vindex = CCTK_VarIndex(fullname); - + vindex = CCTK_VarIndex (fullname); if (verbose) { - CCTK_VInfo (CCTK_THORNSTRING, "IOPanda_Output3DVarAs: " + CCTK_VInfo (CCTK_THORNSTRING, "IOPanda_OutputVarAs: " "(fullname, alias, index) = (%s, %s, %d)", fullname, alias, vindex); } - /* Do the 3D output */ + /* Do the output */ retval = IOPanda_Timestep (GH, vindex, alias); return (retval); @@ -166,14 +162,16 @@ int IOPanda_Output3DVarAs (const cGH *GH, /*@@ - @routine IOPanda_TimeFor3D + @routine IOPanda_TimeFor @date Sat March 6 1999 @author Gabrielle Allen @desc Decides if it is time to output a variable - using the IOPanda 3D output method + using the IOPanda output method @enddesc - @calledby IOPanda_Output3DGH + + @calls CheckSteerableParameters + @var GH @vdesc Pointer to CCTK GH @vtype const cGH * @@ -191,10 +189,10 @@ int IOPanda_Output3DVarAs (const cGH *GH, 0 if not @endreturndesc @@*/ -int IOPanda_TimeFor3D (const cGH *GH, - int vindex) +int IOPanda_TimeFor (const cGH *GH, int vindex) { pandaGH *myGH; + char *fullname; /* Get the GH extension for IOPanda */ @@ -203,25 +201,23 @@ int IOPanda_TimeFor3D (const cGH *GH, CheckSteerableParameters (myGH); /* Check if any output was requested */ - if (myGH->out3D_every <= 0) + if (myGH->out_every <= 0) { return (0); } /* Check this variable should be output */ - if (! (myGH->do_out3D [vindex] && GH->cctk_iteration % myGH->out3D_every == 0)) + if (! (myGH->do_out[vindex] && GH->cctk_iteration % myGH->out_every == 0)) { return (0); } /* Check variable not already output this iteration */ - if (myGH->out3D_last [vindex] == GH->cctk_iteration) + if (myGH->out_last [vindex] == GH->cctk_iteration) { - char *fullname = CCTK_FullName (vindex); - - + fullname = CCTK_FullName (vindex); CCTK_VWarn (5, __LINE__, __FILE__, CCTK_THORNSTRING, - "Already done IOPanda 3D output for variable '%s' in current " + "Already done IOPanda output for variable '%s' in current " "iteration (probably via triggers)", fullname); free (fullname); return (0); @@ -232,12 +228,15 @@ int IOPanda_TimeFor3D (const cGH *GH, /*@@ - @routine IOPanda_TriggerOutput3D + @routine IOPanda_TriggerOutput @date Sat March 6 1999 @author Gabrielle Allen @desc - Triggers the output a variable using the IOPanda 3D output method + Triggers the output a variable using the IOPanda output method @enddesc + + @calls IOPanda_Timestep + @var GH @vdesc Pointer to CCTK GH @vtype const cGH * @@ -254,8 +253,7 @@ int IOPanda_TimeFor3D (const cGH *GH, return code of @seeroutine IOPanda_Timestep @endreturndesc @@*/ -int IOPanda_TriggerOutput3D (const cGH *GH, - int vindex) +int IOPanda_TriggerOutput (const cGH *GH, int vindex) { int retval; pandaGH *myGH; @@ -270,59 +268,77 @@ int IOPanda_TriggerOutput3D (const cGH *GH, if (verbose) { - CCTK_VInfo (CCTK_THORNSTRING, "TriggerOutput3D: " + CCTK_VInfo (CCTK_THORNSTRING, "TriggerOutput: " "name, index = %s, %d", varname, vindex); } - /* Do the 3D output */ + /* Do the output */ retval = IOPanda_Timestep (GH, vindex, varname); if (retval == 0) { - /* Register variable as having 3D output this iteration */ - myGH->out3D_last [vindex] = GH->cctk_iteration; + /* Register variable as having output this iteration */ + myGH->out_last [vindex] = GH->cctk_iteration; } return (retval); } -/**************************** local functions ******************************/ -/* check if steerable parameters have changed */ +/******************************************************************** + ******************** Internal Routines ************************ + ********************************************************************/ +/*@@ + @routine CheckSteerableParameters + @date Mon Oct 10 2000 + @author Thomas Radke + @desc + Checks if IOPanda steerable parameters were changed + and does appropriate re-evaluation. + @enddesc + + @calls CCTK_TraverseString + + @var myGH + @vdesc Pointer to IOPanda GH + @vtype pandaGH * + @vio in + @endvar +@@*/ static void CheckSteerableParameters (pandaGH *myGH) { - DECLARE_CCTK_PARAMETERS int times_set; - static int out3D_vars_lastset = -1; + static int out_vars_lastset = -1; + DECLARE_CCTK_PARAMETERS - /* How often to output */ - myGH->out3D_every = out_every > 0 ? out_every : -1; - if (out3D_every > 0) + /* how often to output */ + myGH->out_every = out_every; + if (myGH->out_every < 0) { - myGH->out3D_every = out3D_every; + myGH->out_every = *(const CCTK_INT *) + CCTK_ParameterGet ("out_every", + CCTK_ImplementationThorn ("IO"), NULL); } - /* re-parse the 'out3D_vars' parameter if it was changed */ - times_set = CCTK_ParameterQueryTimesSet ("out3D_vars", CCTK_THORNSTRING); - if (times_set != out3D_vars_lastset) + /* re-parse the 'out_vars' parameter if it was changed */ + times_set = CCTK_ParameterQueryTimesSet ("out_vars", CCTK_THORNSTRING); + if (times_set != out_vars_lastset) { - memset (myGH->do_out3D, 0, CCTK_NumVars ()); - CCTK_TraverseString (out3D_vars, SetOutputFlag, myGH->do_out3D, + memset (myGH->do_out, 0, CCTK_NumVars ()); + CCTK_TraverseString (out_vars, SetOutputFlag, myGH->do_out, CCTK_GROUP_OR_VAR); - /* Save the last setting of 'out3D_vars' parameter */ - out3D_vars_lastset = times_set; + /* Save the last setting of 'out_vars' parameter */ + out_vars_lastset = times_set; } - } /* check if this variable can be output (static conditions) */ static int CheckOutputVar (int vindex) { - char *errormsg; - char *fullname; + char *errormsg, *fullname; errormsg = NULL; @@ -333,11 +349,11 @@ static int CheckOutputVar (int vindex) is created and nothing is written to, it crashes at re-opening. ***/ if (CCTK_VarTypeI (vindex) == CCTK_VARIABLE_COMPLEX) { - errormsg = "IOPanda 3D output for complex variable '%s' not yet supported"; + errormsg = "IOPanda output for complex variable '%s' not yet supported"; } else if (CCTK_GroupTypeFromVarI (vindex) == CCTK_SCALAR) { - errormsg = "IOPanda 3D output for scalar variable '%s' not supported"; + errormsg = "IOPanda output for scalar variable '%s' not supported"; } if (errormsg) @@ -354,18 +370,13 @@ static int CheckOutputVar (int vindex) /* callback for CCTK_TraverseString() to set the output flag for the given variable */ -static void SetOutputFlag (int vindex, - const char *optstring, - void *arg) +static void SetOutputFlag (int vindex, const char *optstring, void *arg) { char *flags = (char *) arg; /* Check the variable type */ - if (CheckOutputVar (vindex) == 0) - { - flags[vindex] = 1; - } + flags[vindex] = CheckOutputVar (vindex) == 0; if (optstring) { @@ -385,6 +396,7 @@ static int IOPanda_Timestep (const cGH *GH, int vindex, const char *alias) ArrayInfo ainfo; ioGH *ioUtilGH; pGH *pughGH; + char *fullname; union { char *non_const_char; @@ -393,17 +405,12 @@ static int IOPanda_Timestep (const cGH *GH, int vindex, const char *alias) DECLARE_CCTK_PARAMETERS - /* prevent compiler warning "cast discards `const' from pointer target type"*/ - cast_to_const.const_char = alias; - /* check if variable has storage assigned */ if (! CCTK_QueryGroupStorageI (GH, CCTK_GroupIndexFromVarI (vindex))) { - char *fullname = CCTK_FullName (vindex); - - + fullname = CCTK_FullName (vindex); CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING, - "No IOPanda 3D output for '%s' (no storage)", fullname); + "No IOPanda output for '%s' (no storage)", fullname); free (fullname); return (-1); } @@ -412,6 +419,8 @@ static int IOPanda_Timestep (const cGH *GH, int vindex, const char *alias) pughGH = PUGH_pGH (GH); ioUtilGH = (ioGH *) CCTK_GHExtension (GH, "IO"); + /* prevent compiler warning "cast discards `const' from pointer target type"*/ + cast_to_const.const_char = alias; ainfo.name_ = cast_to_const.non_const_char; ainfo.rank_ = 3; @@ -549,7 +558,7 @@ static void IOPanda_AddCommonAttributes (const cGH *GH, d3_to_IO [0] = GH->cctk_delta_space [0] * ioUtilGH->downsample[0]; d3_to_IO [1] = GH->cctk_delta_space [1] * ioUtilGH->downsample[1]; d3_to_IO [2] = GH->cctk_delta_space [2] * ioUtilGH->downsample[2]; - Panda_WriteAttribute (fname, "delta", FLOAT64, 3,d3_to_IO); + Panda_WriteAttribute (fname, "delta", FLOAT64, 3, d3_to_IO); if (ioUtilGH->downsample[0] > 1 || ioUtilGH->downsample[1] > 1 || @@ -592,7 +601,9 @@ static void IOPanda_AddChunkAttributes (const cGH *GH, /* there is nothing to do for a serial run */ if (CCTK_nProcs (GH) == 1) + { return; + } /* get the dimension of the variable */ dim = CCTK_GroupDimI (CCTK_GroupIndexFromVarI (vindex)); diff --git a/src/Panda/c_interface.h b/src/Panda/c_interface.h index 1b0786c..e142ab3 100644 --- a/src/Panda/c_interface.h +++ b/src/Panda/c_interface.h @@ -25,4 +25,11 @@ typedef struct ArrayInfo { struct ArrayInfo *next_; /* next element */ } ArrayInfo; +/* prototypes for functions called in the Panda library */ +int Panda_Create (int ioproc_every, int is_part_time_mode); +void Panda_Finalize (void); +void PandaTimestep (ArrayInfo *); +int PandaIsNewFile (char *); +void Panda_WriteAttribute (const char *, const char *, int, int, const void *); + #endif diff --git a/src/Startup.c b/src/Startup.c index d4cd4eb..04a5fe6 100644 --- a/src/Startup.c +++ b/src/Startup.c @@ -2,10 +2,10 @@ @file Startup.c @date 01 Oct 1999 @author Jonghyun Lee - @desc Startup routines for IOPanda. - @enddesc - @history - @endhistory + @desc + Startup routines for IOPanda. + @enddesc + @version $Id$ @@*/ #include <stdio.h> @@ -16,77 +16,180 @@ #include "cctk_GHExtensions.h" #include "cctk_Parameters.h" #include "CactusBase/IOUtil/src/ioGH.h" +#include "CactusBase/IOUtil/src/ioutil_Utils.h" +#include "ioPandaGH.h" -/* prototypes of functions to be registered */ -int IOPanda_Output3DGH (const cGH *GH); -int IOPanda_TriggerOutput3D (const cGH *GH, int); -int IOPanda_TimeFor3D (const cGH *GH, int); -int IOPanda_Output3DVarAs (const cGH *GH, const char *var, const char *alias); -void *IOPanda_SetupGH (tFleshConfig *config, int convergence_level, cGH *GH); -int IOPanda_InitGH (cGH *GH); -int IOPanda_RecoverGH (cGH *GH, const char *basename, int called_from); +/* the rcs ID and its dummy function to use it */ +static const char *rcsid = "$Id$"; +CCTK_FILEVERSION(BetaThorns_IOPanda_Startup_c) + +/******************************************************************** + ******************** External Routines ************************ + ********************************************************************/ void IOPanda_Startup (void); -void IOPanda_Finalize(void); -void Panda_Finalize(void); +void IOPanda_Finalize (void); + + +/******************************************************************** + ******************** Internal Routines ************************ + ********************************************************************/ +static void *SetupGH (tFleshConfig *config, int convergence_level, cGH *GH); + /*@@ @routine IOPanda_Startup @date Fri May 21 1999 @author Thomas Radke - @desc - The startup registration routine for IOPanda. - Registers the GH extensions needed for IOPanda and - the registerable routines used for each method of IOPanda. - IOPanda does not overload any functions. - @enddesc - @calls - @calledby - @history - - @endhistory - + @desc + The startup registration routine for IOPanda. + Registers the GH extensions needed for IOPanda + along with its setup routine. + @enddesc + @calls CCTK_RegisterGHExtension + CCTK_RegisterGHExtensionSetupGH @@*/ void IOPanda_Startup (void) { - int IO_GHExtension; - int IOMethod; - - - if (CCTK_GHExtensionHandle ("IO") < 0) + /* check that thorn PUGH was activated */ + if (CCTK_GHExtensionHandle ("PUGH") >= 0) { - CCTK_WARN (1, "Thorn IOUtil was not activated. " - "No IOPanda IO methods will be enabled."); - return; + CCTK_RegisterGHExtensionSetupGH (CCTK_RegisterGHExtension ("IOPanda"), + SetupGH); } - if (CCTK_GHExtensionHandle ("PUGH") < 0) + else { CCTK_WARN (1, "Thorn PUGH was not activated. " - "No IOPanda IO methods will be enabled."); - return; + "No IOPanda I/O methods will be enabled."); } +} + + + /*@@ + @routine IOPanda_Finalize + @date Fri May 21 1999 + @author Thomas Radke + @desc + The termination routine for IOPanda. + Shuts down the Panda subsystem. + @enddesc +@@*/ +void IOPanda_Finalize (void) +{ + Panda_Finalize (); +} - IO_GHExtension = CCTK_RegisterGHExtension ("IOPanda"); - CCTK_RegisterGHExtensionSetupGH (IO_GHExtension, IOPanda_SetupGH); - CCTK_RegisterGHExtensionInitGH (IO_GHExtension, IOPanda_InitGH); - /* Register the 3D IOPandaIO routines as output methods */ - IOMethod = CCTK_RegisterIOMethod ("IOPandaIO_3D"); - CCTK_RegisterIOMethodOutputGH (IOMethod, IOPanda_Output3DGH); - CCTK_RegisterIOMethodOutputVarAs (IOMethod, IOPanda_Output3DVarAs); - CCTK_RegisterIOMethodTimeToOutput (IOMethod, IOPanda_TimeFor3D); - CCTK_RegisterIOMethodTriggerOutput (IOMethod, IOPanda_TriggerOutput3D); +/******************************************************************** + ******************** Internal Routines ************************ + ********************************************************************/ + /*@@ + @routine SetupGH + @date Fri 01 Oct 1999 + @author Jonghyun Lee + @desc + Allocates and sets up IOPanda's GH extension structure. + @enddesc -#if 0 - /* Register the IOPanda recovery routine to thorn IOUtil */ - if (IOUtil_RegisterRecover ("IOPanda recovery", IOPanda_RecoverGH) < 0) - CCTK_WARN (1, "Failed to register IOPanda recovery routine"); - Panda_Create(1, 1); -#endif + @calls CCTK_RegisterIOMethod + CCTK_RegisterIOMethodOutputGH + CCTK_RegisterIOMethodOutputVarAs + CCTK_RegisterIOMethodTimeToOutput + CCTK_RegisterIOMethodTriggerOutput + IOUtil_CreateDirectory -} + @var config + @vdesc flesh configuration structure (unused) + @vtype tFleshConfig * + @vio in + @endvar + @var convergence_level + @vdesc convergence level (unused) + @vtype int + @vio in + @endvar + @var GH + @vdesc pointer to grid hierarchy + @vtype cGH * + @vio in + @endvar -void IOPanda_Finalize(void) + @returntype void * + @returndesc + pointer to the allocated GH extension structure + @endreturndesc +@@*/ +static void *SetupGH (tFleshConfig *config, int convergence_level, cGH *GH) { - Panda_Finalize(); + int i, numvars; + FILE *fp; + pandaGH *myGH; + const ioGH *ioUtilGH; + DECLARE_CCTK_PARAMETERS + + + /* suppress compiler warnings about unused variables */ + (void) (config + 0); + (void) (convergence_level + 0); + + + /* Register IOPanda's routines as a new I/O method */ + i = CCTK_RegisterIOMethod ("IOPandaIO"); + CCTK_RegisterIOMethodOutputGH (i, IOPanda_OutputGH); + CCTK_RegisterIOMethodOutputVarAs (i, IOPanda_OutputVarAs); + CCTK_RegisterIOMethodTimeToOutput (i, IOPanda_TimeFor); + CCTK_RegisterIOMethodTriggerOutput (i, IOPanda_TriggerOutput); + + /* allocate a new GH extension structure */ + myGH = (pandaGH *) malloc (sizeof (pandaGH)); + numvars = CCTK_NumVars (); + myGH->do_out = (char *) malloc (numvars * sizeof (char)); + myGH->out_last = (int *) malloc (numvars * sizeof (int)); + + for (i = 0; i < numvars; i++) + { + myGH->out_last[i] = -1; + } + + /* get the handle for IOUtil extensions */ + ioUtilGH = (const ioGH *) CCTK_GHExtension (GH, "IO"); + + /* Check whether "IOPanda::outdir" was set. + If so take this directory otherwise default to "IO::outdir" */ + if (CCTK_ParameterQueryTimesSet ("outdir", CCTK_THORNSTRING) > 0) + { + myGH->outdir = strdup (outdir); + } + else + { + myGH->outdir = CCTK_ParameterValString ("outdir", + CCTK_ImplementationThorn ("IO")); + } + + /* Create the output directory */ + i = IOUtil_CreateDirectory (GH, myGH->outdir, + ! CCTK_Equals (out3D_mode, "onefile"), + ioUtilGH->ioproc); + if (i < 0) + { + CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, + "Problem creating IOPanda output directory '%s'", myGH->outdir); + } + else if (i > 0 && CCTK_Equals (newverbose, "full")) + { + CCTK_VInfo (CCTK_THORNSTRING, + "IOPanda output directory '%s' already exists", myGH->outdir); + } + + if (CCTK_MyProc (GH) == 0) + { + fp = fopen ("FILEPREFIX", "w"); + fprintf (fp, "%s", myGH->outdir); + fclose (fp); + } + + /* start the Panda subsystem */ + Panda_Create (ioUtilGH->ioproc_every, 1); + + return (myGH); } diff --git a/src/DumpVar.c b/src/Write.c index 5715d9e..9900d96 100644 --- a/src/DumpVar.c +++ b/src/Write.c @@ -1,5 +1,5 @@ /*@@ - @file DumpVar.c + @file Write.c @date 01 Oct 1999 @author Jonghyun Lee @desc Do the actual writing of a 3D grid array. diff --git a/src/ioPandaGH.h b/src/ioPandaGH.h index b4c20a8..d066d37 100644 --- a/src/ioPandaGH.h +++ b/src/ioPandaGH.h @@ -2,28 +2,47 @@ @header ioPandaGH.h @date 01 Oct 1999 @author Jonghyun Lee - @desc The extensions to the GH structure from IOPanda. - @history - @endhistory + @desc + The extensions to the GH structure from IOPanda. + @enddesc + @version $Header$ @@*/ -#include <string.h> +#ifndef _IOPANDA_IOPANDAGH_H_ +#define _IOPANDA_IOPANDAGH_H_ 1 #include "StoreNamedData.h" -typedef struct IOPandaGH { - +typedef struct IOPandaGH +{ /* the number of times to output */ - int out3D_every; + int out_every; - /* flags indicating output for var [i] */ - char *do_out3D; + /* flags indicating output for variable[i] */ + char *do_out; /* directory in which to output */ - char *outdir3D; - - /* the last iteration output for var [i] */ - int *out3D_last; + char *outdir; + /* the last iteration output for variable[i] */ + int *out_last; } pandaGH; + + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* prototypes of functions to be registered as IOPanda's IO method */ +int IOPanda_OutputGH (const cGH *GH); +int IOPanda_TriggerOutput (const cGH *GH, int); +int IOPanda_TimeFor (const cGH *GH, int); +int IOPanda_OutputVarAs (const cGH *GH, const char *var, const char *alias); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif /* _IOPANDA_IOPANDAGH_H_ */ diff --git a/src/make.code.defn b/src/make.code.defn index 4ab0091..f16782d 100644 --- a/src/make.code.defn +++ b/src/make.code.defn @@ -1,6 +1,11 @@ -SRCS = Startup.c GHExtension.c Output3D.c DumpVar.c +# Main make.code.defn file for thorn IOPanda +# $Header$ +# Source files in this directory +SRCS = Startup.c Output.c DumpVar.c + +# Other subdirectories SUBDIRS = Panda -# all compilers should understand ANSI C +# This avoids warnings when including the FlexIO headers CFLAGS += -DANSI diff --git a/src/make.configuration.defn b/src/make.configuration.defn index 75357f2..5457011 100644 --- a/src/make.configuration.defn +++ b/src/make.configuration.defn @@ -1,20 +1,13 @@ # make.configuration.defn for IOPanda +# $Header$ # make sure that IOPanda was configured with PUGH and MPI ifeq ($(findstring CactusPUGH/PUGH,$(THORNS)),) -.pseudo: MissingPUGHinIOPanda -MissingPUGHinIOPanda: - @echo "IOPanda: requires PUGH" - @echo "IOPanda: Please add CactusPUGH/PUGH or remove IOPanda from Thornlist !" - exit 2 + $(error "IOPanda requires PUGH. Please add CactusPUGH/PUGH or remove IOPanda from Thornlist !") endif MPI_CONFIGURED := $(shell grep -l CCTK_MPI $(CONFIG)/cctk_Extradefs.h) ifneq ("$(MPI_CONFIGURED)", "$(CONFIG)/cctk_Extradefs.h") -.pseudo: MissingMPIinIOPanda -MissingMPIinIOPanda: - @echo "IOPanda: requires MPI" - @echo "IOPanda: Please configure with MPI or remove IOPanda from Thornlist !" - exit 2 + $(error "IOPanda requires MPI. Please configure with MPI or remove IOPanda from Thornlist !") endif |