program bufr_decode_sample ! ! example of reading observations from bufr ! implicit none character(80):: hdstr='DHR' real(8) :: hdr(1) integer :: ireadmg character(8) subset integer :: unit_in=10,unit_out=20,unit_table=30 integer :: idate,iret,num_message,num_subset ! get bufr table from existing bufr file open(unit_table,file='table_prepbufr.txt') open(unit_out,file='bufrfile1',status='old',form='unformatted') call openbf(unit_out,'IN',unit_out) call dxdump(unit_out,unit_table) call closbf(unit_out) ! decode open(unit_out,file='bufrfile0',action='write',form='unformatted') call openbf(unit_out,'OUT',unit_table) open(unit_in,file='bufrfile1',action='read',form='unformatted') call openbf(unit_in,'IN',unit_in) num_message=0 msg_report: do while (ireadmg(unit_in,subset,idate) == 0) num_message=num_message+1 num_subset = 0 ! write(*,'(I10,I10,a10)') idate,num_message,subset call COPYMG(unit_in,unit_out) enddo msg_report call closbf(unit_in) open(unit_in,file='bufrfile2',action='read',form='unformatted') call openbf(unit_in,'IN',unit_in) num_message=0 msg_report2: do while (ireadmg(unit_in,subset,idate) == 0) num_message=num_message+1 num_subset = 0 ! write(*,'(I10,I10,a10)') idate,num_message,subset call COPYMG(unit_in,unit_out) enddo msg_report2 call closbf(unit_in) call closbf(unit_out) end program