SUBROUTINE MF_3106 ( iubfma, iubfmn, got157 )
C************************************************************************
C* MF_3106								*
C*									*
C* This routine gets and stores additional data	for NC031006 reports.	*
C*									*
C* MF_3106 ( IUBFMA, IUBFMN, GOT157 )					*
C*									*
C* Input parameters:							*
C*	IUBFMA		INTEGER		Logical unit number of messages	*
C*					file for BUFR input stream	*
C*	IUBFMN		INTEGER		Logical unit number of messages	*
C*					file for BUFR output stream	*
C*	GOT157		LOGICAL		.TRUE. iff the current input	*
C*					message contains a '315007'	*
C*					sequence descriptor in Section3 *
C* Log:									*
C* J. Ator/NCEP		07/23						*
C************************************************************************
	INCLUDE		'GEMPRM.PRM'
	INCLUDE		'mfcmn.cmn'

	REAL*8		GETVALNB, r8v, UT_RIBM

	LOGICAL		got157
C*-----------------------------------------------------------------------

C*	Get and store the wind data.

	IF ( got157 ) THEN
	  CALL UFBSEQ ( iubfma, r8in, MXMN, MXLV, nlv, 'WINDDAT3' )
	ELSE
	  DO ii = 1, 14
	    r8in(ii,1) = r8bfms
	  END DO
	  CALL UFBREP ( iubfma, r8wk, MXMN, MXLV, nlv, 'HSALG HSAWS' )
	  r8in(1,1) = r8wk(1,1)
	  r8in(2,1) = r8wk(2,1)
	  CALL UT_BFRI ( iubfma, 'TIWM', rval, ier )
	  r8in(3,1) = UT_RIBM ( rval )
	  CALL UT_BFRI ( iubfma, 'WDIR', rval, ier )
	  r8in(6,1) = UT_RIBM ( rval )
	  CALL UT_BFRI ( iubfma, 'WSPD', rval, ier )
	  r8in(7,1) = UT_RIBM ( rval )
	END IF
	CALL UFBSEQ ( iubfmn, r8in, MXMN, 1, nlv, 'WINDDAT3' )

C*	Get and store the temperature and humidity data.

	IF ( got157 ) THEN
	  CALL UFBSEQ ( iubfma, r8in, MXMN, MXLV, nlv, 'TEHUDAT2' )
	ELSE
	  DO ii = 1, 7
	    r8in(ii,1) = r8bfms
	  END DO
	  r8in(1,1) = r8wk(1,2)
	  r8in(2,1) = r8wk(2,2)
	  CALL UT_BFRI ( iubfma, 'TMDB', rval, ier )
	  r8in(3,1) = UT_RIBM ( rval )
	  CALL UT_BFRI ( iubfma, 'TMDP', rval, ier )
	  r8in(6,1) = UT_RIBM ( rval )
	END IF
	CALL UFBSEQ ( iubfmn, r8in, MXMN, 1, nlv, 'TEHUDAT2' )

C*	Temperature/salinity profile.

	CALL MF_TMPF ( iubfma, iubfmn, got157 )

C*	Get and store the surface current.

	IF ( got157 ) THEN
	  CALL UFBSEQ ( iubfma, r8in, MXMN, MXLV, nlv, 'SFCCURNT' )
	ELSE
	  DO ii = 1, 5
	    r8in(ii,1) = r8bfms
	  END DO
	  CALL UT_BFRI ( iubfma, 'DTCC', rval, ier )
	  r8in(1,1) = UT_RIBM ( rval )
	  CALL UT_BFRI ( iubfma, 'MCMS', rval, ier )
	  IF ( INT ( rval ) .lt. 7 ) r8in(2,1) = UT_RIBM ( rval )
	  CALL UT_BFRI ( iubfma, 'DSSC', rval, ier )
	  r8in(4,1) = UT_RIBM ( rval )
	  CALL UT_BFRI ( iubfma, 'SSSC', rval, ier )
	  r8in(5,1) = UT_RIBM ( rval )
	END IF
	CALL UFBSEQ ( iubfmn, r8in, MXMN, 1, nlv, 'SFCCURNT' )

C*	Get and store the wave data.

	CALL UFBSEQ ( iubfma, r8in, MXMN, MXLV, nlv, 'DPHGTWAV' )
	IF ( nlv .gt. 0 ) 
     +	  CALL UFBSEQ ( iubfmn, r8in, MXMN, 1, nlv, 'DPHGTWAV' )

C*	Get and store the sea-surface temperature.

	CALL UFBSEQ ( iubfma, r8in, MXMN, MXLV, nlv, 'SEATEMPH' )
	CALL UFBSEQ ( iubfmn, r8in, MXMN, 1, nlv, 'SEATEMPH' )

C*      Get and store any other required values.

	CALL UT_BFRI ( iubfma, 'IDPF', rval, ier )
	CALL UT_RIBF ( iubfmn, 'IDPF', rval, ier )
	CALL UT_BFRI ( iubfma, 'DOMO', rval, ier )
	CALL UT_RIBF ( iubfmn, 'DOMO', rval, ier )
	CALL UT_BFRI ( iubfma, 'SMMO', rval, ier )
	CALL UT_RIBF ( iubfmn, 'SMMO', rval, ier )
	CALL UT_BFRI ( iubfma, 'IMON', rval, ier )
	CALL UT_RIBF ( iubfmn, 'IMON', rval, ier )
	CALL UT_BFRI ( iubfma, 'AOOP', rval, ier )
	CALL UT_RIBF ( iubfmn, 'AOOP', rval, ier )
	CALL UT_BFRI ( iubfma, 'STNO', rval, ier )
	CALL UT_RIBF ( iubfmn, 'STNO', rval, ier )
	r8v = GETVALNB ( iubfma, 'WTEMPR', 1, 'IWTEMP', -1 )
	CALL SETVALNB ( iubfmn, 'WTEMPR', 1, 'IWTEMP', -1, r8v, ier )
	CALL UT_BFRI ( iubfma, 'WTEMPR', rval, ier )
	CALL UT_RIBF ( iubfmn, 'WTEMPR', rval, ier )
	CALL UT_BFRI ( iubfma, 'TOWD', rval, ier )
	CALL UT_RIBF ( iubfmn, 'TOWD', rval, ier )

	IF ( got157 ) THEN
	  CALL UT_BFRI ( iubfma, 'OSQN', rval, ier )
	  CALL UT_RIBF ( iubfmn, 'OSQN', rval, ier )
	  CALL UFBSEQ ( iubfma, r8in, MXMN, MXLV, nlv, 'SFCSLNTY' )
	  CALL UFBSEQ ( iubfmn, r8in, MXMN, 1, nlv, 'SFCSLNTY' )
	  CALL MF_CRPF ( iubfma, iubfmn )
	ELSE
	  CALL UT_BFRI ( iubfma, 'XXLT', rval, ier )
	  CALL UT_RIBF ( iubfmn, 'XXLT', rval, ier )
	  CALL UT_BFRI ( iubfma, 'HXXL', rval, ier )
	  CALL UT_RIBF ( iubfmn, 'HXXL', rval, ier )
	  r8v = GETVALNB ( iubfma, 'DYEAR', 1, 'DATSIG', -1 )
	  CALL SETVALNB ( iubfmn, 'DYEAR', 1, 'DATSIG', -1, r8v, ier )
	  CALL UT_BFRI ( iubfma, 'DYEAR', rval, ier )
	  CALL UT_RIBF ( iubfmn, 'DYEAR', rval, ier )
	  CALL UT_BFRI ( iubfma, 'DMNTH', rval, ier )
	  CALL UT_RIBF ( iubfmn, 'DMNTH', rval, ier )
	  CALL UT_BFRI ( iubfma, 'DDAYS', rval, ier )
	  CALL UT_RIBF ( iubfmn, 'DDAYS', rval, ier )
	END IF

        RETURN
        END