!&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
    SUBROUTINE READ_NHB(NHB)
!     ******************************************************************
!$$$  SUBPROGRAM DOCUMENTATION BLOCK
!                .      .    .

! SUBPROGRAM:    READ_NHB    READ AND DISTRIBUTE NHB FILE
!   PRGRMMR: BLACK           ORG: W/NP2      DATE: 98-10-22

! ABSTRACT:
!     READ_NHB READS IN QUANTITIES FROM THE NHB FILE AND THEN
!     DISTRIBUTES THEM TO THE OTHER NODES/PEs AS NEEDED

! PROGRAM HISTORY LOG:
!   97-??-??  MEYS       - ORIGINATOR
!   97-08-??  BLACK      - REWROTE FOR BENCHMARK
!   98-??-??  TUCCILLO   - MODIFIED FOR SINGLE OR DOUBLE PRECISION

! USAGE: CALL READ_NHB FROM SUBROUTINE INIT
!   INPUT ARGUMENT LIST:
!       NHB: FILE NUMBER OF THE NHB FILE

!   OUTPUT ARGUMENT LIST:
!     NONE

!   OUTPUT FILES:
!     NONE

!   SUBPROGRAMS CALLED:
!     UNIQUE: DSTRB
!             IDSTRB

!     LIBRARY: NONE

!   COMMON BLOCKS: CTLBLK
!                  LOOPS
!                  MASKS
!                  DYNAM
!                  PHYS2
!                  MAPOT1
!                  VRBLS
!                  CONTIN
!                  PVRBLS
!                  BOCO
!                  ACMCLH
!                  ACMCLD
!                  ACMPRE
!                  ACMRDL
!                  ACMRDS
!                  ACMSFC
!                  CLDWTR
!                  CNVCLD
!                  SOIL
!                  INDX

!   ATTRIBUTES:
!     LANGUAGE: FORTRAN 90
!     MACHINE : IBM SP
!$$$

!-----------------------------------------------------------------------
!     INCLUDE/SET PARAMETERS.
!-----------------------------------------------------------------------
    INCLUDE "parmeta.f90"
    INCLUDE "parm.tbl.f90"
    INCLUDE "parmsoil.f90"
!-----------------------------------------------------------------------
    PARAMETER &
    (G=9.8,CM1=2937.4,CM2=4.9283,CM3=23.5518,EPS=0.622 &

! VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
!    &, Q2INI=.01E0,EPSQ2=1.E-4,EPSQ=2.E-12,EPSWET=1.E-4
!    &, Q2INI=1.0E0,EPSQ2=1.E-4,EPSQ=2.E-12,EPSWET=1.E-4
!    &, Q2INI=.50E0,EPSQ2=1.E-4,EPSQ=2.E-12,EPSWET=1.E-4
!    &, Q2INI=.01E0,EPSQ2=1.E-4,EPSQ=2.E-12,EPSWET=0.0E0
    , Q2INI=.50,EPSQ2=2.E-2,EPSQ=2.E-12,EPSWET=0.0 &
! AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    , Z0LAND=.10,Z0SEA=.001,FCM=.00001 &
    , DTR=0.1745329E-1,H360=360.0 &
    , H1905=190.5,H105=105.0)

!-----------------------------------------------------------------------
    PARAMETER &
    (IMJM=IM*JM-JM/2,JMP1=JM+1,JAM=6+2*(JM-10),LB=2*IM+JM-3 &
    , LM1=LM-1,LP1=LM+1,IMT=2*IM-1)

!-----------------------------------------------------------------------

!                            DECLARE VARIABLES

!-----------------------------------------------------------------------
    LOGICAL :: &
    RUN,RUNB,FIRST,RESTRT,SIGMA
!-----------------------------------------------------------------------
    CHARACTER (32) :: &
    LABEL
    CHARACTER (40) :: &
    CONTRL,FILALL,FILMST,FILTMP,FILTKE,FILUNV &
    ,FILCLD,FILRAD,FILSFC
!-----------------------------------------------------------------------
    INTEGER :: &
    IDATB(3)
!-----------------------------------------------------------------------

!     INCLUDE COMMON BLOCKS.

    INCLUDE "COMM_CTLBLK.f90"
    INCLUDE "COMM_LOOPS.f90"
    INCLUDE "COMM_MASKS.f90"
    INCLUDE "COMM_SLOPES.f90"
    INCLUDE "COMM_DYNAM.f90"
    INCLUDE "COMM_PHYS2.f90"
    INCLUDE "COMM_MAPOT1.f90"
    INCLUDE "COMM_VRBLS.f90"
    INCLUDE "COMM_CONTIN.f90"
    INCLUDE "COMM_PVRBLS.f90"
    INCLUDE "COMM_BOCO.f90"
    INCLUDE "COMM_ACMCLH.f90"
    INCLUDE "COMM_ACMCLD.f90"
    INCLUDE "COMM_ACMPRE.f90"
    INCLUDE "COMM_ACMRDL.f90"
    INCLUDE "COMM_ACMRDS.f90"
    INCLUDE "COMM_ACMSFC.f90"
    INCLUDE "COMM_CLDWTR.f90"
    INCLUDE "COMM_CNVCLD.f90"
    INCLUDE "COMM_SOIL.f90"
    INCLUDE "COMM_INDX.f90"
!-----------------------------------------------------------------------
    INCLUDE "mpif.h"
    INCLUDE "mpp.h"
#include "sp.h"
!-----------------------------------------------------------------------
    INTEGER :: ISTAT(MPI_STATUS_SIZE)
    INTEGER :: ILMH(IM,JM)

#ifdef DP_REAL
    INTEGER*8 :: ITEMPX(IM,JM)
    INTEGER*8 :: NFCSTX,NBCX,LISTX,IDTADX
    INTEGER*8 :: KHLAX,KHHAX,KVLAX,KVHAX,KHL2X,KHH2X,KVL2X,KVH2X
    INTEGER*8 :: IXMX,IYMX
    LOGICAL*8 SIGMAX
#endif
!-----------------------------------------------------------------------

!     DECLARE NAMELIST.

    NAMELIST /FCSTDATA/ &
    TSTART,TEND,TCP,RESTRT,SUBPOST,NMAP,TSHDE,SPL &
    ,NPHS,NCNVC,NRADSH,NRADLH &
    ,TPREC,THEAT,TCLOD,TRDSW,TRDLW,TSRFC

!***********************************************************************
    IF(MYPE == 0)THEN
    ! ench
        open(unit=NHB,form='unformatted',file='cnst.file')
    ! ench
#ifdef DP_REAL
        READ(NHB) &
        NFCSTX,NBCX,LISTX &
        ,    DT,IDTADX,SIGMAX &
        ,    KHLAX,KHHAX,KVLAX,KVHAX,KHL2X,KHH2X,KVL2X,KVH2X
        NFCST=NFCSTX
        NBC=NBCX
        LIST=LISTX
        IDTAD=IDTADX
        SIGMA=SIGMAX
        KHLA=KHLAX
        KHHA=KHHAX
        KVLA=KVLAX
        KVHA=KVHAX
        KHL2=KHL2X
        KHH2=KHH2X
        KVL2=KVL2X
        KVH2=KVH2X
#else
        READ(NHB) &
        NFCST,NBC,LIST &
        ,    DT,IDTAD,SIGMA &
        ,    KHLA,KHHA,KVLA,KVHA,KHL2,KHH2,KVL2,KVH2
#endif
    !       WRITE(0,*)'READ NFCST= ',NFCST,' FROM FILE NHB'
    ENDIF

    CALL MPI_BCAST(NFCST,1,MPI_INTEGER,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(NBC,1,MPI_INTEGER,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(LIST,1,MPI_INTEGER,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(DT,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(IDTAD,1,MPI_INTEGER,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(SIGMA,1,MPI_LOGICAL,0,MPI_COMM_COMP,IRTN)

    CALL MPI_BARRIER(MPI_COMM_COMP,IRTN)

    LIST=6
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE LMH
!***
    IF(MYPE == 0)THEN
#ifdef DP_REAL
        READ(NHB)ITEMPX
        ITEMP=ITEMPX
#else
        READ(NHB)ITEMP
#endif
        ILMH=ITEMP
    ENDIF
!     WRITE(0,*)'READ LMH'

    CALL IDSTRB(ITEMP,LMH)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE LMV
!***
    IF(MYPE == 0)THEN
#ifdef DP_REAL
        READ(NHB)ITEMPX
        ITEMP = ITEMPX
#else
        READ(NHB)ITEMP
#endif
    ENDIF
!     WRITE(0,*)'READ LMV'

    CALL IDSTRB(ITEMP,LMV)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE HBM2
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ HBM2'
    ENDIF

    CALL DSTRB(TEMP1,HBM2,1,1,1)
!-----------------------------------------------------------------------
!***
!***  FILL HBM3 ON EACH PE
!***
    DO J=MYJS,MYJE
        DO I=MYIS,MYIE
            HBM3(I,J)=0.
        ENDDO
    ENDDO

    DO J=MYJS,MYJE
        JG=J+MY_JS_GLB-1
        IF(JG >= 4 .AND. JG <= JM-3)THEN
            IHL=2-IHWG(JG)
            IHH=IM-2
            DO I=MYIS,MYIE
                IG=I+MY_IS_GLB-1
                IF(IG >= IHL .AND. IG <= IHH)HBM3(I,J)=1.
            ENDDO
        ENDIF
    ENDDO
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE VBM2
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ VBM2'
    ENDIF

    CALL DSTRB(TEMP1,VBM2,1,1,1)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE VBM3
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ VBM3'
    ENDIF

    CALL DSTRB(TEMP1,VBM3,1,1,1)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE SM
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ SM'
    ENDIF

    CALL DSTRB(TEMP1,SM,1,1,1)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE SICE
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ SICE'
    ENDIF

    CALL DSTRB(TEMP1,SICE,1,1,1)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE HTM
!***
    DO L=1,LM
        IF(MYPE == 0)THEN
            READ(NHB)TEMP1
        !         WRITE(0,*)'READ HTM'
        ENDIF
        CALL DSTRB(TEMP1,HTM,1,LM,L)
    ENDDO
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE VTM
!***
    DO L=1,LM
        IF(MYPE == 0)THEN
            READ(NHB)TEMP1
        !         WRITE(0,*)'READ VTM'
        ENDIF
        CALL DSTRB(TEMP1,VTM,1,LM,L)
    ENDDO
!-----------------------------------------------------------------------

    IF(MYPE == 0)THEN
        READ(NHB)DY,CPGFV,EN,ENT,R,PT,TDDAMP &
        ,            F4D,F4Q,EF4T,DETA,RDETA,AETA,F4Q2,ETA,DFL &
        ,            EM,EMT
    !       WRITE(0,*)'READ DY'
    ENDIF

    CALL MPI_BCAST(DY,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(CPGFV,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(EN,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(ENT,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(R,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(PT,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(TDDAMP,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(F4D,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(F4Q,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(EF4T,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(DETA(1),LM,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(RDETA(1),LM,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(AETA(1),LM,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(F4Q2(1),LM,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(ETA(1),LP1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(DFL(1),LP1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(EM(1),JAM,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(EMT(1),JAM,MPI_REAL,0,MPI_COMM_COMP,IRTN)

    CALL MPI_BARRIER(MPI_COMM_COMP,IRTN)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE DX
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ DX'
    ENDIF

    CALL DSTRB(TEMP1,DX,1,1,1)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE WPDAR
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ WPDAR'
    ENDIF

    CALL DSTRB(TEMP1,WPDAR,1,1,1)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE CPGFU
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ CPGFU'
    ENDIF

    CALL DSTRB(TEMP1,CPGFU,1,1,1)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE CURV
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ CURV'
    ENDIF

    CALL DSTRB(TEMP1,CURV,1,1,1)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE FCP
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ FCP'
    ENDIF

    CALL DSTRB(TEMP1,FCP,1,1,1)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE FDIV
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ FDIV'
    ENDIF

    CALL DSTRB(TEMP1,FDIV,1,1,1)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE FAD
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ FAD'
    ENDIF

    CALL DSTRB(TEMP1,FAD,1,1,1)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE F
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ F'
    ENDIF

    CALL DSTRB(TEMP1,F,1,1,1)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE DDMPU
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ DDMPU'
    ENDIF

    CALL DSTRB(TEMP1,DDMPU,1,1,1)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE DDMPV
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ DDMPV'
    ENDIF

    CALL DSTRB(TEMP1,DDMPV,1,1,1)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE PT, GLAT
!***
    IF(MYPE == 0)THEN
        READ(NHB)PT2,TEMP1
    !       WRITE(0,*)'READ PT, GLAT'
    ENDIF

    CALL DSTRB(TEMP1,GLAT,1,1,1)
    CALL MPI_BCAST(PT2,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE GLON
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ GLON'
    ENDIF

    CALL DSTRB(TEMP1,GLON,1,1,1)
!-----------------------------------------------------------------------

    IF(MYPE == 0)THEN
        READ(NHB)PLQ,RDPQ,RDTHEQ,STHEQ,THE0Q
    !       WRITE(0,*)'READ PLQ'
    ENDIF

    CALL MPI_BCAST(PLQ,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(RDPQ,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(RDTHEQ,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(STHEQ(1),ITBQ,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(THE0Q(1),ITBQ,MPI_REAL,0,MPI_COMM_COMP,IRTN)

    CALL MPI_BARRIER(MPI_COMM_COMP,IRTN)
!-----------------------------------------------------------------------

    IF(MYPE == 0)THEN
        READ(NHB)ROS,CS,DS,ROI,CI,DI &
        ,            PL,THL,RDQ,RDTH,RDP,RDTHE &
        ,            DETA2,AETA2,DFRLG &
        ,            QS0,SQS,STHE,THE0
    !       WRITE(0,*)'READ ROS'
    ENDIF

    CALL MPI_BCAST(ROS,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(CS,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(DS,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(ROI,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(CI,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(DI,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(PL,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(THL,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(RDQ,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(RDTH,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(RDP,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(RDTHE,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(DETA2(1),LM,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(AETA2(1),LM,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(DFRLG(1),LP1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(QS0(1),JTB,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(SQS(1),JTB,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(STHE(1),ITB,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(THE0(1),ITB,MPI_REAL,0,MPI_COMM_COMP,IRTN)

    CALL MPI_BARRIER(MPI_COMM_COMP,IRTN)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE MXSNAL
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ MXSNAL'
    ENDIF

    CALL DSTRB(TEMP1,MXSNAL,1,1,1)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE EPSR
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ EPSR'
    ENDIF

    CALL DSTRB(TEMP1,EPSR,1,1,1)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE TG
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ TG'
    ENDIF

    CALL DSTRB(TEMP1,TG,1,1,1)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE GFFC
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ GFFC'
    ENDIF

    CALL DSTRB(TEMP1,GFFC,1,1,1)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE SST
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ SST'
    ENDIF

    CALL DSTRB(TEMP1,SST,1,1,1)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE ALBASE
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ ALBASE'
    ENDIF

    CALL DSTRB(TEMP1,ALBASE,1,1,1)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE HDAC
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ HDAC'
    ENDIF

    CALL DSTRB(TEMP1,HDAC,1,1,1)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE HDACV
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    !       WRITE(0,*)'READ HDACV'
    ENDIF

    CALL DSTRB(TEMP1,HDACV,1,1,1)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE TTBLQ
!***
    IF(MYPE == 0)THEN
        READ(NHB)TTBLQ
    !       WRITE(0,*)'READ TTBLQ'
    ENDIF

    CALL MPI_BCAST(TTBLQ(1,1),ITBQ*JTBQ,MPI_REAL,0, &
    MPI_COMM_COMP,IRTN)

    CALL MPI_BARRIER(MPI_COMM_COMP,IRTN)
!-----------------------------------------------------------------------

    IF(MYPE == 0)THEN
#ifdef DP_REAL
        READ(NHB)PTBL,TTBL &
        ,            R1,PT1,TSPH &
        ,            WBD,SBD,TLM0D,TPH0D,DLMD,DPHD,CMLD,DP30 &
        ,            X1P,Y1P,IXMX,IYMX &
        ,            DETA1,AETA1,ETA1
        IXM=IXMX
        IYM=IYMX
#else
        READ(NHB)PTBL,TTBL &
        ,            R1,PT1,TSPH &
        ,            WBD,SBD,TLM0D,TPH0D,DLMD,DPHD,CMLD,DP30 &
        ,            X1P,Y1P,IXM,IYM &
        ,            DETA1,AETA1,ETA1
#endif
    !       WRITE(0,*)'READ PTBL'
    ENDIF

    CALL MPI_BCAST(PTBL(1,1),ITB*JTB,MPI_REAL,0, &
    MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(TTBL(1,1),JTB*ITB,MPI_REAL,0, &
    MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(R1,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(PT1,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(TSPH,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(WBD,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(SBD,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(TLM0D,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(TPH0D,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(DLMD,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(DPHD,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(CMLD,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(DP30,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(X1P,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(Y1P,1,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(IXM,1,MPI_INTEGER,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(IYM,1,MPI_INTEGER,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(DETA1(1),LM,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(AETA1(1),LM,MPI_REAL,0,MPI_COMM_COMP,IRTN)
    CALL MPI_BCAST(ETA1(1),LP1,MPI_REAL,0,MPI_COMM_COMP,IRTN)

    CALL MPI_BARRIER(MPI_COMM_COMP,IRTN)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE IVGTYP
!***
    IF(MYPE == 0)THEN
#ifdef DP_REAL
        READ(NHB)ITEMPX
        ITEMP=ITEMPX
#else
        READ(NHB)ITEMP
#endif
    ENDIF

    CALL IDSTRB(ITEMP,IVGTYP)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE ISLTYP
!***
    IF(MYPE == 0)THEN
#ifdef DP_REAL
        READ(NHB)ITEMPX
        ITEMP=ITEMPX
#else
        READ(NHB)ITEMP
#endif
    ENDIF

    CALL IDSTRB(ITEMP,ISLTYP)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE ISLOPE
!***
    IF(MYPE == 0)THEN
#ifdef DP_REAL
        READ(NHB)ITEMPX
        ITEMP=ITEMPX
#else
        READ(NHB)ITEMP
#endif
    ENDIF

    CALL IDSTRB(ITEMP,ISLOPE)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE VEGFRC
!***
    IF(MYPE == 0)THEN
        READ(NHB)TEMP1
    ENDIF

    CALL DSTRB(TEMP1,VEGFRC,1,1,1)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE SLDPTH
!***
    IF(MYPE == 0)THEN
        READ(NHB)SLDPTH
    ENDIF

    CALL MPI_BCAST(SLDPTH(1),NSOIL,MPI_REAL,0,MPI_COMM_COMP,IRTN)
!-----------------------------------------------------------------------
!***
!***  DISTRIBUTE RTDPTH
!***
    IF(MYPE == 0)THEN
        READ(NHB)RTDPTH
    ENDIF

    CALL MPI_BCAST(RTDPTH(1),NSOIL,MPI_REAL,0,MPI_COMM_COMP,IRTN)
!-----------------------------------------------------------------------
    IF(MYPE == 0)THEN
        DO J=1,JM
            DO I=1,IM
                ITEMP(I,J)=0
            ENDDO
        ENDDO

        DO J=8,JM-7
            DO I=4+MOD(J+1,2),IM-4
                ITEMP(I,J)=0
                LMHN=ILMH(I,J+1)
                LMHS=ILMH(I,J-1)
                LMHE=ILMH(I  +MOD(J,2),J)
                LMHW=ILMH(I-1+MOD(J,2),J)
                IF      (LMHE < LMHN .AND. LMHE < LMHW .AND. LMHE < LMHS) THEN
                    ITEMP(I,J)=1
                ELSE IF (LMHE == LMHN .AND. LMHE < LMHW .AND. LMHE < LMHS) THEN
                    ITEMP(I,J)=2
                ELSE IF (LMHN < LMHW .AND. LMHN < LMHS .AND. LMHN < LMHE) THEN
                    ITEMP(I,J)=3
                ELSE IF (LMHN == LMHW .AND. LMHN < LMHS .AND. LMHN < LMHE) THEN
                    ITEMP(I,J)=4
                ELSE IF (LMHW < LMHS .AND. LMHW < LMHE .AND. LMHW < LMHN) THEN
                    ITEMP(I,J)=5
                ELSE IF (LMHW == LMHS .AND. LMHW < LMHE .AND. LMHW < LMHN) THEN
                    ITEMP(I,J)=6
                ELSE IF (LMHS < LMHE .AND. LMHS < LMHN .AND. LMHS < LMHW) THEN
                    ITEMP(I,J)=7
                ELSE IF (LMHS == LMHE .AND. LMHS < LMHN .AND. LMHS < LMHW) THEN
                    ITEMP(I,J)=8
                ELSE
                    ITEMP(I,J)=0
                END IF
            ENDDO
        ENDDO
    ENDIF

    CALL IDSTRB(ITEMP,ISLD)
!-----------------------------------------------------------------------

!     END OF SUBROUTINE READ_NHB

!-----------------------------------------------------------------------
    RETURN
    END SUBROUTINE READ_NHB

