From 9bd4fce84980c2288099f34358853d07a3335238 Mon Sep 17 00:00:00 2001 From: tradke Date: Sat, 1 May 2004 21:19:43 +0000 Subject: Removed the hard-coded assumption of "cart%d" being the underlying coordinate system. Now the coordinate functions provided by CoordBase are used to get the coordinate coordinate system associated with an output variable, as well as the physical coordinate ranges. git-svn-id: http://svn.cactuscode.org/arrangements/CactusBase/IOASCII/trunk@168 94b1c47f-dcfd-45ef-a468-0854c0e9e350 --- src/Write1D.c | 75 ++++++++++++++++++++++------------------------------------- src/Write2D.c | 44 ++++++++++++++++++----------------- src/Write3D.c | 33 ++++++++++++++------------ 3 files changed, 69 insertions(+), 83 deletions(-) diff --git a/src/Write1D.c b/src/Write1D.c index 40a44ba..e815969 100644 --- a/src/Write1D.c +++ b/src/Write1D.c @@ -130,15 +130,13 @@ int IOASCII_Write1D (const cGH *GH, int vindex, const char *alias) { asciiioGH *myGH; int do_dir[4], coord_index[3]; - int i, dir, myproc, groupindex, have_coords, mapping; -#if 0 - int lower, upper; -#endif + int i, dir, myproc, gindex, have_coords, mapping; int hstride, num_files, num_requested_hslabs, num_returned_hslabs; int *extent_int; cGroup gdata; - char *fullname; - char coord_system[20], header[40], buffer[30]; + char *fullname, *groupname; + char header[40], buffer[30]; + CCTK_INT coord_system_handle, coord_handles[3]; char format[3][64]; FILE *file[8]; CCTK_REAL offset; @@ -151,11 +149,11 @@ int IOASCII_Write1D (const cGH *GH, int vindex, const char *alias) /* get the variable's group index and its full name */ - groupindex = CCTK_GroupIndexFromVarI (vindex); + gindex = CCTK_GroupIndexFromVarI (vindex); fullname = CCTK_FullName (vindex); /* check if variable has storage assigned */ - if (! CCTK_QueryGroupStorageI (GH, groupindex)) + if (! CCTK_QueryGroupStorageI (GH, gindex)) { CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING, "IOASCII_Write1D: No IOASCII_1D output for '%s' (no storage)", @@ -168,7 +166,7 @@ int IOASCII_Write1D (const cGH *GH, int vindex, const char *alias) myGH = CCTK_GHExtension (GH, "IOASCII"); /* get the variable's group information */ - CCTK_GroupData (groupindex, &gdata); + CCTK_GroupData (gindex, &gdata); /* see what slices should be output */ do_dir[0] = out1D_x && gdata.dim >= 1; @@ -191,26 +189,27 @@ int IOASCII_Write1D (const cGH *GH, int vindex, const char *alias) return (0); } - /* get the coordinate indices for CCTK_GF variables - (CCTK_ARRAY variables never have coordinates associated) */ - have_coords = gdata.grouptype == CCTK_GF; + /* get the coordinate system associated with this grid variable */ + groupname = CCTK_GroupName (gindex); + coord_system_handle = Coord_GroupSystem (GH, groupname); + free (groupname); + + dir = gdata.dim < 3 ? gdata.dim : 3; + + have_coords = coord_system_handle >= 0 && + Util_TableGetIntArray (coord_system_handle, dir, + coord_handles, "COORDINATES") >= 0; if (have_coords) { - /* FIXME: this assumes a cartesian coordinate system */ - sprintf (coord_system, "cart%dd", gdata.dim); - for (i = 0; i < gdata.dim && i < 3; i++) + /* get the coordinate functions and coordinate physical minimum */ + for (i = 0; i < dir; i++) { - CCTK_CoordRange (GH, &coord_lower[i], &offset, i + 1, NULL, coord_system); - coord_index[i] = CCTK_CoordIndex (i + 1, NULL, coord_system); + coord_index[i] = -1; + coord_lower[i] = 0; + Util_TableGetInt (coord_handles[i], &coord_index[i], "GAINDEX"); + Util_TableGetReal (coord_handles[i], &coord_lower[i], "COMPMIN"); have_coords &= coord_index[i] >= 0; } - - if (! have_coords) - { - CCTK_VWarn (8, __LINE__, __FILE__, CCTK_THORNSTRING, - "IOASCII_Write1D: No coordinate ranges found for '%s'", - coord_system); - } } /* set header format string */ @@ -305,27 +304,12 @@ int IOASCII_Write1D (const cGH *GH, int vindex, const char *alias) origin[i] = myGH->spxyz[gdata.dim-1][dir][i]; } extent -= origin[dir]; -#if 0 - if (CCTK_CoordRangePhysIndex (GH, &lower, &upper, dir + 1, NULL, - coord_system) >= 0) - { -fprintf (stderr, "CCTK_CoordRangePhysIndex() resets origin/extent in dir %d from %d/%d to ", dir, origin[dir], extent); - origin[dir] = lower; extent = upper - lower + 1; -fprintf (stderr, "%d/%d\n", origin[dir], extent); - } - else + + /* correct extent in the case of staggered grids */ + if (CCTK_StaggerDirIndex(dir,gdata.stagtype)==1) { - CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, - "IOASCII_Write1D: failed to get physical coordinate ranges " - "for variable '%s'", fullname); + --extent; } -#else - /* correct extent in the case of staggered grids */ - if (CCTK_StaggerDirIndex(dir,gdata.stagtype)==1) - { - --extent; - } -#endif } else /* origin for CCTK_ARRAYS is always (0, 0, 0) */ { @@ -421,10 +405,7 @@ fprintf (stderr, "%d/%d\n", origin[dir], extent); if (myproc == 0) { free (hdata[0]); - if (hdata[1]) - { - free (hdata[1]); - } + free (hdata[1]); } } /* end of loop through all directions */ diff --git a/src/Write2D.c b/src/Write2D.c index f064c69..2017047 100644 --- a/src/Write2D.c +++ b/src/Write2D.c @@ -130,15 +130,15 @@ int IOASCII_Write2D (const cGH *GH, int vindex, const char *alias) { asciiioGH *myGH; int i, total_hsize, num_requested_hslabs, num_returned_hslabs; - int dir, dir_i, dir_j, maxdir, myproc, groupindex, have_coords; + int dir, dir_i, dir_j, maxdir, myproc, gindex, have_coords; int mapping; cGroup gdata; int coord_index[3]; + CCTK_INT coord_system_handle, coord_handles[3]; CCTK_REAL coord_lower[3]; - char coord_system[20]; char format[3][64]; char header[40], buffer[30]; - char *fullname; + char *fullname, *groupname; int extent_int[3]; CCTK_REAL offset[2]; CCTK_INT vindices[3], origin[3], extent[2], direction[6], hsize[2]; @@ -149,11 +149,11 @@ int IOASCII_Write2D (const cGH *GH, int vindex, const char *alias) /* get the variable name and group information */ fullname = CCTK_FullName (vindex); - groupindex = CCTK_GroupIndexFromVarI (vindex); - CCTK_GroupData (groupindex, &gdata); + gindex = CCTK_GroupIndexFromVarI (vindex); + CCTK_GroupData (gindex, &gdata); /* check if variable has storage assigned */ - if (! CCTK_QueryGroupStorageI (GH, groupindex)) + if (! CCTK_QueryGroupStorageI (GH, gindex)) { CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING, "No IOASCII 2D output for '%s' (no storage)", fullname); @@ -168,24 +168,26 @@ int IOASCII_Write2D (const cGH *GH, int vindex, const char *alias) /* in general: maxdir = gdata.dim * (gdata.dim - 1) / 2; */ maxdir = gdata.dim == 2 ? 1 : 3; - /* get the coordinate indices for CCTK_GF variables - (CCTK_ARRAY variables never have coordinates associated) */ - have_coords = gdata.grouptype == CCTK_GF; + /* get the coordinate system associated with this grid variable */ + groupname = CCTK_GroupName (gindex); + coord_system_handle = Coord_GroupSystem (GH, groupname); + free (groupname); + + dir = gdata.dim < 3 ? gdata.dim : 3; + + have_coords = coord_system_handle >= 0 && + Util_TableGetIntArray (coord_system_handle, dir, + coord_handles, "COORDINATES") >= 0; if (have_coords) { - sprintf (coord_system, "cart%dd", gdata.dim); - for (dir = 0; dir < gdata.dim && dir < 3; dir++) - { - CCTK_CoordRange (GH, &coord_lower[dir], offset, dir+1, NULL,coord_system); - coord_index[dir] = CCTK_CoordIndex (dir + 1, NULL, coord_system); - have_coords &= coord_index[dir] >= 0; - } - - if (! have_coords) + /* get the coordinate functions and coordinate physical minimum */ + for (i = 0; i < dir; i++) { - CCTK_VWarn (8, __LINE__, __FILE__, CCTK_THORNSTRING, - "IOASCII_Write2D: No coordinate ranges found for '%s'", - coord_system); + coord_index[i] = -1; + coord_lower[i] = 0; + Util_TableGetInt (coord_handles[i], &coord_index[i], "GAINDEX"); + Util_TableGetReal (coord_handles[i], &coord_lower[i], "COMPMIN"); + have_coords &= coord_index[i] >= 0; } } num_requested_hslabs = have_coords ? 3 : 1; diff --git a/src/Write3D.c b/src/Write3D.c index 8db2f23..3220a13 100644 --- a/src/Write3D.c +++ b/src/Write3D.c @@ -124,13 +124,14 @@ static void WriteData (int vtype, int IOASCII_Write3D (const cGH *GH, int vindex, const char *alias) { int i, total_hsize; - int myproc, groupindex, have_coords; + int myproc, gindex, have_coords; int num_requested_hslabs, num_returned_hslabs; char header[40], buffer[30]; char format[3][64]; FILE *file; cGroup gdata; - char *fullname; + CCTK_INT coord_system_handle, coord_handles[3]; + char *fullname, *groupname; void *hdata[4]; int extent_int[3]; CCTK_REAL offset[3]; @@ -143,11 +144,11 @@ int IOASCII_Write3D (const cGH *GH, int vindex, const char *alias) /* get the variable group information */ fullname = CCTK_FullName (vindex); - groupindex = CCTK_GroupIndexFromVarI (vindex); - CCTK_GroupData (groupindex, &gdata); + gindex = CCTK_GroupIndexFromVarI (vindex); + CCTK_GroupData (gindex, &gdata); /* check if variable has storage assigned */ - if (! CCTK_QueryGroupStorageI (GH, groupindex)) + if (! CCTK_QueryGroupStorageI (GH, gindex)) { CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING, "No IOASCII 3D output for '%s' (no storage)", fullname); @@ -155,22 +156,24 @@ int IOASCII_Write3D (const cGH *GH, int vindex, const char *alias) return (-1); } - /* get the coordinate indices for CCTK_GF variables - (CCTK_ARRAY variables never have coordinates associated) */ - vindices[0] = vindex; - have_coords = gdata.grouptype == CCTK_GF; + /* get the coordinate system associated with this grid variable */ + vindices[0] = vindex; + groupname = CCTK_GroupName (gindex); + coord_system_handle = Coord_GroupSystem (GH, groupname); + free (groupname); + + have_coords = coord_system_handle >= 0 && + Util_TableGetIntArray (coord_system_handle, 3, + coord_handles, "COORDINATES") >= 0; if (have_coords) { + /* get the coordinate functions and coordinate physical minimum */ for (i = 1; i <= 3; i++) { - vindices[i] = CCTK_CoordIndex (i, NULL, "cart3d"); + vindices[i] = -1; + Util_TableGetInt (coord_handles[i-1], &vindices[i], "GAINDEX"); have_coords &= vindices[i] >= 0; } - - if (! have_coords) - { - CCTK_WARN (8, "IOASCII_Write3D: No coordinate ranges found for 'card3d'"); - } } num_requested_hslabs = have_coords ? 4 : 1; -- cgit v1.2.3