/************************************************************** FUNCTION READSURFACES READSURFACES READS VARIABLES ON DENSITY SURFACES FROM FILE ***************************************************************/ readsurfaces_( int *denseparms, /* NUMBER OF STORED DENSITY SURFACE VARIABLES, INCLUDING PRESSURE ON SURFACE */ int *jj, /* SEQUENTIAL STATION NUMBER */ int *startpoint, /* PRESENT POSITION FILE POSITION */ int *fposfile, /* POSITION FILE ID NUMBER */ int *ireqpars, /* NUMBER OF REQUESTED VARIABLES */ int *ip2, /* VARIABLE CODES */ int *denserecord, /* DESIRED FILE POSITON FOR VARIABLES */ int *olddenserecord, /* PRESENT FILE POSITION FOR VARIABLES */ int *ioutfile, /* FILE IDS FOR VARIABLE FILES */ int *npot, /* SEQUENTIAL ORDER FOR PRESENT REFERENCE LEVEL */ int *maxpot, /* MAXIMUM NUMBER OF REFERENCE LEVELS */ float *densevar, /* VARIABLES ON DENSITY SURFACES */ int *maxsurf, /* MAXIMUM NUMBER OF DENSITY SURFACES */ int *maxparm, /* MAXIMUM NUMBER OF VARIABLES */ int *maxcal, /* MAXIMUM NUMBER OF MEASURED/CALCULATED VARIABLES */ int *jp, /* PROBE CODE */ int *nprec, /* RECORD POSITION FOR EACH VARIABLE */ int *ishallow, /* INDEX OF FIRST DENSITY SURFACE RECORD */ int *ideep, /* INDEX OF LAST DENSITY SURFACE RECORD */ int *numdense, /* TOTAL POSSIBLE DENSITY SURFACES */ float *missing, /* MISSING VALUE MARKER */ float *tooshallow, /* MARKER FOR DENSITY SURFACE TOO SHALLOW */ float *toodeep, /* MARKER FOR DENSITY SURFACE TOO DEEP */ int *ieof /* END OF FILE MARKER */ ) { int i,i0,i2,j,ivarfile,ivarpos,nlevels=0; float submissing, submissing2; long int size; /************************************************************* COMPUTE RECORD SIZE (NUMBER OF DENSITY SURFACE VARIABLES) DENSEPARMS INCLUDES PRESSURE ON DENSITY SURFACE VARIABLE **************************************************************/ size = (*denseparms +2) * sizeof(int); /************************************************************* POSITION POSITIONS FILE **************************************************************/ fseek( fp[*fposfile],( *jj - *startpoint ) * size , SEEK_CUR ); /**************************************************************** ADJUST PRESENT POSITIONS FILE PROFILE NUMBER (ADD ONE) ****************************************************************/ *startpoint = *jj + 1; /*************************************************************** WRITE OUT NUMBER OF DENSITY SURFACES WITH VALUES AND FIRST SURFACE WITH VALUE ****************************************************************/ fread( &nlevels, sizeof(int), 1, fp[*fposfile]); fread( ishallow, sizeof(int), 1, fp[*fposfile]); if ( *ishallow > 0 ) *ideep= (*ishallow + nlevels) -1; else *ideep=0; if ( feof(fp[*fposfile]) ) { *ieof = 1; return; } /*************************************************************** READ POSITIONS FOR EACH VARIABLE FROM POSITIONS FILE ****************************************************************/ fread( (denserecord+1), sizeof(int), *denseparms, fp[*fposfile]); /*************************************************************** START LOOP TO READ IN VARIABLES A -1 IN DENSERECORD MEANS NO DATA FOR VARIABLE ****************************************************************/ for ( i0=1; i0<= *ireqpars; i0++) { i = *(ip2+i0); i2 = *( nprec + (((*jp)-1) * *maxcal) + (i-1)); printf("i2 %d %d %d\n",i,i2, *(denserecord + i2)); if ( *(denserecord + i2) > -1 ) { /*************************************************************** GO TO DESIGNATED POSITION IN VARIABLE FILE ****************************************************************/ ivarfile= *(ioutfile+((*npot-1) * (*maxparm + 1)) + i); fseek( fp[ivarfile], (*(denserecord+i2) - *(olddenserecord+i2)) * sizeof(float), SEEK_CUR); /**************************************************************** READ VARIABLE DATA INTO ARRAY *****************************************************************/ ivarpos= ((i-1) * *maxsurf) + (*ishallow-1); fread( (densevar + ivarpos), sizeof(float), nlevels,fp[ivarfile]); *(olddenserecord+i2) = *(denserecord+i2)+ nlevels; *(denserecord+i2) = *(olddenserecord+i2); /**************************************************************** ENTER MISSING VALUES INTO NONUSED DENSITY SURFACES *****************************************************************/ submissing= *missing; submissing2= *missing; if ( *(densevar + ivarpos) > *toodeep && *(densevar + ivarpos) <= *tooshallow+1. ) submissing= *tooshallow; if ( *(densevar + ivarpos + (nlevels-1)) <= *toodeep +1. && *(densevar + ivarpos + (nlevels-1)) > *missing ) submissing2= *toodeep; ivarpos -= (*ishallow-1); for ( j = ivarpos; j < ivarpos + (*ishallow-1); j++ ) *(densevar + j) = submissing; ivarpos += (*ideep-1); for ( j = ivarpos+1; j < ivarpos + *numdense; j++) *(densevar + j) = submissing2; } } }