diff options
author | tradke <tradke@ebee0441-1374-4afa-a3b5-247f3ba15b9a> | 2001-06-12 22:45:13 +0000 |
---|---|---|
committer | tradke <tradke@ebee0441-1374-4afa-a3b5-247f3ba15b9a> | 2001-06-12 22:45:13 +0000 |
commit | 754fe12ed0b10af5aa281193488a7641ef1de2a4 (patch) | |
tree | df2d691e7782871c53481a23133f5387767a97c7 /src/DumpVar.c | |
parent | a93c5ee313def56a89065efcce5745e8e7a84398 (diff) |
Support I/O for all the fixed-sized CCTK datatypes also.
git-svn-id: http://svn.cactuscode.org/arrangements/CactusPUGHIO/IOFlexIO/trunk@204 ebee0441-1374-4afa-a3b5-247f3ba15b9a
Diffstat (limited to 'src/DumpVar.c')
-rw-r--r-- | src/DumpVar.c | 129 |
1 files changed, 90 insertions, 39 deletions
diff --git a/src/DumpVar.c b/src/DumpVar.c index 49fafb0..c172c41 100644 --- a/src/DumpVar.c +++ b/src/DumpVar.c @@ -113,58 +113,53 @@ static void IOFlexIO_procDump (IOFile iof, cGH *GH, int vindex, void *outme, @@*/ void IOFlexIO_DumpVar (cGH *GH, int vindex, int timelevel, IOFile iof) { + pGH *pughGH; ioGH *ioUtilGH; - int variable_type; + int vtype; dumpInfo_t info; - /* Get the handle for IOUtil extensions */ + /* Get the handle for PUGH and IOUtil extensions */ ioUtilGH = (ioGH *) GH->extensions [CCTK_GHExtensionHandle ("IO")]; + pughGH = (pGH *) GH->extensions [CCTK_GHExtensionHandle ("PUGH")]; - variable_type = CCTK_VarTypeI (vindex); - - switch (variable_type) { - case CCTK_VARIABLE_REAL: - info.flexio_type = ioUtilGH->out_single ? FLEXIO_REAL4 : FLEXIO_REAL; - info.element_size = ioUtilGH->out_single ? - sizeof (CCTK_REAL4) : sizeof (CCTK_REAL); -#ifdef CCTK_MPI - info.mpi_type = ioUtilGH->out_single ? PUGH_MPI_REAL4 : PUGH_MPI_REAL; + vtype = CCTK_VarTypeI (vindex); + /* downgrade the output precision if requested */ + if (ioUtilGH->out_single) + { + /* Do we only want to downgrade generic CCTK types ? */ +#ifdef CCTK_REAL4 + if (vtype == CCTK_VARIABLE_REAL) + { + vtype = CCTK_VARIABLE_REAL4; + } + else if (vtype == CCTK_VARIABLE_COMPLEX) + { + vtype = CCTK_VARIABLE_COMPLEX8; + } #endif - break; - - case CCTK_VARIABLE_INT: - info.flexio_type = FLEXIO_INT; - info.element_size = sizeof (CCTK_INT); -#ifdef CCTK_MPI - info.mpi_type = PUGH_MPI_INT; +#ifdef CCTK_INT4 + if (vtype == CCTK_VARIABLE_INT) + { + vtype = CCTK_VARIABLE_INT4; + } #endif - break; - - case CCTK_VARIABLE_CHAR: - info.flexio_type = FLEXIO_CHAR; - info.element_size = sizeof (CCTK_BYTE); + } + info.element_size = CCTK_VarTypeSize (vtype); #ifdef CCTK_MPI - info.mpi_type = PUGH_MPI_CHAR; + info.mpi_type = PUGH_MPIDataType (pughGH, vtype); #endif - break; + info.flexio_type = IOFlexIO_DataType (vtype); -#if 0 -/* FIXME: Don't know how to support COMPLEX types too !! */ - case CCTK_VARIABLE_COMPLEX: - info.flexio_type = ioUtilGH->out_single ? FLEXIO_REAL4 : FLEXIO_REAL; - info.element_size = ioUtilGH->out_single ? - 2 * sizeof (CCTK_REAL4) : 2 * sizeof (CCTK_REAL); + if (info.element_size <= 0 || #ifdef CCTK_MPI - info.mpi_type = ioUtilGH->out_single ? PUGH_MPI_REAL4 : PUGH_MPI_REAL; -#endif - break; + info.mpi_type == MPI_DATATYPE_NULL || #endif - - default: - CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, - "Unsupported variable type %d", variable_type); - return; + info.flexio_type < 0) + { + CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, + "Unsupported variable type %d", vtype); + return; } switch (CCTK_GroupTypeFromVarI (vindex)) { @@ -185,6 +180,62 @@ void IOFlexIO_DumpVar (cGH *GH, int vindex, int timelevel, IOFile iof) } +/*@@ + @routine IOFlexIO_DataType + @author Thomas Radke + @date Mon 11 June 2001 + @desc + Returns the FlexIO datatype for a given CCTK datatype + @enddesc + + @var cctk_type + @vdesc CCTK datatype + @vtype int + @vio in + @endvar + + @returntype int + @returndesc + the appropriate FlexIO datatype for success, or -1 otherwise + @endreturndesc +@@*/ +int IOFlexIO_DataType (int cctk_type) +{ + int retval; + + + switch (cctk_type) + { + case CCTK_VARIABLE_CHAR: retval = FLEXIO_CHAR; break; + case CCTK_VARIABLE_INT: retval = FLEXIO_INT; break; + case CCTK_VARIABLE_REAL: retval = FLEXIO_REAL; break; +#ifdef CCTK_INT2 + case CCTK_VARIABLE_INT2: retval = FLEXIO_INT2; break; +#endif +#ifdef CCTK_INT4 + case CCTK_VARIABLE_INT4: retval = FLEXIO_INT4; break; +#endif +#ifdef CCTK_INT8 + case CCTK_VARIABLE_INT8: retval = FLEXIO_INT8; break; +#endif +#ifdef CCTK_REAL4 + case CCTK_VARIABLE_REAL4: retval = FLEXIO_REAL4; break; +#endif +#ifdef CCTK_REAL8 + case CCTK_VARIABLE_REAL8: retval = FLEXIO_REAL8; break; +#endif +#ifdef CCTK_REAL16 + case CCTK_VARIABLE_REAL16: retval = FLEXIO_REAL16; break; +#endif + + default: CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, + "Unsupported CCTK variable datatype %d", cctk_type); + retval = -1; + } + + return (retval); +} + /************************** local routines ******************************/ /*@@ |