From 4a03a9934b20f14e61a087f29e3214229bb3e09d Mon Sep 17 00:00:00 2001 From: tradke Date: Thu, 28 Aug 2003 16:52:10 +0000 Subject: A few optimizations which also make the code more readable. git-svn-id: http://svn.cactuscode.org/arrangements/CactusBase/CartGrid3D/trunk@183 c78560ca-4b45-4335-b268-5f3340f3cb52 --- src/CartGrid3D.c | 627 ++++++++++++++++--------------------------------------- 1 file changed, 181 insertions(+), 446 deletions(-) diff --git a/src/CartGrid3D.c b/src/CartGrid3D.c index 0a696e0..d9a7d9b 100644 --- a/src/CartGrid3D.c +++ b/src/CartGrid3D.c @@ -9,8 +9,6 @@ @enddesc @@*/ -/*#define CARTGRID3D_DEBUG*/ - #include #include @@ -56,59 +54,40 @@ void DecodeSymParameters3D(int sym[6]); @desc Sets up Cartesian coordinates. @enddesc - @calls DecodeSymParameters3D, CCTK_Equals, CCTK_WARN, - CCTK_CoordRegisterRange, CCTK_CoordRegisterRangePhysIndex, - CCTK_INFO, Coord_CoordHandle, Util_TableSetReal, - Util_TableSetString, Util_TableSetInt - @history - @endhistory + @calls DecodeSymParameters3D, CCTK_Equals, CCTK_WARN, + CCTK_CoordRegisterRange, CCTK_CoordRegisterRangePhysIndex, + CCTK_INFO, Coord_CoordHandle, Util_TableSetReal, + Util_TableSetString, Util_TableSetInt @var CCTK_ARGUMENTS @vdesc Cactus argument list - @vtype + @vtype @vio in/out - @vcomment @endvar - - @returntype void @@*/ void CartGrid3D(CCTK_ARGUMENTS) { - DECLARE_CCTK_ARGUMENTS; - DECLARE_CCTK_PARAMETERS; - - int iconv, i, j, k; - double dconv; - CCTK_REAL x_origin,y_origin,z_origin; - CCTK_REAL this_dx,this_dy,this_dz; - CCTK_REAL xmin1,ymin1,zmin1,xmax1,ymax1,zmax1; - CCTK_REAL lowerx,upperx,lowery,uppery,lowerz,upperz; - int lowerxi,upperxi,loweryi,upperyi,lowerzi,upperzi; - char infoline[120]; - int ierr; - - int domainsym[6]; - int cntstag[3]; - - CCTK_INT coord_handle; - - lowerx = upperx = lowery = uppery = lowerz = upperz = 0; - lowerxi = upperxi = loweryi = upperyi = lowerzi = upperzi = 0; - - if (cctk_levfac[0] == 1 && cctk_levfac[1] == 1 && cctk_levfac[2] == 1) + int i, j, k, idx; + int iconv, is_coarsest_refinement_level, coord_handle, ierr; + CCTK_REAL origin[3], this_delta[3], min1[3], max1[3]; + CCTK_REAL *coarse_delta[3]; + double lower[3], upper[3]; + int domainsym[6], cntstag[3], loweri[3], upperi[3], do_periodic[3]; + char coord_name[16]; + DECLARE_CCTK_ARGUMENTS + DECLARE_CCTK_PARAMETERS + + + coarse_delta[0] = coarse_dx; + coarse_delta[1] = coarse_dy; + coarse_delta[2] = coarse_dz; + + is_coarsest_refinement_level = cctk_levfac[0] == 1 && + cctk_levfac[1] == 1 && + cctk_levfac[2] == 1; + if (is_coarsest_refinement_level) { - /* Calculate the coordinate ranges only for the coarsest level */ - - /* Some compilers warn about variables which might be uninitialized - because they are assigned in some if/else statements only */ - x_origin = y_origin = z_origin = 0.0; - lowerxi = loweryi = lowerzi = 0; - upperxi = cctk_gsh[0]-1; - upperyi = cctk_gsh[1]-1; - upperzi = cctk_gsh[2]-1; - this_dx = this_dy = this_dz = 0.0; - /* Avoid origin? Default is yes */ cntstag[0] = no_origin && no_originx && avoid_origin && avoid_originx; cntstag[1] = no_origin && no_originy && avoid_origin && avoid_originy; @@ -117,53 +96,24 @@ void CartGrid3D(CCTK_ARGUMENTS) /* Determine symmetries of domain */ DecodeSymParameters3D(domainsym); + do_periodic[0] = periodic && periodic_x; + do_periodic[1] = periodic && periodic_y; + do_periodic[2] = periodic && periodic_z; + /* Calculate physical indices, using symmetries and periodicity */ - if (domainsym[0]) + for (i = 0; i < 3; i++) { - lowerxi = cctk_nghostzones[0]; - } - else - { - lowerxi = 0; - } - if (domainsym[2]) - { - loweryi = cctk_nghostzones[1]; - } - else - { - loweryi = 0; - } - if (domainsym[4]) - { - lowerzi = cctk_nghostzones[2]; - } - else - { - lowerzi = 0; - } + loweri[i] = domainsym[2*i] ? cctk_nghostzones[i] : 0; + upperi[i] = cctk_gsh[i] - 1; - if (periodic) - { - if (periodic_x) + if (do_periodic[i]) { - lowerxi = cctk_nghostzones[0]; - upperxi = cctk_gsh[0]-1-cctk_nghostzones[0]; - } - if (periodic_y) - { - loweryi = cctk_nghostzones[1]; - upperyi = cctk_gsh[1]-1-cctk_nghostzones[1]; - } - if (periodic_z) - { - lowerzi = cctk_nghostzones[2]; - upperzi = cctk_gsh[2]-1-cctk_nghostzones[2]; + loweri[i] = cctk_nghostzones[i]; + upperi[i] = cctk_gsh[i] - 1 - cctk_nghostzones[i]; } } - dconv = pow(2, cctk_convlevel); - iconv = (int)dconv; + iconv = 1 << cctk_convlevel; /**************************************************************** * @@ -183,131 +133,63 @@ void CartGrid3D(CCTK_ARGUMENTS) if (CCTK_Equals(type,"byrange") || CCTK_Equals(type,"box")) { - if (CCTK_Equals(type,"box")) { - /* Coordinates are all -0.5 to 0.5 */ - xmax1 = 0.5; - ymax1 = 0.5; - zmax1 = 0.5; - - xmin1 = -0.5; - ymin1 = -0.5; - zmin1 = -0.5; - + min1[0] = min1[1] = min1[2] = -0.5; + max1[0] = max1[1] = max1[2] = 0.5; } else { - - if (xyzmax != -424242) - { - xmax1 = xyzmax; - ymax1 = xyzmax; - zmax1 = xyzmax; - } - else - { - xmax1 = xmax; - ymax1 = ymax; - zmax1 = zmax; - } - if (xyzmin != -424242) { - xmin1 = xyzmin; - ymin1 = xyzmin; - zmin1 = xyzmin; + min1[0] = min1[1] = min1[2] = xyzmin; } else { - xmin1 = xmin; - ymin1 = ymin; - zmin1 = zmin; + min1[0] = xmin; min1[1] = ymin; min1[2] = zmin; } - } - - /* Grid spacing on coarsest grid */ - /* TODO: Put the coordinates into arrays, and loop over the - dimensions. That gets rid of all the triplicated code. */ - if (domainsym[0]) - { - if (cntstag[0]) + if (xyzmax != -424242) { - *coarse_dx = xmax1 / (cctk_gsh[0] - cctk_nghostzones[0] - 0.5); - x_origin = - (cctk_nghostzones[0] - 0.5) * *coarse_dx * iconv; + max1[0] = max1[1] = max1[2] = xyzmax; } else { - *coarse_dx = xmax1 / (cctk_gsh[0] - cctk_nghostzones[0] - 1); - x_origin = - cctk_nghostzones[0] * *coarse_dx * iconv; - } - } - else - { - if (cntstag[0]) - { - CCTK_WARN(4,"Ignoring request to avoid origin in x-direction," - "it is not relevant for this grid type"); + max1[0] = xmax; max1[1] = ymax; max1[2] = zmax; } - *coarse_dx = (xmax1 - xmin1) / max(cctk_gsh[0] - 1, 1); - x_origin = xmin1; } - if (domainsym[2]) + /* Grid spacing on coarsest grid */ + for (i = 0; i < 3; i++) { - if (cntstag[1]) + if (domainsym[2*i]) { - *coarse_dy = ymax1 / (cctk_gsh[1] - cctk_nghostzones[1] - 0.5); - y_origin = - (cctk_nghostzones[1] - 0.5) * *coarse_dy * iconv; + if (cntstag[i]) + { + *coarse_delta[i] = max1[i] / (cctk_gsh[i] - cctk_nghostzones[i]-0.5); + origin[i] = - (cctk_nghostzones[i]-0.5) * *coarse_delta[i]*iconv; + } + else + { + *coarse_delta[i] = max1[i] / (cctk_gsh[i] - cctk_nghostzones[i]-1); + origin[i] = - cctk_nghostzones[i] * *coarse_delta[i]*iconv; + } } else { - *coarse_dy = ymax1 / (cctk_gsh[1] - cctk_nghostzones[1] - 1); - y_origin = - cctk_nghostzones[1] * *coarse_dy * iconv; - } - } - else - { - if (cntstag[1]) - { - CCTK_WARN(4,"Ignoring request to avoid origin in y-direction," - "it is not relevant for this grid type"); + if (cntstag[i]) + { + CCTK_VWarn(4, __LINE__, __FILE__, CCTK_THORNSTRING, + "Ignoring request to avoid origin in %c-direction, " + "it is not relevant for this grid type", 'x' + i); + } + *coarse_delta[i] = (max1[i] - min1[i]) / max(cctk_gsh[i]-1, 1); + origin[i] = min1[i]; } - *coarse_dy = (ymax1 - ymin1) / max(cctk_gsh[1] - 1, 1); - y_origin = ymin1; - } - if (domainsym[4]) - { - if (cntstag[2]) - { - *coarse_dz = zmax1 / (cctk_gsh[2] - cctk_nghostzones[2] - 0.5); - z_origin = - (cctk_nghostzones[2] - 0.5) * *coarse_dz * iconv; - } - else - { - *coarse_dz = zmax1 / (cctk_gsh[2] - cctk_nghostzones[2] - 1); - z_origin = - cctk_nghostzones[2] * *coarse_dz * iconv; - } + this_delta[i] = *coarse_delta[i] * iconv; } - else - { - if (cntstag[2]) - { - CCTK_WARN(4,"Ignoring request to avoid origin in z-direction," - "it is not relevant for this grid type"); - } - *coarse_dz = (zmax1 - zmin1) / max(cctk_gsh[2] - 1, 1); - z_origin = zmin1; - } - - /* dx,dy,dz on the grid we are on */ - this_dx = *coarse_dx * iconv; - this_dy = *coarse_dy * iconv; - this_dz = *coarse_dz * iconv; - } /************************************************************** @@ -317,336 +199,189 @@ void CartGrid3D(CCTK_ARGUMENTS) * the number of gridpoints on the coarsest GH * **************************************************************/ - else if (CCTK_Equals(type,"byspacing")) { - /* Dx, Dy, Dx on the coarsest grid */ - if (dxyz > 0) { - *coarse_dx = dxyz; - *coarse_dy = dxyz; - *coarse_dz = dxyz; - } - else - { - *coarse_dx = dx; - *coarse_dy = dy; - *coarse_dz = dz; - } - - /* dx, dy, dz on the grid we are on */ - this_dx = *coarse_dx * iconv; - this_dy = *coarse_dy * iconv; - this_dz = *coarse_dz * iconv; - - /* Set minimum values of coordinates */ - if (domainsym[0]) - { - x_origin = (- cctk_nghostzones[0] + cntstag[0] * 0.5) * this_dx; + *coarse_delta[0] = *coarse_delta[1] = *coarse_delta[2] = dxyz; } else { - x_origin = - 0.5 * (cctk_gsh[0]-1 - cntstag[0] * (cctk_gsh[0])%2) - * this_dx; + *coarse_delta[0] = dx; *coarse_delta[1] = dy; *coarse_delta[2] = dz; } - if (domainsym[2]) + for (i = 0; i < 3; i++) { - y_origin = (- cctk_nghostzones[1] + cntstag[1] * 0.5) * this_dy; - } - else - { - y_origin = - 0.5 * (cctk_gsh[1]-1 - cntstag[1] * (cctk_gsh[1])%2) - * this_dy; - } + this_delta[i] = *coarse_delta[i] * iconv; - if (domainsym[4]) - { - z_origin = (- cctk_nghostzones[2] + cntstag[2] * 0.5) * this_dz; - } - else - { - z_origin = - 0.5 * (cctk_gsh[2]-1 - cntstag[2] * (cctk_gsh[2])%2) - * this_dz; + /* Set minimum values of coordinates */ + if (domainsym[2*i]) + { + origin[i] = (- cctk_nghostzones[i] + cntstag[i]*0.5) * this_delta[i]; + } + else + { + origin[i] = - 0.5 * (cctk_gsh[i]-1 - cntstag[i] * cctk_gsh[i]%2) + * this_delta[i]; + } } } } - else + else /* if (not coarsest refinement level) */ { - /* if (not coarsest refinement level) */ - /* Use the already calculated coordinate ranges for all but the coarsest levels */ - - this_dx = CCTK_DELTA_SPACE(0); - this_dy = CCTK_DELTA_SPACE(1); - this_dz = CCTK_DELTA_SPACE(2); - - x_origin = CCTK_ORIGIN_SPACE(0); - y_origin = CCTK_ORIGIN_SPACE(1); - z_origin = CCTK_ORIGIN_SPACE(2); - + for (i = 0; i < 3; i++) + { + this_delta[i] = CCTK_DELTA_SPACE(i); + origin[i] = CCTK_ORIGIN_SPACE(i); + } } /* if (not coarsest refinement level) */ - /* Set spatial coordinates */ - - for(i=0; i < cctk_lsh[0]; i++) + for(k=0; k < cctk_lsh[2]; k++) { for(j=0; j < cctk_lsh[1]; j++) { - for(k=0; k < cctk_lsh[2]; k++) + idx = CCTK_GFINDEX3D (cctkGH, 0, j, k); + for(i=0; i < cctk_lsh[0]; i++, idx++) { - x[CCTK_GFINDEX3D(cctkGH,i,j,k)] = this_dx*(i+cctk_lbnd[0]) + x_origin; - y[CCTK_GFINDEX3D(cctkGH,i,j,k)] = this_dy*(j+cctk_lbnd[1]) + y_origin; - z[CCTK_GFINDEX3D(cctkGH,i,j,k)] = this_dz*(k+cctk_lbnd[2]) + z_origin; - r[CCTK_GFINDEX3D(cctkGH,i,j,k)] = sqrt(SQR(x[CCTK_GFINDEX3D(cctkGH,i,j,k)])+ - SQR(y[CCTK_GFINDEX3D(cctkGH,i,j,k)])+ - SQR(z[CCTK_GFINDEX3D(cctkGH,i,j,k)])); + x[idx] = this_delta[0]*(i+cctk_lbnd[0]) + origin[0]; + y[idx] = this_delta[1]*(j+cctk_lbnd[1]) + origin[1]; + z[idx] = this_delta[2]*(k+cctk_lbnd[2]) + origin[2]; + r[idx] = sqrt(SQR(x[idx]) + SQR(y[idx]) + SQR(z[idx])); } } } - if (cctk_levfac[0] == 1 && cctk_levfac[1] == 1 && cctk_levfac[2] == 1) + /* Register the coordinate ranges - only for the coarsest level */ + if (is_coarsest_refinement_level) { - - /* Register the coordinate ranges only for the coarsest level */ - - cctk_delta_space[0] = this_dx; - cctk_delta_space[1] = this_dy; - cctk_delta_space[2] = this_dz; - - cctk_origin_space[0] = x_origin; - cctk_origin_space[1] = y_origin; - cctk_origin_space[2] = z_origin; - - lowerx = x_origin; - upperx = x_origin+this_dx*(cctk_gsh[0]-1); - ierr = CCTK_CoordRegisterRange(cctkGH,lowerx,upperx,-1,"x","cart3d"); - if (ierr < 0) - { - CCTK_WARN(0,"Failed to register x-coordinate computational range"); - } - - ierr = CCTK_CoordRegisterRangePhysIndex(cctkGH,lowerxi,upperxi,-1,"x","cart3d"); - if (ierr < 0) + for (i = 0; i < 3; i++) { - CCTK_WARN(0,"Failed to register x-coordinate physical range"); - } - - lowery = y_origin; - uppery = y_origin+this_dy*(cctk_gsh[1]-1); - ierr = CCTK_CoordRegisterRange(cctkGH,lowery,uppery,-1,"y","cart3d"); - if (ierr < 0) - { - CCTK_WARN(0,"Failed to register y-coordinate computational range"); - } - ierr = CCTK_CoordRegisterRangePhysIndex(cctkGH,loweryi,upperyi,-1,"y","cart3d"); - if (ierr < 0) - { - CCTK_WARN(0,"Failed to register y-coordinate physical range"); - } + cctk_delta_space[i] = this_delta[i]; + cctk_origin_space[i] = origin[i]; - lowerz = z_origin; - upperz = z_origin+this_dz*(cctk_gsh[2]-1); - ierr = CCTK_CoordRegisterRange(cctkGH,lowerz,upperz,-1,"z","cart3d"); - if (ierr < 0) - { - CCTK_WARN(0,"Failed to register z-coordinate computational range"); - } - ierr = CCTK_CoordRegisterRangePhysIndex(cctkGH,lowerzi,upperzi,-1,"z","cart3d"); - if (ierr < 0) - { - CCTK_WARN(0,"Failed to register z-coordinate physical range"); + lower[i] = origin[i]; + upper[i] = origin[i] + this_delta[i]*(cctk_gsh[i] - 1); + if (CCTK_CoordRegisterRange(cctkGH, lower[i], upper[i], i+1, + NULL, "cart3d") < 0) + { + CCTK_VWarn(0, __LINE__, __FILE__, CCTK_THORNSTRING, + "Failed to register %c-coordinate computational range", + 'x'+i); + } + if (CCTK_CoordRegisterRangePhysIndex(cctkGH, loweri[i], upperi[i], i+1, + NULL, "cart3d") < 0) + { + CCTK_VWarn(0, __LINE__, __FILE__, CCTK_THORNSTRING, + "Failed to register %c-coordinate physical range", 'x' + i); + } } CCTK_INFO("Grid Spacings:"); - sprintf(infoline," %s%12.7e %s%12.7e %s%12.7e ", - "dx=>",cctk_delta_space[0], - "dy=>",cctk_delta_space[1], - "dz=>",cctk_delta_space[2]); - CCTK_INFO(infoline); - + CCTK_VInfo(CCTK_THORNSTRING, + "dx=>%12.7e dy=>%12.7e dz=>%12.7e", + (double) cctk_delta_space[0], (double) cctk_delta_space[1], + (double) cctk_delta_space[2]); CCTK_INFO("Computational Coordinates:"); - sprintf(infoline," %s[%6.3f,%6.3f] %s[%6.3f,%6.3f] %s[%6.3f,%6.3f] ", - "x=>",lowerx,upperx, - "y=>",lowery,uppery, - "z=>",lowerz,upperz); - CCTK_INFO(infoline); - + CCTK_VInfo(CCTK_THORNSTRING, + "x=>[%6.3f,%6.3f] y=>[%6.3f,%6.3f] z=>[%6.3f,%6.3f]", + lower[0], upper[0], lower[1], upper[1], lower[2], upper[2]); CCTK_INFO("Indices of Physical Coordinates:"); - sprintf(infoline," %s[%d,%d] %s[%d,%d] %s[%d,%d] ", - "x=>",lowerxi,upperxi, - "y=>",loweryi,upperyi, - "z=>",lowerzi,upperzi); - CCTK_INFO(infoline); - - + CCTK_VInfo(CCTK_THORNSTRING, + "x=>[%d,%d] y=>[%d,%d] z=>[%d,%d]", + loweri[0], upperi[0], loweri[1], upperi[1], loweri[2],upperi[2]); if ((domainsym[0]==GFSYM_ROTATION_Y || domainsym[2]==GFSYM_ROTATION_X) - && (lowerz + upperz > 1e-12)) + && (lower[2] + upper[2] > 1e-12)) + { CCTK_WARN(0, "minimum z must equal maximum z for rotation symmetry"); + } if ((domainsym[0]==GFSYM_ROTATION_Z || domainsym[4]==GFSYM_ROTATION_X) - && (lowery + uppery > 1e-12)) + && (lower[1] + upper[1] > 1e-12)) + { CCTK_WARN(0, "minimum y must equal maximum y for rotation symmetry"); + } if ((domainsym[2]==GFSYM_ROTATION_Z || domainsym[4]==GFSYM_ROTATION_Y) - && (lowerx - upperx > 1e-12)) + && (lower[0] - upper[0] > 1e-12)) + { CCTK_WARN(0, "minimum x must equal maximum x for rotation symmetry"); - + } } /* if (coarsest refinement level) */ + /* Set up coordinate tables */ - /* cart3d x */ - /* Should this be done in a function? + /* Should this be done in a function? WriteCoordinateTable(cctkGH, "cart3d"); */ - coord_handle = Coord_CoordHandle(cctkGH, "x", "cart3d"); - if (coord_handle<0) - { - CCTK_WARN(0, "Error retreiving coordinate handle for x of cart3d"); - } - ierr = Util_TableSetReal (coord_handle, lowerx, "PHYSICALMIN"); /* ?? */ - ierr += Util_TableSetReal (coord_handle, lowerx, "COMPMIN"); - ierr += Util_TableSetReal (coord_handle, upperx, "PHYSICALMAX"); /* ?? */ - ierr += Util_TableSetReal (coord_handle, upperx, "COMPMAX"); - ierr += Util_TableSetString (coord_handle, "uniform", "TYPE"); - ierr += Util_TableSetString (coord_handle, "no", "TIMEDEPENDENT"); - ierr += Util_TableSetString (coord_handle, "CCTK_REAL", "DATATYPE"); - ierr += Util_TableSetInt (coord_handle, CCTK_VarIndex("grid::x"), - "GAINDEX"); - ierr += Util_TableSetReal (coord_handle, cctk_delta_space[0], "DELTA"); - /* cart3d y */ - coord_handle = Coord_CoordHandle(cctkGH, "y", "cart3d"); - if (coord_handle<0) + /* cart3d */ + for (i = 0; i < 3; i++) { - CCTK_WARN(0, "Error retreiving coordinate handle for y of cart3d"); - } - ierr = Util_TableSetReal (coord_handle, lowery, "PHYSICALMIN"); /* ?? */ - ierr += Util_TableSetReal (coord_handle, lowery, "COMPMIN"); - ierr += Util_TableSetReal (coord_handle, uppery, "PHYSICALMAX"); /* ?? */ - ierr += Util_TableSetReal (coord_handle, uppery, "COMPMAX"); - ierr += Util_TableSetString (coord_handle, "uniform", "TYPE"); - ierr += Util_TableSetString (coord_handle, "no", "TIMEDEPENDENT"); - ierr += Util_TableSetString (coord_handle, "CCTK_REAL", "DATATYPE"); - ierr += Util_TableSetInt (coord_handle, CCTK_VarIndex("grid::y"), - "GAINDEX"); - ierr += Util_TableSetReal (coord_handle, cctk_delta_space[1], "DELTA"); + sprintf (coord_name, "%c", 'x' + i); - /* cart3d z */ - coord_handle = Coord_CoordHandle(cctkGH, "z", "cart3d"); - if (coord_handle<0) - { - CCTK_WARN(0, "Error retreiving coordinate handle for z of cart3d"); + coord_handle = Coord_CoordHandle(cctkGH, coord_name, "cart3d"); + if (coord_handle<0) + { + CCTK_VWarn(0, __LINE__, __FILE__, CCTK_THORNSTRING, + "Error retreiving coordinate handle for '%s' of cart3d", + coord_name); + } + sprintf (coord_name, "grid::%c", 'x' + i); + ierr = Util_TableSetReal (coord_handle, lower[i], "PHYSICALMIN"); /*??*/ + ierr += Util_TableSetReal (coord_handle, lower[i], "COMPMIN"); + ierr += Util_TableSetReal (coord_handle, upper[i], "PHYSICALMAX"); /*??*/ + ierr += Util_TableSetReal (coord_handle, upper[i], "COMPMAX"); + ierr += Util_TableSetString (coord_handle, "uniform", "TYPE"); + ierr += Util_TableSetString (coord_handle, "no", "TIMEDEPENDENT"); + ierr += Util_TableSetString (coord_handle, "CCTK_REAL", "DATATYPE"); + ierr += Util_TableSetInt (coord_handle, CCTK_VarIndex(coord_name), + "GAINDEX"); + ierr += Util_TableSetReal (coord_handle, cctk_delta_space[i], "DELTA"); } - ierr = Util_TableSetReal (coord_handle, lowerz, "PHYSICALMIN"); /* ?? */ - ierr += Util_TableSetReal (coord_handle, lowerz, "COMPMIN"); - ierr += Util_TableSetReal (coord_handle, upperz, "PHYSICALMAX"); /* ?? */ - ierr += Util_TableSetReal (coord_handle, upperz, "COMPMAX"); - ierr += Util_TableSetString (coord_handle, "uniform", "TYPE"); - ierr += Util_TableSetString (coord_handle, "no", "TIMEDEPENDENT"); - ierr += Util_TableSetString (coord_handle, "CCTK_REAL", "DATATYPE"); - ierr += Util_TableSetInt (coord_handle, CCTK_VarIndex("grid::z"), - "GAINDEX"); - ierr += Util_TableSetReal (coord_handle, cctk_delta_space[2], "DELTA"); - /* cart2d x */ - coord_handle = Coord_CoordHandle(cctkGH, "x", "cart2d"); - if (coord_handle<0) + /* cart2d */ + for (i = 0; i < 2; i++) { - CCTK_WARN(0, "Error retreiving coordinate handle for x of cart2d"); - } - ierr = Util_TableSetReal (coord_handle, lowerx, "PHYSICALMIN"); /* ?? */ - ierr += Util_TableSetReal (coord_handle, lowerx, "COMPMIN"); - ierr += Util_TableSetReal (coord_handle, upperx, "PHYSICALMAX"); /* ?? */ - ierr += Util_TableSetReal (coord_handle, upperx, "COMPMAX"); - ierr += Util_TableSetString (coord_handle, "uniform", "TYPE"); - ierr += Util_TableSetString (coord_handle, "no", "TIMEDEPENDENT"); - ierr += Util_TableSetString (coord_handle, "CCTK_REAL", "DATATYPE"); - ierr += Util_TableSetInt (coord_handle, CCTK_VarIndex("grid::x"), - "GAINDEX"); - ierr += Util_TableSetReal (coord_handle, cctk_delta_space[0], "DELTA"); - - /* cart2d y */ - coord_handle = Coord_CoordHandle(cctkGH, "y", "cart2d"); - if (coord_handle<0) - { - CCTK_WARN(0, "Error retreiving coordinate handle for y of cart2d"); + sprintf (coord_name, "%c", 'x' + i); + coord_handle = Coord_CoordHandle(cctkGH, coord_name, "cart2d"); + if (coord_handle<0) + { + CCTK_VWarn(0, __LINE__, __FILE__, CCTK_THORNSTRING, + "Error retreiving coordinate handle for '%s' of cart2d", + coord_name); + } + sprintf (coord_name, "grid::%c", 'x' + i); + ierr = Util_TableSetReal (coord_handle, lower[i], "PHYSICALMIN"); /*??*/ + ierr += Util_TableSetReal (coord_handle, lower[i], "COMPMIN"); + ierr += Util_TableSetReal (coord_handle, upper[i], "PHYSICALMAX"); /*??*/ + ierr += Util_TableSetReal (coord_handle, upper[i], "COMPMAX"); + ierr += Util_TableSetString (coord_handle, "uniform", "TYPE"); + ierr += Util_TableSetString (coord_handle, "no", "TIMEDEPENDENT"); + ierr += Util_TableSetString (coord_handle, "CCTK_REAL", "DATATYPE"); + ierr += Util_TableSetInt (coord_handle, CCTK_VarIndex(coord_name), + "GAINDEX"); + ierr += Util_TableSetReal (coord_handle, cctk_delta_space[i], "DELTA"); } - ierr = Util_TableSetReal (coord_handle, lowery, "PHYSICALMIN"); /* ?? */ - ierr += Util_TableSetReal (coord_handle, lowery, "COMPMIN"); - ierr += Util_TableSetReal (coord_handle, uppery, "PHYSICALMAX"); /* ?? */ - ierr += Util_TableSetReal (coord_handle, uppery, "COMPMAX"); - ierr += Util_TableSetString (coord_handle, "uniform", "TYPE"); - ierr += Util_TableSetString (coord_handle, "no", "TIMEDEPENDENT"); - ierr += Util_TableSetString (coord_handle, "CCTK_REAL", "DATATYPE"); - ierr += Util_TableSetInt (coord_handle, CCTK_VarIndex("grid::y"), - "GAINDEX"); - ierr += Util_TableSetReal (coord_handle, cctk_delta_space[1], "DELTA"); - /* cart1d x */ + /* cart1d */ coord_handle = Coord_CoordHandle(cctkGH, "x", "cart1d"); if (coord_handle<0) { CCTK_WARN(0, "Error retreiving coordinate handle for x of cart1d"); } - ierr = Util_TableSetReal (coord_handle, lowerx, "PHYSICALMIN"); /* ?? */ - ierr += Util_TableSetReal (coord_handle, lowerx, "COMPMIN"); - ierr += Util_TableSetReal (coord_handle, upperx, "PHYSICALMAX"); /* ?? */ - ierr += Util_TableSetReal (coord_handle, upperx, "COMPMAX"); + ierr = Util_TableSetReal (coord_handle, lower[0], "PHYSICALMIN"); /* ?? */ + ierr += Util_TableSetReal (coord_handle, lower[0], "COMPMIN"); + ierr += Util_TableSetReal (coord_handle, upper[0], "PHYSICALMAX"); /* ?? */ + ierr += Util_TableSetReal (coord_handle, upper[0], "COMPMAX"); ierr += Util_TableSetString (coord_handle, "uniform", "TYPE"); ierr += Util_TableSetString (coord_handle, "no", "TIMEDEPENDENT"); ierr += Util_TableSetString (coord_handle, "CCTK_REAL", "DATATYPE"); - ierr += Util_TableSetInt (coord_handle, CCTK_VarIndex("grid::x"), - "GAINDEX"); + ierr += Util_TableSetInt (coord_handle, CCTK_VarIndex("grid::x"), + "GAINDEX"); ierr += Util_TableSetReal (coord_handle, cctk_delta_space[0], "DELTA"); - - -#ifdef CARTGRID3D_DEBUG - printf("\n"); - printf("CartGrid3D\n"); - printf(" ----------\n"); - printf("Dx,Dy,Dz on coarse grid %6.3f %6.3f, %6.3f\n", *coarse_dx,*coarse_dy,*coarse_dz); - printf("Dx,Dy,Dz on this grid %6.3f %6.3f, %6.3f\n", cctk_delta_space[0],cctk_delta_space[1],cctk_delta_space[2]); - printf(" Convergence level = %d\n",cctk_convlevel); - printf(" Minimum global coords %6.3f %6.3f %6.3f\n", x_origin,y_origin,z_origin); - printf(" Maximum global coords %6.3f %6.3f %6.3f\n", x_origin+this_dx*(cctk_gsh[0]-1), - y_origin+this_dy*(cctk_gsh[1]-1), - z_origin+this_dz*(cctk_gsh[2]-1)); - printf(" Minimum local coords %6.3f %6.3f %6.3f\n", x[0],y[0],z[0]); - printf(" Maximum local coords %6.3f %6.3f %6.3f\n", x[CCTK_GFINDEX3D(cctkGH, cctk_lsh[0]-1,cctk_lsh[1]-1,cctk_lsh[2]-1)], - y[CCTK_GFINDEX3D(cctkGH, cctk_lsh[0]-1,cctk_lsh[1]-1,cctk_lsh[2]-1)], - z[CCTK_GFINDEX3D(cctkGH, cctk_lsh[0]-1,cctk_lsh[1]-1,cctk_lsh[2]-1)]); - -#endif - } - -/******************************************************************** - ********************* Local Routines ***************************** - ********************************************************************/ - - /*@@ - @routine WriteCoordinateTable - @date Aug 2003 - @author David Rideout - @desc - Writes coordinate table for a registered coordinate system - @enddesc - @calls - @history - @endhistory - - @var ... - @vdesc ... - @vtype ... - @vio in/out - @vcomment - @endvar - - @returntype void -@@*/ -- cgit v1.2.3