SUBROUTINE BT_TESA ( istrt, iends2, report, iret ) C************************************************************************ C* BT_TESA * C* * C* This subroutine decodes the groups zzzz, TTTT, and SSSS which follow * C* the 888k(1)k(2) group in section 2 of the tesac report. These * C* groups contain temperature (TTTT) and salinity (SSSS) data at * C* selected or significant depths (zzzz). The method of salinity/depth * C* measurement is given by the k(2) value in the 888k(1)k(2) group. * C* * C* BT_TESA ( ISTRT, IENDS2, REPORT, IRET ) * C* * C* Input parameters: * C* REPORT CHAR* Report array * C* ISTRT INTEGER Points to where to start search * C* in report array for section 2 * C* data groups * C* IENDS2 INTEGER Points to where to end search in* C* report array for sect 2 groups * C* * C* Output parameters: * C* RIVALS(IRNDTS) REAL Number of levels of data * C* RIVALS(IRDBSS) REAL Depth in meters * C* RIVALS(IRSTMP) REAL Temperature, hundredths of deg C* C* RIVALS(IRSALN) REAL Salinity, in hundredths of a * C* part per thousand (%) * C* IRET INTEGER Return code * C* 0 = No problems * C* 1 = Problems * C* * C** * C* Log: * C* R. Hollern/NCEP 1/99 * C* R. Hollern/NCEP 8/00 Removed fld1 variable * C************************************************************************ INCLUDE 'GEMPRM.PRM' INCLUDE 'btcmn.cmn' C* CHARACTER*(*) report C* CHARACTER fld4*4 C------------------------------------------------------------------------ iret = 0 ipt = istrt C lvl = 0 C DO WHILE ( ipt .lt. iends2 ) C IF ( report(ipt:ipt+4) .eq. '00000' ) THEN C C* The last temperature group was the bottom layer C* temperature. C IF ( lvl .gt. 0 ) THEN rivals ( irtowd ) = rivals ( irdbss ( lvl ) ) rivals ( irndts ) = FLOAT ( lvl ) RETURN END IF C END IF C ipt = ipt + 1 C IF ( report ( ipt:ipt+1 ) .eq. ' 2' ) THEN C lvl = lvl + 1 IF ( lvl .gt. MXDLYR ) lvl = MXDLYR C C* Get selected and/or significant depth, in meters. C ipt = ipt + 2 fld4 = report ( ipt:ipt+3 ) CALL ST_INTG ( fld4, ival, ier ) IF ( ier .eq. 0 ) + rivals ( irdbss ( lvl ) ) = FLOAT ( ival ) ipt = ipt + 3 ELSE IF ( report ( ipt:ipt+1 ) .eq. ' 3' ) THEN C C* Get temperatures, in hundredths of a degree Celsius. C ipt = ipt + 2 fld4 = report ( ipt:ipt+3 ) CALL ST_INTG ( fld4, ival, ier ) IF ( ier .eq. 0 ) THEN rval = FLOAT ( ival ) C C* Check for negative temperature. C IF ( rval .gt. 4999. ) rval = 5000. - rval rivals ( irstmp ( lvl ) ) = .01 * rval END IF ipt = ipt + 3 ELSE IF ( report ( ipt:ipt+1 ) .eq. ' 4' ) THEN C C* Get salinity, in hundredths of a part per thousand (%). C ipt = ipt + 2 fld4 = report ( ipt:ipt+3 ) CALL ST_INTG ( fld4, ival, ier ) IF ( ier .eq. 0 ) + rivals ( irsaln ( lvl ) ) = .01 * FLOAT ( ival ) ipt = ipt + 3 END IF END DO C IF ( lvl .gt. 0 ) rivals ( irndts ) = FLOAT ( lvl ) C* RETURN END