C FORTRAN TEMPLATE FOR FILE= buoy.nc PARAMETER (NVARS=13) !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 ship ( 5, 100000) INTEGER buoy (100000) INTEGER time_obs (100000) REAL Lat (100000) REAL Lon (100000) REAL T (100000) REAL TD (100000) REAL SLP (100000) INTEGER DIR (100000) REAL SPD (100000) REAL Tw (100000) INTEGER Pwa (100000) INTEGER Hwa (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/ *'Ship call ', *'Buoy number ', *'time of Observation ', *'Station latitude ', *'Station longitude ', *'Air temperature to tenths ', *'Dew-point Air temperature to tenths ', *'Sea level pressure ', *'Humidity ', *'Highest mean wind speed ', *'Water Temperature to tenths ', *'Period of waves ', *'Height of waves '/ 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='buoytext.out') print *,"1" C C statements to fill ship C ivarid = ncvid(ncid,'ship ',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, +ship ,LENSTR,RCODE) NSTATIONS=NDSIZE print *, "nstations=", NSTATIONS print *,"2" C C statements to fill buoy C ivarid = ncvid(ncid,'buoy ',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, +buoy ,LENSTR,RCODE) print *,"3" 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 22 J=1,NVDIM CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE) LENSTR=LENSTR*NDSIZE START(J)=1 COUNT(J)=NDSIZE 22 CONTINUE CALL NCVGT(NCID,ivarid,START,COUNT, +time_obs ,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 Tw C ivarid = ncvid(ncid,'Tw ',rcode) CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE) LENSTR=1 DO 103 J=1,NVDIM CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE) LENSTR=LENSTR*NDSIZE START(J)=1 COUNT(J)=NDSIZE 103 CONTINUE CALL NCVGT(NCID,ivarid,START,COUNT, +Tw ,RCODE) print *,"10" C C statements to fill Pwa C ivarid = ncvid(ncid,'Pwa ',rcode) CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE) LENSTR=1 DO 105 J=1,NVDIM CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE) LENSTR=LENSTR*NDSIZE START(J)=1 COUNT(J)=NDSIZE 105 CONTINUE CALL NCVGT(NCID,ivarid,START,COUNT, +Pwa ,RCODE) print *,"10" C C statements to fill Hwa C ivarid = ncvid(ncid,'Hwa ',rcode) CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE) LENSTR=1 DO 107 J=1,NVDIM CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE) LENSTR=LENSTR*NDSIZE START(J)=1 COUNT(J)=NDSIZE 107 CONTINUE CALL NCVGT(NCID,ivarid,START,COUNT, +Hwa ,RCODE) print *,"10" 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='("#",90("-"))') write (unit=21, fmt='("#",a5,2x,a11,2x,a6, +2x,a7,2x,a5, +2x,a5,2x,a6,2x,a3,2x,a4,2x,a5,2x,a3,2x,a3,2x,a4)') +'BUOY','TIMEOBS', +'LAT','LON', +'TEMP','DPTEMP','SLP','DIR','WSPD','WaterT', +'PER','HGT','SHIP' WRITE (UNIT=21, FMT='("#",90("-"))') 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) + buoy(id),time_obs(id), + lat(id),lon(id),T(id),TD(id), + SLP(id),DIR(id),SPD(id),Tw(id),Pwa(id), + Hwa(id),(ship(j,id),j=1,5) DO y = 1,145 IF ( outstg (y:y) .eq. '*') THEN outstg (y:y) = '9' ENDIF ENDDO WRITE (UNIT = 21, FMT = '(A145)' ) outstg 930 continue 999 format (i6,2x,i11,2x,1f6.2,2X,1f7.2, +2X,1f5.1,2X,1f5.1, +2X,1f6.1,2x,i3,2x,1f4.1,2x,f5.1,2x, +i3,2x,i3,2x,5a1) STOP END