SUBROUTINE AC_BUFR ( iubfmn, irundt, seqnum, buhd, + cborg, bulldt, bbb, iret ) C************************************************************************ C* AC_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* AC_BUFR ( IUBFMN, IRUNDT, SEQNUM, BUHD, * C* CBORG, BULLDT, BBB, 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* * C* Output parameters: * C* IRET INTEGER Return code: * C* 0 = normal return * C** * C* Log: * C* J. Ator/NCEP 06/97 * C* J. Ator/NCEP 01/98 New interface format, style changes * C* J. Ator/NCEP 01/99 Move init. of mbstr, lmbstr into code * C* J. Ator/NCEP 09/00 Removed "GEMINC:" prefix from INCLUDEs, * C* changes for new ARINC format * C* J. Ator/NCEP 11/00 MXRQ -> MSTQ * C* J. Ator/NCEP 06/01 Use UT_WBFR and BUFR.CMN, clean up * C* J. Ator/NCEP 09/01 Add capability to decode E-ADAS data * C* J. Ator/NCEP 01/02 New E-ADAS format * C* J. Ator/NCEP 06/02 Add mnemonics RSRD and EXPRSRD to output* C* C. Caruso Magee/NCEP 01/03 Modify RSRD to a value of 128 (was 256) * C* J. Ator/NCEP 02/03 Add RSRD and EXPRSRD to E-ADAS output * C* J. Ator/NCEP 01/04 Prevent UT_RIBF call for CORN in E-ADAS * C* J. Ator/NCEP 01/05 Add Canada AMDAR/ACARS as NC004009 * C* J. Ator/NCEP 02/07 New E-ADAS format (013002 added) * C* J. Ator/NCEP 03/10 Add capability to decode French data * C* J. Ator/NCEP 09/14 Add Mexico AMDAR/ACARS as NC004016 * C* J. Ator/NCEP 12/14 Move Mexico AMDAR/ACARS to NC004004, * C* add IUTM97 KARP as new NC004017 * C* J. Ator/NCEP 02/15 Process all KARP as NC004004 * C************************************************************************ INCLUDE 'GEMPRM.PRM' INCLUDE 'accmn.cmn' C* CHARACTER*(*) seqnum, buhd, cborg, bulldt, bbb C* CHARACTER bfstyp*8, bfltmn*5, bflnmn*5 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* Set the BUFR message subtype. C IF ( ( cborg (1:4) .eq. 'KARP' ) .or. + ( cborg (1:4) .eq. 'MMMX' ) ) THEN bfstyp = 'NC004004' ELSE bfstyp = 'NC004014' END IF C C* Open a BUFR message for output. C CALL OPENMB ( iubfmn, bfstyp, 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 ) CALL UT_RIBF ( iubfmn, 'SECO', rivals ( irseco ), ierrbf ) C C* Latitude and longitude. C IF ( ( cborg (1:4) .eq. 'KARP' ) .or. + ( cborg (1:4) .eq. 'MMMX' ) .or. + ( cborg (1:4) .eq. 'LFPW' ) ) THEN bfltmn = 'CLAT' bflnmn = 'CLON' ELSE bfltmn = 'CLATH' bflnmn = 'CLONH' END IF CALL UT_RIBF ( iubfmn, bfltmn, rivals ( irslat ), ierrbf ) CALL UT_RIBF ( iubfmn, bflnmn, rivals ( irslon ), ierrbf ) C C* Wind direction. C CALL UT_RIBF ( iubfmn, 'WDIR', rivals ( irdrct ), ierrbf ) C C* Wind speed. C CALL UT_RIBF ( iubfmn, 'WSPD', rivals ( irsped ), ierrbf ) C C* Temperature. C CALL UT_RIBF ( iubfmn, 'TMDB', rivals ( irtmpk ), ierrbf ) C C* Dewpoint temperature. C CALL UT_RIBF ( iubfmn, 'TMDP', rivals ( irdwpk ), 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', 0., ierrbf ) C C* Aircraft flight number. C CALL UT_CIBF ( iubfmn, 'ACID', civals ( icacid ), 8, iercbf ) C C* Aircraft tail number. C CALL UT_CIBF ( iubfmn, 'ACRN', civals ( icacrn ), 8, iercbf ) C C* Phase of aircraft flight. C CALL UT_RIBF ( iubfmn, 'POAF', rivals ( irpoaf ), ierrbf ) C C* Type of aircraft data relay system. C CALL UT_RIBF ( iubfmn, 'TADR', rivals ( irtadr ), ierrbf ) C C* Precision of temperature observation. C CALL UT_RIBF ( iubfmn, 'PCAT', rivals ( irpcat ), ierrbf ) C C* Aircraft roll angle quality. C CALL UT_RIBF ( iubfmn, 'ROLQ', rivals ( irrolq ), ierrbf ) C C* Mixing ratio. C CALL UT_RIBF ( iubfmn, 'MIXR', rivals ( irmixr ), ierrbf ) C IF ( cborg (1:4) .ne. 'LFPW' ) THEN C C* Restrictions on redistribution. C CALL UT_RIBF ( iubfmn, 'RSRD', 128., ierrbf ) CALL UT_RIBF ( iubfmn, 'EXPRSRD', 48., ierrbf ) END IF C IF ( ( cborg (1:4) .eq. 'KARP' ) .or. + ( cborg (1:4) .eq. 'MMMX' ) .or. + ( cborg (1:4) .eq. 'LFPW' ) ) THEN C C* Ground receiving station. C CALL UT_CIBF ( iubfmn, 'ARST', civals ( icarst ), 8, + iercbf ) C C* Indicated aircraft altitude. C CALL UT_RIBF ( iubfmn, 'IALT', rivals ( irialt ), ierrbf ) C C* ACARS interpolated values. C CALL UT_RIBF ( iubfmn, 'INTV', rivals ( irintv ), ierrbf ) C C* Relative humidity. C CALL UT_RIBF ( iubfmn, 'REHU', rivals ( irrelh ), ierrbf ) C C* Moisture quality. C CALL UT_RIBF ( iubfmn, 'MSTQ', rivals ( irmstq ), ierrbf ) C C* Type of station. C CALL UT_RIBF ( iubfmn, 'TOST', rivals ( irtost ), ierrbf ) C C* Type of instrument for wind measurement. C CALL UT_RIBF ( iubfmn, 'TIWM', rivals ( irtiwm ), ierrbf ) C C* Original specification of lat/long. C CALL UT_RIBF ( iubfmn, 'OSLL', rivals ( irosll ), ierrbf ) C IF ( ( cborg (1:4) .eq. 'KARP' ) .or. + ( cborg (1:4) .eq. 'MMMX' ) ) THEN C C* Turbulence. C CALL UT_RIBF ( iubfmn, 'TRBX10', rivals ( irtrbx10 ), + ierrbf ) CALL UT_RIBF ( iubfmn, 'TRBX21', rivals ( irtrbx21 ), + ierrbf ) CALL UT_RIBF ( iubfmn, 'TRBX32', rivals ( irtrbx32 ), + ierrbf ) CALL UT_RIBF ( iubfmn, 'TRBX43', rivals ( irtrbx43 ), + ierrbf ) END IF C C* Pressure. C CALL UT_RIBF ( iubfmn, 'PRLC', + PR_M100 ( rivals ( irpres ) ), ierrbf ) C C* Corrected report indicator. C corn = 0.0 IF ( bbb (1:1) .eq. 'C' ) THEN corn = 1.0 END IF CALL UT_RIBF ( iubfmn, 'CORN', corn, ierrbf ) ELSE C C* Aircraft navigational system. C CALL UT_RIBF ( iubfmn, 'ACNS', rivals ( iracns ), ierrbf ) C C* Altitude. C CALL UT_RIBF ( iubfmn, 'HMSL', rivals ( irhmsl ), ierrbf ) C C* Height. C CALL UT_RIBF ( iubfmn, 'HEIT', rivals ( irheit ), ierrbf ) C C* Maximum derived equivalent vertical gust speed. C CALL UT_RIBF ( iubfmn, 'MDEVG', rivals ( irmdvg ), ierrbf ) C C* Airframe icing. C CALL UT_RIBF ( iubfmn, 'AFIC', rivals ( irafic ), ierrbf ) C C* Turbulence. C CALL UT_RIBF ( iubfmn, 'DGOT', rivals ( irdgot ), ierrbf ) CALL UT_RIBF ( iubfmn, 'HBOT', rivals ( irhbot ), ierrbf ) CALL UT_RIBF ( iubfmn, 'HTOT', rivals ( irhtot ), ierrbf ) CALL UT_RIBF ( iubfmn, 'PTRB', rivals ( irptrb ), ierrbf ) END IF C CALL UT_WBFR ( iubfmn, 'acars', 0, ierwbf ) C* RETURN END