SUBROUTINE EA_SUPP ( iubfme, bfstot, ntmbr, idxtmbr, + r8ary, nr8in, nr8ot, iret ) C************************************************************************ C* EA_SUPP * C* * C* This routine reads any supplemental values from the report, * C* including any quality values linked via a bitmap, and appends them * C* to the data values array. * C* * C* EA_SUPP ( IUBFME, BFSTOT, NTMBR, IDXTMBR, R8ARY, NR8IN, NR8OT, IRET )* C* * C* Input parameters: * C* IUBFME INTEGER Logical unit number of messages * C* file for BUFR input stream * C* BFSTOT CHAR* BUFR output type/subtype * C* NTMBR INTEGER For AMSU A/B, HIRS or MHS, the * C* number of TMBRST values within * C* the report. * C* IDXTMBR(*) INTEGER For AMSU A/B, HIRS or MHS, the * C* indices of the TMBRST values * C* within r8ary. * C* R8ARY(*) REAL*8 Report values array. * C* NR8IN INTEGER Number of values within r8ary. * C* * C* Output parameters: * C* R8ARY(*) REAL*8 Report values array, after * C* appending any supplemental * C* values. * C* NR8OT INTEGER Number of values within r8ary, * C* after appending any supplemental* C* values. * C* IRET INTEGER Return code: * C* 0 = normal return * C** * C* Log: * C* J. Ator/NCEP 08/20 * C************************************************************************ INCLUDE 'GEMPRM.PRM' INCLUDE 'BRIDGE.PRM' INCLUDE 'eacmn.cmn' C* CHARACTER bfstot*(*) C* REAL*8 r8ary (*) C* INTEGER idxtmbr (*) C* REAL*8 r8wk ( MXVAL ), r8bm ( MXBME ), r8nq ( MXBMSE ), + UT_RIBM C* INTEGER idxbmse ( MXBMSE ) C* LOGICAL gotntbm C*----------------------------------------------------------------------- iret = 0 C C* For now at least, there are no supplemental values to be read C* from any CrIS, ATMS, IASI or AIRS reports. C SELECT CASE ( bfstot(6:8) ) CASE ( "037", "038", "039", + "212", "213", "239", "249" ) nr8ot = nr8in RETURN END SELECT C C* Check for NEDTQW values which reference the TMBRST values via C* a bitmap. C gotntbm = .false. CALL UFBREP ( iubfme, r8bm, 1, MXBME, nbme, 'DPRI' ) nbmse = 0 IF ( nbme .gt. 0 ) THEN DO ii = 1, nbme IF ( INT ( UT_BMRI ( r8bm (ii) ) ) .eq. 0 ) THEN nbmse = nbmse + 1 idxbmse ( nbmse ) = ii END IF END DO IF ( nbmse .eq. ntmbr ) THEN ii = 1 DO WHILE ( ( ii .le. nbmse ) .and. + ( idxbmse (ii) .eq. idxtmbr (ii) ) ) ii = ii + 1 END DO IF ( ii .gt. nbmse ) THEN CALL UFBREP ( iubfme, r8nq, 1, MXBMSE, nnq, 'NEDTQW' ) IF ( nnq .eq. nbmse ) gotntbm = .true. END IF END IF END IF C C* Copy values from r8ary to r8wk up through the last TMBRST C* value. After copying each successive TMBRST value, add in C* the corresponding NEDTQW value. C nr8ot = 0 istart = 1 DO ii = 1, ntmbr DO jj = istart, idxtmbr (ii) nr8ot = nr8ot + 1 r8wk (nr8ot) = r8ary (jj) END DO nr8ot = nr8ot + 1 IF ( gotntbm ) THEN r8wk (nr8ot) = r8nq (ii) ELSE r8wk (nr8ot) = r8bfms END IF istart = idxtmbr (ii) + 1 END DO C C* Copy over any remaining values from r8ary. C IF ( istart .le. nr8in ) THEN DO jj = istart, nr8in nr8ot = nr8ot + 1 r8wk (nr8ot) = r8ary (jj) END DO END IF C C* Check for and append SWID to r8wk. C CALL UT_BFRI ( iubfme, 'SWID', rval, ier ) nr8ot = nr8ot + 1 r8wk (nr8ot) = UT_RIBM ( rval ) C C* Finally, copy all values from r8wk back into r8ary. C DO ii = 1, nr8ot r8ary (ii) = r8wk (ii) END DO C RETURN END