/*@@ @file Output2D.c @date Tue Jan 9 1999 @author Gabrielle Allen @desc Functions to deal 2D output of GFs @enddesc @history @hauthor Thomas Radke @hdate 16 Mar 1999 @hdesc Converted to Cactus 4.0 @hendhistory @@*/ #include #include #include #include "cctk.h" #include "cctk_parameters.h" #include "cctk_ParameterFunctions.h" #include "CactusBase/IOUtil/src/ioGH.h" #include "ioFlexGH.h" /* local function prototypes */ int IOFlexIO_Output2DVarAs (cGH *GH, const char *var, const char *alias); int IOFlexIO_TimeFor2D (cGH *GH, int index); /*@@ @routine IOFlexIO_Output2DGH @date Sat March 6 1999 @author Gabrielle Allen @desc Loops over all variables and outputs them if necessary @enddesc @calledby CCTK_OutputGH ("IOFlexIO_2D") @history @endhistory @var GH @vdesc Pointer to CCTK GH @vtype cGH @vio in @vcomment @endvar @@*/ int IOFlexIO_Output2DGH (cGH *GH) { DECLARE_CCTK_PARAMETERS int i; flexioGH *myGH; char *name, *fullname; t_param_prop *param_prop; static int out2D_vars_lastset = 0; /* Get the GH extension for IOFlexIO */ myGH = (flexioGH *) GH->extensions [CCTK_GHExtensionHandle ("IOFlexIO")]; if (myGH->out2D_every <= 0) return (0); /* Check the 'out2D_vars' parameter */ param_prop = CCTK_ParameterInfo ("out2D_vars", CCTK_THORNSTRING); if (! param_prop) { CCTK_WARN (2, "Couldn't get info on parameter 'out2D_vars'"); return (0); } /* re-parse the 'out2D_vars' parameter if it was changed */ if (param_prop->n_set != out2D_vars_lastset) { ParseVarsForOutput (out2D_vars, myGH->do_out2D); /* Save the last setting of 'out2D_vars' parameter */ out2D_vars_lastset = param_prop->n_set; } /* Loop over all variables */ for (i = 0; i < CCTK_NumVars (); i++) { if (IOFlexIO_TimeFor2D (GH, i)) { name = CCTK_VarName (i); fullname = CCTK_FullName (i); if (verbose) { printf("IOFlexIO Output2DGH : \n"); printf(" fullname/name = %s/%s\n", fullname, name); } IOFlexIO_Output2DVarAs (GH, fullname, name); free (fullname); /* Register GF as having 2D output this iteration */ myGH->out2D_last[i] = GH->cctk_iteration; } } return (0); USE_CCTK_PARAMETERS } /*@@ @routine IOFlexIO_Output2DVarAs @date Sat March 6 1999 @author Gabrielle Allen @desc unconditional output of a variable using the IO 2D output method @enddesc @calledby IOFlexIO_Output2DGH, CCTK_OutputVarAsByMethod ("IOFlexIO_2D") @history @endhistory @var GH @vdesc Pointer to CCTK GH @vtype cGH @vio in @vcomment @endvar @var fullname @vdesc complete name of variable to output @vtype const char * @vio in @vcomment @endvar @var alias @vdesc alias name of variable to output (used to generate output filename) @vtype const char * @vio in @vcomment @endvar @@*/ int IOFlexIO_Output2DVarAs (cGH *GH, const char *fullname, const char *alias) { DECLARE_CCTK_PARAMETERS int index; index = CCTK_VarIndex (fullname); if (verbose) { printf ("\nIn IOFlexIO Output2DVarAs\n-------------------\n"); printf (" Fullname = -%s-\n", fullname); printf (" Alias = -%s-\n", alias); printf (" Index = %d\n", index); } /* Do the 2D output */ IOFlexIO_Write2D (GH, index, alias); return (0); USE_CCTK_PARAMETERS } /*@@ @routine IOFlexIO_TimeFor2D @date Sat March 6 1999 @author Gabrielle Allen @desc Decides if it is time to output a variable using the IO 2D output method @enddesc @calledby IOFlexIO_Output2DGH @history @endhistory @var GH @vdesc Pointer to CCTK GH @vtype cGH @vio in @vcomment @endvar @var index @vdesc index of variable @vtype int @vio in @vcomment @endvar @@*/ int IOFlexIO_TimeFor2D (cGH *GH, int index) { flexioGH *myGH; /* Get the GH extension for IOUtil and IOFlexIO */ myGH = (flexioGH *) GH->extensions [CCTK_GHExtensionHandle ("IOFlexIO")]; /* Check this GF should be output */ if (! (CCTK_GroupTypeFromVarI (index) == GROUP_GF && myGH->do_out2D [index] && GH->cctk_iteration % myGH->out2D_every == 0)) return (0); /* Check GF not already output this iteration */ if (myGH->out2D_last [index] == GH->cctk_iteration) { CCTK_WARN (2, "Already done 2D output in IOFlexIO"); return (0); } return (1); } /*@@ @routine IOFlexIO_TriggerOutput2D @date Sat March 6 1999 @author Gabrielle Allen @desc Triggers the output a variable using the IO 2D output method @enddesc @calledby CCTK scheduler @history @endhistory @var GH @vdesc Pointer to CCTK GH @vtype cGH @vio in @vcomment @endvar @var index @vdesc index of variable to output @vtype int @vio in @vcomment @endvar @@*/ int IOFlexIO_TriggerOutput2D (cGH *GH, int index) { DECLARE_CCTK_PARAMETERS flexioGH *myGH; char *varname; varname = CCTK_VarName (index); /* get the handle for IOFlexIO extensions */ myGH = (flexioGH *) GH->extensions [CCTK_GHExtensionHandle ("IOFlexIO")]; if (verbose) { printf("\nIn IOFlexIO TriggerOutput2D\n---------------------\n"); printf(" Index = %d\n", index); printf(" Variable = -%s-\n", varname); } /* Do the 2D output */ IOFlexIO_Write2D (GH, index, varname); /* Register GF as having 2D output this iteration */ myGH->out2D_last [index] = GH->cctk_iteration; return (0); USE_CCTK_PARAMETERS }