aboutsummaryrefslogtreecommitdiff
path: root/src/Output3D.c
diff options
context:
space:
mode:
authortradke <tradke@ebee0441-1374-4afa-a3b5-247f3ba15b9a>1999-06-25 11:40:06 +0000
committertradke <tradke@ebee0441-1374-4afa-a3b5-247f3ba15b9a>1999-06-25 11:40:06 +0000
commitde89a5c6b08b5ad9eb7044dc8b2c04a965b19982 (patch)
tree339e8646892a1638fc0d9b81c38cfed38acb238c /src/Output3D.c
parentf9c5c1bc939250652e057dcd06f5ce9701b8a0bb (diff)
The hopefully final renaming of the FlexIO thorn.
git-svn-id: http://svn.cactuscode.org/arrangements/CactusPUGHIO/IOFlexIO/trunk@2 ebee0441-1374-4afa-a3b5-247f3ba15b9a
Diffstat (limited to 'src/Output3D.c')
-rw-r--r--src/Output3D.c285
1 files changed, 285 insertions, 0 deletions
diff --git a/src/Output3D.c b/src/Output3D.c
new file mode 100644
index 0000000..64f0b1a
--- /dev/null
+++ b/src/Output3D.c
@@ -0,0 +1,285 @@
+ /*@@
+ @file Output3D.c
+ @date Tue Jan 9 1999
+ @author Gabrielle Allen
+ @desc
+ Functions to deal 3D output of GFs
+ @enddesc
+ @history
+ @hauthor Thomas Radke @hdate 16 Mar 1999
+ @hdesc Converted to Cactus 4.0
+ @hendhistory
+ @@*/
+
+#include <stdio.h>
+#include <assert.h>
+
+#include "flesh.h"
+#include "Groups.h"
+#include "declare_parameters.h"
+#include "CactusBase/IOUtil/src/ioGH.h"
+#include "ioFlexGH.h"
+
+int IOFlexIO_Output3DVarAs (cGH *GH, const char *var, const char *alias);
+int IOFlexIO_TimeFor3D (cGH *GH, int index);
+
+/*@@
+ @routine IOFlexIO_Output3DGH
+ @date Sat March 6 1999
+ @author Gabrielle Allen
+ @desc
+ Loops over all variables and outputs them if necessary
+ @enddesc
+ @calls CCTK_GetGHExtensionHandle
+ CCTK_GetNumVars
+ CCTK_GetImplementationFromVar
+ CCTK_GetVarName
+ IOFlexIO_TimeFor3D
+ IOFlexIO_Output3DVarAs
+ @calledby
+ @history
+
+ @endhistory
+ @var GH
+ @vdesc Pointer to CCTK GH
+ @vtype cGH
+ @vio in
+ @vcomment
+ @endvar
+@@*/
+
+int IOFlexIO_Output3DGH (cGH *GH)
+{
+ int i;
+ flexioGH *myGH;
+ char *implementation;
+ char *name;
+ char *fullname;
+ DECLARE_PARAMETERS
+
+ /* Get the GH extension for IOFlexIO */
+ myGH = (flexioGH *) GH->extensions [CCTK_GetGHExtensionHandle ("IOFlexIO")];
+
+ /* Loop over all variables */
+ for (i = 0; i < CCTK_GetNumVars (); i++) {
+ if (IOFlexIO_TimeFor3D (GH, i)) {
+ implementation = CCTK_GetImplementationFromVar (i);
+ name = CCTK_GetVarName (i);
+ fullname = (char *) malloc (strlen (implementation) +
+ strlen (name) + 3);
+ assert (fullname);
+ sprintf (fullname, "%s::%s", implementation, name);
+
+ if (IO_verbose) {
+ printf ("IOFlexIO Output3DGH : \n");
+ printf (" fullname/name = %s/%s\n", fullname, name);
+ }
+
+ IOFlexIO_Output3DVarAs (GH, fullname, name);
+
+ free (fullname);
+
+ /* Register another 3D output for this GF */
+ myGH->IO_3Dnum [i]++;
+
+ /* Register GF as having 3D output this iteration */
+ myGH->IO_3Dlast [i] = GH->iteration;
+ }
+ }
+
+ return (0);
+}
+
+
+/*@@
+ @routine IOFlexIO_Output3DVarAs
+ @date Sat March 6 1999
+ @author Gabrielle Allen
+ @desc
+ unconditional output of a variable using the IOFlexIO 3D output method
+ @enddesc
+ @calls CCTK_DecomposeName
+ CCTK_GetVarIndex
+ CCTK_GetGHExtensionHandle
+ IOFlexIO_Write3D
+ @calledby IOFlexIO_Output3DGH
+ @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_Output3DVarAs (cGH *GH, const char *fullname, const char *alias)
+{
+ DECLARE_PARAMETERS
+ int index, first;
+ flexioGH *myGH;
+
+ index = CCTK_GetVarIndex(fullname);
+
+ /* Get the GH extension for IOFlexIO */
+ myGH = (flexioGH *) GH->extensions [CCTK_GetGHExtensionHandle ("IOFlexIO")];
+
+ /* Output with correct file opening behaviour */
+ first = (myGH->IO_3Dnum [index] == 1);
+
+ if (IO_verbose) {
+ printf ("\nIn IOFlexIO Output3DVarAs\n-------------------\n");
+ printf (" Fullname = -%s-\n", fullname);
+ printf (" Alias = -%s-\n", alias);
+ printf (" Index = %d\n", index);
+ }
+
+ /* Do the 3D output */
+ IOFlexIO_Write3D (GH, index, alias, first);
+
+ return (0);
+}
+
+
+/*@@
+ @routine IOFlexIO_TimeFor3D
+ @date Sat March 6 1999
+ @author Gabrielle Allen
+ @desc
+ Decides if it is time to output a variable using the IOFlexIO 3D output
+ method
+ @enddesc
+ @calls CCTK_GetGHExtensionHandle
+ CCTK_GetVarGType
+ CCTK_WARN
+ CCTK_QueryGroupStorage_ByIndex
+ CCTK_GetGroupNameFromVar_ByIndex
+ @calledby IOFlexIO_Output3DGH
+ @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_TimeFor3D (cGH *GH, int index)
+{
+ ioGH *ioUtilGH;
+ flexioGH *myGH;
+
+ /* Get the GH extension for IOUtil and IOFlexIO */
+ ioUtilGH = (ioGH *) GH->extensions [CCTK_GetGHExtensionHandle ("IO")];
+ myGH = (flexioGH *) GH->extensions [CCTK_GetGHExtensionHandle ("IOFlexIO")];
+
+ /* Check this GF should be output */
+ if (! (myGH->IO_3Dnum [index] != 0 &&
+ GH->iteration % ioUtilGH->IO_3Devery == 0))
+ return (0);
+
+ /* Check GF not already output this iteration */
+ if (myGH->IO_3Dlast [index] == GH->iteration) {
+ CCTK_WARN (2, "Already done 3D output in IOFlexIO");
+ return (0);
+ }
+
+ /* Check GF has storage */
+ if (! CCTK_QueryGroupStorage_ByIndex (GH,
+ CCTK_GetGroupIndexFromVar_ByIndex(index))) {
+ char *fullname = CCTK_GetFullName (index);
+ char *msg = (char *) malloc (80 + strlen (fullname));
+
+ sprintf (msg, "No IOFlexIO 3D output for '%s' (no storage)", fullname);
+ CCTK_WARN (2, msg);
+ free (fullname);
+ free (msg);
+ return (0);
+ }
+
+ return (1);
+}
+
+
+/*@@
+ @routine IOFlexIO_TriggerOutput3D
+ @date Sat March 6 1999
+ @author Gabrielle Allen
+ @desc
+ Triggers the output a variable using the IOFlexIO 3D output
+ method
+ @enddesc
+ @calls CCTK_GetGHExtensionHandle
+ CCTK_GetVarName
+ IOFlexIO_Write3D
+ @calledby
+ @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_TriggerOutput3D (cGH *GH, int index)
+{
+ DECLARE_PARAMETERS
+ int first;
+ flexioGH *myGH;
+ char *varname;
+
+ varname = CCTK_GetVarName (index);
+
+ /* Get the GH extension for IOFlexIO */
+ myGH = (flexioGH *) GH->extensions [CCTK_GetGHExtensionHandle ("IOFlexIO")];
+
+ /* Output with correct file opening behaviour */
+ first = (myGH->IO_3Dnum [index] == 1);
+
+ if (IO_verbose) {
+ printf("\nIn IOFlexIO TriggerOutput3D\n---------------------\n");
+ printf(" Index = %d\n", index);
+ printf(" Variable = -%s-\n", varname);
+ }
+
+ /* Do the 3D output */
+ IOFlexIO_Write3D (GH, index, varname, first);
+
+ /* Register another 3D output for this GF */
+ myGH->IO_3Dnum [index]++;
+
+ /* Register GF as having 3D output this iteration */
+ myGH->IO_3Dlast [index] = GH->iteration;
+
+ return (0);
+}