diff options
Diffstat (limited to 'src/Output2D.c')
-rw-r--r-- | src/Output2D.c | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/src/Output2D.c b/src/Output2D.c new file mode 100644 index 0000000..f68e99c --- /dev/null +++ b/src/Output2D.c @@ -0,0 +1,182 @@ + + /*@@ + @routine IOJpeg_Output2DGH + @date Thu Sep 14 10:47:58 2000 + @author Gerd Lanfermann + @desc + Preparing 2D data for output + @enddesc + @calls + @calledby + @history + + @endhistory + +@@*/ + + +#include <stdio.h> +#include <stdlib.h> + +#include "cctk.h" +#include "cctk_Parameters.h" +#include "CactusBase/IOUtil/src/ioGH.h" +#include "IOJpeg.h" + + + +/* function prototypes */ +int IOJpeg_TimeFor2D (cGH *GH, int index); +int IOJpeg_Output2DVarAs (cGH *GH, const char *var, const char *alias); +static void CheckSteerableParameters (IOJpegGH *myGH); + + +int IOJpeg_Output2DGH (cGH *GH) +{ + DECLARE_CCTK_PARAMETERS + int i; + IOJpegGH *myGH; + const char *name; + char *fullname; + int ierr=0; + + /* Get the GH extension for IOJpeg */ + myGH = (IOJpegGH *) GH->extensions [CCTK_GHExtensionHandle ("IOJpeg")]; + + CheckSteerableParameters (myGH); + + if (myGH->out2D_every <= 0) + return (0); + + /* Loop over all variables */ + for (i = 0; i < CCTK_NumVars (); i++) + { + + if (IOJpeg_TimeFor2D (GH, i)) + { + + name = CCTK_VarName (i); + fullname = CCTK_FullName (i); + + if (!CCTK_Equals(verbose,"no")) + CCTK_VInfo (CCTK_THORNSTRING, "IOJpeg_Output2DGH: fullname / name = " + "%s / %s", fullname, name); + + ierr=IOJpeg_Output2DVarAs (GH, fullname, name); + + free (fullname); + + /* Register variable as having 2D output this iteration */ + myGH->out2D_last [i] = GH->cctk_iteration; + } + } + if (!CCTK_Equals(verbose,"no")) + CCTK_INFO("IOJpeg_Output2DGH Done"); + + return (ierr); +} + + +int IOJpeg_Output2DVarAs (cGH *GH, const char *fullname, const char *alias) +{ + DECLARE_CCTK_PARAMETERS + int index,ierr=0; + + index = CCTK_VarIndex (fullname); + + /* first, check if variable has storage assigned */ + if (! CCTK_QueryGroupStorageI (GH, CCTK_GroupIndexFromVarI (index))) + { + CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING, + "No IOJpeg 2D output for '%s' (no storage)", fullname); + return(-1); + } + + if (!CCTK_Equals(verbose,"no")) + CCTK_VInfo (CCTK_THORNSTRING, "IOJpeg_Output2DVarAs: fullname, alias, " + "index = (%s, %s, %d)", fullname, alias, index); + + /* Do the 2D output */ + ierr=IOJpeg_Write2D (GH, index, alias); + + return (ierr); +} + +int IOJpeg_TimeFor2D (cGH *GH, int index) +{ + IOJpegGH *myGH; + + + /* Get the GH extension for IOJpeg */ + myGH = (IOJpegGH *) GH->extensions [CCTK_GHExtensionHandle ("IOJpeg")]; + + CheckSteerableParameters (myGH); + + /* Check if any output was requested */ + if(myGH->out2D_every <= 0) + return (0); + + /* Check this variable should be output */ + if (! (myGH->do_out2D [index] && GH->cctk_iteration % myGH->out2D_every == 0)) + return (0); + + + /* Check variable not already output this iteration */ + if (myGH->out2D_last [index] == GH->cctk_iteration) + { + CCTK_WARN (2, "Already done 2D output in IOJpeg"); + return (0); + } + + return (1); +} + +int IOJpeg_TriggerOutput2D (cGH *GH, int index) +{ + DECLARE_CCTK_PARAMETERS + IOJpegGH *myGH; + const char *varname; + int ierr=0; + + varname = CCTK_VarName (index); + + myGH = (IOJpegGH *) GH->extensions [CCTK_GHExtensionHandle ("IOJpeg")]; + + if (!CCTK_Equals(verbose,"no")) + CCTK_VInfo (CCTK_THORNSTRING, "IOJpeg_TriggerOutput2D: varname, index = " + "(%s, %d)", varname, index); + + /* Do the 2D output */ + ierr=IOJpeg_Write2D (GH, index, varname); + + /* Register variable as having 2D output this iteration */ + myGH->out2D_last [index] = GH->cctk_iteration; + + return (ierr); +} + + +/**************************** local functions ******************************/ +static void CheckSteerableParameters (IOJpegGH *myGH) +{ + DECLARE_CCTK_PARAMETERS + int out2D_vars_current_nset; + static int out2D_vars_lastset = 0; + + + /* How often to output */ + myGH->out2D_every = out_every > 0 ? out_every : -1; + if (out2D_every > 0) + myGH->out2D_every = out2D_every; + + /* re-parse the 'out2D_vars' parameter if it was changed */ + out2D_vars_current_nset = CCTK_ParameterQueryTimesSet ("out2D_vars", + CCTK_THORNSTRING); + if (out2D_vars_current_nset != out2D_vars_lastset) + { + IOUtil_ParseVarsForOutput (out2D_vars, myGH->do_out2D); + + /* Save the last setting of 'out2D_vars' parameter */ + out2D_vars_lastset = out2D_vars_current_nset; + } +} |