aboutsummaryrefslogtreecommitdiff
path: root/src/DumpVar.c
diff options
context:
space:
mode:
authortradke <tradke@ebee0441-1374-4afa-a3b5-247f3ba15b9a>2001-06-12 22:45:13 +0000
committertradke <tradke@ebee0441-1374-4afa-a3b5-247f3ba15b9a>2001-06-12 22:45:13 +0000
commit754fe12ed0b10af5aa281193488a7641ef1de2a4 (patch)
treedf2d691e7782871c53481a23133f5387767a97c7 /src/DumpVar.c
parenta93c5ee313def56a89065efcce5745e8e7a84398 (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.c129
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 ******************************/
/*@@