aboutsummaryrefslogtreecommitdiff
path: root/src/Write2D.c
diff options
context:
space:
mode:
authortradke <tradke@94b1c47f-dcfd-45ef-a468-0854c0e9e350>2001-06-27 16:52:25 +0000
committertradke <tradke@94b1c47f-dcfd-45ef-a468-0854c0e9e350>2001-06-27 16:52:25 +0000
commit51b5d26d05da33ff91df8a283f7e68cc2897845e (patch)
tree6fbd06a1bd20209a0d56152669f14bee26edc72a /src/Write2D.c
parentcdb67a6651fcefe19ed31cfc6f2ddeb87a68597b (diff)
2D ASCII output can be done now for every possible CCTK datatype.
Complex datatypes go into a single line (as "<real part> <imag part>"). git-svn-id: http://svn.cactuscode.org/arrangements/CactusBase/IOASCII/trunk@65 94b1c47f-dcfd-45ef-a468-0854c0e9e350
Diffstat (limited to 'src/Write2D.c')
-rw-r--r--src/Write2D.c94
1 files changed, 85 insertions, 9 deletions
diff --git a/src/Write2D.c b/src/Write2D.c
index b686be3..20119c9 100644
--- a/src/Write2D.c
+++ b/src/Write2D.c
@@ -30,10 +30,10 @@ CCTK_FILEVERSION(CactusBase_IOASCII_Write2D_c)
/* macro to output a time slice as typed data */
#define OUTPUT_TYPED_DATA(coord_hsizes, coord_i, coord_j, stagger_offset_i, \
stagger_offset_j, data_hsizes, cctk_type, c_type, \
- data, have_coords, fmt_string, file) \
+ data, have_coords, is_cmplx_type, fmt_string, file) \
{ \
int i, j; \
- cctk_type *typed_data = (cctk_type *) (data); \
+ const cctk_type *typed_data = (const cctk_type *) (data); \
\
\
/* output coordinates if available otherwise just the indices */ \
@@ -47,6 +47,12 @@ CCTK_FILEVERSION(CactusBase_IOASCII_Write2D_c)
(double) (*coord_i++ + stagger_offset_i), \
(double) (*coord_j++ + stagger_offset_j), \
(c_type) *typed_data++); \
+ if (is_cmplx_type) \
+ { \
+ fprintf (file, "\t\t"); \
+ fprintf (file, out_real_format, (double) *typed_data++); \
+ } \
+ fprintf (file, "\n"); \
} \
fprintf (file, "\n"); \
coord_i += coord_hsizes[0] - data_hsizes[0]; \
@@ -65,6 +71,12 @@ CCTK_FILEVERSION(CactusBase_IOASCII_Write2D_c)
(double) i, \
(double) j, \
(c_type) *typed_data++); \
+ if (is_cmplx_type) \
+ { \
+ fprintf (file, "\t\t"); \
+ fprintf (file, out_real_format, (double) *typed_data++); \
+ } \
+ fprintf (file, "\n"); \
} \
fprintf (file, "\n"); \
} \
@@ -106,8 +118,9 @@ void IOASCII_Write2D (cGH *GH, int vindex, const char *alias)
asciiioGH *myGH;
char header_fmt_string[30]; /* header format string */
char zlabel_fmt_string[30]; /* z-label format string */
+ char out_real_format[30]; /* data format string for a real type */
char data_fmt_string_int[30]; /* data format string for int types */
- char data_fmt_string_real[30]; /* data format string for float types */
+ char data_fmt_string_real[30]; /* data format string for real types */
int dir;
int groupindex;
int have_coords;
@@ -149,10 +162,11 @@ void IOASCII_Write2D (cGH *GH, int vindex, const char *alias)
/* set header and data format strings */
sprintf (header_fmt_string, "\n\n#Time = %%%s\n", out_format);
sprintf (zlabel_fmt_string, "#z-label %%s (%%c = %%%s)\n", out_format);
- sprintf (data_fmt_string_int, "%%%s\t\t%%%s\t\t%%d\n",
- out_format, out_format);
- sprintf (data_fmt_string_real, "%%%s\t\t%%%s\t\t%%%s\n",
- out_format, out_format, out_format);;
+ sprintf (out_real_format, "%%%s", out_format);
+ sprintf (data_fmt_string_int, "%s\t\t%s\t\t%%d",
+ out_real_format, out_real_format);
+ sprintf (data_fmt_string_real, "%s\t\t%s\t\t%s",
+ out_real_format, out_real_format, out_real_format);;
/* get the coordinate indices if we output a grid function */
if (groupinfo.grouptype == CCTK_GF)
@@ -411,23 +425,85 @@ void IOASCII_Write2D (cGH *GH, int vindex, const char *alias)
OUTPUT_TYPED_DATA (coord_hsizes, coord_data_i, coord_data_j,
stagger_offset_i, stagger_offset_j,
data_hsizes, CCTK_BYTE, int, data, have_coords,
- data_fmt_string_int, fdset_2D[dir]);
+ 0, data_fmt_string_int, fdset_2D[dir]);
break;
case CCTK_VARIABLE_INT:
OUTPUT_TYPED_DATA (coord_hsizes, coord_data_i, coord_data_j,
stagger_offset_i, stagger_offset_j,
data_hsizes, CCTK_INT, int, data, have_coords,
- data_fmt_string_int, fdset_2D[dir]);
+ 0, data_fmt_string_int, fdset_2D[dir]);
break;
case CCTK_VARIABLE_REAL:
+ case CCTK_VARIABLE_COMPLEX:
OUTPUT_TYPED_DATA (coord_hsizes, coord_data_i, coord_data_j,
stagger_offset_i, stagger_offset_j,
data_hsizes, CCTK_REAL, double, data, have_coords,
+ groupinfo.vartype == CCTK_VARIABLE_COMPLEX,
data_fmt_string_real, fdset_2D[dir]);
break;
+#ifdef CCTK_INT2
+ case CCTK_VARIABLE_INT2:
+ OUTPUT_TYPED_DATA (coord_hsizes, coord_data_i, coord_data_j,
+ stagger_offset_i, stagger_offset_j,
+ data_hsizes, CCTK_INT2, int, data, have_coords,
+ 0, data_fmt_string_int, fdset_2D[dir]);
+ break;
+#endif
+
+#ifdef CCTK_INT4
+ case CCTK_VARIABLE_INT4:
+ OUTPUT_TYPED_DATA (coord_hsizes, coord_data_i, coord_data_j,
+ stagger_offset_i, stagger_offset_j,
+ data_hsizes, CCTK_INT4, int, data, have_coords,
+ 0, data_fmt_string_int, fdset_2D[dir]);
+ break;
+#endif
+
+#ifdef CCTK_INT8
+ case CCTK_VARIABLE_INT8:
+ OUTPUT_TYPED_DATA (coord_hsizes, coord_data_i, coord_data_j,
+ stagger_offset_i, stagger_offset_j,
+ data_hsizes, CCTK_INT8, int, data, have_coords,
+ 0, data_fmt_string_int, fdset_2D[dir]);
+ break;
+#endif
+
+#ifdef CCTK_REAL4
+ case CCTK_VARIABLE_REAL4:
+ case CCTK_VARIABLE_COMPLEX8:
+ OUTPUT_TYPED_DATA (coord_hsizes, coord_data_i, coord_data_j,
+ stagger_offset_i, stagger_offset_j,
+ data_hsizes, CCTK_REAL4, double, data, have_coords,
+ groupinfo.vartype == CCTK_VARIABLE_COMPLEX8,
+ data_fmt_string_real, fdset_2D[dir]);
+ break;
+#endif
+
+#ifdef CCTK_REAL8
+ case CCTK_VARIABLE_REAL8:
+ case CCTK_VARIABLE_COMPLEX16:
+ OUTPUT_TYPED_DATA (coord_hsizes, coord_data_i, coord_data_j,
+ stagger_offset_i, stagger_offset_j,
+ data_hsizes, CCTK_REAL8, double, data, have_coords,
+ groupinfo.vartype == CCTK_VARIABLE_COMPLEX16,
+ data_fmt_string_real, fdset_2D[dir]);
+ break;
+#endif
+
+#ifdef CCTK_REAL16
+ case CCTK_VARIABLE_REAL16:
+ case CCTK_VARIABLE_COMPLEX32:
+ OUTPUT_TYPED_DATA (coord_hsizes, coord_data_i, coord_data_j,
+ stagger_offset_i, stagger_offset_j,
+ data_hsizes, CCTK_REAL16, double, data,have_coords,
+ groupinfo.vartype == CCTK_VARIABLE_COMPLEX32,
+ data_fmt_string_real, fdset_2D[dir]);
+ break;
+#endif
+
default:
CCTK_WARN (1, "Unsupported variable type");
break;