subroutine get_postfilename(fname)
!
! ABSTRACT: THIS SUBROUTINE GENERATE POST FILE NAME FROM THE DATSET IN
!           POST CONTROL FILE
!
!  Program log:
!     11-02        Jun Wang   generate code from subroutine gribit
!
      use ctlblk_mod, only: ifhr, me, modelname, ifmin
      use rqstfld_mod, only: ritehd, datset, iget
      implicit none
!
      character(*),intent(inout) :: fname
!
!local vars
      integer IHR,KDAT,KENV,KTHR,NDIG
      CHARACTER*4  RESTHR,BLANK
      CHARACTER*10  DESCR2,DESCR3
      character CFHOUR*40,CFORM*40
      CHARACTER*50 ENVAR
      CHARACTER*80 PGBOUT,IPVOUT,D3DOUT
!
      DATA BLANK /'    '/
!
      IF (RITEHD) THEN
!
!        PUT FORECAST HOUR INTO DIR PREFIX FOR GRIB FILE.
         IHR = IFHR
!
!        GET FULL PATH FOR OUTPUT FILE FROM ENVIRONMENT VARIABLE
!        COMSP WHICH IS SET IN THE SCRIPT RUNNING THE MODEL.
!
!        CONSTRUCT FULL PATH-FILENAME FOR OUTPUT FILE
         ENVAR = ' '
         RESTHR = ' '
         PGBOUT = ' '
         IPVOUT = ' '
         D3DOUT = ' '
         CALL GETENV('COMSP',ENVAR)
         CALL GETENV('tmmark',RESTHR)
         CALL GETENV('PGBOUT',PGBOUT)
         CALL GETENV('IPVOUT',IPVOUT)
         CALL GETENV('D3DOUT',D3DOUT)
         KDAT = INDEX(DATSET,' ') -1
         IF (KDAT.LE.0) KDAT = LEN(DATSET)
         KENV = INDEX(ENVAR,' ') -1
         IF (KENV.LE.0) KENV = LEN(ENVAR)
         KTHR = INDEX(RESTHR,' ') -1
         IF (KTHR.LE.0) KTHR = LEN(RESTHR)
         if(me==0) print *,'PGBOUT=',PGBOUT
!
      if(me==0)print *,'in get postfilename, ritehd=',ritehd,'ifhr=',ifhr,'modelname=',modelname, &
        'ENVAR(1:4)=',ENVAR(1:4),'RESTHR(1:4)=',RESTHR(1:4),'ifmin=',ifmin,'DATSET(1:KDAT)=', &
        DATSET(1:KDAT)
!
!        CONSTRUCT FULL PATH-FILENAME FOR OUTPUT FILE
         IF(MODELNAME=='GFS')THEN
          IF(D3DOUT(1:4).NE.BLANK .AND. &
             ((IGET(354).GT.0).OR.(IGET(355).GT.0).OR.  &
             (IGET(356).GT.0).OR.(IGET(357).GT.0).OR.  &
             (IGET(358).GT.0).OR.(IGET(359).GT.0).OR.  &
             (IGET(360).GT.0).OR.(IGET(361).GT.0).OR.  &
             (IGET(362).GT.0).OR.(IGET(363).GT.0).OR.  &
             (IGET(364).GT.0).OR.(IGET(365).GT.0).OR.  &
             (IGET(366).GT.0).OR.(IGET(367).GT.0).OR.  &
             (IGET(368).GT.0).OR.(IGET(369).GT.0).OR.  &
             (IGET(370).GT.0).OR.(IGET(371).GT.0).OR.  &
             (IGET(372).GT.0).OR.(IGET(373).GT.0).OR.  &
             (IGET(374).GT.0).OR.(IGET(375).GT.0)))THEN
              FNAME = D3DOUT
              PRINT*,' FNAME FROM D3DOUT=',FNAME
          ELSE IF(IPVOUT(1:4).NE.BLANK .AND.  &
             ((IGET(332).GT.0).OR.(IGET(333).GT.0).OR.  &
             (IGET(334).GT.0).OR.(IGET(335).GT.0).OR.  &
             (IGET(351).GT.0).OR.(IGET(352).GT.0).OR.  &
             (IGET(353).GT.0).OR.(IGET(378).GT.0)))THEN
              FNAME = IPVOUT
              PRINT*,' FNAME FROM IPVOUT=',FNAME
          ELSE IF(PGBOUT(1:4).NE.BLANK)THEN
            FNAME = PGBOUT
            PRINT*,' FNAME FROM PGBOUT=',FNAME
          ELSE
              NDIG=MAX(LOG10(IHR+0.5)+1.,2.)
!          WRITE(CFORM,'("('.GrbF',I",I1,".",I1,")")') NDIG,NDIG
              WRITE(CFORM,'("(I",I1,".",I1,")")') NDIG,NDIG
              WRITE(CFHOUR,CFORM) IHR
              FNAME = DATSET(1:KDAT) //'.GrbF'// CFHOUR
              print *,' FNAME=',FNAME
          END IF
!         IF(MODELNAME=='GFS'.AND.PGBOUT(1:4).NE.BLANK)THEN
!          FNAME = PGBOUT
!          PRINT*,' FNAME FROM PGBOUT=',FNAME
!
         ELSEIF (ENVAR(1:4).EQ.BLANK.AND.RESTHR(1:4).EQ.BLANK) THEN
          IF(IFMIN .GE. 1)THEN
           WRITE(DESCR2,1011) IHR
           WRITE(DESCR3,1011) IFMIN
           FNAME = DATSET(1:KDAT) // DESCR2  //':'// DESCR3(1:2)
          ELSE
           NDIG=MAX(LOG10(IHR+0.5)+1.,2.)
!          WRITE(CFORM,'("('.GrbF',I",I1,".",I1,")")') NDIG,NDIG
           WRITE(CFORM,'("(I",I1,".",I1,")")') NDIG,NDIG
           WRITE(CFHOUR,CFORM) IHR
           FNAME = DATSET(1:KDAT) //'.GrbF'// CFHOUR
      print *,' FNAME=',FNAME
!
!          IF(IHR.LT.100)THEN
!           WRITE(DESCR2,1011) IHR
!          ELSE
!           WRITE(DESCR2,1013) IHR
!          END IF
 1011      FORMAT('.GrbF',I2.2)
!1013      FORMAT('.GrbF',I3.3)
!          FNAME = DATSET(1:KDAT) // DESCR2
          END IF
!
         ELSEIF(ENVAR(1:4).EQ.BLANK.AND.RESTHR(1:4).NE.BLANK) THEN
          IF(IFMIN .GE. 1)THEN
           WRITE(DESCR3,1012) IFMIN
           IF (IHR.LT.100) THEN
              WRITE(DESCR2,1012) IHR
              FNAME = DATSET(1:KDAT) // DESCR2(1:2)  //':'// DESCR3(1:2) &
                 //'.'// RESTHR
           ELSE
              WRITE(DESCR2,1014) IHR
              FNAME = DATSET(1:KDAT) // DESCR2(1:3)  //':'// DESCR3(1:2) &
                 //'.'// RESTHR
           ENDIF
          ELSE
           IF (IHR.LT.100) THEN
             WRITE(DESCR2,1012) IHR
             FNAME = DATSET(1:KDAT) // DESCR2(1:2)  //'.'// RESTHR
           ELSE
             WRITE(DESCR2,1014) IHR
             FNAME = DATSET(1:KDAT) // DESCR2(1:3)  //'.'// RESTHR
           ENDIF
          end if
         ELSE
          IF(IFMIN .GE. 1)THEN
           WRITE(DESCR3,1012) IFMIN
           IF (IHR.LT.100) THEN
             WRITE(DESCR2,1012) IHR
             FNAME = ENVAR(1:KENV) // DATSET(1:KDAT) // DESCR2(1:2)  &
             //':'// DESCR3(1:2) //'.'// RESTHR
           ELSE
             WRITE(DESCR2,1014) IHR
             FNAME = ENVAR(1:KENV) // DATSET(1:KDAT) // DESCR2(1:3)  &
             //':'// DESCR3(1:2) //'.'// RESTHR
           ENDIF
          ELSE
           IF (IHR.LT.100) THEN
             WRITE(DESCR2,1012) IHR
             FNAME = ENVAR(1:KENV) // DATSET(1:KDAT) // DESCR2(1:2) &
                    //'.'// RESTHR
 1012        FORMAT(I2.2)
 1014        FORMAT(I3.3)
           ELSE
             WRITE(DESCR2,1014) IHR
             FNAME = ENVAR(1:KENV) // DATSET(1:KDAT) // DESCR2(1:3) &
                    //'.'// RESTHR
           ENDIF
          end if
         ENDIF
!
      ENDIF
      print *,'end of get post filename'

       end subroutine get_postfilename