C FORTRAN TEMPLATE FOR FILE= syn.nc PARAMETER (NVARS=11) !NUMBER OF VARIABLES C VARIABLE IDS RUN SEQUENTIALLY FROM 1 TO NVARS= 18 INTEGER RCODE CHARACTER*50 long_name(nvars) CHARACTER*180 name(200) C ****VARIABLES FOR THIS NETCDF FILE**** C CHARACTER*1 stnName ( 6, 100000) INTEGER wmoId (100000) REAL Lat (100000) REAL Lon (100000) REAL T (100000) REAL TD (100000) REAL SLP (100000) INTEGER DIR (100000) INTEGER SPD (100000) INTEGER elev (100000) INTEGER time_obs (100000) INTEGER time_nominal (100000) CHARACTER outstg*200 C************************************* character*80 input_file INTEGER START(11) INTEGER COUNT(11) INTEGER VDIMS(11) !ALLOW UP TO 11 DIMENSIONS CHARACTER*31 DUMMY CHARACTER*4 YEAR CHARACTER*3 JDATE C C LONG NAMES FOR EACH VARIABLE C data long_name/ *'Station name ', *'WMO Identification number ', *'Station latitude ', *'Station longitude ', *'Air temperature to tenths ', *'Dew-point Air temperature to tenths ', *'Sea level pressure ', *'Humidity ', *'Highest mean wind speed ', *'Elevation of station ', *'time of Observation '/ C write(6,1) 1 format(' enter your input file') read(5,2) input_file 2 format(a80) YEAR=input_file(8:11) JDATE=input_file(13:15) ilen=index(input_file,' ') ncid=ncopn(input_file(1:ilen-1),0,rcode) open(unit=21,file='syntext.out') print *,"1" C C statements to fill stn_name C ivarid = ncvid(ncid,'stnName ',rcode) CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE) LENSTR=1 DO 10 J=1,NVDIM CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE) LENSTR=LENSTR*NDSIZE START(J)=1 COUNT(J)=NDSIZE 10 CONTINUE CALL NCVGTC(NCID,ivarid,START,COUNT, +stnName ,LENSTR,RCODE) NSTATIONS=NDSIZE print *, "nstations=", NSTATIONS print *,"2" C C statements to fill wmoId C ivarid = ncvid(ncid,'wmoId ',rcode) CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE) LENSTR=1 DO 20 J=1,NVDIM CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE) LENSTR=LENSTR*NDSIZE START(J)=1 COUNT(J)=NDSIZE 20 CONTINUE CALL NCVGT(NCID,ivarid,START,COUNT, +wmoId ,LENSTR,RCODE) print *,"3" C C statements to fill lat C ivarid = ncvid(ncid,'Lat ',rcode) CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE) LENSTR=1 DO 30 J=1,NVDIM CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE) LENSTR=LENSTR*NDSIZE START(J)=1 COUNT(J)=NDSIZE 30 CONTINUE CALL NCVGT(NCID,ivarid,START,COUNT, +Lat ,RCODE) print *,"4" C C statements to fill lon C ivarid = ncvid(ncid,'Lon ',rcode) CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE) LENSTR=1 DO 40 J=1,NVDIM CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE) LENSTR=LENSTR*NDSIZE START(J)=1 COUNT(J)=NDSIZE 40 CONTINUE CALL NCVGT(NCID,ivarid,START,COUNT, +Lon ,RCODE) print *,"5" C C statements to fill T C ivarid = ncvid(ncid,'T ',rcode) CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE) LENSTR=1 DO 50 J=1,NVDIM CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE) LENSTR=LENSTR*NDSIZE START(J)=1 COUNT(J)=NDSIZE 50 CONTINUE CALL NCVGT(NCID,ivarid,START,COUNT, +T ,RCODE) print *,"6" C C statements to fill TD C ivarid = ncvid(ncid,'TD ',rcode) CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE) LENSTR=1 DO 60 J=1,NVDIM CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE) LENSTR=LENSTR*NDSIZE START(J)=1 COUNT(J)=NDSIZE 60 CONTINUE CALL NCVGT(NCID,ivarid,START,COUNT, +TD ,RCODE) print *,"7" C C statements to fill SLP C ivarid = ncvid(ncid,'SLP ',rcode) CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE) LENSTR=1 DO 70 J=1,NVDIM CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE) LENSTR=LENSTR*NDSIZE START(J)=1 COUNT(J)=NDSIZE 70 CONTINUE CALL NCVGT(NCID,ivarid,START,COUNT, +SLP ,RCODE) print *,"8" C C statements to fill humidity C ivarid = ncvid(ncid,'DIR ',rcode) CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE) LENSTR=1 DO 80 J=1,NVDIM CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE) LENSTR=LENSTR*NDSIZE START(J)=1 COUNT(J)=NDSIZE 80 CONTINUE CALL NCVGT(NCID,ivarid,START,COUNT, +DIR ,RCODE) print *,"9" C C statements to fill meanWind C ivarid = ncvid(ncid,'SPD ',rcode) CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE) LENSTR=1 DO 100 J=1,NVDIM CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE) LENSTR=LENSTR*NDSIZE START(J)=1 COUNT(J)=NDSIZE 100 CONTINUE CALL NCVGT(NCID,ivarid,START,COUNT, +SPD ,RCODE) print *,"10" C C statements to fill elev C ivarid = ncvid(ncid,'elev ',rcode) CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE) LENSTR=1 DO 106 J=1,NVDIM CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE) LENSTR=LENSTR*NDSIZE START(J)=1 COUNT(J)=NDSIZE 106 CONTINUE CALL NCVGT(NCID,ivarid,START,COUNT, +elev ,RCODE) print *,"12" C C statements to fill time nominal C ivarid = ncvid(ncid,'time_nominal ',rcode) CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE) LENSTR=1 DO 108 J=1,NVDIM CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE) LENSTR=LENSTR*NDSIZE START(J)=1 COUNT(J)=NDSIZE 108 CONTINUE CALL NCVGT(NCID,ivarid,START,COUNT, +time_nominal ,RCODE) print *,"12" C C statements to fill time obs C ivarid = ncvid(ncid,'time_obs ',rcode) CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE) LENSTR=1 DO 121 J=1,NVDIM CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE) LENSTR=LENSTR*NDSIZE START(J)=1 COUNT(J)=NDSIZE 121 CONTINUE CALL NCVGT(NCID,ivarid,START,COUNT, +time_obs ,RCODE) print *,"12" C C following code: checks output code code against current input file C C C call ncinq(ncid,ndims,nvarsc,ngatts,nrecdim,rcode) C if(nvarsc.ne.nvars) write(6,200) C 200 format('number of variables has changed') C C do 270 i=1,nvars C do 230 j=1,nvarsc C call ncagtc(ncid,j,'long_name',name(j), 180, rcode) C ilen=index(long_name(i),' ') C if(long_name(i)(1:ilen-1).eq.name(j)(1:ilen-1)) go to 270 C 230 continue C write(6,240) name(j) C 240 format('unknown variable ',a50) C write(6,250) C 250 format('rerun gennet') C stop C 270 continue print *,"13" CALL NCCLOS(NCID,RCODE) C C C HERE IS WHERE YOU WRITE STATEMENTS TO USE THE DATA C C id=0 C kt=0 C 799 kt=kt+1 C ilat=int(1000.*lat(kt)) C ilon=int(1000.*lon(kt)) C if ( ilat .eq. 43756 .and. ilon .eq. -71690 ) then C print *, "index is ", kt C id=kt C else C goto 799 C endif C HEADER OF ASCII OUTPUT FILE WRITE (UNIT=21, FMT='("#",85("-"))') write (unit=21, fmt='("#",a4,2x,a5,2x,a11,2x,a11,2x,a6, +2x,a7,2x,a5, +2x,a5,2x,a6,2x,a3,2x,a4)') 'WMOID','ELEV', +'TIMENOM','TIMEOBS','LAT','LON', +'TEMP','DPTMP','SLP','DIR','WSPD' WRITE (UNIT=21, FMT='("#",85("-"))') C TO OUTPUT ONLY YOUR STATION substitue your station lat lon C from 43756 and -71960 above to get id for your station C and comment out the do 930 loop - TVH do 930 id=1,NSTATIONS ipnt=(id-1)*ISIZE C ipnt=(id-1)*ISIZE write (UNIT=outstg, FMT=999) + wmoID(id),elev(id),time_nominal(id), + time_obs(id),lat(id),lon(id),T(id),TD(id), + SLP(id),DIR(id),SPD(id) DO y = 1,158 IF ( outstg (y:y) .eq. '*') THEN outstg (y:y) = '9' ENDIF ENDDO WRITE (UNIT = 21, FMT = '(A158)' ) outstg 930 continue 999 format (1i5,2X,i5,2x,i11,2x,i11,2x,1f6.2,2X,1f7.2, +2X,1f5.1,2X,1f5.1, +2X,1f6.1,2x,i3,2x,1f4.1) STOP END