Program demo1 Use MBUFR ! Declaration and allocation of MBUFR interface variables type(sec1type)::sec1 type(sec3type)::sec3 type(sec4type)::sec4 ! real::ano,mes,dia,hora,lat,lon,temp integer::n integer::err !--------------------------------------------------- !Alocacao de espaço necessário nas estruturas sec3 e sec4 !(ate 10 subsets) !---------------------------------------------------- allocate(sec3%d(1:8), STAT = ERR) allocate(sec4%r(1:8, 1:10), stat = err) !--------------------------------------------------------- ! Atribuicao dos valores da secao 3 _ Neste utilizamos ! apenas descritores da tabela BUFR B. !---------------------------------------------------------- sec3%d(1) = 004001 ! Ano sec3%d(2) = 004002 ! Mes sec3%d(3) = 004003 ! Dia sec3%d(4) = 004004 ! Hora sec3%d(5) = 004005 ! Minuto sec3%d(6) = 005001 ! Latitude sec3%d(7) = 006001 ! Longitude sec3%d(8) = 012004 ! Descritor de temperatura em kelvin sec3%ndesc = 8 ! Número de descritores fornecidos, sec3%is_cpk = 0 ! 0=modo normal, 1= modo comprimido !--------------------------------------------------------- ! Como sao utilizados apenas descritores da tabela B ! o número de descritores na secao 3 sera exatamente igual ! ao número de variaveis da secao 4 !--------------------------------------------------------- sec4%nvars=sec3%ndesc !-------------------------------------------------- ! lendo arquivo exemplo (exemple.txt) ! e passando para a estrutura da seção 4 !-------------------------------------------------- n=0 open(1,file='exemplo1.txt',status='old') 10 read(1,*,end=999)ano,mes,dia,hora,lat,lon,temp n=n+1 print *,ano,mes,dia,hora,lat,lon,temp sec4%r(1,n)=ano sec4%r(2,n)=mes sec4%r(3,n)=dia sec4%r(4,n)=hora sec4%r(5,n)=0.0 sec4%r(6,n)=lat sec4%r(7,n)=lon sec4%r(8,n)=temp+273.2 !Convertendo para Kelvin goto 10 999 close(1) ! Termino da leitura dos dados !------------------------------------------------------ ! E necessario informar na secao 3 o numero de subsets ! de informacao que sera gravado na secao 4 !------------------------------------------------------ sec3%nsubsets=n !----------------------------------- ! Atribuicao dos valores da secao 1 !----------------------------------- sec1%btype = 0 ! Dados de superfície sec1%bsubtype = 0 ! Subtipo da observação (não definido) sec1%center = 46 ! Codigo do centro gerador (INPE) sec1%subcenter = 0 ! Código do Subcentro sec1%MasterTable = 11 ! Usar tabela MASTER 11 sec1%LocalTable = 0 ! Tabelas nao contem descritores locais sec1%year = ano ! Ano da data sinótica sec1%month = mes ! mes da data sinótica sec1%day = dia ! Dia da data sinótica sec1%hour = hora ! Horario sinoptico sec1%minute = 0 ! Minutos do horário sinótico sec1%sec2present =.false. ! Nao gravar a secao 2 !------------------------------------------------------------ ! Uma vez preenchida todas a estrutura de dados utilizamos a ! as subrotinas open_mbufr, para abrir o arquivo, ! write_mbufr, para gravar os dados e close_mbufr para ! fachar o aquivo !------------------------------------------------------------ call OPEN_MBUFR(1, "exemplo1.bufr", 46,11,0) Call write_mbufr(1,sec1,sec3,sec4) Call CLOSE_MBUFR(1) end