SUBROUTINE UT_BFPA ( pwx, k, iarr, inum, iret)        
C************************************************************************
C* UT_BFPA 								*
C*									*
C* This subroutine converts present weather reports from automatic     	*
C* METAR stations into bufr descriptors.  If the METAR reports several  *
C* present weather elements, several bufr descriptors are returned. 	*
C*									*
C*                CALL UT_BFPA ( pwx, k, iarr, inum, iret )       	*
C*									*
C* The bufr descriptors for present weather from automatic   	  	*
C* METAR stations vary from 100 to 199 and 204 to 208.                  *
C*    A returned code table value of 104 will need to be changed to 105 *
C* by the user, if the reported visibility is less than 1km.            *
C*									*
C*	Unmanned							*
C*        4 =  FU                                                       *
C*        6 =  DU                                                       *
C*      104 =  HZ  visb=> 1km 	        172 =  SN 			*
C* 	110 =  BR       		173 =  +SN			*
C*  	118 =  SQ    		 	174 =  -PE -SHPE -TSPE		*
C*                                             -PL -SHPL -TSPL          *
C*      121 =  UP			175 =  PE SHPE TSPE             *
C*                                             PL SHPL TSPL             *
C*	122 =  SG -SG +SG		176 =  +PE +SHPE +TSPE          *
C*                                             +PL +SHPL +TSPL          *
C*	126 =  TS	          	181 =  -SHRA -SHRASN            *
C*	127 =  BLSN BLSA DRSN BLDU      182 = SHRA                      *
C*	       -DRSN +DRSN +BLSN -BLSN                                  *
C*	130 =  FG MIFG PRFG FZFG	183 =  +SHRA +SHRASN            *
C* 	131 =  BCFG		        185 =  -SHSN -SHSNRA            *
C*	         			186 =  SHSN        		*
C*  	151 =  -DZ             		187 =  +SHSN +SHSNRA		*
C*	152 =  DZ 			192 =  TSRA TSSN -TSRA -TSSN	*
C*	153 =  +DZ                     	       -TSSNRA TSSNRA		*
C*	                               	       -TSRASN TSRASN		*
C*	154 =  -FZDZ              	193 =  TSGR TSGS GS GR SHGS SHGR*
C*	155 =  FZDZ                    	195 =  +TSRA +TSSN +TSSNRA	*
C*	156 =  +FZDZ          		       +TSRASN                  *
C*	157 =  -DZRA                    196 =  +TSGR                    *
C*	158 =  DZRA +DZRA                                               *
C*	161 =  -RA                 	199 =  +FC                      *
C*	162 =  RA                     	 				*
C*	163 =  +RA                   	204 =  VA			*
C* 	164 =  -FZRA                 	207 =  BLPY PY			*
C*	165 =  FZRA			208 =  DRDU DRSA SA		*
C*      166 =  +FZRA                    219 =  FC                       *
C*	167 =  -RASN -DZSN -SNDZ -SNRA                                  *
C*	168 =  RASN +RASN DZSN +DZSN					*
C*	       SNRA SNDZ +SNRA +SNDZ					*
C*	171 =  -SN 							*
C*									*
C* UT_BFPA   ( pwx, k, iarr, inum, iret )				*
C*									*
C* Input parameters:							*
C*	pwx 		CHAR*		Character weather code		*
C*									*
C* Input and output parameters:						*
C*	k		INTEGER		Pointer to next location	*
C*	inum		INTEGER		Number of descriptors returned	*
C*									*
C* Output parameters:							*
C*	iarr		INTEGER		Descriptor array		*
C*	iret		INTEGER		Return code			*
C**									*
C* Log:									*
C* L. Sager/NMC		3/96	                                   	*
C* D. Kidwell/NCEP	10/96	Added BLSN, BLPY, improved documentation*
C* D. Kidwell/NCEP	11/96	Added +BLSN, -BLSN                      *
C* R. Hollern/NCEP	 5/98	Added PL weather groups, FC             *
C* R. Hollern/NCEP	 8/98	Added manual code table values for FU   *
C*                              and DU since code table value 104 is    *
C*                              treated as HZ by plotting programs      *
C* R. Hollern/NCEP	 8/98	Added DZRA, -DZRA, +DZRA, +TSGR to      *
C*                              table. Set FU and DU to manual BUFR     *
C*                              table values of 4 and 6, respectively.  *
C************************************************************************
C*
	CHARACTER*12	wcod (109)
	CHARACTER*9 	pwx      
C*
	INTEGER		ipau (109)
	INTEGER 	iarr ( 12 )
C*
	DATA	wcod / 'FU','HZ','DU','PY','BR','TS',
     + 'SQ','DZ','RA','SN','SG','PE','GS',
     + 'GR','UP','VA','FG','SA','VC','PL','FC',
     + '+FC','-DZ','+DZ','-RA','+RA','-SN',
     + '+SN','-PE','+PE','-SG','+SG','-PL','+PL',
     + 'BLDU','BLSA','MIFG','DRSN','BCFG','PRFG','FZFG','TSGS',      
     + 'FZDZ','FZRA','RASN','SNRA','TSGR','SNDZ','DZSN','SHRA','SHSN',
     + 'TSRA','TSSN','SHPE','TSPE','SHGS','SHGR','DRDU','DRSA','BLSN',
     + 'BLPY','SHPL','TSPL','DZRA',
     + '-DZRA','+DZRA','-DRSN','+DRSN','-FZDZ','+FZDZ','-FZRA','+FZRA',
     + '-DZSN','-SNDZ','-RASN','-SNRA','+RASN','+SNRA','+DZSN','+SNDZ', 
     + '-SHRA','+SHRA','-SHSN','+SHSN','-TSRA','+TSRA', 
     + '-TSSN','+TSSN','-SHPE','+SHPE','-TSPE','+TSPE',  
     + '+BLSN','-BLSN','-SHPL','+SHPL','-TSPL','+TSPL', '+TSGR',
     + 'TSSNRA','TSRASN',              
     + '-SHSNRA','-SHRASN','+SHSNRA','+SHRASN', 
     + '-TSSNRA','-TSRASN','+TSSNRA','+TSRASN'/ 
C
C*                     The following array points the character weather
C*                     code to the numeric WMSY code
C
	DATA	ipau / 4, 104, 6, 207, 110, 126,               
     +  118, 152, 162, 172, 122, 175, 193,        
     +	193, 121, 204, 130, 208, 999, 175, 219,
     +  199, 151, 153, 161, 163, 171,              
     +  173, 174, 176, 122, 122, 174, 176,
     +  127, 127, 130, 127, 131, 130, 130, 193,
     +  155, 165, 168, 168, 193, 168, 168, 182, 186,
     +  192, 192, 175, 175, 193, 193, 208, 208, 127,
     +  207, 175, 175, 158,
     +  157, 158, 127, 127, 154, 156, 164, 166,
     +  167, 167, 167, 167, 168, 168, 168, 168,
     +  181, 183, 185, 187, 192, 195,
     +  192, 195, 174, 176, 174, 176,
     +  127, 127, 174, 176, 174, 176, 196,
     +  192, 192,
     +  167, 167, 168, 168,
     +  192, 192, 195, 195/
C*
C------------------------------------------------------------------------
C
C*      Do the table lookup.  Match the present weather group.
C
	iret = 0
        imatch = 0
        ilenm  = 2
        DO  i = 1, 109
C
C*          Find length of string to match.
C
            IF  ( i .le. 21 ) THEN
                ilen = 2
            ELSE IF ( i .le. 34 ) THEN
                ilen = 3
            ELSE IF ( i .le. 64 ) THEN
                ilen = 4
            ELSE IF ( i .le. 99 ) THEN
                ilen = 5
            ELSE IF ( i .le. 101 ) THEN
                ilen = 6
            ELSE 
                ilen = 7
            END IF
C
C*          Find this present weather symbol in the table.
C           
        
            IF  ( pwx  (1:ilen) .eq. wcod ( i ) ) THEN               
		IF ( ipau (i) .eq. 999 ) THEN
C
C*                  Skip 'VCxx' group
C
		    k = k + 4
		    RETURN
		END IF
                imatch = 1
                ilenm = ilen
                iarr ( inum + 1) = ipau (i)
            END IF
        END DO
        k = k + ilenm     
        inum = inum + imatch
C*
	RETURN
	END