Program demo5 Use MBUFR ! Declaration and allocation of MBUFR interface variables type(sec1type)::sec1 type(sec3type)::sec3 type(sec4type)::sec4 integer::err integer:: bufr_ed integer::nbytes Real,parameter :: Null=-340282300 !valor nulo real soma_temp ! Somatorio de valores de temperatura integer:: cont ! Contador integer:: nobs ! Numero de observacoes real,dimension(100,4)::obs ! Matriz de dados observacionais type(selecttype),dimension(1)::selected integer::nmsg_ignoradas !-------------------- ! zeroando variaveis !-------------------- obs(:,:)=null selected(1)%btype=0 selected(1)%bsubtype=0 nmsg_ignoradas=0 !-------------------------- ! Leitura dos dados em BUFR !-------------------------- call OPEN_MBUFR(1, "exemplo1.bufr", 46,11,0) 10 call READ_MBUFR(1,500,sec1,sec3,sec4, bUFR_ED, NBYTES,err,selected) if ((ioerr(1)==0).and.(err==0)) then if (sec4%nvars>0) then print *,"Numero de sub-secoes=",sec3%nsubsets print *,"Numero de variaveis=",sec4%nvars do i =1,sec3%nsubsets do j=1,sec4%nvars if ((sec4%d(j,i)==005001).or.(sec4%d(j,i)==005002)) obs(i,1)=sec4%r(j,i) if ((sec4%d(j,i)==006001).or.(sec4%d(j,i)==006002)) obs(i,2)=sec4%r(j,i) if (sec4%d(j,i)==004004) obs(i,3)=sec4%r(j,i) if (sec4%d(j,i)==012004) obs(i,4)=sec4%r(j,i)-273.2 end do end do else nmsg_ignoradas=nmsg_ignoradas+1 end if deallocate(sec4%d,sec4%r,sec4%c,sec3%d) goto 10 endif CLOSE(1) nobs=sec3%nsubsets !-------------------------------- ! imprimindo dados de temperatura !-------------------------------- print *, "Numero de mensagens igonoradas:",nmsg_ignoradas print *, "Numero de dados lidos:",nobs print *, " Os dados lidos foram: " print *, "-----------------------------------" print *, "Latitude Longitude Hora Temperatura" print *, "-----------------------------------" do i=1,nobs write(*,20)obs(i,1:4) 20 format(1x,2(1x,f8.2),3x,f2.0,3x,f4.1) end do print *, "-----------------------------------" !------------------ ! calculando media ! ----------------- cont=0 soma_temp=0 do i=1,nobs if (obs(i,4)/=null) then soma_temp=soma_temp+obs(i,4) cont=cont+1 end if end do if (cont>0) then write(*,100) soma_temp/real(cont) 100 format(" Temperatura media=",f5.1,"C") print *, "-----------------------------------" end if end