C FORTRAN TEMPLATE FOR FILE= metar.nc PARAMETER (NVARS=14) !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 station_id ( 4, 10000) INTEGER wmo_id (10000) REAL latitude (10000) REAL longitude (10000) REAL air_temperature (200000) REAL dew_point_temperature (200000) REAL inches_ALTIM (200000) REAL hectoPascal_ALTIM (200000) REAL air_pressure_at_sea_level (200000) INTEGER wind_speed (200000) CHARACTER*1 UNITS ( 3, 200000) INTEGER wind_from_direction (200000) INTEGER time_observation (200000) INTEGER altitude (200000) INTEGER parent_index (200000) CHARACTER outstg*200 C************************************* character*80 input_file INTEGER START(11),NREP,h 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 ', *'Wind Speed Units ', *'Numeric WMO Identifier ', *'Station latitude ', *'Station longitude ', *'Temperature to tenths ', *'Dew-point temperature to tenths ', *'Sea level pressure ', *'Wind Speed ', *'Wind Direction ', *'Observation hour ', *'Observation minute ', *'Observation day ', *'Station elevation '/ C write(6,1) 1 format(' enter your input file') read(5,2) input_file 2 format(a80) YEAR=input_file(15:18) c JDATE=input_file(13:15) ilen=index(input_file,' ') ncid=ncopn(input_file(1:ilen-1),0,rcode) open(unit=21,file='metartext.out') print *,"1" C C statements to fill stn_name C ivarid = ncvid(ncid,'station_id',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 c print *,"staname",NCID,J,START(J),COUNT(J) 10 CONTINUE CALL NCVGTC(NCID,ivarid,START,COUNT, +station_id,LENSTR,RCODE) NSTATIONS=NDSIZE print *, "nstations=", NSTATIONS print *,"2" C C statements to fill UNITS C c ivarid = ncvid(ncid,'units',rcode) c CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE) c LENSTR=1 c DO 15 J=1,NVDIM c CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE) c LENSTR=LENSTR*NDSIZE c START(J)=1 c COUNT(J)=NDSIZE c 15 CONTINUE c CALL NCVGTC(NCID,ivarid,START,COUNT, c +units ,LENSTR,RCODE) cC NSTATIONS=NDSIZE cC print *, "nstations=", NSTATIONS print *,"9" C C statements to fill parent_index C ivarid = ncvid(ncid,'parent_index',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,parent_index,RCODE) c print *,"8" print *,"3" C C statements to fill wmo_id C ivarid = ncvid(ncid,'wmo_id',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 c print *,"J" 20 CONTINUE CALL NCVGT(NCID,ivarid,START,COUNT, +wmo_id,LENSTR,RCODE) print *,"3" C C statements to fill lat C ivarid = ncvid(ncid,'latitude',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, +latitude,RCODE) print *,"4" C C statements to fill lon C ivarid = ncvid(ncid,'longitude',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, +longitude,RCODE) print *,"5" C C statements to fill T_tenths C ivarid = ncvid(ncid,'air_temperature',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,air_temperature,RCODE) print *,"6" C C statements to fill Td_tenths C ivarid = ncvid(ncid,'dew_point_temperature',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 NREP=NDSIZE c print *,"td",NCID,J,START(J),COUNT(J) 60 CONTINUE CALL NCVGT(NCID,ivarid,START,COUNT,dew_point_temperature,RCODE) print *,"7" C C statements to fill altimeter C ivarid = ncvid(ncid,'inches_ALTIM',rcode) CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE) LENSTR=1 DO 541 J=1,NVDIM CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE) LENSTR=LENSTR*NDSIZE START(J)=1 COUNT(J)=NDSIZE 541 CONTINUE CALL NCVGT(NCID,ivarid,START,COUNT,inches_ALTIM,RCODE) c print *,"8" C C statements to fill SLP C ivarid = ncvid(ncid,'hectoPascal_ALTIM',rcode) CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE) LENSTR=1 DO 545 J=1,NVDIM CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE) LENSTR=LENSTR*NDSIZE START(J)=1 COUNT(J)=NDSIZE 545 CONTINUE CALL NCVGT(NCID,ivarid,START,COUNT,hectoPascal_ALTIM,RCODE) c print *,"8" C C statements to fill MSLP C ivarid = ncvid(ncid,'air_pressure_at_sea_level',rcode) CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE) LENSTR=1 DO 555 J=1,NVDIM CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE) LENSTR=LENSTR*NDSIZE START(J)=1 COUNT(J)=NDSIZE 555 CONTINUE CALL NCVGT(NCID,ivarid,START,COUNT,air_pressure_at_sea_level, + RCODE) c print *,"8" C C statements to fill SPD C ivarid = ncvid(ncid,'wind_speed',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,wind_speed,RCODE) print *,"9" C C statements to fill DIR C ivarid = ncvid(ncid,'wind_from_direction',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 c print *,J,NVDIM,NDSIZE,START(J),COUNT(J) 100 CONTINUE print *,"here1" CALL NCVGT(NCID,ivarid,START,COUNT,wind_from_direction,RCODE) print *,"12" C C statements to fill ob_hour C ivarid = ncvid(ncid,'time_observation',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 c print *,"here" CALL NCVGT(NCID,ivarid,START,COUNT,time_observation,RCODE) print *,"12" c c statemetns to fill altitude c ivarid = ncvid(ncid,'altitude',rcode) CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE) LENSTR=1 DO 104 J=1,NVDIM CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE) LENSTR=LENSTR*NDSIZE START(J)=1 COUNT(J)=NDSIZE 104 CONTINUE CALL NCVGT(NCID,ivarid,START,COUNT,altitude,RCODE) print *,"13" ivarid =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='("#",145("-"))') write (unit=21, fmt='("#",a3,2x,a5,2x,a5,2x,a10,2x,a5, +2x,a7,2x,a5, +2x,a5,2x,a5,2x,a3,2x,a8,2x,a8,2x,a6)') + 'STA','WMOID','ELEV', +'ObsTime','LAT','LON', +'T','TD','SPD','DIR','SLP','MSLP','ALTIM' WRITE (UNIT=21, FMT='("#",145("-"))') 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,NREP ipnt=(id-1)*ISIZE C ipnt=(id-1)*ISIZE h=parent_index(id) write (UNIT=outstg, FMT=999) (station_id(j,h),j=1,4), + wmo_id(h),altitude(id),time_observation(id), + latitude(h),longitude(h),air_temperature(id), + dew_point_temperature(id), + wind_speed(id),wind_from_direction(id),hectoPascal_ALTIM(id), + air_pressure_at_sea_level(id),inches_ALTIM(id) 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 (4a1,2X,1i5,2x,i5,2X,i10,2x,1f6.2,2X,1f7.2, +2X,1f5.1,2X,1f5.1, +2X,1f5.1,2X,1i3,2X,1f8.2,2X,1f8.2,2X,1f6.2) STOP END