C     FORTRAN TEMPLATE FOR FILE= suomi.nc
      PARAMETER (NVARS=19) !NUMBER OF VARIABLES
C     VARIABLE IDS RUN SEQUENTIALLY FROM 1 TO NVARS= 18
      INTEGER RCODE
      CHARACTER*4, stationtest
      CHARACTER*50 long_name(nvars)
      CHARACTER*180 name(200)
C     ****VARIABLES FOR THIS NETCDF FILE****
C
      CHARACTER*1 station                        (    4,  200)
      DOUBLE PRECISION time_offset               (  48)
      DOUBLE PRECISION network_id               (  200)
      REAL*8      lat                            (  200)
      REAL*8      lon                            (  200)
      REAL*8      height                         (  200)
      REAL      duration                       ( 9600)
      REAL      pwv                            ( 9600)
      REAL      pwv_err                        ( 9600)
      REAL      wet_delay                      ( 9600)
      REAL      model_dry_delay                ( 9600)
      REAL      total_delay                    ( 9600)
      REAL      pifact                         (  9600)
      REAL      pres                           (  9600)
      REAL      temperature                    ( 9600)
      REAL      rh                             ( 9600)
      REAL      final_dry_delay                (  9600)
      CHARACTER*1 met_flag                       ( 9600)
      CHARACTER*1 pifact_type                    ( 9600)
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/
     *'GPS station name                                  ',
     *'Time delta from start_time                        ',
     *'Station latitude                                  ',
     *'Station longitude                                 ',
     *'Station Height above mean sea level (JGM2 geoid)  ',
     *'Network ID: \n',
     *'Duration of validity of measurement               ',
     *'Precipitable Water Vapor                          ',
     *'Precipitable Water Vapor format error             ',
     *'Wet Delay                                         ',
     *'Dry Delay from model                              ',
     *'Total Delay                                       ',
     *'Pi factor (conversion between wet delay and PWV)  ',
     *'Surface atmospheric pressure                      ',
     *'Surface temperature                               ',
     *'Surface relative humidity                         ',
     *'Final dry delay                                   ',
     *'MET Flag (A = actual MET values used, I = Interpol',
     *'PI factor type (S = surface temp. coefficients use'/
C
C      write(6,1)
C 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)
C
C    statements to fill station
C
      ivarid = ncvid(ncid,'station                        ',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,
     +station                        ,LENSTR,RCODE)
      NSTATIONS=NDSIZE
C
C    statements to fill time_offset
C
      ivarid = ncvid(ncid,'time_offset                    ',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)
Cdbg      write(6,*) 'time_offset size if', NDSIZE
      ISIZE=NDSIZE
      LENSTR=LENSTR*NDSIZE
      START(J)=1
      COUNT(J)=NDSIZE
  20  CONTINUE
      CALL NCVGT(NCID,ivarid,START,COUNT,
     +time_offset                    ,RCODE)
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)
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)
C
C    statements to fill height
C
      ivarid = ncvid(ncid,'height                         ',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,
     +height                         ,RCODE)
C
C    statements to fill duration
C
      ivarid = ncvid(ncid,'duration                       ',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)
Cdbg      write(6,*) 'duration size if', NDSIZE
      LENSTR=LENSTR*NDSIZE
      START(J)=1
      COUNT(J)=NDSIZE
  60  CONTINUE
      CALL NCVGT(NCID,ivarid,START,COUNT,
     +duration                       ,RCODE)
C
C    statements to fill pwv
C
      ivarid = ncvid(ncid,'pwv                            ',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,
     +pwv                            ,RCODE)
C
C    statements to fill pwv_err
C
      ivarid = ncvid(ncid,'pwv_err                        ',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,
     +pwv_err                        ,RCODE)
C
C    statements to fill wet_delay
C
      ivarid = ncvid(ncid,'wet_delay                      ',rcode)
      CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE)
      LENSTR=1
      DO  90 J=1,NVDIM
      CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE)
      LENSTR=LENSTR*NDSIZE
      START(J)=1
      COUNT(J)=NDSIZE
  90  CONTINUE
      CALL NCVGT(NCID,ivarid,START,COUNT,
     +wet_delay                      ,RCODE)
C
C    statements to fill model_dry_delay
C
      ivarid = ncvid(ncid,'model_dry_delay                ',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,
     +model_dry_delay                ,RCODE)
C
C    statements to fill total_delay
C
      ivarid = ncvid(ncid,'total_delay                    ',rcode)
      CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE)
      LENSTR=1
      DO 110 J=1,NVDIM
      CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE)
      LENSTR=LENSTR*NDSIZE
      START(J)=1
      COUNT(J)=NDSIZE
 110  CONTINUE
      CALL NCVGT(NCID,ivarid,START,COUNT,
     +total_delay                    ,RCODE)
C
C    statements to fill pifact
C
      ivarid = ncvid(ncid,'pifact                         ',rcode)
      CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE)
      LENSTR=1
      DO 120 J=1,NVDIM
      CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE)
      LENSTR=LENSTR*NDSIZE
      START(J)=1
      COUNT(J)=NDSIZE
 120  CONTINUE
      CALL NCVGT(NCID,ivarid,START,COUNT,
     +pifact                         ,RCODE)
C
C    statements to fill pres
C
      ivarid = ncvid(ncid,'pres                           ',rcode)
      CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE)
      LENSTR=1
      DO 130 J=1,NVDIM
      CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE)
      LENSTR=LENSTR*NDSIZE
      START(J)=1
      COUNT(J)=NDSIZE
 130  CONTINUE
      CALL NCVGT(NCID,ivarid,START,COUNT,
     +pres                           ,RCODE)
C
C    statements to fill temperature
C
      ivarid = ncvid(ncid,'temperature                    ',rcode)
      CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE)
      LENSTR=1
      DO 140 J=1,NVDIM
      CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE)
      LENSTR=LENSTR*NDSIZE
      START(J)=1
      COUNT(J)=NDSIZE
 140  CONTINUE
      CALL NCVGT(NCID,ivarid,START,COUNT,
     +temperature                    ,RCODE)
C
C    statements to fill rh
C
      ivarid = ncvid(ncid,'rh                             ',rcode)
      CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE)
      LENSTR=1
      DO 150 J=1,NVDIM
      CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE)
      LENSTR=LENSTR*NDSIZE
      START(J)=1
      COUNT(J)=NDSIZE
       NPWV=NDSIZE
 150  CONTINUE
      CALL NCVGT(NCID,ivarid,START,COUNT,
     +rh                             ,RCODE)
C
C    statements to fill final_dry_delay
C
      ivarid = ncvid(ncid,'final_dry_delay                ',rcode)
      CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE)
      LENSTR=1
      DO 160 J=1,NVDIM
      CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE)
      LENSTR=LENSTR*NDSIZE
      START(J)=1
      COUNT(J)=NDSIZE
 160  CONTINUE
      CALL NCVGT(NCID,ivarid,START,COUNT,
     +final_dry_delay                ,RCODE)
C
C    statements to fill met_flag
C
      ivarid = ncvid(ncid,'met_flag                       ',rcode)
      CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE)
      LENSTR=1
      DO 170 J=1,NVDIM
      CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE)
      LENSTR=LENSTR*NDSIZE
      START(J)=1
      COUNT(J)=NDSIZE
 170  CONTINUE
      CALL NCVGTC(NCID,ivarid,START,COUNT,
     +met_flag                       ,LENSTR,RCODE)
C
C    statements to fill pifact_type
C
      ivarid = ncvid(ncid,'pifact_type                    ',rcode)
      CALL NCVINQ(NCID,ivarid,DUMMY,NTP,NVDIM,VDIMS,NVS,RCODE)
      LENSTR=1
      DO 180 J=1,NVDIM
      CALL NCDINQ(NCID,VDIMS(J),DUMMY,NDSIZE,RCODE)
      LENSTR=LENSTR*NDSIZE
      START(J)=1
      COUNT(J)=NDSIZE
 180  CONTINUE
      CALL NCVGTC(NCID,ivarid,START,COUNT,
     +pifact_type                    ,LENSTR,RCODE)

C
C     following code: checks output code code against current input file
C
C
      call ncinq(ncid,ndims,nvarsc,ngatts,nrecdim,rcode)
      if(nvarsc.ne.nvars) write(6,200)
  200 format('number of variables has changed')
C
      do 270 i=1,nvars
      do 230 j=1,nvarsc
      call ncagtc(ncid,j,'long_name',name(j), 180, rcode)
      ilen=index(long_name(i),'   ')
      if(long_name(i)(1:ilen-1).eq.name(j)(1:ilen-1)) go to 270
  230 continue
      write(6,240) name(j)
  240 format('unknown variable ',a50)
      write(6,250)
  250 format('rerun gennet')
      stop
  270 continue
C
      CALL NCCLOS(NCID,RCODE)
C
C
C     HERE IS WHERE YOU WRITE STATEMENTS TO USE THE DATA
C
        my_num=0
C 799   kt=kt+1
C       ilat=int(1000.*lat(kt))
C        print *, "lat and kt is", ilat,kt
C       ilon=int(1000.*lon(kt))
C        print *, "lon and kt is", ilon,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
CCC REPLACE  ORIG GOTO with a do loop and use station id 
CCC   rather than station's lat and longitudes
         do ist=1,NSTATIONS
             write(stationtest,'(4a1)') (station(j,ist),j=1,4)
              if (stationtest .eq. "SA00") then
                my_num = ist
              endif
         enddo
C HEADER OF ASCII OUTPUT FILE
CCCC Adjust if printing other variables
      print *," YEAR DATE  TIME    LAT     LON    PWV     PRES",
     +"    TEMP     RH STATION"
C  TO OUTPUT ONLY YOUR STATION substitue your station id
C   for SA00 above to get id for your station 
C   and comment out the do 930 loop - TVH
      do 930  id=1,NSTATIONS
CC -for printing one station only uncommment this section to check if 
CC  yourstation was in the netcdf file and print its data if it was
C1stn      if (my_num .GT. 0) then
C1stn           id = my_num
C1stn      else 
C1stn            print *, "SORRY STATION NOT PRESENT IN NETCDF FILE"
C1stn            goto  997
C1st       endif
         ipnt=(id-1)*ISIZE
        do 900, i=1,ISIZE
          ipnt=(id-1)*ISIZE
CCCC defaulat print statement- adjust this and the 939 format statement
CCCCC if desired to print other variables
          print 939, YEAR,JDATE,time_offset(i)/3600.,lat(id),lon(id),
     +    pwv(ipnt+i)/10.,pres(ipnt+i),temperature(ipnt+i),rh(ipnt+i),
     +    (station(j,id),j=1,4)
C        do 900, i=1,48
CCC -old from unidata that would not adjust to other size arrays than 48
C     +    pwv(i,id)/10.,pres(i,id),temperature(i,id),rh(i,id),
CCCCC -end old from unidata
  900   continue
  930 continue
  939  format (2X,1a4,2X,1a3,2X,1f4.1,2X,1f6.2,2X,1f7.2,2X,1f5.2,
     +2X,1f7.2,2X,1f6.2,2X,1f5.1,2x,4a1)
C
C
997   CONTINUE
      STOP
      END
