aboutsummaryrefslogtreecommitdiff
path: root/src/Output2D.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/Output2D.c')
-rw-r--r--src/Output2D.c182
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;
+ }
+}