SUBROUTINE EP_BUFR ( iubfmn, irundt, seqnum, buhd, cborg, + bulldt, bbb, corr, corm, iret ) C************************************************************************ C* EP_BUFR * C* * C* This subroutine retrieves data from the interface arrays, converts * C* it into BUFR output, and then writes the BUFR output to the BUFR * C* output stream. * C* * C* EP_BUFR ( IUBFMN, IRUNDT, SEQNUM, BUHD, CBORG, * C* BULLDT, BBB, CORR, CORM, IRET ) * C* * C* Input parameters: * C* IUBFMN INTEGER Logical unit number of messages * C* file for BUFR output stream * C* IRUNDT (5) INTEGER Run date-time * C* (YYYY, MM, DD, HH, MM) * C* SEQNUM CHAR* Bulletin sequence number * C* BUHD CHAR* Bulletin header * C* CBORG CHAR* Bulletin originator * C* BULLDT CHAR* Bulletin date-time * C* BBB CHAR* Bulletin BBB indicator * C* CORR LOGICAL Corrected report indicator * C* CORM LOGICAL Corrected message indicator * C* * C* Output parameters: * C* IRET INTEGER Return code: * C* 0 = normal return * C** * C* Log: * C* J. Ator/NCEP 03/06 * C************************************************************************ INCLUDE 'GEMPRM.PRM' INCLUDE 'epcmn.cmn' C* CHARACTER*(*) seqnum, buhd, cborg, bulldt, bbb C* REAL*8 r8rlv ( 8, MXBFLV ), UT_RIBM C* INTEGER irundt (*) C* LOGICAL corr, corm C* INCLUDE 'ERMISS.FNC' C*----------------------------------------------------------------------- iret = 0 C C* Set the BUFR message date-time. C year = rivals ( iryear ) rmth = rivals ( irmnth ) days = rivals ( irdays ) hour = rivals ( irhour ) IF ( ( ERMISS ( year ) ) .or. ( ERMISS ( rmth ) ) .or. + ( ERMISS ( days ) ) .or. ( ERMISS ( hour ) ) ) THEN RETURN END IF ibfdt = ( INT ( year ) * 1000000 ) + ( INT ( rmth ) * 10000 ) + + ( INT ( days ) * 100 ) + INT ( hour ) C C* Open a BUFR message for output. C CALL OPENMB ( iubfmn, 'NC002016', ibfdt ) C C* Bulletin ID information. C CALL UT_CIBF ( iubfmn, 'SEQNUM', seqnum, 8, iercbf ) CALL UT_CIBF ( iubfmn, 'BUHD', buhd, 8, iercbf ) CALL UT_CIBF ( iubfmn, 'BORG', cborg, 8, iercbf ) CALL UT_CIBF ( iubfmn, 'BULTIM', bulldt, 8, iercbf ) CALL UT_CIBF ( iubfmn, 'BBB', bbb, 8, iercbf ) C C* Report date-time. C CALL UT_RIBF ( iubfmn, 'YEAR', rivals ( iryear ), ierrbf ) CALL UT_RIBF ( iubfmn, 'MNTH', rivals ( irmnth ), ierrbf ) CALL UT_RIBF ( iubfmn, 'DAYS', rivals ( irdays ), ierrbf ) CALL UT_RIBF ( iubfmn, 'HOUR', rivals ( irhour ), ierrbf ) CALL UT_RIBF ( iubfmn, 'MINU', rivals ( irminu ), ierrbf ) C C* WMO block number. C CALL UT_RIBF ( iubfmn, 'WMOB', rivals ( irwmob ), ierrbf ) C C* WMO station number. C CALL UT_RIBF ( iubfmn, 'WMOS', rivals ( irwmos ), ierrbf ) C C* Type of station. C CALL UT_RIBF ( iubfmn, 'TOST', rivals ( irtost ), ierrbf ) C C* Type of measuring equipment used. C CALL UT_RIBF ( iubfmn, 'A4ME', rivals ( ira4me ), ierrbf ) C C* Type of antenna. C CALL UT_RIBF ( iubfmn, 'ANTYP', rivals ( iratyp ), ierrbf ) C C* 3-dB beam width. C CALL UT_RIBF ( iubfmn, 'BEAMW', rivals ( irbemw ), ierrbf ) C C* Range-gate length. C CALL UT_RIBF ( iubfmn, 'RAGL', rivals ( irragl ), ierrbf ) C C* Mean speed estimation. C CALL UT_RIBF ( iubfmn, 'MSPE', rivals ( irmspe ), ierrbf ) C C* Wind computation enhancement. C CALL UT_RIBF ( iubfmn, 'WICE', rivals ( irwice ), ierrbf ) C C* Mean frequency. C CALL UFBINT ( iubfmn, r8vals ( irmefr ), 1, 1, ierufb, 'MEFR' ) C C* Time significance. C CALL UT_RIBF ( iubfmn, 'TSIG', rivals ( irtsig ), ierrbf ) C C* Time displacement. C CALL UT_RIBF ( iubfmn, 'TPMI', rivals ( irtpmi ), ierrbf ) C C* Latitude. C CALL UT_RIBF ( iubfmn, 'CLAT', rivals ( irslat ), ierrbf ) C C* Longitude. C CALL UT_RIBF ( iubfmn, 'CLON', rivals ( irslon ), ierrbf ) C C* Station elevation. C CALL UT_RIBF ( iubfmn, 'SELV', rivals ( irselv ), ierrbf ) C C* Corrected report indicator. C IF ( corr .or. corm ) THEN corn = 1.0 ELSE corn = 0.0 END IF CALL UT_RIBF ( iubfmn, 'CORN', corn, ierrbf ) C C* Receipt date-time. C CALL UT_RIBF ( iubfmn, 'RCYR', FLOAT ( irundt (1) ), ierrbf ) CALL UT_RIBF ( iubfmn, 'RCMO', FLOAT ( irundt (2) ), ierrbf ) CALL UT_RIBF ( iubfmn, 'RCDY', FLOAT ( irundt (3) ), ierrbf ) CALL UT_RIBF ( iubfmn, 'RCHR', FLOAT ( irundt (4) ), ierrbf ) CALL UT_RIBF ( iubfmn, 'RCMI', FLOAT ( irundt (5) ), ierrbf ) CALL UT_RIBF ( iubfmn, 'RCTS', FLOAT ( 0 ), ierrbf ) C C* Multi-level data. C nlev = INT ( rivals ( irnlev ) ) IF ( nlev .gt. 0 ) THEN DO jj = 1, nlev r8rlv ( 1, jj ) = UT_RIBM ( rivals ( irhgtm ( jj ) ) ) r8rlv ( 2, jj ) = UT_RIBM ( rivals ( irqmdr ( jj ) ) ) r8rlv ( 3, jj ) = r8bfms r8rlv ( 4, jj ) = UT_RIBM ( rivals ( irdrct ( jj ) ) ) r8rlv ( 5, jj ) = UT_RIBM ( rivals ( irsped ( jj ) ) ) r8rlv ( 6, jj ) = UT_RIBM ( rivals ( irqmwc ( jj ) ) ) r8rlv ( 7, jj ) = UT_RIBM ( rivals ( irwcmp ( jj ) ) ) r8rlv ( 8, jj ) = UT_RIBM ( rivals ( irstnr ( jj ) ) ) END DO CALL DRFINI ( iubfmn, nlev, 1, '{EPSEQ1}' ) CALL UFBSEQ ( iubfmn, r8rlv, 8, nlev, ierufb, 'EPSEQ1' ) END IF C CALL UT_WBFR ( iubfmn, 'epflr', 0, ierwbf ) C* RETURN END