/************************************************************************ INSTRUCTIONS FOR READING MEAN PARAMETER DATA ON A LATITUDE-LONGITUDE GRID Ocean Climate Laboratory National Oceanographic Data Center XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX FORMAT FOR READING DATA XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Program will print a five grid square box based of user specified longitude, latitude, and depth. The latitude and longitude entered will be the center grid point in the box. This program works for one-degree and five-degree data Constant descriptions idim=longitude jdim=latitude kdim=standard depth levels 33 Standard level depths (in meters): 0,10,20,30,50,75,100,125,150,200,250,300,400,500,600,700,800,900,1000, 1100,1200,1300,1400,1500,1750,2000,2500,3000,3500,4000,4500,5000,5500 Annual and seasonal analyzed fields contain 33 levels (0-5500 m) Monthly analyzed fields contain 24 levels (0-1500 m) Units: degrees celsius for temperature practical salinity scale for salinity milliliters/liter for oxygen micro mole per liter for nutrients temperature is in situ temperature Land value= -99.9999 for f8.4 read files = -100. for f8.0 read files *****************************************************************/ #include #include #include #define idim0 360 #define jdim0 180 float dat[idim0 * jdim0]; main() { FILE *fp; char filename[80]; int i0, i, j, k, ispace, idim, jdim; int lon,lat,ifield,itype,kx; int jstart,jend,istart,iend; float rlon,rlat,space; /************************************************* OPEN FILE **************************************************/ puts(" Enter file name\0"); gets(filename); printf(" %s\n",filename); if ((fp = fopen(filename,"rb+\0")) == NULL) printf("UNABLE TO OPEN FILE\n"); else { /************************************************* GET NECESSARY INFORMATION **************************************************/ printf("Enter file type:\n"); printf(" 0: analyzed field (an)\n"); printf(" 1: points within radius of influence field (gp)\n"); printf(" 2: data distribution (dd)\n"); printf(" 3: raw (unanalyzed) mean fields (mn)\n"); printf(" 4: standard deviation field (sd)\n"); printf(" 5: standard error of the mean field (se)\n"); printf(" 6: minus annual field (ma)\n"); printf(" 7: observed minus annual field (oa)\n"); printf(" 8: basin mask or landsea mask (*.msk)\n> "); scanf("%d",&ifield); /*************************************************** Fields 2, 3, 4 & 5 may be five degree files Fields 1,2 & 8 values are stored as f8.0, land=-100. (if applicable) Fields 0,3,4,5,6, & 7 are stored as f8.4, land=-99.9999 *****************************************************/ if ( ifield >= 2 && ifield <= 5 ) { printf("Enter (1) for one-degree grid, (5) for five-degree grid\n>"); scanf("%d",&ispace); } else ispace=1; if ( ispace == 5 ) { idim=idim0/5; jdim=jdim0/5; space=5.; } else { idim=idim0; jdim=jdim0; space=1.; } if ( ifield == 1 || ifield == 2 || ifield == 8 ) itype=0; else itype=1; printf("\nDepth Level (1-33) ?\n> "); scanf("%d",&kx); /************************************************* READ IN DATA **************************************************/ for ( k = 1; k <= kx; k++ ) { for ( j = 0; j < jdim; j++ ) { for ( i = 0; i < idim; i++ ) fscanf( fp, "%f", ( dat + ( j * idim ) + i ) ); } } /************************************************** PROMPT FOR WHICH AREA TO WRITE TO SCREEN **************************************************/ printf("\n Enter latitude center for area to print (-90 to 90)\n> "); scanf("%f",&rlat); printf("\n Enter longitude center for area to print (-180 to 180)\n> "); scanf("%f",&rlon); lat=((rlat+90.)/(space+1.E-7))+1; if (rlon <= 0 ) lon=((rlon+360.)/(space+1.E-7))+1; else lon=(rlon/(space+1.E-7))+1; printf("\n lon-lat point (%.1f,%.1f) = grid point (%d,%d)\n", rlon,rlat,lon,lat); /************************************************** DISPLAY AREA **************************************************/ istart= lon -4; iend= lon+5; jstart= lat-4; jend=lat+5; printf("\n Values for depth level %d\n\n ",kx); printf("GRID "); for ( i0 = istart; i0 <= iend; i0++ ) { if ( i0 > 0 && i0 <= idim ) i = i0; else if ( i0 <= 0 ) i= i0+idim; else i= i0-idim; printf(" %3d",i); } printf("\n "); if ( istart <= 0 ) istart= istart+idim; if ( iend > idim ) iend=iend-idim; for ( j = jend-1; j >= jstart-1; j-- ) { printf("\n %3d ",j+1); if ( iend > istart ) { for ( i = istart-1; i < iend; i++ ) printf("%7.2f",*(dat+ (j*idim) + i) ); } else { for ( i = istart-1; i < idim; i++ ) printf("%7.2f",*(dat+ (j*idim) + i) ); for ( i = 0; i < iend; i++ ) printf("%7.2f",*(dat+ (j*idim) + i) ); } } printf("\n \n "); } }