diff options
author | allen <allen@17b73243-c579-4c4c-a9d2-2d5706c11dac> | 2000-01-11 09:10:40 +0000 |
---|---|---|
committer | allen <allen@17b73243-c579-4c4c-a9d2-2d5706c11dac> | 2000-01-11 09:10:40 +0000 |
commit | 25d17935411514dda2ece09dba1ac12f77c05fb5 (patch) | |
tree | 8dd8ec27b49f433fb9ebe358e8a169098a49e331 /src/main/Coord.c | |
parent | 1e66f72eeea3f9b17779fdea465585285f5167ed (diff) |
Added new functions
CCTK_CoordDir
CCTK_CoordLocalRange
also renamed coordinate routines to all start with CCTK_Coord...
Old functions remain but are deprecated
git-svn-id: http://svn.cactuscode.org/flesh/trunk@1221 17b73243-c579-4c4c-a9d2-2d5706c11dac
Diffstat (limited to 'src/main/Coord.c')
-rw-r--r-- | src/main/Coord.c | 338 |
1 files changed, 267 insertions, 71 deletions
diff --git a/src/main/Coord.c b/src/main/Coord.c index a6056a6d..9f30b8c4 100644 --- a/src/main/Coord.c +++ b/src/main/Coord.c @@ -1,6 +1,6 @@ /*@@ @file Coord.c - @date Indeterminate 11-12th April 1999 + @date 11-12th April 1999 @author Gabrielle Allen @desc Routines to deal with cooordinates and coordinate registration @@ -16,19 +16,15 @@ static char *rcsid = "$Header$"; #include "cctk.h" #include "StoreHandledData.h" -#include "cctk_WarnLevel.h" -#include "cctk_Coord.h" #include "ErrorCodes.h" -#include "cctk_Groups.h" -#include "cctk_Misc.h" #include "cctk_FortranString.h" struct Coordprops { - char * name; - int index; + char * name; + int index; CCTK_REAL origin; - int direction; + int direction; }; typedef struct COORD_RANGE @@ -52,8 +48,12 @@ static struct COORD_RANGE *first = NULL; struct Coordprops *CCTKi_CoordData(const char *name); int CCTKi_CoordHande(const char *name); + + + + /*@@ - @routine RegisterCoordI + @routine CoordRegisterI @date 11-12th April 1999 @author Gabrielle Allen @desc @@ -93,7 +93,7 @@ int CCTKi_CoordHande(const char *name); @@*/ -int CCTK_RegisterCoordI(int dir, int index, const char*name) +int CCTK_CoordRegisterI(int dir, int index, const char*name) { int handle; @@ -122,8 +122,8 @@ int CCTK_RegisterCoordI(int dir, int index, const char*name) num_coords++; #ifdef DEBUG_COORD - printf(" In CCTK_RegisterCoordI\n"); - printf(" -----------------------------\n"); + printf(" In CCTK_CoordRegisterI\n"); + printf(" ----------------------\n"); printf(" handle %d, name %s,\n",handle,name); printf(" index %d, direction %d\n",index,dir); #endif @@ -150,23 +150,26 @@ int CCTK_RegisterCoordI(int dir, int index, const char*name) } -void FMODIFIER FORTRAN_NAME(CCTK_RegisterCoordI)(int *handle, int *dir, int *index, ONE_FORTSTRING_ARG) +void FMODIFIER FORTRAN_NAME(CCTK_CoordRegisterI)(int *handle, int *dir, int *index, ONE_FORTSTRING_ARG) { ONE_FORTSTRING_CREATE(name) - *handle = CCTK_RegisterCoordI(*dir,*index, name); + *handle = CCTK_CoordRegisterI(*dir,*index, name); free(name); } + + + /*@@ - @routine RegisterCoord + @routine CoordRegister @date 11-12th April 1999 @author Gabrielle Allen @desc Register a GF as a coordinate with a name and a direction. @enddesc - @calls CCTK_RegisterCoordI, CCTK_VarIndex + @calls CCTK_CoordRegisterI, CCTK_VarIndex @var name @vdesc Name coordinate is registered as @@ -199,7 +202,8 @@ void FMODIFIER FORTRAN_NAME(CCTK_RegisterCoordI)(int *handle, int *dir, int *ind @@*/ -int CCTK_RegisterCoord(int dir, const char *gfname, +int CCTK_CoordRegister(int dir, + const char *gfname, const char *coordname) { @@ -210,7 +214,7 @@ int CCTK_RegisterCoord(int dir, const char *gfname, if (index >= 0) { - retval = CCTK_RegisterCoordI(dir,index,coordname); + retval = CCTK_CoordRegisterI(dir,index,coordname); } else { @@ -222,17 +226,22 @@ int CCTK_RegisterCoord(int dir, const char *gfname, } - -void FMODIFIER FORTRAN_NAME(CCTK_RegisterCoord)(int *handle, int *dir, TWO_FORTSTRINGS_ARGS) +void FMODIFIER FORTRAN_NAME(CCTK_CoordRegister)(int *handle, + int *dir, + TWO_FORTSTRINGS_ARGS) { TWO_FORTSTRINGS_CREATE(gf,name) - *handle = CCTK_RegisterCoord(*dir, gf, name); + *handle = CCTK_CoordRegister(*dir, gf, name); free(gf); free(name); } -int CCTK_RegisterCoordRange(cGH *GH, CCTK_REAL min, CCTK_REAL max, + + +int CCTK_CoordRegisterRange(cGH *GH, + CCTK_REAL min, + CCTK_REAL max, const char *coordname) { coord_range *newguy; @@ -269,14 +278,21 @@ int CCTK_RegisterCoordRange(cGH *GH, CCTK_REAL min, CCTK_REAL max, } -void FMODIFIER FORTRAN_NAME(CCTK_RegisterCoordRange)(cGH *GH, CCTK_REAL *lower, CCTK_REAL *upper, ONE_FORTSTRING_ARG) +void FMODIFIER FORTRAN_NAME(CCTK_CoordRegisterRange)(cGH *GH, + CCTK_REAL *lower, + CCTK_REAL *upper, + ONE_FORTSTRING_ARG) { ONE_FORTSTRING_CREATE(name) - CCTK_RegisterCoordRange (GH,*lower,*upper,name); + CCTK_CoordRegisterRange (GH,*lower,*upper,name); free(name); } -int CCTKi_CoordHandle(const char *name) + + + + +int CCTK_CoordIndex(const char *name) { int handle; struct Coordprops *coord; @@ -287,7 +303,7 @@ int CCTKi_CoordHandle(const char *name) if (coord) { if (CCTK_Equals(name,(const char *)coord->name)) - return handle; + return coord->index; } else { @@ -300,9 +316,20 @@ int CCTKi_CoordHandle(const char *name) } } -} +} -struct Coordprops *CCTKi_CoordData(const char *name) +void FMODIFIER FORTRAN_NAME(CCTK_CoordIndex)(int *index, ONE_FORTSTRING_ARG) +{ + ONE_FORTSTRING_CREATE(name) + *index = CCTK_CoordIndex (name); + free(name); +} + + + + + +int CCTK_CoordDir(const char *name) { int handle; struct Coordprops *coord; @@ -313,7 +340,7 @@ struct Coordprops *CCTKi_CoordData(const char *name) if (coord) { if (CCTK_Equals(name,(const char *)coord->name)) - return coord; + return coord->direction; } else { @@ -322,13 +349,156 @@ struct Coordprops *CCTKi_CoordData(const char *name) sprintf(msg,"Could not find registered coordinate %s",name); CCTK_WARN(2,msg); if (msg) free(msg); - return NULL; + return ERROR_COORDNOTFOUND; } } -} +} -int CCTK_CoordIndex(const char *name) +void FMODIFIER FORTRAN_NAME(CCTK_CoordDir)(int *dir, ONE_FORTSTRING_ARG) +{ + ONE_FORTSTRING_CREATE(name) + *dir = CCTK_CoordDir(name); + free(name); +} + + + + + + /*@@ + @routine CoordRange + @date 10th January 2000 + @author Gabrielle Allen + @desc + Supplies the global range of the named coordinate. + @enddesc + @calls + + @var + @vdesc + @vtype + @vio + @vcomment + @endvar + + @returntype int + @returndesc Returns zero for success and negative for error + @endreturndesc + + @@*/ + +int CCTK_CoordRange(cGH *GH, + CCTK_REAL *lower, + CCTK_REAL *upper, + const char *name) +{ + coord_range *curr; + + for (curr=first;curr;curr=curr->next) + { + +#ifdef DEBUG_COORD + printf("name = %s, currname = %s\n",name,curr->props->name); +#endif + + if (curr->GH == GH && CCTK_Equals(name,curr->props->name)) + { + *lower = curr->lower; + *upper = curr->upper; + +#ifdef DEBUG_COORD + printf("Returning range (%f,%f) for %s (from %x)\n", + *lower,*upper,name,curr); +#endif + + return 0; + } + } + + return -1; + +} + +void FMODIFIER FORTRAN_NAME(CCTK_CoordRange)(int *ierr, + cGH *GH, + CCTK_REAL *lower, + CCTK_REAL *upper, + ONE_FORTSTRING_ARG) +{ + ONE_FORTSTRING_CREATE(name) + *ierr = CCTK_CoordRange (GH,lower,upper,name); + free(name); +} + + + + + + /*@@ + @routine CoordLocalRange + @date 10th January 2000 + @author Gabrielle Allen + @desc + Returns the range of the coordinate on this processor + For now this is done in a straightforward manner, assuming + that a regular grid is used and that the coordinate is a + Grid function. + @enddesc + @calls + + @var + @vdesc + @vtype + @vio + @vcomment + @endvar + + @returntype int + @returndesc + @endreturndesc + + @@*/ + +int CCTK_CoordLocalRange(cGH *GH, + CCTK_REAL *lower, + CCTK_REAL *upper, + const char *name) +{ + + CCTK_REAL global_lower; + CCTK_REAL global_upper; + int dir = CCTK_CoordDir(name); + + CCTK_CoordRange(GH,&global_lower,&global_upper,name); + + *lower = global_lower+GH->cctk_lbnd[dir-1]*GH->cctk_delta_space[dir-1]; + *upper = global_lower+GH->cctk_ubnd[dir-1]*GH->cctk_delta_space[dir-1]; + + printf("Upper/Lower are %f,%f\n",*lower,*upper); + +} + +void FMODIFIER FORTRAN_NAME(CCTK_CoordLocalRange)(int *ierr, + cGH *GH, + CCTK_REAL *lower, + CCTK_REAL *upper, + ONE_FORTSTRING_ARG) +{ + ONE_FORTSTRING_CREATE(name) + *ierr = CCTK_CoordLocalRange (GH,lower,upper,name); + free(name); +} + + + + + +/* ================== */ +/* Internal Functions */ +/* ================== */ + +int CCTKi_CoordHandle(const char *name) { int handle; struct Coordprops *coord; @@ -339,7 +509,7 @@ int CCTK_CoordIndex(const char *name) if (coord) { if (CCTK_Equals(name,(const char *)coord->name)) - return coord->index; + return handle; } else { @@ -352,17 +522,9 @@ int CCTK_CoordIndex(const char *name) } } -} - -void FMODIFIER FORTRAN_NAME(CCTK_CoordIndex)(int *handle, ONE_FORTSTRING_ARG) -{ - ONE_FORTSTRING_CREATE(name) - *handle = CCTK_CoordIndex (name); - free(name); -} - +} -CCTK_REAL CCTK_CoordOrigin(const char *name) +struct Coordprops *CCTKi_CoordData(const char *name) { int handle; struct Coordprops *coord; @@ -373,7 +535,7 @@ CCTK_REAL CCTK_CoordOrigin(const char *name) if (coord) { if (CCTK_Equals(name,(const char *)coord->name)) - return coord->origin; + return coord; } else { @@ -382,49 +544,83 @@ CCTK_REAL CCTK_CoordOrigin(const char *name) sprintf(msg,"Could not find registered coordinate %s",name); CCTK_WARN(2,msg); if (msg) free(msg); - return ERROR_COORDNOTFOUND; + return NULL; } } +} + + + + +/* DEPRECATED 4.0b5 */ + +int CCTK_RegisterCoordI(int dir, int index, const char*name) +{ + return CCTK_CoordRegisterI(dir,index,name); } +void FMODIFIER FORTRAN_NAME(CCTK_RegisterCoord)(int *handle, int *dir, TWO_FORTSTRINGS_ARGS) +{ + TWO_FORTSTRINGS_CREATE(gf,name) + *handle = CCTK_RegisterCoord(*dir, gf, name); + free(gf); + free(name); +} -int CCTK_CoordRange(cGH *GH, CCTK_REAL *lower, CCTK_REAL *upper, const char *name) +int CCTK_RegisterCoordRange(cGH *GH, + CCTK_REAL min, + CCTK_REAL max, + const char *coordname) { - coord_range *curr; + return CCTK_CoordRegisterRange(GH,min,max,coordname); +} - for (curr=first;curr;curr=curr->next) - { +void FMODIFIER FORTRAN_NAME(CCTK_RegisterCoordRange)(cGH *GH, + CCTK_REAL *lower, + CCTK_REAL *upper, + ONE_FORTSTRING_ARG) +{ + ONE_FORTSTRING_CREATE(name) + CCTK_RegisterCoordRange (GH,*lower,*upper,name); + free(name); +} -#ifdef DEBUG_COORD - printf("name = %s, currname = %s\n",name,curr->props->name); -#endif +int CCTK_RegisterCoord(int dir, + const char *gfname, + const char *coordname) +{ + return CCTK_CoordRegister(dir,gfname,coordname); +} - if (curr->GH == GH && CCTK_Equals(name,curr->props->name)) - { - *lower = curr->lower; - *upper = curr->upper; +/* DEPRECATED */ -#ifdef DEBUG_COORD - printf("Returning range (%f,%f) for %s (from %x)\n",*lower,*upper,name,curr); -#endif +CCTK_REAL CCTK_CoordOrigin(const char *name) +{ + int handle; + struct Coordprops *coord; - return 0; + for (handle = 0;;handle++) + { + coord = (struct Coordprops *)Util_GetHandledData(coordinates, handle); + if (coord) + { + if (CCTK_Equals(name,(const char *)coord->name)) + return coord->origin; } + else + { + char *msg; + msg = (char *)malloc( 100*sizeof(char)+strlen(name) ); + sprintf(msg,"Could not find registered coordinate %s",name); + CCTK_WARN(2,msg); + if (msg) free(msg); + return ERROR_COORDNOTFOUND; + } + } - return -1; } -void FMODIFIER FORTRAN_NAME(CCTK_CoordRange)(int *ierr, - cGH *GH, - CCTK_REAL *lower, - CCTK_REAL *upper, - ONE_FORTSTRING_ARG) -{ - ONE_FORTSTRING_CREATE(name) - *ierr = CCTK_CoordRange (GH,lower,upper,name); - free(name); -} |