Skip to content
Snippets Groups Projects
mode_prandtl.F90 133 KiB
Newer Older
  • Learn to ignore specific revisions
  •   REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDRDZ
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PM3_THR_WTH2
      REAL, DIMENSION(D%NIJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
    
      INTEGER :: IKB, IKE, JIJ,JK,IIJB,IIJE,IKT
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WTH2',0,ZHOOK_HANDLE)
    
    IKT=D%NKT
    !
    !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    ZWORK1(IIJB:IIJE,1:IKT) = (1.+PREDR1(IIJB:IIJE,1:IKT))*PBLL_O_E(IIJB:IIJE,1:IKT)* & 
                                      PETHETA(IIJB:IIJE,1:IKT)*PDRDZ(IIJB:IIJE,1:IKT)/PD(IIJB:IIJE,1:IKT)
    !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    
    !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    PM3_THR_WTH2(IIJB:IIJE,1:IKT) = - 0.25*PLEPS(IIJB:IIJE,1:IKT) & 
    
                                        / PSQRT_TKE(IIJB:IIJE,1:IKT)/CSTURB%XCTD*TURBN%XCTV * ZWORK2(IIJB:IIJE,1:IKT)
    
    !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    
    PM3_THR_WTH2(IIJB:IIJE,IKB-1)=PM3_THR_WTH2(IIJB:IIJE,IKB)
    PM3_THR_WTH2(IIJB:IIJE,IKE+1)=PM3_THR_WTH2(IIJB:IIJE,IKE)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WTH2',1,ZHOOK_HANDLE)
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE D_M3_THR_WTH2_O_DDTDZ(D,CSTURB,TURBN,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ,PD_M3_THR_WTH2_O_DDTDZ)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDRDZ
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PD_M3_THR_WTH2_O_DDTDZ
      REAL, DIMENSION(D%NIJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
    
      INTEGER :: IKB, IKE, JIJ,JK,IIJB,IIJE,IKT
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTH2_O_DDTDZ',0,ZHOOK_HANDLE)
    
    IKT=D%NKT
    !
    !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    ZWORK1(IIJB:IIJE,1:IKT) = -(1.+PREDR1(IIJB:IIJE,1:IKT))*(PBLL_O_E(IIJB:IIJE,1:IKT) & 
                                     *PETHETA(IIJB:IIJE,1:IKT)/PD(IIJB:IIJE,1:IKT))**2&
                                     *PDRDZ(IIJB:IIJE,1:IKT)&
                                     *(1.5+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT))
    !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    
    !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    PD_M3_THR_WTH2_O_DDTDZ(IIJB:IIJE,1:IKT) = - 0.25*PLEPS(IIJB:IIJE,1:IKT) &
    
                                     /PSQRT_TKE(IIJB:IIJE,1:IKT)/CSTURB%XCTD*TURBN%XCTV**2 * ZWORK2(IIJB:IIJE,1:IKT) 
    
    !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    
    PD_M3_THR_WTH2_O_DDTDZ(IIJB:IIJE,IKB-1)=PD_M3_THR_WTH2_O_DDTDZ(IIJB:IIJE,IKB)
    PD_M3_THR_WTH2_O_DDTDZ(IIJB:IIJE,IKE+1)=PD_M3_THR_WTH2_O_DDTDZ(IIJB:IIJE,IKE)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTH2_O_DDTDZ',1,ZHOOK_HANDLE)
    
    END SUBROUTINE D_M3_THR_WTH2_O_DDTDZ
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE D_M3_THR_WTH2_O_DDRDZ(D,CSTURB,TURBN,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PD_M3_THR_WTH2_O_DDRDZ)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PD_M3_THR_WTH2_O_DDRDZ
      REAL, DIMENSION(D%NIJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
    
      INTEGER :: IKB, IKE, JIJ,JK,IIJB,IIJE,IKT
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTH2_O_DDRDZ',0,ZHOOK_HANDLE)
    
    IKT=D%NKT
    !
    !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    ZWORK1(IIJB:IIJE,1:IKT) = PBLL_O_E(IIJB:IIJE,1:IKT)*PETHETA(IIJB:IIJE,1:IKT)/PD(IIJB:IIJE,1:IKT)&
           *(-(1.+PREDR1(IIJB:IIJE,1:IKT))*PREDR1(IIJB:IIJE,1:IKT)/PD(IIJB:IIJE,1:IKT)&
           *(1.5+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT))+(1.+2.*PREDR1(IIJB:IIJE,1:IKT)))
    !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    
    !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    PD_M3_THR_WTH2_O_DDRDZ(IIJB:IIJE,1:IKT) = - 0.25*PLEPS(IIJB:IIJE,1:IKT)/PSQRT_TKE(IIJB:IIJE,1:IKT)& 
    
                                                    / CSTURB%XCTD*TURBN%XCTV * ZWORK2(IIJB:IIJE,1:IKT)
    
    !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    
    PD_M3_THR_WTH2_O_DDRDZ(IIJB:IIJE,IKB-1)=PD_M3_THR_WTH2_O_DDRDZ(IIJB:IIJE,IKB)
    PD_M3_THR_WTH2_O_DDRDZ(IIJB:IIJE,IKE+1)=PD_M3_THR_WTH2_O_DDRDZ(IIJB:IIJE,IKE)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTH2_O_DDRDZ',1,ZHOOK_HANDLE)
    
    END SUBROUTINE D_M3_THR_WTH2_O_DDRDZ
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE M3_THR_W2TH(D,CSTURB,TURBN,PREDR1,PD,PLM,PLEPS,PTKE,PDRDZ,PM3_THR_W2TH)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLM
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDRDZ
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PM3_THR_W2TH
      REAL, DIMENSION(D%NIJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
    
      INTEGER :: IKB, IKE, JIJ,JK,IIJB,IIJE,IKT
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_W2TH',0,ZHOOK_HANDLE)
    
    IKT=D%NKT
    !
    !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    ZWORK1(IIJB:IIJE,1:IKT) = (1.+PREDR1(IIJB:IIJE,1:IKT))*PDRDZ(IIJB:IIJE,1:IKT)/PD(IIJB:IIJE,1:IKT)
    !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    
    !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    PM3_THR_W2TH(IIJB:IIJE,1:IKT) = - 0.75*PLM(IIJB:IIJE,1:IKT)*PLEPS(IIJB:IIJE,1:IKT)& 
    
                                          / PTKE(IIJB:IIJE,1:IKT) * TURBN%XCTV * ZWORK2(IIJB:IIJE,1:IKT)
    
    !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    
    PM3_THR_W2TH(IIJB:IIJE,IKB-1)=PM3_THR_W2TH(IIJB:IIJE,IKB)
    PM3_THR_W2TH(IIJB:IIJE,IKE+1)=PM3_THR_W2TH(IIJB:IIJE,IKE)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_W2TH',1,ZHOOK_HANDLE)
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE D_M3_THR_W2TH_O_DDTDZ(D,CSTURB,TURBN,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDRDZ,PETHETA,PD_M3_THR_W2TH_O_DDTDZ)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLM
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDRDZ
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PD_M3_THR_W2TH_O_DDTDZ
      REAL, DIMENSION(D%NIJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
    
      INTEGER :: IKB, IKE, JIJ,JK,IIJB,IIJE,IKT
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2TH_O_DDTDZ',0,ZHOOK_HANDLE)
    
    IKT=D%NKT
    !
    !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    ZWORK1(IIJB:IIJE,1:IKT) =  -PETHETA(IIJB:IIJE,1:IKT)*PBLL_O_E(IIJB:IIJE,1:IKT)*& 
    (1.+PREDR1(IIJB:IIJE,1:IKT))*PDRDZ(IIJB:IIJE,1:IKT)& 
    *(1.5+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT))/PD(IIJB:IIJE,1:IKT)**2
    !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    
    !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    PD_M3_THR_W2TH_O_DDTDZ(IIJB:IIJE,1:IKT) = - 0.75*PLM(IIJB:IIJE,1:IKT)*PLEPS(IIJB:IIJE,1:IKT)&
    
                                                    / PTKE(IIJB:IIJE,1:IKT) * TURBN%XCTV**2 * ZWORK1(IIJB:IIJE,1:IKT)
    
    !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    
    PD_M3_THR_W2TH_O_DDTDZ(IIJB:IIJE,IKB-1)=PD_M3_THR_W2TH_O_DDTDZ(IIJB:IIJE,IKB)
    PD_M3_THR_W2TH_O_DDTDZ(IIJB:IIJE,IKE+1)=PD_M3_THR_W2TH_O_DDTDZ(IIJB:IIJE,IKE)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2TH_O_DDTDZ',1,ZHOOK_HANDLE)
    
    END SUBROUTINE D_M3_THR_W2TH_O_DDTDZ
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE D_M3_THR_W2TH_O_DDRDZ(D,CSTURB,TURBN,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,PD_M3_THR_W2TH_O_DDRDZ)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLM
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PD_M3_THR_W2TH_O_DDRDZ
      REAL, DIMENSION(D%NIJT,D%NKT) :: ZWORK1,ZWORK2 ! working array
    
      INTEGER :: IKB, IKE, JIJ,JK,IIJB,IIJE,IKT
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2TH_O_DDRDZ',0,ZHOOK_HANDLE)
    
    IKT=D%NKT
    !
    !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    ZWORK1(IIJB:IIJE,1:IKT) =  -(1.+PREDR1(IIJB:IIJE,1:IKT))*PREDR1(IIJB:IIJE,1:IKT)&
    * (1.5+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT))/PD(IIJB:IIJE,1:IKT)**2          &
            +(1.+2.*PREDR1(IIJB:IIJE,1:IKT))/PD(IIJB:IIJE,1:IKT)
    !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    
    !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    PD_M3_THR_W2TH_O_DDRDZ(IIJB:IIJE,1:IKT) = - 0.75*PLM(IIJB:IIJE,1:IKT)*PLEPS(IIJB:IIJE,1:IKT)&
    
                                                    / PTKE(IIJB:IIJE,1:IKT) * TURBN%XCTV * ZWORK2(IIJB:IIJE,1:IKT)
    
    !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
    
    PD_M3_THR_W2TH_O_DDRDZ(IIJB:IIJE,IKB-1)=PD_M3_THR_W2TH_O_DDRDZ(IIJB:IIJE,IKB)
    PD_M3_THR_W2TH_O_DDRDZ(IIJB:IIJE,IKE+1)=PD_M3_THR_W2TH_O_DDRDZ(IIJB:IIJE,IKE)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2TH_O_DDRDZ',1,ZHOOK_HANDLE)
    
    END SUBROUTINE D_M3_THR_W2TH_O_DDRDZ
    
    !----------------------------------------------------------------------------
    !----------------------------------------------------------------------------
    !----------------------------------------------------------------------------
    !
    
    SUBROUTINE PSI3(D,CSTURB,TURBN,PREDR1,PREDTH1,PRED2R3,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV,PPSI3)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PRED2TH3
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PRED2R3
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PRED2THR3
    
      CHARACTER(LEN=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
    
      LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
    
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PPSI3
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:PSI3',0,ZHOOK_HANDLE)
    
    CALL PHI3(D,CSTURB,TURBN,PREDR1,PREDTH1,PRED2R3,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV,PPSI3)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:PSI3',1,ZHOOK_HANDLE)
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE D_PSI3DRDZ_O_DDRDZ(D,CSTURB,TURBN,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV,PD_PSI3DRDZ_O_DDRDZ)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PPSI3
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PRED2R3
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PRED2THR3
    
      CHARACTER(LEN=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
    
      LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
    
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PD_PSI3DRDZ_O_DDRDZ
    
    
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DRDZ_O_DDRDZ',0,ZHOOK_HANDLE)
    
    CALL D_PHI3DTDZ_O_DDTDZ(D,CSTURB,TURBN,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV,PD_PSI3DRDZ_O_DDRDZ)
    
    !
    !C'est ok?!
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DRDZ_O_DDRDZ',1,ZHOOK_HANDLE)
    
    END SUBROUTINE D_PSI3DRDZ_O_DDRDZ
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE D_PSI3DTDZ_O_DDTDZ(D,CSTURB,TURBN,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV,PD_PSI3DTDZ_O_DDTDZ)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PPSI3
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PRED2R3
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PRED2THR3
    
      CHARACTER(LEN=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
    
      LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
    
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PD_PSI3DTDZ_O_DDTDZ
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DTDZ_O_DDTDZ',0,ZHOOK_HANDLE)
    
    CALL D_PHI3DRDZ_O_DDRDZ(D,CSTURB,TURBN,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV,PD_PSI3DTDZ_O_DDTDZ)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DTDZ_O_DDTDZ',1,ZHOOK_HANDLE)
    
    END SUBROUTINE D_PSI3DTDZ_O_DDTDZ
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE D_PSI3DRDZ2_O_DDRDZ(D,CSTURB,TURBN,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDRDZ,HTURBDIM,OUSERV,PD_PSI3DRDZ2_O_DDRDZ)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PPSI3
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PRED2R3
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PRED2THR3
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDRDZ
    
      CHARACTER(LEN=4),       INTENT(IN) :: HTURBDIM  ! 1DIM or 3DIM turb. scheme
    
      LOGICAL,                INTENT(IN) :: OUSERV    ! flag to use vapor
    
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PD_PSI3DRDZ2_O_DDRDZ
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DRDZ2_O_DDRDZ',0,ZHOOK_HANDLE)
    
    CALL D_PHI3DTDZ2_O_DDTDZ(D,CSTURB,TURBN,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDRDZ,HTURBDIM,OUSERV,PD_PSI3DRDZ2_O_DDRDZ)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DRDZ2_O_DDRDZ',1,ZHOOK_HANDLE)
    
    END SUBROUTINE D_PSI3DRDZ2_O_DDRDZ
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE M3_WR_WR2(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PM3_WR_WR2)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PEMOIST
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PM3_WR_WR2
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WR2',0,ZHOOK_HANDLE)
    
    CALL M3_WTH_WTH2(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PM3_WR_WR2)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WR2',1,ZHOOK_HANDLE)
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE D_M3_WR_WR2_O_DDRDZ(D,CSTURB,TURBN,PM3_WR_WR2,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PD_M3_WR_WR2_O_DDRDZ)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PM3_WR_WR2
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PEMOIST
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PD_M3_WR_WR2_O_DDRDZ
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WR2_O_DDRDZ',0,ZHOOK_HANDLE)
    
    CALL D_M3_WTH_WTH2_O_DDTDZ(D,CSTURB,TURBN,PM3_WR_WR2,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PD_M3_WR_WR2_O_DDRDZ)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WR2_O_DDRDZ',1,ZHOOK_HANDLE)
    
    END SUBROUTINE D_M3_WR_WR2_O_DDRDZ
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE M3_WR_W2R(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PKEFF,PTKE,PM3_WR_W2R)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PKEFF
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PM3_WR_W2R
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_W2R',0,ZHOOK_HANDLE)
    
    CALL M3_WTH_W2TH(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PKEFF,PTKE,PM3_WR_W2R)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_W2R',1,ZHOOK_HANDLE)
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE D_M3_WR_W2R_O_DDRDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PKEFF,PTKE,PD_M3_WR_W2R_O_DDRDZ)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PEMOIST
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PKEFF
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PD_M3_WR_W2R_O_DDRDZ
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_W2R_O_DDRDZ',0,ZHOOK_HANDLE)
    
    CALL D_M3_WTH_W2TH_O_DDTDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PKEFF,PTKE,PD_M3_WR_W2R_O_DDRDZ)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_W2R_O_DDRDZ',1,ZHOOK_HANDLE)
    
    END SUBROUTINE D_M3_WR_W2R_O_DDRDZ
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE M3_WR_W2TH(D,CSTURB,TURBN,PD,PKEFF,PTKE,PBLL_O_E,PETHETA,PDRDZ,PM3_WR_W2TH)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PKEFF
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDRDZ
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PM3_WR_W2TH
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_W2TH',0,ZHOOK_HANDLE)
    
    CALL M3_WTH_W2R(D,CSTURB,TURBN,PD,PKEFF,PTKE,PBLL_O_E,PETHETA,PDRDZ,PM3_WR_W2TH)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_W2TH',1,ZHOOK_HANDLE)
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE D_M3_WR_W2TH_O_DDRDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PKEFF,PTKE,PBLL_O_E,PETHETA,PD_M3_WR_W2TH_O_DDRDZ)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PKEFF
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PD_M3_WR_W2TH_O_DDRDZ
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_W2TH_O_DDRDZ',0,ZHOOK_HANDLE)
    
    CALL D_M3_WTH_W2R_O_DDTDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PKEFF,PTKE,PBLL_O_E,PETHETA,PD_M3_WR_W2TH_O_DDRDZ)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_W2TH_O_DDRDZ',1,ZHOOK_HANDLE)
    
    END SUBROUTINE D_M3_WR_W2TH_O_DDRDZ
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE M3_WR_WTH2(D,CSTURB,TURBN,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDRDZ,PM3_WR_WTH2)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PKEFF
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBETA
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDRDZ
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PM3_WR_WTH2
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WTH2',0,ZHOOK_HANDLE)
    
    CALL M3_WTH_WR2(D,CSTURB,TURBN,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDRDZ,PM3_WR_WTH2)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WTH2',1,ZHOOK_HANDLE)
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE D_M3_WR_WTH2_O_DDRDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,&
                                   &PBETA,PLEPS,PETHETA,PD_M3_WR_WTH2_O_DDRDZ)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PKEFF
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBETA
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PD_M3_WR_WTH2_O_DDRDZ
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WTH2_O_DDRDZ',0,ZHOOK_HANDLE)
    
    CALL D_M3_WTH_WR2_O_DDTDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PD_M3_WR_WTH2_O_DDRDZ)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WTH2_O_DDRDZ',1,ZHOOK_HANDLE)
    
    END SUBROUTINE D_M3_WR_WTH2_O_DDRDZ
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE M3_WR_WTHR(D,CSTURB,TURBN,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PETHETA,PM3_WR_WTHR)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PKEFF
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBETA
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PM3_WR_WTHR
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WTHR',0,ZHOOK_HANDLE)
    
    CALL M3_WTH_WTHR(D,CSTURB,TURBN,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PETHETA,PM3_WR_WTHR)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WTHR',1,ZHOOK_HANDLE)
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE D_M3_WR_WTHR_O_DDRDZ(D,CSTURB,TURBN,PM3_WR_WTHR,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PD_M3_WR_WTHR_O_DDRDZ)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PM3_WR_WTHR
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PEMOIST
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PD_M3_WR_WTHR_O_DDRDZ
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WTHR_O_DDRDZ',0,ZHOOK_HANDLE)
    
    CALL D_M3_WTH_WTHR_O_DDTDZ(D,CSTURB,TURBN,PM3_WR_WTHR,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PD_M3_WR_WTHR_O_DDRDZ)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WTHR_O_DDRDZ',1,ZHOOK_HANDLE)
    
    END SUBROUTINE D_M3_WR_WTHR_O_DDRDZ
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE M3_R2_W2R(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PDRDZ,PLM,PLEPS,PTKE,PM3_R2_W2R)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDRDZ
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLM
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT) :: PM3_R2_W2R
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_W2R',0,ZHOOK_HANDLE)
    
    CALL M3_TH2_W2TH(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PDRDZ,PLM,PLEPS,PTKE,PM3_R2_W2R)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_W2R',1,ZHOOK_HANDLE)
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE D_M3_R2_W2R_O_DDRDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,OUSERV,PD_M3_R2_W2R_O_DDRDZ)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLM
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTKE
    
      LOGICAL,                INTENT(IN) :: OUSERV
    
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PD_M3_R2_W2R_O_DDRDZ
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_W2R_O_DDRDZ',0,ZHOOK_HANDLE)
    
    CALL D_M3_TH2_W2TH_O_DDTDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,OUSERV,PD_M3_R2_W2R_O_DDRDZ)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_W2R_O_DDRDZ',1,ZHOOK_HANDLE)
    
    END SUBROUTINE D_M3_R2_W2R_O_DDRDZ
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE M3_R2_WR2(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PM3_R2_WR2)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PM3_R2_WR2
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WR2',0,ZHOOK_HANDLE)
    
    CALL M3_TH2_WTH2(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PM3_R2_WR2)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WR2',1,ZHOOK_HANDLE)
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE D_M3_R2_WR2_O_DDRDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PD_M3_R2_WR2_O_DDRDZ)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PEMOIST
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PD_M3_R2_WR2_O_DDRDZ
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WR2_O_DDRDZ',0,ZHOOK_HANDLE)
    
    CALL D_M3_TH2_WTH2_O_DDTDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PD_M3_R2_WR2_O_DDRDZ)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WR2_O_DDRDZ',1,ZHOOK_HANDLE)
    
    END SUBROUTINE D_M3_R2_WR2_O_DDRDZ
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE M3_R2_W2TH(D,CSTURB,TURBN,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ,PM3_R2_W2TH)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLM
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDRDZ
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PM3_R2_W2TH
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_W2TH',0,ZHOOK_HANDLE)
    
    CALL M3_TH2_W2R(D,CSTURB,TURBN,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ,PM3_R2_W2TH)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_W2TH',1,ZHOOK_HANDLE)
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE D_M3_R2_W2TH_O_DDRDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ,PD_M3_R2_W2TH_O_DDRDZ)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLM
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDRDZ
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PD_M3_R2_W2TH_O_DDRDZ
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_W2TH_O_DDRDZ',0,ZHOOK_HANDLE)
    
    CALL D_M3_TH2_W2R_O_DDTDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PETHETA,PDRDZ,PD_M3_R2_W2TH_O_DDRDZ)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_W2TH_O_DDRDZ',1,ZHOOK_HANDLE)
    
    END SUBROUTINE D_M3_R2_W2TH_O_DDRDZ
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE M3_R2_WTH2(D,CSTURB,TURBN,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ,PM3_R2_WTH2)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDRDZ
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PM3_R2_WTH2
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WTH2',0,ZHOOK_HANDLE)
    
    CALL M3_TH2_WR2(D,CSTURB,TURBN,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ,PM3_R2_WTH2)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WTH2',1,ZHOOK_HANDLE)
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE D_M3_R2_WTH2_O_DDRDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ,PD_M3_R2_WTH2_O_DDRDZ)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDRDZ
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PD_M3_R2_WTH2_O_DDRDZ
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WTH2_O_DDRDZ',0,ZHOOK_HANDLE)
    
    CALL D_M3_TH2_WR2_O_DDTDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ,PD_M3_R2_WTH2_O_DDRDZ)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WTH2_O_DDRDZ',1,ZHOOK_HANDLE)
    
    END SUBROUTINE D_M3_R2_WTH2_O_DDRDZ
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE M3_R2_WTHR(D,CSTURB,TURBN,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ,PM3_R2_WTHR)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDRDZ
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PM3_R2_WTHR
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WTHR',0,ZHOOK_HANDLE)
    
    CALL M3_TH2_WTHR(D,CSTURB,TURBN,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ,PM3_R2_WTHR)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_R2_WTHR',1,ZHOOK_HANDLE)
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE D_M3_R2_WTHR_O_DDRDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ,PD_M3_R2_WTHR_O_DDRDZ)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDRDZ
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PD_M3_R2_WTHR_O_DDRDZ
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WTHR_O_DDRDZ',0,ZHOOK_HANDLE)
    
    CALL D_M3_TH2_WTHR_O_DDTDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ,PD_M3_R2_WTHR_O_DDRDZ)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_R2_WTHR_O_DDRDZ',1,ZHOOK_HANDLE)
    
    END SUBROUTINE D_M3_R2_WTHR_O_DDRDZ
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE D_M3_THR_WTHR_O_DDRDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PD_M3_THR_WTHR_O_DDRDZ)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PEMOIST
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PD_M3_THR_WTHR_O_DDRDZ
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTHR_O_DDRDZ',0,ZHOOK_HANDLE)
    
    CALL D_M3_THR_WTHR_O_DDTDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PD_M3_THR_WTHR_O_DDRDZ)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTHR_O_DDRDZ',1,ZHOOK_HANDLE)
    
    END SUBROUTINE D_M3_THR_WTHR_O_DDRDZ
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE M3_THR_WR2(D,CSTURB,TURBN,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ,PM3_THR_WR2)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PEMOIST
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDTDZ
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PM3_THR_WR2
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WR2',0,ZHOOK_HANDLE)
    
    CALL M3_THR_WTH2(D,CSTURB,TURBN,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ,PM3_THR_WR2)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WR2',1,ZHOOK_HANDLE)
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE D_M3_THR_WR2_O_DDRDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ,PD_M3_THR_WR2_O_DDRDZ)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PEMOIST
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDTDZ
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PD_M3_THR_WR2_O_DDRDZ
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WR2_O_DDRDZ',0,ZHOOK_HANDLE)
    
    CALL D_M3_THR_WTH2_O_DDTDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ,PD_M3_THR_WR2_O_DDRDZ)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WR2_O_DDRDZ',1,ZHOOK_HANDLE)
    
    END SUBROUTINE D_M3_THR_WR2_O_DDRDZ
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE D_M3_THR_WR2_O_DDTDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PD_M3_THR_WR2_O_DDTDZ)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PEMOIST
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PD_M3_THR_WR2_O_DDTDZ
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WR2_O_DDTDZ',0,ZHOOK_HANDLE)
    
    CALL D_M3_THR_WTH2_O_DDRDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PD_M3_THR_WR2_O_DDTDZ)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WR2_O_DDTDZ',1,ZHOOK_HANDLE)
    
    END SUBROUTINE D_M3_THR_WR2_O_DDTDZ
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE M3_THR_W2R(D,CSTURB,TURBN,PREDTH1,PD,PLM,PLEPS,PTKE,PDTDZ,PM3_THR_W2R)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLM
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDTDZ
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PM3_THR_W2R
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_W2R',0,ZHOOK_HANDLE)
    
    CALL M3_THR_W2TH(D,CSTURB,TURBN,PREDTH1,PD,PLM,PLEPS,PTKE,PDTDZ,PM3_THR_W2R)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_W2R',1,ZHOOK_HANDLE)
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE D_M3_THR_W2R_O_DDRDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDTDZ,PEMOIST,PD_M3_THR_W2R_O_DDRDZ)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLM
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDTDZ
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PEMOIST
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PD_M3_THR_W2R_O_DDRDZ
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2R_O_DDRDZ',0,ZHOOK_HANDLE)
    
    CALL D_M3_THR_W2TH_O_DDTDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDTDZ,PEMOIST,PD_M3_THR_W2R_O_DDRDZ)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2R_O_DDRDZ',1,ZHOOK_HANDLE)
    
    END SUBROUTINE D_M3_THR_W2R_O_DDRDZ
    
    !----------------------------------------------------------------------------
    
    SUBROUTINE D_M3_THR_W2R_O_DDTDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PD_M3_THR_W2R_O_DDTDZ)
    
      TYPE(DIMPHYEX_t),                   INTENT(IN) :: D
      TYPE(CSTURB_t),                     INTENT(IN) :: CSTURB
    
      TYPE(TURB_t),                    INTENT(IN)    :: TURBN
    
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLM
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIJT,D%NKT),INTENT(OUT) :: PD_M3_THR_W2R_O_DDTDZ
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2R_O_DDTDZ',0,ZHOOK_HANDLE)
    
    CALL D_M3_THR_W2TH_O_DDRDZ(D,CSTURB,TURBN,PREDR1,PREDTH1,PD,PLM,PLEPS,PTKE,PD_M3_THR_W2R_O_DDTDZ)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2R_O_DDTDZ',1,ZHOOK_HANDLE)
    
    END SUBROUTINE D_M3_THR_W2R_O_DDTDZ
    
    !----------------------------------------------------------------------------
    !
    END MODULE MODE_PRANDTL