c----------------------------------------------------------------------- c----------------------------------------------------------------------- program bufr2i3e character*8 subset dimension rdata(100) real*8 arr(10),chn(2,20) c----------------------------------------------------------------------- c----------------------------------------------------------------------- c initialize various constants lubfr = 20 lui3e = 51 nreal = 14 iwrot = 0 c read through the bufr tovs records converting each to i3e format call openbf(lubfr,'IN',lubfr) do while(ireadmg(lubfr,subset,idate).eq.0) do while(ireadsb(lubfr).eq.0) c rdata(1) = satellite id call ufbint(lubfr,arr,10,1,iret,'SAID') if(nint(arr(1)).eq.200) rdata(1) = 8 if(nint(arr(1)).eq.201) rdata(1) = 9 if(nint(arr(1)).eq.202) rdata(1) = 10 if(nint(arr(1)).eq.203) rdata(1) = 11 if(nint(arr(1)).eq.204) rdata(1) = 12 if(nint(arr(1)).eq.205) rdata(1) = 14 if(nint(arr(1)).eq.206) rdata(1) = 15 if(nint(arr(1)).eq.207) rdata(1) = 16 if(nint(arr(1)).eq.208) rdata(1) = 17 if(nint(arr(1)).eq.209) rdata(1) = 18 c rdata(2) = satellite instrument call ufbint(lubfr,arr,10,1,iret,'SIID') if(nint(arr(1)).eq.605) rdata(2) = 1 ! hirs/2 if(nint(arr(1)).eq.623) rdata(2) = 2 ! msu if(nint(arr(1)).eq.570) rdata(2) = 10 ! amsu-a if(nint(arr(1)).eq.574) rdata(2) = 11 ! amsu-b if(nint(arr(1)).eq.606) rdata(2) = 5 ! hirs/3 c rdata(3/4/5/6) = year/month/day/seconds from 00z call ufbint(lubfr,arr,10,1,iret,'YEAR MNTH DAYS HOUR MINU SECO') rdata(3) = nint(arr(1)) rdata(4) = nint(arr(2)) rdata(5) = nint(arr(3)) rdata(6) = nint(arr(4))*3600+nint(arr(5))*60+nint(arr(6)) c rdata(7) = land/sea qualifier call ufbint(lubfr,arr,10,1,iret,'LSQL') rdata(7) = mod(nint(arr(1))+1,2) c rdata(8) = field of view call ufbint(lubfr,arr,10,1,iret,'FOVN') rdata(8) = nint(arr(1)) c rdata(9/10) latitude/longitude call ufbint(lubfr,arr,10,1,iret,'CLAT CLON') rdata(9) = arr(1) rdata(10) = arr(2) c rdata(11/12) satellite/solar zenith angle call ufbint(lubfr,arr,10,1,iret,'SAZA SOZA') rdata(11) = arr(1) rdata(12) = arr(2) c rdata(13/14) height above landsfc/sealevel call ufbint(lubfr,arr,10,1,iret,'HOLS HMSL') rdata(13) = arr(1) rdata(14) = arr(2)*.001 c rdata(14+i),i-1,nchan = brightness temps call ufbseq(lubfr,chn,2,20,nchan,'BRIT') do n=1,nchan nc = nint(chn(1,n)) rdata(14+nc) = chn(2,n) enddo c write the i3e format tovs report if(iwrot.eq.0) write(lui3e) nreal,nchan,(float(i),i=1,nchan) write(lui3e) (rdata(i),i=1,nreal+nchan) iwrot = iwrot+1 enddo enddo c exit print*,'bufri3e converted ',iwrot,' tovs records' stop end