program bufrtime !****************************************************************************** !* BUFRTIME ! VERIFICACAO DE DATA E HORA EM ARQUIVOS BUFR !MCT-INPE-CPTE * !****************************************************************************** ! VERSAO 1.0 !***************************************************************************** ! 1 - DESCRICAO GERAL ! ! Este programa ler as secoes 1 das mensagens BUFR dentro de um arquivo BUFR ! e verifica as datas e horas declaradas em cada um. ! ! O resultado sao as datas/horas iniciais e finais de cada mensagem BUFR ! ! 4 - DEPENDENCIAS EXTERNAS: SISTEMA_OPERACIONAL.getenv e modulo MBUFR.F90 ! ! Notas: a) Para sistema unix e linux getenv nao precisa ser declarado ! b) Para sistema windows e necessario incluse "USE MSFLIB" !------------------------------------------------------------------------------- ! REVISAO HISTORICA ! ABRIL 2006 - SERGIO H. - Versao original !------------------------------------------------------------------------------- USE MBUFR !USE MSFLIB ! Para compilacao em Windows ( Microsoft Power Station ) USE DATELIB implicit none !{ Declaracao das variaveis utilizadas em read_mbufr type(sec1type)::sec1 type(sec3type)::sec3 type(sec4type)::sec4 integer::MBYTES,BUFR_ED integer::err Real,parameter:: Null=-340282300 !valor nulo type(selecttype),dimension(1)::select !} real*8::date_min,date_max,cdate character(len=10)::labelmax,labelmin integer*2 ::argc,i integer::iargc,nfiles integer::nm ! Numero de mensagens character(len=255),dimension(1000)::flist ! Lista de arquivos de entrada character(len=255)::outfile ! Nome do arquivo de saida character(len=255)::infile !Dim tlbufr As Double select(1)%btype=none ! Excluir a leitura de todos os tipos de mesagens bufr ! Somente a secao 1 de cada mensagem sera lida !{ Pega os argumentos de Entrada: Data e Nomes dos arquivos de entrada e saida argc = iargc() if ((argc>=2)) then i=1;call GetArg(i,outfile) do i=2,argc call Getarg(i,infile) flist(i-1)=infile nfiles=i-1 end do else print *, "-------------------------------------------------------------------------" print *, "bufrtime - Lista datas iniciais e finais de um conjuto de mensagens BUFR " PRINT *, " USE: bufrtime outfile bufrfile-1 bufrfile-2 ... bufrfile-n" print *, "-------------------------------------------------------------------------" stop endif !} !{ Abre arquivo de open (2,file=outfile,status='unknown',access='append') !{ Abre o arquivo BUFR do i=1,nfiles date_min=0.0 date_max=0.0 nm=0 print *,"Pesquisando "//flist(i) Call OPEN_MBUFR(1,flist(i),255,13,0) !} !Nesta parte e feita a leitura das mensagens BUFR (somente a secao 1) ! !Se nao houver erro de leitura, converte a data da secao1 (ano,mes,dia,etc..) !em data juliana, utilizando a funcao fjulian do modulo datelib ! ! A data juliana e comparada com a data minima e maxima obtida anteriormente ! se menor que a data minima atualiza a data minina ! se maior que a data maxima atualiza a data maxima !{ 10 CONTINUE Call READ_MBUFR(1, 2000,sec1,sec3,sec4, bUFR_ED, MBYTES,err,select) If ((MBYTES > 0).and.(IOERR(1)==0)) Then nm=nm+1 cdate=fjulian(sec1%year,sec1%month,sec1%day,sec1%hour,sec1%minute,0) if (nm==1) then date_min=cdate date_max=cdate end if if ((date_min>cdate)) date_min=cdate if ((date_max