diff options
author | tradke <tradke@ebee0441-1374-4afa-a3b5-247f3ba15b9a> | 1999-06-25 11:40:06 +0000 |
---|---|---|
committer | tradke <tradke@ebee0441-1374-4afa-a3b5-247f3ba15b9a> | 1999-06-25 11:40:06 +0000 |
commit | de89a5c6b08b5ad9eb7044dc8b2c04a965b19982 (patch) | |
tree | 339e8646892a1638fc0d9b81c38cfed38acb238c /src/Output3D.c | |
parent | f9c5c1bc939250652e057dcd06f5ce9701b8a0bb (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.c | 285 |
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); +} |