aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortradke <tradke@38c3d835-c875-442e-b0fe-21c19ce1d001>2002-04-23 16:41:31 +0000
committertradke <tradke@38c3d835-c875-442e-b0fe-21c19ce1d001>2002-04-23 16:41:31 +0000
commitcf7d25d425bb83833c99ff88a73ea4838b50feb5 (patch)
tree500f5d7deee8c35c0360f39f994b32b78fda25d9 /src
parenta1063cbd7ddb585ac878ce431bc929a5fd8271e9 (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.c159
-rw-r--r--src/Output.c (renamed from src/Output3D.c)193
-rw-r--r--src/Panda/c_interface.h7
-rw-r--r--src/Startup.c213
-rw-r--r--src/Write.c (renamed from src/DumpVar.c)2
-rw-r--r--src/ioPandaGH.h45
-rw-r--r--src/make.code.defn9
-rw-r--r--src/make.configuration.defn13
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