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