Skip to content
Snippets Groups Projects
mode_prandtl.F90 111 KiB
Newer Older
  • Learn to ignore specific revisions
  •   REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WTH_W2R
    
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_W2R',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    
    M3_WTH_W2R(:,:,:) = - CSTURB%XCSHF*PKEFF*0.75*CSTURB%XCTV*PBLL_O_E/MZM(PTKE, KKA, KKU, KKL)*PEMOIST*PDTDZ/PD
    
    !
    M3_WTH_W2R(:,:,IKB-1)=M3_WTH_W2R(:,:,IKB)
    M3_WTH_W2R(:,:,IKE+1)=M3_WTH_W2R(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_W2R',1,ZHOOK_HANDLE)
    END FUNCTION M3_WTH_W2R
    !----------------------------------------------------------------------------
    
    FUNCTION D_M3_WTH_W2R_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PKEFF,PTKE,PBLL_O_E,PEMOIST)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_WTH_W2R_O_DDTDZ
    
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_W2R_O_DDTDZ',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    
    D_M3_WTH_W2R_O_DDTDZ(:,:,:) = - CSTURB%XCSHF*PKEFF*0.75*CSTURB%XCTV*PBLL_O_E/MZM(PTKE, KKA, KKU, KKL)*PEMOIST/PD &
    
                                         * (1. -  PREDTH1*(1.5+PREDTH1+PREDR1)/PD)
    !
    D_M3_WTH_W2R_O_DDTDZ(:,:,IKB-1)=D_M3_WTH_W2R_O_DDTDZ(:,:,IKB)
    D_M3_WTH_W2R_O_DDTDZ(:,:,IKE+1)=D_M3_WTH_W2R_O_DDTDZ(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_W2R_O_DDTDZ',1,ZHOOK_HANDLE)
    END FUNCTION D_M3_WTH_W2R_O_DDTDZ
    !----------------------------------------------------------------------------
    
    FUNCTION M3_WTH_WR2(D,CSTURB,KKA,KKU,KKL,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST,PDTDZ)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBETA
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WTH_WR2
    
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WR2',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    
    M3_WTH_WR2(:,:,:) = - CSTURB%XCSHF*PKEFF*0.25*PBLL_O_E*CSTURB%XCTV*PEMOIST**2       &
                               *MZM(PBETA*PLEPS/(PSQRT_TKE*PTKE), KKA, KKU, KKL)/CSTURB%XCTD*PDTDZ/PD
    
    !
    M3_WTH_WR2(:,:,IKB-1)=M3_WTH_WR2(:,:,IKB)
    M3_WTH_WR2(:,:,IKE+1)=M3_WTH_WR2(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WR2',1,ZHOOK_HANDLE)
    END FUNCTION M3_WTH_WR2
    !----------------------------------------------------------------------------
    
    FUNCTION D_M3_WTH_WR2_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBETA
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_WTH_WR2_O_DDTDZ
    
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_WR2_O_DDTDZ',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    
    D_M3_WTH_WR2_O_DDTDZ(:,:,:) = - CSTURB%XCSHF*PKEFF*0.25*PBLL_O_E*CSTURB%XCTV*PEMOIST**2 &
                               *MZM(PBETA*PLEPS/(PSQRT_TKE*PTKE), KKA, KKU, KKL)/CSTURB%XCTD/PD     &
    
                               * (1. -  PREDTH1*(1.5+PREDTH1+PREDR1)/PD)
    !
    D_M3_WTH_WR2_O_DDTDZ(:,:,IKB-1)=D_M3_WTH_WR2_O_DDTDZ(:,:,IKB)
    D_M3_WTH_WR2_O_DDTDZ(:,:,IKE+1)=D_M3_WTH_WR2_O_DDTDZ(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_WR2_O_DDTDZ',1,ZHOOK_HANDLE)
    END FUNCTION D_M3_WTH_WR2_O_DDTDZ
    !----------------------------------------------------------------------------
    
    FUNCTION M3_WTH_WTHR(D,CSTURB,KKA,KKU,KKL,PREDR1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PEMOIST)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBETA
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
    
      REAL, DIMENSION(SIZE(PREDR1,1),SIZE(PREDR1,2),SIZE(PREDR1,3)) :: M3_WTH_WTHR
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WTHR',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    
    !M3_WTH_WTHR(:,:,:) = CSTURB%XCSHF*PKEFF*PEMOIST/MZM(PBETA*PTKE*PSQRT_TKE, KKA, KKU, KKL) &
    !                         *0.5*PLEPS/CSTURB%XCTD*(1+PREDR1)/PD
    M3_WTH_WTHR(:,:,:) = CSTURB%XCSHF*PKEFF*PEMOIST*MZM(PBETA/PTKE*PSQRT_TKE, KKA, KKU, KKL) &
                             *0.5*PLEPS/CSTURB%XCTD*(1+PREDR1)/PD
    
    !
    M3_WTH_WTHR(:,:,IKB-1)=M3_WTH_WTHR(:,:,IKB)
    M3_WTH_WTHR(:,:,IKE+1)=M3_WTH_WTHR(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WTHR',1,ZHOOK_HANDLE)
    END FUNCTION M3_WTH_WTHR
    !----------------------------------------------------------------------------
    
    FUNCTION D_M3_WTH_WTHR_O_DDTDZ(D,CSTURB,PM3_WTH_WTHR,PREDTH1,PREDR1,PD,PBLL_O_E,PETHETA)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PM3_WTH_WTHR
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_WTH_WTHR_O_DDTDZ
    
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_WTHR_O_DDTDZ',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    
    D_M3_WTH_WTHR_O_DDTDZ(:,:,:) = - PM3_WTH_WTHR * (1.5+PREDTH1+PREDR1)/PD*CSTURB%XCTV*PBLL_O_E*PETHETA
    
    !
    D_M3_WTH_WTHR_O_DDTDZ(:,:,IKB-1)=D_M3_WTH_WTHR_O_DDTDZ(:,:,IKB)
    D_M3_WTH_WTHR_O_DDTDZ(:,:,IKE+1)=D_M3_WTH_WTHR_O_DDTDZ(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_WTHR_O_DDTDZ',1,ZHOOK_HANDLE)
    END FUNCTION D_M3_WTH_WTHR_O_DDTDZ
    !----------------------------------------------------------------------------
    
    FUNCTION M3_TH2_W2TH(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PDTDZ,PLM,PLEPS,PTKE)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_TH2_W2TH
    
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_W2TH',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    
    M3_TH2_W2TH(:,:,:) = - MZF((1.-0.5*PREDR1*(1.+PREDR1)/PD)/(1.+PREDTH1)*PDTDZ, KKA, KKU, KKL) &
    
    !
    M3_TH2_W2TH(:,:,IKB-1)=M3_TH2_W2TH(:,:,IKB)
    M3_TH2_W2TH(:,:,IKE+1)=M3_TH2_W2TH(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_W2TH',1,ZHOOK_HANDLE)
    END FUNCTION M3_TH2_W2TH
    !----------------------------------------------------------------------------
    
    FUNCTION D_M3_TH2_W2TH_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,OUSERV)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
    
      LOGICAL,                INTENT(IN) :: OUSERV
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_TH2_W2TH_O_DDTDZ
    
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_W2TH_O_DDTDZ',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    IF (OUSERV) THEN
    
    !  D_M3_TH2_W2TH_O_DDTDZ(:,:,:) = - 1.5*PLM*PLEPS/PTKE*CSTURB%XCTV * MZF(                    &
    
    !          (1.-0.5*PREDR1*(1.+PREDR1)/PD)*(1.-(1.5+PREDTH1+PREDR1)*(1.+PREDTH1)/PD )  &
    
    !        / (1.+PREDTH1)**2, KKA, KKU, KKL)
    
      D_M3_TH2_W2TH_O_DDTDZ(:,:,:) = - 1.5*PLM*PLEPS/PTKE*CSTURB%XCTV * MZF( &
    
              (1.-0.5*PREDR1*(1.+PREDR1)/PD)*(1.-(1.5+PREDTH1+PREDR1)*   &
    
                 PREDTH1*(1.+PREDTH1)/PD ) / (1.+PREDTH1)**2, KKA, KKU, KKL)
    
      D_M3_TH2_W2TH_O_DDTDZ(:,:,:) = - 1.5*PLM*PLEPS/PTKE*CSTURB%XCTV * MZF(1./(1.+PREDTH1)**2, KKA, KKU, KKL)
    
    END IF
    !
    D_M3_TH2_W2TH_O_DDTDZ(:,:,IKB-1)=D_M3_TH2_W2TH_O_DDTDZ(:,:,IKB)
    D_M3_TH2_W2TH_O_DDTDZ(:,:,IKE+1)=D_M3_TH2_W2TH_O_DDTDZ(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_W2TH_O_DDTDZ',1,ZHOOK_HANDLE)
    END FUNCTION D_M3_TH2_W2TH_O_DDTDZ
    !----------------------------------------------------------------------------
    
    FUNCTION M3_TH2_WTH2(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_TH2_WTH2
    
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WTH2',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    
    M3_TH2_WTH2(:,:,:) = PLEPS*0.5/CSTURB%XCTD/PSQRT_TKE          &
    
      * MZF((1.+0.5*PREDTH1+1.5*PREDR1+0.5*PREDR1**2)/PD, KKA, KKU, KKL)
    
    !
    M3_TH2_WTH2(:,:,IKB-1)=M3_TH2_WTH2(:,:,IKB)
    M3_TH2_WTH2(:,:,IKE+1)=M3_TH2_WTH2(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WTH2',1,ZHOOK_HANDLE)
    END FUNCTION M3_TH2_WTH2
    !----------------------------------------------------------------------------
    
    FUNCTION D_M3_TH2_WTH2_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_TH2_WTH2_O_DDTDZ
    
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WTH2_O_DDTDZ',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    
    D_M3_TH2_WTH2_O_DDTDZ(:,:,:) = PLEPS*0.5/CSTURB%XCTD/PSQRT_TKE*CSTURB%XCTV                        &
    
     * MZF(PBLL_O_E*PETHETA* (0.5/PD                                                   &
    
                 - (1.5+PREDTH1+PREDR1)*(1.+0.5*PREDTH1+1.5*PREDR1+0.5*PREDR1**2)/PD**2 &
    
                               ), KKA, KKU, KKL)
    
    !
    D_M3_TH2_WTH2_O_DDTDZ(:,:,IKB-1)=D_M3_TH2_WTH2_O_DDTDZ(:,:,IKB)
    D_M3_TH2_WTH2_O_DDTDZ(:,:,IKE+1)=D_M3_TH2_WTH2_O_DDTDZ(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WTH2_O_DDTDZ',1,ZHOOK_HANDLE)
    END FUNCTION D_M3_TH2_WTH2_O_DDTDZ
    !----------------------------------------------------------------------------
    
    FUNCTION M3_TH2_W2R(D,CSTURB,KKA,KKU,KKL,PD,PLM,PLEPS,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_TH2_W2R
    
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_W2R',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    
    M3_TH2_W2R(:,:,:) = 0.75*CSTURB%XCTV**2*MZF(PBLL_O_E*PEMOIST/PD*PDTDZ**2, KKA, KKU, KKL)*PLM*PLEPS/PTKE
    
    !
    M3_TH2_W2R(:,:,IKB-1)=M3_TH2_W2R(:,:,IKB)
    M3_TH2_W2R(:,:,IKE+1)=M3_TH2_W2R(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_W2R',1,ZHOOK_HANDLE)
    END FUNCTION M3_TH2_W2R
    !----------------------------------------------------------------------------
    
    FUNCTION D_M3_TH2_W2R_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PEMOIST,PDTDZ)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_TH2_W2R_O_DDTDZ
    
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_W2R_O_DDTDZ',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    
    D_M3_TH2_W2R_O_DDTDZ(:,:,:) = 0.75*CSTURB%XCTV**2*PLM*PLEPS/PTKE &
    
     * MZF(PBLL_O_E*PEMOIST/PD*PDTDZ*(2.-PREDTH1*(1.5+PREDTH1+PREDR1)/PD), KKA, KKU, KKL)
    
    !
    D_M3_TH2_W2R_O_DDTDZ(:,:,IKB-1)=D_M3_TH2_W2R_O_DDTDZ(:,:,IKB)
    D_M3_TH2_W2R_O_DDTDZ(:,:,IKE+1)=D_M3_TH2_W2R_O_DDTDZ(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_W2R_O_DDTDZ',1,ZHOOK_HANDLE)
    END FUNCTION D_M3_TH2_W2R_O_DDTDZ
    !----------------------------------------------------------------------------
    
    FUNCTION M3_TH2_WR2(D,CSTURB,KKA,KKU,KKL,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_TH2_WR2
    
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WR2',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    
    M3_TH2_WR2(:,:,:) = 0.25*CSTURB%XCTV**2*MZF((PBLL_O_E*PEMOIST*PDTDZ)**2/PD, KKA, KKU, KKL)*PLEPS/PSQRT_TKE/CSTURB%XCTD
    
    !
    M3_TH2_WR2(:,:,IKB-1)=M3_TH2_WR2(:,:,IKB)
    M3_TH2_WR2(:,:,IKE+1)=M3_TH2_WR2(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WR2',1,ZHOOK_HANDLE)
    END FUNCTION M3_TH2_WR2
    !----------------------------------------------------------------------------
    
    FUNCTION D_M3_TH2_WR2_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_TH2_WR2_O_DDTDZ
    
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WR2_O_DDTDZ',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    
    D_M3_TH2_WR2_O_DDTDZ(:,:,:) = 0.25*CSTURB%XCTV**2*PLEPS/PSQRT_TKE/CSTURB%XCTD &
    
      *  MZF((PBLL_O_E*PEMOIST)**2*PDTDZ/PD*(2.-PREDTH1*(1.5+PREDTH1+PREDR1)/PD), KKA, KKU, KKL)
    
    !
    D_M3_TH2_WR2_O_DDTDZ(:,:,IKB-1)=D_M3_TH2_WR2_O_DDTDZ(:,:,IKB)
    D_M3_TH2_WR2_O_DDTDZ(:,:,IKE+1)=D_M3_TH2_WR2_O_DDTDZ(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WR2_O_DDTDZ',1,ZHOOK_HANDLE)
    END FUNCTION D_M3_TH2_WR2_O_DDTDZ
    !----------------------------------------------------------------------------
    
    FUNCTION M3_TH2_WTHR(D,CSTURB,KKA,KKU,KKL,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_TH2_WTHR
    
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WTHR',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    
    M3_TH2_WTHR(:,:,:) = - 0.5*CSTURB%XCTV*PLEPS/PSQRT_TKE/CSTURB%XCTD &
    
     * MZF(PBLL_O_E*PEMOIST*PDTDZ*(1.+PREDR1)/PD, KKA, KKU, KKL)
    
    !
    M3_TH2_WTHR(:,:,IKB-1)=M3_TH2_WTHR(:,:,IKB)
    M3_TH2_WTHR(:,:,IKE+1)=M3_TH2_WTHR(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WTHR',1,ZHOOK_HANDLE)
    END FUNCTION M3_TH2_WTHR
    !----------------------------------------------------------------------------
    
    FUNCTION D_M3_TH2_WTHR_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTDZ)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDTDZ
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_TH2_WTHR_O_DDTDZ
    
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WTHR_O_DDTDZ',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    
    D_M3_TH2_WTHR_O_DDTDZ(:,:,:) = - 0.5*CSTURB%XCTV*PLEPS/PSQRT_TKE/CSTURB%XCTD &
    
     * MZF(PBLL_O_E*PEMOIST*(1.+PREDR1)/PD * (1. -PREDTH1*(1.5+PREDTH1+PREDR1)/PD), KKA, KKU, KKL)
    
    !
    D_M3_TH2_WTHR_O_DDTDZ(:,:,IKB-1)=D_M3_TH2_WTHR_O_DDTDZ(:,:,IKB)
    D_M3_TH2_WTHR_O_DDTDZ(:,:,IKE+1)=D_M3_TH2_WTHR_O_DDTDZ(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WTHR_O_DDTDZ',1,ZHOOK_HANDLE)
    END FUNCTION D_M3_TH2_WTHR_O_DDTDZ
    !----------------------------------------------------------------------------
    
    FUNCTION M3_THR_WTHR(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_THR_WTHR
    
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WTHR',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    
    M3_THR_WTHR(:,:,:) = 0.5*PLEPS/PSQRT_TKE/CSTURB%XCTD &
    
     * MZF((1.+PREDTH1)*(1.+PREDR1)/PD, KKA, KKU, KKL)
    
    !
    M3_THR_WTHR(:,:,IKB-1)=M3_THR_WTHR(:,:,IKB)
    M3_THR_WTHR(:,:,IKE+1)=M3_THR_WTHR(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WTHR',1,ZHOOK_HANDLE)
    END FUNCTION M3_THR_WTHR
    !----------------------------------------------------------------------------
    
    FUNCTION D_M3_THR_WTHR_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_WTHR_O_DDTDZ
    
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTHR_O_DDTDZ',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    
    D_M3_THR_WTHR_O_DDTDZ(:,:,:) = 0.5*PLEPS/PSQRT_TKE/CSTURB%XCTD * CSTURB%XCTV &
    
     * MZF(PETHETA*PBLL_O_E/PD*(1.+PREDR1)*(1.-(1.+PREDTH1)*(1.5+PREDTH1+PREDR1)/PD), KKA, KKU, KKL)
    
    !
    D_M3_THR_WTHR_O_DDTDZ(:,:,IKB-1)=D_M3_THR_WTHR_O_DDTDZ(:,:,IKB)
    D_M3_THR_WTHR_O_DDTDZ(:,:,IKE+1)=D_M3_THR_WTHR_O_DDTDZ(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTHR_O_DDTDZ',1,ZHOOK_HANDLE)
    END FUNCTION D_M3_THR_WTHR_O_DDTDZ
    !----------------------------------------------------------------------------
    
    FUNCTION M3_THR_WTH2(D,CSTURB,KKA,KKU,KKL,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_THR_WTH2
    
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WTH2',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    
    M3_THR_WTH2(:,:,:) = - 0.25*PLEPS/PSQRT_TKE/CSTURB%XCTD*CSTURB%XCTV &
    
     * MZF((1.+PREDR1)*PBLL_O_E*PETHETA*PDRDZ/PD, KKA, KKU, KKL)
    
    !
    M3_THR_WTH2(:,:,IKB-1)=M3_THR_WTH2(:,:,IKB)
    M3_THR_WTH2(:,:,IKE+1)=M3_THR_WTH2(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WTH2',1,ZHOOK_HANDLE)
    END FUNCTION M3_THR_WTH2
    !----------------------------------------------------------------------------
    
    FUNCTION D_M3_THR_WTH2_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDRDZ)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_WTH2_O_DDTDZ
    
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTH2_O_DDTDZ',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    
    D_M3_THR_WTH2_O_DDTDZ(:,:,:) = - 0.25*PLEPS/PSQRT_TKE/CSTURB%XCTD*CSTURB%XCTV**2 &
    
     * MZF(-(1.+PREDR1)*(PBLL_O_E*PETHETA/PD)**2*PDRDZ*(1.5+PREDTH1+PREDR1), KKA, KKU, KKL)
    
    !
    D_M3_THR_WTH2_O_DDTDZ(:,:,IKB-1)=D_M3_THR_WTH2_O_DDTDZ(:,:,IKB)
    D_M3_THR_WTH2_O_DDTDZ(:,:,IKE+1)=D_M3_THR_WTH2_O_DDTDZ(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTH2_O_DDTDZ',1,ZHOOK_HANDLE)
    END FUNCTION D_M3_THR_WTH2_O_DDTDZ
    !----------------------------------------------------------------------------
    
    FUNCTION D_M3_THR_WTH2_O_DDRDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_WTH2_O_DDRDZ
    
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTH2_O_DDRDZ',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    
    D_M3_THR_WTH2_O_DDRDZ(:,:,:) = - 0.25*PLEPS/PSQRT_TKE/CSTURB%XCTD*CSTURB%XCTV          &
    
     * MZF(PBLL_O_E*PETHETA/PD                                              &
           *(-(1.+PREDR1)*PREDR1/PD*(1.5+PREDTH1+PREDR1)+(1.+2.*PREDR1)),     &
           KKA, KKU, KKL)
    
    !
    D_M3_THR_WTH2_O_DDRDZ(:,:,IKB-1)=D_M3_THR_WTH2_O_DDRDZ(:,:,IKB)
    D_M3_THR_WTH2_O_DDRDZ(:,:,IKE+1)=D_M3_THR_WTH2_O_DDRDZ(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTH2_O_DDRDZ',1,ZHOOK_HANDLE)
    END FUNCTION D_M3_THR_WTH2_O_DDRDZ
    !----------------------------------------------------------------------------
    
    FUNCTION M3_THR_W2TH(D,CSTURB,KKA,KKU,KKL,PREDR1,PD,PLM,PLEPS,PTKE,PDRDZ)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_THR_W2TH
    
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_W2TH',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    
    M3_THR_W2TH(:,:,:) = - 0.75*PLM*PLEPS/PTKE * CSTURB%XCTV      &
    
     * MZF((1.+PREDR1)*PDRDZ/PD, KKA, KKU, KKL)
    
    !
    M3_THR_W2TH(:,:,IKB-1)=M3_THR_W2TH(:,:,IKB)
    M3_THR_W2TH(:,:,IKE+1)=M3_THR_W2TH(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_W2TH',1,ZHOOK_HANDLE)
    END FUNCTION M3_THR_W2TH
    !----------------------------------------------------------------------------
    
    FUNCTION D_M3_THR_W2TH_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE,PBLL_O_E,PDRDZ,PETHETA)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_W2TH_O_DDTDZ
    
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2TH_O_DDTDZ',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    
    D_M3_THR_W2TH_O_DDTDZ(:,:,:) = - 0.75*PLM*PLEPS/PTKE * CSTURB%XCTV**2    &
    
     * MZF(-PETHETA*PBLL_O_E*(1.+PREDR1)*PDRDZ*(1.5+PREDTH1+PREDR1)/PD**2, KKA, KKU, KKL)
    
    
    !
    D_M3_THR_W2TH_O_DDTDZ(:,:,IKB-1)=D_M3_THR_W2TH_O_DDTDZ(:,:,IKB)
    D_M3_THR_W2TH_O_DDTDZ(:,:,IKE+1)=D_M3_THR_W2TH_O_DDTDZ(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2TH_O_DDTDZ',1,ZHOOK_HANDLE)
    END FUNCTION D_M3_THR_W2TH_O_DDTDZ
    !----------------------------------------------------------------------------
    
    FUNCTION D_M3_THR_W2TH_O_DDRDZ(D,CSTURB,KKA,KKU,KKL,PREDTH1,PREDR1,PD,PLM,PLEPS,PTKE)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLM
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_M3_THR_W2TH_O_DDRDZ
    
      INTEGER :: IKB, IKE
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2TH_O_DDRDZ',0,ZHOOK_HANDLE)
    IKB = 1+JPVEXT_TURB
    IKE = SIZE(PD,3)-JPVEXT_TURB
    
    
    D_M3_THR_W2TH_O_DDRDZ(:,:,:) = - 0.75*PLM*PLEPS/PTKE * CSTURB%XCTV     &
    
     * MZF(-(1.+PREDR1)*PREDR1*(1.5+PREDTH1+PREDR1)/PD**2          &
            +(1.+2.*PREDR1)/PD,                                    &
           KKA, KKU, KKL)
    
    
    !
    D_M3_THR_W2TH_O_DDRDZ(:,:,IKB-1)=D_M3_THR_W2TH_O_DDRDZ(:,:,IKB)
    D_M3_THR_W2TH_O_DDRDZ(:,:,IKE+1)=D_M3_THR_W2TH_O_DDRDZ(:,:,IKE)
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2TH_O_DDRDZ',1,ZHOOK_HANDLE)
    END FUNCTION D_M3_THR_W2TH_O_DDRDZ
    !----------------------------------------------------------------------------
    !----------------------------------------------------------------------------
    !----------------------------------------------------------------------------
    !
    
    FUNCTION PSI3(D,CSTURB,PREDR1,PREDTH1,PRED2R3,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2TH3
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2R3
      REAL, DIMENSION(D%NIT,D%NJT,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%NIT,D%NJT,D%NKT) :: PSI3
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:PSI3',0,ZHOOK_HANDLE)
    
    PSI3 = PHI3(D,CSTURB,PREDR1,PREDTH1,PRED2R3,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:PSI3',1,ZHOOK_HANDLE)
    END FUNCTION PSI3
    !----------------------------------------------------------------------------
    
    FUNCTION D_PSI3DRDZ_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PPSI3
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2R3
      REAL, DIMENSION(D%NIT,D%NJT,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%NIT,D%NJT,D%NKT) :: D_PSI3DRDZ_O_DDRDZ
    
    
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DRDZ_O_DDRDZ',0,ZHOOK_HANDLE)
    
    D_PSI3DRDZ_O_DDRDZ = D_PHI3DTDZ_O_DDTDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
    
    !
    !C'est ok?!
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DRDZ_O_DDRDZ',1,ZHOOK_HANDLE)
    END FUNCTION D_PSI3DRDZ_O_DDRDZ
    !----------------------------------------------------------------------------
    
    FUNCTION D_PSI3DTDZ_O_DDTDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PPSI3
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2R3
      REAL, DIMENSION(D%NIT,D%NJT,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%NIT,D%NJT,D%NKT) :: D_PSI3DTDZ_O_DDTDZ
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DTDZ_O_DDTDZ',0,ZHOOK_HANDLE)
    
    D_PSI3DTDZ_O_DDTDZ = D_PHI3DRDZ_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,OUSERV)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DTDZ_O_DDTDZ',1,ZHOOK_HANDLE)
    END FUNCTION D_PSI3DTDZ_O_DDTDZ
    !----------------------------------------------------------------------------
    
    FUNCTION D_PSI3DRDZ2_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDRDZ,HTURBDIM,OUSERV)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PPSI3
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2R3
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PRED2THR3
      REAL, DIMENSION(D%NIT,D%NJT,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%NIT,D%NJT,D%NKT) :: D_PSI3DRDZ2_O_DDRDZ
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DRDZ2_O_DDRDZ',0,ZHOOK_HANDLE)
    
    D_PSI3DRDZ2_O_DDRDZ = D_PHI3DTDZ2_O_DDTDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDRDZ,HTURBDIM,OUSERV)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PSI3DRDZ2_O_DDRDZ',1,ZHOOK_HANDLE)
    END FUNCTION D_PSI3DRDZ2_O_DDRDZ
    !----------------------------------------------------------------------------
    
    FUNCTION M3_WR_WR2(D,CSTURB,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WR_WR2
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WR2',0,ZHOOK_HANDLE)
    
    M3_WR_WR2 = M3_WTH_WTH2(D,CSTURB,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WR2',1,ZHOOK_HANDLE)
    END FUNCTION M3_WR_WR2
    !----------------------------------------------------------------------------
    
    FUNCTION D_M3_WR_WR2_O_DDRDZ(D,CSTURB,PM3_WR_WR2,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PM3_WR_WR2
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_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)
    
    D_M3_WR_WR2_O_DDRDZ = D_M3_WTH_WTH2_O_DDTDZ(D,CSTURB,PM3_WR_WR2,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WR2_O_DDRDZ',1,ZHOOK_HANDLE)
    END FUNCTION D_M3_WR_WR2_O_DDRDZ
    !----------------------------------------------------------------------------
    
    FUNCTION M3_WR_W2R(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WR_W2R
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_W2R',0,ZHOOK_HANDLE)
    
    M3_WR_W2R = M3_WTH_W2TH(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_W2R',1,ZHOOK_HANDLE)
    END FUNCTION M3_WR_W2R
    !----------------------------------------------------------------------------
    
    FUNCTION D_M3_WR_W2R_O_DDRDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PKEFF,PTKE)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PEMOIST
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_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)
    
    D_M3_WR_W2R_O_DDRDZ = D_M3_WTH_W2TH_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PBLL_O_E,PEMOIST,PKEFF,PTKE)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_W2R_O_DDRDZ',1,ZHOOK_HANDLE)
    END FUNCTION D_M3_WR_W2R_O_DDRDZ
    !----------------------------------------------------------------------------
    
    FUNCTION M3_WR_W2TH(D,CSTURB,KKA,KKU,KKL,PD,PKEFF,PTKE,PBLL_O_E,PETHETA,PDRDZ)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WR_W2TH
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_W2TH',0,ZHOOK_HANDLE)
    
    M3_WR_W2TH = M3_WTH_W2R(D,CSTURB,KKA,KKU,KKL,PD,PKEFF,PTKE,PBLL_O_E,PETHETA,PDRDZ)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_W2TH',1,ZHOOK_HANDLE)
    END FUNCTION M3_WR_W2TH
    !----------------------------------------------------------------------------
    
    FUNCTION D_M3_WR_W2TH_O_DDRDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE,PBLL_O_E,PETHETA)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_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)
    
    D_M3_WR_W2TH_O_DDRDZ = D_M3_WTH_W2R_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE,PBLL_O_E,PETHETA)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_W2TH_O_DDRDZ',1,ZHOOK_HANDLE)
    END FUNCTION D_M3_WR_W2TH_O_DDRDZ
    !----------------------------------------------------------------------------
    
    FUNCTION M3_WR_WTH2(D,CSTURB,KKA,KKU,KKL,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDRDZ)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBETA
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDRDZ
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WR_WTH2
    
    !
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WTH2',0,ZHOOK_HANDLE)
    
    M3_WR_WTH2 = M3_WTH_WR2(D,CSTURB,KKA,KKU,KKL,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,PDRDZ)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WR_WTH2',1,ZHOOK_HANDLE)
    END FUNCTION M3_WR_WTH2
    !----------------------------------------------------------------------------
    
    FUNCTION D_M3_WR_WTH2_O_DDRDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDR1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBLL_O_E
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBETA
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: D_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)
    
    D_M3_WR_WTH2_O_DDRDZ=D_M3_WTH_WR2_O_DDTDZ(D,CSTURB,KKA,KKU,KKL,PREDR1,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA)
    
    !
    IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WR_WTH2_O_DDRDZ',1,ZHOOK_HANDLE)
    END FUNCTION D_M3_WR_WTH2_O_DDRDZ
    !----------------------------------------------------------------------------
    
    FUNCTION M3_WR_WTHR(D,CSTURB,KKA,KKU,KKL,PREDTH1,PD,PKEFF,PTKE,PSQRT_TKE,PBETA,PLEPS,PETHETA)
      TYPE(DIMPHYEX_t),                   INTENT(IN)   :: D
    
      INTEGER,                INTENT(IN) :: KKA 
      INTEGER,                INTENT(IN) :: KKU  
      INTEGER,                INTENT(IN) :: KKL
    
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PREDTH1
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PD
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PKEFF
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSQRT_TKE
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PBETA
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PLEPS
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PETHETA
      REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: M3_WR_WTHR