/* gridpt2record.c */ /* ----------------------- * INPUT FILE: geog3.nc * OUTPUT: STDOUT * ----------------------- */ /* nanr - updated 27may98 */ #include #include #include /* >>>>>> VEMAP USER's ----- Customize pathnames here ---- */ /* Meeteetse path */ #include "/contrib/netcdf-3.4/include/netcdf.h" void grid(int gridpt, int *row, int *col, float *olat, float *olon); void background(int row,int col,int gridpt,int *startpos); int main(argc, argv) int argc; char *argv[]; { /* Grid variables */ int gridpt; /* For VEMAP US Grid 1 thru 5520 */ int startpos; /* Gridpt record position */ int row; /* Row number */ int col; /* Column number */ float olat; /* cell center latitude */ float olon; /* cell center longitude */ /* --- Command line instructions --- */ if(argc != 2) { printf("syntax is \n"); printf("example: a.out 480 \n"); return(0); } gridpt = atoi(argv[1]); if(gridpt > 5520 || gridpt <= 0) { printf("\n Grid cell %d is out of range. \n\n",gridpt); printf(" Grid cells number from 1->5520. \n"); printf(" Note that grid cell number WILL NOT equal \n"); printf(" record number or netCDF position index.\n\n"); printf(" e.g. RECORD NUMBER for gridcell 6 = 3\n\n"); printf(" netCDF position index for Record 3: \n"); printf(" C = 2 \n"); printf(" Fortran = 3\n\n"); exit(1); } /* --- Translate gridpoint --- */ /* (1) latitude/longitude */ /* (2) row and column */ grid(gridpt,&row,&col,&olat,&olon); /* ---------Screen for background point ------*/ background(row,col,gridpt,&startpos); if(startpos == -9999) { printf("%5d is a background point %d \n",gridpt,startpos); exit(0); } else { /* --- Print gridpoint information --- */ printf(" gridcell = %d\n", gridpt); printf(" row = %d\n", row); printf(" column = %d\n", col); printf(" latitude = %6.2f\n", olat); printf(" longitude = %6.2f\n", olon); printf(" record number = %d\n\n", startpos); printf(" Records number from 1->3261\n"); printf(" Recall that record number does not\n"); printf(" necessarily equal netCDF position index:\n\n"); printf(" netCDF position index: \n"); printf(" C = %d \n",startpos-1); printf(" Fortran = %d\n\n",startpos); printf("-----------------------------------------\n"); exit(0); } } /*------------------------------------------------------------*/ void grid(int gridpt, int *row, int *col, float *olat, float *olon) { /* Program converts gridpoint to 2D matrix (row and col) */ /* and returns gridcell center latitude and longitude. */ /* nanr 12-4-95 */ int z; for (z=0; z<48; z++) { if ((gridpt > z*115) && (gridpt <= (z+1)*115)) { *row = z+1; *col = gridpt-z*115; } } *olat = 49.0 + (0.5 * (1 - *row)) - 0.25; *olon = 124.5 + (0.5 * (1 - *col)) - 0.25; return; } /*------------------------------------------------------------*/ void background(int row,int col,int gridpt,int *startpos) { int backgrpt=0, datapt=0, sum=0; int varid, ncid; int nrows=48, ncols=115; int irow=0, i=0; long int count[2] = {1, 115}; long int start[2]; short var[115]; FILE *fopen(), *fp_in; if(!(ncid = ncopen("geog3.nc",NC_NOWRITE))) { printf("ERROR: Can't find 'geog3.nc' file. \n"); exit(0); } varid = ncvarid(ncid, "mask"); while(irow < row) { start[0] = irow; start[1] = 0; count[0] = 1; count[1] = ncols; ncvarget(ncid, varid, start, count, var); if(irow