PROGRAM read_obs

IMPLICIT NONE

character*14 :: date_char
character*40 :: platform
character*40 :: source
character*40 :: id
character*40 :: namef

logical      :: is_sound
logical      :: bogus

integer      :: idate
integer      :: imm
integer      :: iss
integer      :: meas_count

real         :: latitude
real         :: longitude
real         :: elevation

real         :: pressure_data,    pressure_qc
real         :: height_data,      height_qc
real         :: temperature_data, temperature_qc
real         :: u_met_data,       u_met_qc
real         :: v_met_data,       v_met_qc
real         :: rh_data,          rh_qc
real         :: slp_data,         slp_qc
real         :: ref_pres_data,    ref_pres_qc
real         :: psfc_data,        psfc_qc
real         :: precip_data,      precip_qc

logical      :: iprt = .true.
logical      :: more_obs = .true.
integer      :: n = 0
integer      :: imc

OPEN(99,FILE='OBS_DOMAIN',FORM='FORMATTED',STATUS='OLD')

DO WHILE (more_obs) 

  read(99,101,end=111,err=111) date_char
  n=n+1
  read(date_char(3:10),'(i8)')idate
  read(date_char(11:12),'(i2)')imm
  read(date_char(13:14),'(i2)')iss
 
  if(iprt) then
    write(6,'(a,i8,a,i4,a,i4)') 'timestamp date: ', idate,   &
                                '       minutes: ', imm,     &
                                '       seconds: ', iss
  endif

  read(99,102) latitude, longitude

  if(iprt) then
    write(6,'(a,f7.2,a,f7.2)') 'Latitude: ',latitude,        &
                             '  Longitude: ',longitude
  endif

  read(99,1021) id, namef
  read(99,103) platform, source, elevation, is_sound, bogus, meas_count

  if(iprt) write(6,*) 'is_sound = ',is_sound,' meas_count = ',meas_count

  if (is_sound) then           ! THIS PART READS SOUNDING INFO
    do imc=1,meas_count

      read(99,104) pressure_data,    pressure_qc,            &
                   height_data,      height_qc,              &
                   temperature_data, temperature_qc,         &
                   u_met_data,       u_met_qc,               &
                   v_met_data,       v_met_qc,               &
                   rh_data,          rh_qc
  
      if(iprt) then
        write(6,*) '*** SOUNDING INFO ***'
        write(6,*) 'imc = ',imc
        write(6,106) ' pressure_data,    pressure_qc,    ',pressure_data, pressure_qc
        write(6,106) ' height_data,      height_qc:      ',height_data, height_qc
        write(6,106) ' temperature_data, temperature_qc: ',temperature_data, temperature_qc
        write(6,106) ' u_met_data,       u_met_qc:       ',u_met_data, u_met_qc
        write(6,106) ' v_met_data,       v_met_qc:       ',v_met_data, v_met_qc
        write(6,106) ' rh_data,          rh_qc:          ',rh_data, rh_qc
      endif
    enddo

  elseif (.NOT.is_sound) then  ! THIS PART READS NON-SOUNDING INFO

    read(99,105) slp_data,         slp_qc,                 &
                 ref_pres_data,    ref_pres_qc,            &
                 height_data,      height_qc,              &
                 temperature_data, temperature_qc,         &
                 u_met_data,       u_met_qc,               &
                 v_met_data,       v_met_qc,               &
                 rh_data,          rh_qc,                  &
                 psfc_data,        psfc_qc,                &
                 precip_data,      precip_qc

    if(iprt) then
      write(6,*) '*** NON-SOUNDING INFO ***'
      write(6,106) ' slp_data,         slp_qc:         ',slp_data, slp_qc
      write(6,106) ' ref_pres_data,    ref_pres_qc:    ',ref_pres_data, ref_pres_qc 
      write(6,106) ' height_data,      height_qc:      ',height_data, height_qc
      write(6,106) ' temperature_data, temperature_qc: ',temperature_data, temperature_qc
      write(6,106) ' u_met_data,       u_met_qc:       ',u_met_data, u_met_qc
      write(6,106) ' v_met_data,       v_met_qc:       ',v_met_data, v_met_qc
      write(6,106) ' rh_data,          rh_qc:          ',rh_data, rh_qc
      write(6,106) ' psfc_data,        psfc_qc:        ',psfc_data, psfc_qc
      write(6,106) ' precip_data,      precip_qc:      ',precip_data, precip_qc
    endif

    else
      print *,' ======  '
      print *,' NO Data Found '
    endif                         ! END if (is_sound)

ENDDO

111 continue
if(iprt) write(6,*) 'Total number of obs read: ', N

     

101  FORMAT(1x,a14)
102  FORMAT(2x,2(f7.2,3x))
1021 FORMAT(2x,2(a40,3x))
103  FORMAT( 2x,2(a16,2x),f8.0,2x,2(l4,2x),i5)
104  FORMAT( 1x,6(f11.3,1x,f11.3,1x))
105  FORMAT( 1x,9(f11.3,1x,f11.3,1x))
106  FORMAT( (a,5x,f11.3,3x,f11.3))

END PROGRAM read_obs

