SUBROUTINE GP_BUFR ( iubfmn, irundt, seqnum, buhd, + cborg, bulldt, bbb, corn, iret ) C************************************************************************ C* GP_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* GP_BUFR ( IUBFMN, IRUNDT, SEQNUM, BUHD, * C* CBORG, BULLDT, BBB, CORN, 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* CORN REAL Bulletin correction indicator * C* * C* Output parameters: * C* IRET INTEGER Return code: * C* 0 = normal return * C** * C* Log: * C* C. Caruso Magee/NCEP 03/2001 Modifying for dcgpsw. * C* C. Caruso Magee/NCEP 06/2001 Replace calls to WRITSA and * C* DBN_BUFR with new s/r UT_WBFR. * C* J. Ator/NCEP 11/02 Use PR_M100 * C************************************************************************ INCLUDE 'GEMPRM.PRM' INCLUDE 'gpcmn.cmn' C* CHARACTER seqnum*8, buhd*8, cborg*8, bulldt*8, bbb*8 C* INTEGER irundt (5) 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, 'NC012003', 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* Station ID. C CALL UT_CIBF ( iubfmn, 'RPID', civals ( icgpid ), 8, iercbf ) 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* Corrected report indicator. Corn may have been set to non-zero C* in GP_DCOD, so only check here to see if it's still zero and C* then set it if BBB indicates corrected bulletin. C IF ( corn .eq. 0.0 ) THEN IF ( bbb (1:1) .eq. 'C' ) THEN corn = 1.0 END IF END IF CALL UT_RIBF ( iubfmn, 'CORN', corn, ierrbf ) C C* Report date-time. Incoming reports don't send seconds, but we need C* this on output (for dup checking via bufr_dupsat), so set seconds to C* zero and save. 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 ) CALL UT_RIBF ( iubfmn, 'SECO', FLOAT ( 0 ), 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* Pressure. C CALL UT_RIBF ( iubfmn, 'PRES', + PR_M100 ( rivals ( irpres ) ), ierrbf ) C C* Temperature. C CALL UT_RIBF ( iubfmn, 'TMDB', rivals ( irtmpk ), ierrbf ) C C* Relative Humidity. C CALL UT_RIBF ( iubfmn, 'REHU', rivals ( irrelh ), ierrbf ) C C* Total delay. C CALL UT_RIBF ( iubfmn, 'TDEL', rivals ( irtdel ), ierrbf ) C C* Error in total delay. C CALL UT_RIBF ( iubfmn, 'ETDL', rivals ( iretdl ), ierrbf ) C C* Hydrostatic delay. C CALL UT_RIBF ( iubfmn, 'HSDL', rivals ( irhsdl ), ierrbf ) C C* Error in hydrostatic delay. C CALL UT_RIBF ( iubfmn, 'EHSD', rivals ( irehsd ), ierrbf ) C C* Integrated precipitable water (total precip. water). C CALL UT_RIBF ( iubfmn, 'TPWT', rivals ( irtpwt ), ierrbf ) C C* Weighted mean temperature C CALL UT_RIBF ( iubfmn, 'WMTM', rivals ( irwmtm ), ierrbf ) c C* Wet delay mapping function. C CALL UT_RIBF ( iubfmn, 'WDMF', rivals ( irwdmf ), ierrbf ) C C* Write BUFR message to BUFR output file C CALL UT_WBFR ( iubfmn, 'gpspw', 0, ierdbf ) C* RETURN END