SUBROUTINE TG_GETV( kray, irepflg, mdescr, nr, loglvl, mxrpt, + mxrptsz, mxdatv, nmrpts, expdesc, + nmdatval, dataval, idatty, rval, cval, + iret ) C************************************************************************ C* TG_GETV * C* * C* This subroutine decodes the current group in Section 2 of the current* C* subset. The decoded value will be saved in the dataval array either * C* as a character string or a real*8 value, depending on the units * C* gotten from Table B for the element descriptor corresponding to the * C* data value. A missing value will be set to eight slashes. * C* * C* * C* TG_GETV ( KRAY, IREPFLG, MDESCR, NR, LOGLVL, MXRPT, MXRPTSZ, MXDATV, * C* NMRPTS, EXPDESC, NMDATVAL, DATAVAL, IDATTY, RVAL, CVAL, * C* IRET ) * C* * C* INPUT PARAMETERS: * C* KRAY ( MXDATV) INTGEGER Array locations indicate which * C* descriptors in expdesc have * C* already been processed * C* IREPFLG INTEGER Flag to indicate whether current* C descriptor is replicated * C* MDESCR CHAR* Current descriptor being * C* processed * C* NR INTEGER Pointer to where to get the data* C* in arrays for current report * C* LOGLVL INTEGER Verbosity logging level * C* MXRPT INTEGER Maximum number of reports * C* expected in message * C* MXRPTSZ INTEGER Maximum report size expected * C* MXDATV REAL Maximum number of data values * C* expected in report * C* NMRPTS INTEGER Number of reports in CREX msg * C* EXPDESC (MXDATV) * C* CHAR* List of descriptors which are * C* close to a one-to-one * C* correspondece with the data * C* values in dataval array * C* * C* NMDATVAL INTEGER Number of data values in * C* Section 2 of CREX message * C* * C* DATAVAL (MXRPT,MXDATV) * C* INTEGER Array to hold the Section 2 * C* decoded data values * C* * C* IDATTY INTEGER Flag to indicate whether data * C* value is numeric or character * C* * C* Output parameters: * C* cval CHAR Decoded data value * C* rval REAL Decoded data value * C* IRET INTEGER Return code * C* 0 = Normal return * C* 1 = Problems * C* * C** * C* Log: * C* R. Hollern/NCEP 8/00 * C* J. Ator/NCEP 8/13 Don't print logmsg if B04025, B05001 or * C* B06001 are missing, since this is OK * C************************************************************************ INCLUDE 'GEMPRM.PRM' INCLUDE 'tgcmn.cmn' C* REAL*8 dataval ( mxrpt, mxdatv ) REAL*8 rtemp C* REAL rval C* INTEGER mxdatv INTEGER kray ( mxdatv ) C* CHARACTER mdescr*6 CHARACTER expdesc ( mxdatv )*6 CHARACTER ctemp*8, blanks*8, cval*8, misng*8 CHARACTER field*10 C* EQUIVALENCE ( ctemp, rtemp ) C* DATA blanks / ' ' / C* DATA misng / '////////' / C----------------------------------------------------------------------- iret = 0 cval = blanks C C* Find descriptor match in expdesc. C* lc = 0 jdatty = idatty C DO i = 1, nmdatval C IF ( mdescr .eq. expdesc ( i ) .AND. + kray ( i ) .eq. 0 ) THEN C kray(i) = 1 lc = i C rtemp = dataval ( nr, lc ) C IF ( ctemp .eq. misng ) THEN cval = ctemp RETURN END IF C IF ( jdatty .eq. 0 ) THEN C C* Numeric data. C rval = rtemp C RETURN ELSE IF ( jdatty .eq. 1 ) THEN C C* Character data. C rtemp = dataval ( nr, lc ) cval = ctemp RETURN END IF END IF C END DO C iret = 1 C IF ( irepflg .eq. 1 ) RETURN C C* Did not find a descriptor match. If this is a critical C* descriptor, print a log message. C IF ( ( mdescr .ne. 'B04025' ) .and. + ( mdescr .ne. 'B05001' ) .and. + ( mdescr .ne. 'B06001' ) ) THEN logmsg = ' ' logmsg(1:30) = 'Did not find descriptor ' // mdescr CALL DC_WLOG( loglvl, 'DCTIDE', 2, logmsg, ierwlg ) logmsg = ' ' logmsg(1:45) = 'in the CREX message Section 1 descriptor list' CALL DC_WLOG( loglvl, 'DCTIDG', 2, logmsg, ierwlg ) END IF C* RETURN END