From bf9d8ecd764d0828d326da99a3fbba92380b8446 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Riette?= <sebastien.riette@meteo.fr>
Date: Thu, 25 Nov 2021 10:59:39 +0100
Subject: [PATCH] =?UTF-8?q?S=C3=A9bastien=2024/11/2021=20Merge=20MNH->COMM?=
 =?UTF-8?q?ON=20ice4=5Fcompute=5Fpdf?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/arome/gmkpack_ignored_files               |   2 +
 src/arome/micro/ice4_compute_pdf.F90          | 242 ------------------
 src/arome/micro/ice4_tendencies.F90           |  12 +-
 .../micro/mode_ice4_compute_pdf.F90}          |  56 ++--
 4 files changed, 27 insertions(+), 285 deletions(-)
 delete mode 100644 src/arome/micro/ice4_compute_pdf.F90
 rename src/{mesonh/micro/ice4_compute_pdf.f90 => common/micro/mode_ice4_compute_pdf.F90} (80%)

diff --git a/src/arome/gmkpack_ignored_files b/src/arome/gmkpack_ignored_files
index cca761ab0..b571f0bec 100644
--- a/src/arome/gmkpack_ignored_files
+++ b/src/arome/gmkpack_ignored_files
@@ -34,3 +34,5 @@ phyex/micro/modi_ice4_fast_rg.F90
 phyex/micro/modi_ice4_fast_rh.F90
 phyex/micro/modi_ice4_fast_rs.F90
 phyex/micro/modi_ice4_slow.F90
+phyex/micro/ice4_tendencies.F90
+phyex/micro/modi_ice4_tendencies.F90
diff --git a/src/arome/micro/ice4_compute_pdf.F90 b/src/arome/micro/ice4_compute_pdf.F90
deleted file mode 100644
index bcced304e..000000000
--- a/src/arome/micro/ice4_compute_pdf.F90
+++ /dev/null
@@ -1,242 +0,0 @@
-SUBROUTINE ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV, HSUBG_PR_PDF, &
-                            PRHODREF, PRCT, PCF, PSIGMA_RC,&
-                            PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC, PRF)
-!!
-!!**  PURPOSE
-!!    -------
-!!      Computes the pdf used to split cloud into high and low content parts
-!!
-!!    AUTHOR
-!!    ------
-!!      S. Riette from the plitting of rain_ice source code (nov. 2014)
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!
-!
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-!
-USE PARKIND1, ONLY : JPRB
-USE YOMHOOK , ONLY : LHOOK, DR_HOOK
-USE MODD_RAIN_ICE_DESCR
-USE MODD_RAIN_ICE_PARAM
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-INTEGER,                INTENT(IN)  :: KSIZE
-CHARACTER(LEN=4),       INTENT(IN)  :: HSUBG_AUCV     ! Kind of Subgrid autoconversion method
-CHARACTER*80,           INTENT(IN)  :: HSUBG_PR_PDF   ! pdf for subgrid precipitation
-REAL, DIMENSION(KSIZE), INTENT(IN)  :: PRHODREF   ! Reference density
-REAL, DIMENSION(KSIZE), INTENT(IN)  :: PRCT       ! Cloud water m.r. at t
-REAL, DIMENSION(KSIZE), INTENT(IN)  :: PCF        ! Cloud fraction
-REAL, DIMENSION(KSIZE), INTENT(IN)  :: PSIGMA_RC  ! Standard deviation of rc at time t
-REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HCF   ! HLCLOUDS : fraction of High Cloud Fraction in grid
-REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LCF   ! HLCLOUDS : fraction of Low  Cloud Fraction in grid
-                                                  !    note that PCF = PHLC_HCF + PHLC_LCF
-REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HRC   ! HLCLOUDS : LWC that is High LWC in grid
-REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LRC   ! HLCLOUDS : LWC that is Low  LWC in grid
-                                                  !    note that PRC = PHLC_HRC + PHLC_LRC
-REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRF        ! Rain fraction
-!
-!*       0.2  declaration of local variables
-!
-REAL, DIMENSION(KSIZE) :: ZRCRAUTC,      & !RC value to begin rain formation =XCRIAUTC/RHODREF
-                          ZHLC_RCMAX,    & !HLCLOUDS : maximum value for RC in distribution
-                          ZHLC_LRCLOCAL, & !HLCLOUDS : LWC that is Low  LWC local in LCF
-                          ZHLC_HRCLOCAL    !HLCLOUDS : LWC that is High LWC local in HCF
-                                                    !    note that ZRC/CF = ZHLC_HRCLOCAL+ ZHLC_LRCLOCAL
-                                                    !                     = PHLC_HRC/HCF+ PHLC_LRC/LCF
-REAL :: ZCOEFFRCM
-REAL(KIND=JPRB) :: ZHOOK_HANDLE
-!-------------------------------------------------------------------------------
-!
-IF (LHOOK) CALL DR_HOOK('ICE4_COMPUTE_PDF', 0, ZHOOK_HANDLE)!
-
-!Cloud water split between high and low content part is done according to autoconversion option
-ZRCRAUTC(:)=XCRIAUTC/PRHODREF(:) ! Autoconversion rc threshold
-IF(HSUBG_AUCV=='NONE') THEN
-  !Cloud water is entirely in low or high part
-  WHERE(PRCT(:)>ZRCRAUTC(:))
-    PHLC_HCF(:)=1.
-    PHLC_LCF(:)=0.
-    PHLC_HRC(:)=PRCT(:)
-    PHLC_LRC(:)=0.
-    PRF(:)     =1.
-  ELSEWHERE(PRCT(:)>XRTMIN(2))
-    PHLC_HCF(:)=0.
-    PHLC_LCF(:)=1.
-    PHLC_HRC(:)=0.
-    PHLC_LRC(:)=PRCT(:)
-    PRF(:)     =0.
-  ELSEWHERE
-    PHLC_HCF(:)=0.
-    PHLC_LCF(:)=0.
-    PHLC_HRC(:)=0.
-    PHLC_LRC(:)=0.
-    PRF(:)     =0.
-  END WHERE
-
-ELSEIF(HSUBG_AUCV=='CLFR') THEN
-  !Cloud water is only in the cloudy part and entirely in low or high part
-  WHERE(PCF(:)>0.)
-    WHERE(PRCT(:)/PCF(:)>ZRCRAUTC(:))
-      PHLC_HCF(:)=PCF(:)
-      PHLC_LCF(:)=0.
-      PHLC_HRC(:)=PRCT(:)
-      PHLC_LRC(:)=0.
-      PRF(:)     =PCF(:)
-    ELSEWHERE(PRCT(:)>XRTMIN(2))
-      PHLC_HCF(:)=0.
-      PHLC_LCF(:)=PCF(:)
-      PHLC_HRC(:)=0.0
-      PHLC_LRC(:)=PRCT(:)
-      PRF(:)     =0.
-    ELSEWHERE
-      PHLC_HCF(:)=0.
-      PHLC_LCF(:)=0.
-      PHLC_HRC(:)=0.
-      PHLC_LRC(:)=0.
-      PRF(:)     =0.
-    END WHERE
-  ELSEWHERE
-    PHLC_HCF(:)=0.
-    PHLC_LCF(:)=0.
-    PHLC_HRC(:)=0.
-    PHLC_LRC(:)=0.
-    PRF(:)     =0.
-  END WHERE
-
-ELSEIF(HSUBG_AUCV=='PDF ') THEN
-  !Cloud water is split between high and low part according to a PDF
-  !    'HLCRECTPDF'    : rectangular PDF form
-  !    'HLCTRIANGPDF'  : triangular PDF form
-  !    'HLCQUADRAPDF'  : second order quadratic PDF form
-  !    'HLCISOTRIPDF'  : isocele triangular PDF
-  !    'SIGM'          : Redelsperger and Sommeria (1986)
-  IF(HSUBG_PR_PDF=='SIGM') THEN
-    ! Redelsperger and Sommeria (1986) but organised according to Turner (2011, 2012)
-    WHERE (PRCT(:)>ZRCRAUTC(:)+PSIGMA_RC(:))
-      PHLC_HCF(:)=1.
-      PHLC_LCF(:)=0.
-      PHLC_HRC(:)=PRCT(:)
-      PHLC_LRC(:)=0.
-      PRF(:)     =1.
-    ELSEWHERE(PRCT(:)> (ZRCRAUTC(:)-PSIGMA_RC(:)) .AND. &
-            & PRCT(:)<=(ZRCRAUTC(:)+PSIGMA_RC(:))       )
-      PHLC_HCF(:)=(PRCT(:)+PSIGMA_RC(:)-ZRCRAUTC(:))/ &
-                  &(2.*PSIGMA_RC(:))
-      PHLC_LCF(:)=MAX(0., PCF(:)-PHLC_HCF(:))
-      PHLC_HRC(:)=(PRCT(:)+PSIGMA_RC(:)-ZRCRAUTC(:))* &
-                  &(PRCT(:)+PSIGMA_RC(:)+ZRCRAUTC(:))/ &
-                  &(4.*PSIGMA_RC(:))
-      PHLC_LRC(:)=MAX(0., PRCT(:)-PHLC_HRC(:))
-      PRF(:)     =PHLC_HCF(:)
-    ELSEWHERE(PRCT(:)>XRTMIN(2) .AND. PCF(:)>0.)
-      PHLC_HCF(:)=0.
-      PHLC_LCF(:)=PCF(:)
-      PHLC_HRC(:)=0.
-      PHLC_LRC(:)=PRCT(:)
-      PRF(:)     =0.
-    ELSEWHERE
-      PHLC_HCF(:)=0.
-      PHLC_LCF(:)=0.
-      PHLC_HRC(:)=0.
-      PHLC_LRC(:)=0.
-      PRF(:)     =0.
-    END WHERE
-   ! Turner (2011, 2012)
-  ELSEIF(HSUBG_PR_PDF=='HLCRECTPDF' .OR. HSUBG_PR_PDF=='HLCISOTRIPDF' .OR. &
-         &HSUBG_PR_PDF=='HLCTRIANGPDF' .OR. HSUBG_PR_PDF=='HLCQUADRAPDF') THEN
-    ! Calculate maximum value r_cM from PDF forms
-    IF(HSUBG_PR_PDF=='HLCRECTPDF' .OR. HSUBG_PR_PDF=='HLCISOTRIPDF') THEN
-      ZCOEFFRCM=2.
-    ELSE IF(HSUBG_PR_PDF=='HLCTRIANGPDF') THEN
-      ZCOEFFRCM=3.
-    ELSE IF(HSUBG_PR_PDF=='HLCQUADRAPDF') THEN
-      ZCOEFFRCM=4.
-    END IF
-    WHERE(PRCT(:).GT.0. .AND. PCF(:).GT.0.)
-      ZHLC_RCMAX(:)=ZCOEFFRCM*PRCT(:)/PCF(:)
-    END WHERE
-    ! Split available water and cloud fraction in two parts
-    ! Calculate local mean values int he low and high parts for the 3 PDF forms:
-    IF(HSUBG_PR_PDF=='HLCRECTPDF') THEN
-      WHERE(PRCT(:).GT.0. .AND. PCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:))
-        ZHLC_LRCLOCAL(:)=0.5*ZRCRAUTC(:)
-        ZHLC_HRCLOCAL(:)=( ZHLC_RCMAX(:) + ZRCRAUTC(:))/2.0
-      END WHERE
-    ELSE IF(HSUBG_PR_PDF=='HLCTRIANGPDF') THEN
-      WHERE(PRCT(:).GT.0. .AND. PCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:))
-        ZHLC_LRCLOCAL(:)=( ZRCRAUTC(:) *(3.0 * ZHLC_RCMAX(:) - 2.0 * ZRCRAUTC(:) ) ) &
-                        / (3.0 * (2.0 * ZHLC_RCMAX(:) - ZRCRAUTC(:)  ) )
-        ZHLC_HRCLOCAL(:)=(ZHLC_RCMAX(:) + 2.0*ZRCRAUTC(:)) / 3.0
-      END WHERE
-    ELSE IF(HSUBG_PR_PDF=='HLCQUADRAPDF') THEN
-      WHERE(PRCT(:).GT.0. .AND. PCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:))
-        ZHLC_LRCLOCAL(:)=(3.0 *ZRCRAUTC(:)**3 - 8.0 *ZRCRAUTC(:)**2 * ZHLC_RCMAX(:) &
-                        + 6.0*ZRCRAUTC(:) *ZHLC_RCMAX(:)**2 ) &
-                        / &
-                        (4.0* ZRCRAUTC(:)**2 -12.0*ZRCRAUTC(:) *ZHLC_RCMAX(:) &
-                        + 12.0 * ZHLC_RCMAX(:)**2 )
-        ZHLC_HRCLOCAL(:)=(ZHLC_RCMAX(:) + 3.0*ZRCRAUTC(:))/4.0
-      END WHERE
-    ELSE IF(HSUBG_PR_PDF=='HLCISOTRIPDF') THEN
-      WHERE(PRCT(:).GT.0. .AND. PCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:))
-        WHERE((PRCT(:) / PCF(:)).LE.ZRCRAUTC(:))
-          ZHLC_LRCLOCAL(:)=( (ZHLC_RCMAX(:))**3 &
-                          -(12.0 * (ZHLC_RCMAX(:))*(ZRCRAUTC(:))**2) &
-                          +(8.0 * ZRCRAUTC(:)**3) ) &
-                          /( (6.0 * (ZHLC_RCMAX(:))**2) &
-                          -(24.0 * (ZHLC_RCMAX(:)) * ZRCRAUTC(:)) &
-                          +(12.0 * ZRCRAUTC(:)**2) )
-          ZHLC_HRCLOCAL(:)=( ZHLC_RCMAX(:) + 2.0 * ZRCRAUTC(:) )/3.0
-        ELSEWHERE
-          ZHLC_LRCLOCAL(:)=(2.0/3.0) * ZRCRAUTC(:)
-          ZHLC_HRCLOCAL(:)=(3.0*ZHLC_RCMAX(:)**3 - 8.0*ZRCRAUTC(:)**3) &
-                          / (6.0 * ZHLC_RCMAX(:)**2 - 12.0*ZRCRAUTC(:)**2)
-        END WHERE
-      END WHERE
-    END IF
-    ! Compare r_cM  to r_cR to know if cloud water content is high enough to split in two parts or not
-    WHERE (PRCT(:).GT.0. .AND. PCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:))
-      ! Calculate final values for LCF and HCF:
-      PHLC_LCF(:)=PCF(:) &
-                    *(ZHLC_HRCLOCAL- &
-                    (PRCT(:) / PCF(:))) &
-                    / (ZHLC_HRCLOCAL-ZHLC_LRCLOCAL)
-      PHLC_HCF(:)=MAX(0., PCF(:)-PHLC_LCF(:))
-      !
-      ! Calculate final values for LRC and HRC:
-      PHLC_LRC(:)=ZHLC_LRCLOCAL*PHLC_LCF(:)
-      PHLC_HRC(:)=MAX(0., PRCT(:)-PHLC_LRC(:))
-    ELSEWHERE (PRCT(:).GT.0. .AND. PCF(:).GT.0. .AND. ZHLC_RCMAX(:).LE.ZRCRAUTC(:))
-      ! Put all available cloud water and his fraction in the low part
-      PHLC_LCF(:)=PCF(:)
-      PHLC_HCF(:)=0.
-      PHLC_LRC(:)=PRCT(:)
-      PHLC_HRC(:)=0.
-    ELSEWHERE
-      PHLC_LCF(:)=0.
-      PHLC_HCF(:)=0.
-      PHLC_LRC(:)=0.
-      PHLC_HRC(:)=0.
-    END WHERE
-     PRF(:)=PHLC_HCF(:) !Precipitation fraction
-   ELSE
-    !wrong HSUBG_PR_PDF case
-    CALL ABORT
-    STOP 'wrong HSUBG_PR_PDF case'
-   ENDIF
-ELSE
-  !wrong HSUBG_AUCV case
-  CALL ABORT
-  STOP 'wrong HSUBG_AUCV case'
-ENDIF
-!
-IF (LHOOK) CALL DR_HOOK('ICE4_COMPUTE_PDF', 1, ZHOOK_HANDLE)
-END SUBROUTINE ICE4_COMPUTE_PDF
diff --git a/src/arome/micro/ice4_tendencies.F90 b/src/arome/micro/ice4_tendencies.F90
index aac00c1c7..9da5eda7c 100644
--- a/src/arome/micro/ice4_tendencies.F90
+++ b/src/arome/micro/ice4_tendencies.F90
@@ -45,7 +45,7 @@ USE MODI_ICE4_NUCLEATION
 USE MODI_ICE4_RRHONG
 USE MODI_ICE4_RIMLTC
 USE MODE_ICE4_RSRIMCG_OLD, ONLY: ICE4_RSRIMCG_OLD
-USE MODI_ICE4_COMPUTE_PDF
+USE MODE_ICE4_COMPUTE_PDF, ONLY: ICE4_COMPUTE_PDF
 USE MODI_ICE4_RAINFR_VERT
 USE MODE_ICE4_SLOW, ONLY: ICE4_SLOW
 USE MODE_ICE4_WARM, ONLY: ICE4_WARM
@@ -174,7 +174,8 @@ REAL, DIMENSION(KSIZE) :: ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, &
                         & ZRF, &
                         & ZLBDAR, ZLBDAS, ZLBDAG, ZLBDAH, ZLBDAR_RF, &
                         & ZRGSI, ZRGSI_MR
-REAL, DIMENSION(KSIZE) :: PHLI_HCF
+REAL, DIMENSION(KSIZE) :: PHLI_HCF, PHLI_LCF, PHLI_HRI, PHLI_LRI
+CHARACTER(len=80) :: HSUBG_AUCV_RI='NONE'
 REAL, DIMENSION(KIT,KJT,KKT) :: ZRRT3D
 INTEGER :: JL
 REAL, DIMENSION(KSIZE) :: ZWETG ! 1. if graupel growths in wet mode, 0. otherwise
@@ -295,9 +296,10 @@ IF(KSIZE>0) THEN
   ENDIF
   !
   !Cloud water split between high and low content part is done here
-  CALL ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV_RC, HSUBG_PR_PDF,&
-                        PRHODREF, ZRCT, PCF, PSIGMA_RC,&
-                        PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC, ZRF)
+  CALL ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV_RC, HSUBG_AUCV_RI, HSUBG_PR_PDF,&
+                        PRHODREF, ZRCT, ZRIT, PCF, ZT, PSIGMA_RC,&
+                        PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC,&
+                        PHLI_HCF, PHLI_LCF, PHLI_HRI, PHLI_LRI, ZRF)
   IF(HSUBG_RC_RR_ACCR=='PRFR') THEN
     !Diagnostic of precipitation fraction
     PRAINFR(:,:,:)=UNPACK(ZRF(:), MASK=LDMICRO(:,:,:), FIELD=PRAINFR(:,:,:))
diff --git a/src/mesonh/micro/ice4_compute_pdf.f90 b/src/common/micro/mode_ice4_compute_pdf.F90
similarity index 80%
rename from src/mesonh/micro/ice4_compute_pdf.f90
rename to src/common/micro/mode_ice4_compute_pdf.F90
index bc465eb65..2058f4e5a 100644
--- a/src/mesonh/micro/ice4_compute_pdf.f90
+++ b/src/common/micro/mode_ice4_compute_pdf.F90
@@ -3,37 +3,9 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-MODULE MODI_ICE4_COMPUTE_PDF
-INTERFACE
-SUBROUTINE ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV_RC, HSUBG_AUCV_RI, HSUBG_PR_PDF, &
-                            PRHODREF, PRCT, PRIT, PCF, PT, PSIGMA_RC,&
-                            PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC, &
-                            PHLI_HCF, PHLI_LCF, PHLI_HRI, PHLI_LRI, PRF)
+MODULE MODE_ICE4_COMPUTE_PDF
 IMPLICIT NONE
-INTEGER,                INTENT(IN)  :: KSIZE
-CHARACTER(LEN=4),       INTENT(IN)  :: HSUBG_AUCV_RC     ! Kind of Subgrid autoconversion method
-CHARACTER(LEN=80),      INTENT(IN)  :: HSUBG_AUCV_RI     ! Kind of Subgrid autoconversion method
-CHARACTER(LEN=80),      INTENT(IN)  :: HSUBG_PR_PDF   ! pdf for subgrid precipitation
-REAL, DIMENSION(KSIZE), INTENT(IN)  :: PRHODREF   ! Reference density
-REAL, DIMENSION(KSIZE), INTENT(IN)  :: PRCT       ! Cloud water m.r. at t
-REAL, DIMENSION(KSIZE), INTENT(IN)  :: PRIT       ! Ice Crystal m.r. at t
-REAL, DIMENSION(KSIZE), INTENT(IN)  :: PCF        ! Cloud fraction
-REAL, DIMENSION(KSIZE), INTENT(IN)  :: PT         ! Temperature
-REAL, DIMENSION(KSIZE), INTENT(IN)  :: PSIGMA_RC  ! Standard deviation of rc at time t
-REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HCF   ! HLCLOUDS : fraction of High Cloud Fraction in grid
-REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LCF   ! HLCLOUDS : fraction of Low  Cloud Fraction in grid
-                                                  !    note that PCF = PHLC_HCF + PHLC_LCF
-REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HRC   ! HLCLOUDS : LWC that is High LWC in grid
-REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LRC   ! HLCLOUDS : LWC that is Low  LWC in grid
-                                                  !    note that PRC = PHLC_HRC + PHLC_LRC
-REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PHLI_HCF   !
-REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PHLI_LCF
-REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PHLI_HRI   !
-REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PHLI_LRI   !
-REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRF        ! Rain fraction
-END SUBROUTINE ICE4_COMPUTE_PDF
-END INTERFACE
-END MODULE MODI_ICE4_COMPUTE_PDF
+CONTAINS
 SUBROUTINE ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV_RC, HSUBG_AUCV_RI, HSUBG_PR_PDF, &
                             PRHODREF, PRCT, PRIT, PCF, PT, PSIGMA_RC,&
                             PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC, &
@@ -56,8 +28,10 @@ SUBROUTINE ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV_RC, HSUBG_AUCV_RI, HSUBG_PR_PDF, &
 !          ------------
 !
 !
+USE PARKIND1, ONLY : JPRB
+USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN
-USE MODD_RAIN_ICE_PARAM, ONLY: XCRIAUTC,XBCRIAUTI,XACRIAUTI,XCRIAUTI
+USE MODD_RAIN_ICE_PARAM, ONLY: XCRIAUTC, XBCRIAUTI, XACRIAUTI, XCRIAUTI
 USE MODD_CST, ONLY : XTT
 !
 USE MODE_MSG
@@ -68,7 +42,7 @@ IMPLICIT NONE
 !
 INTEGER,                INTENT(IN)  :: KSIZE
 CHARACTER(LEN=4),       INTENT(IN)  :: HSUBG_AUCV_RC     ! Kind of Subgrid autoconversion method for cloud water
-CHARACTER(LEN=80),      INTENT(IN)  :: HSUBG_AUCV_RI     ! Kind of Subgrid autoconversion method for cloud water
+CHARACTER(LEN=80),      INTENT(IN)  :: HSUBG_AUCV_RI     ! Kind of Subgrid autoconversion method for cloud ice
 CHARACTER(LEN=80),      INTENT(IN)  :: HSUBG_PR_PDF   ! pdf for subgrid precipitation
 REAL, DIMENSION(KSIZE), INTENT(IN)  :: PRHODREF   ! Reference density
 REAL, DIMENSION(KSIZE), INTENT(IN)  :: PRCT       ! Cloud water m.r. at t
@@ -76,11 +50,12 @@ REAL, DIMENSION(KSIZE), INTENT(IN)  :: PRIT       ! Ice Crystal m.r. at t
 REAL, DIMENSION(KSIZE), INTENT(IN)  :: PCF        ! Cloud fraction
 REAL, DIMENSION(KSIZE), INTENT(IN)  :: PT         ! Temperature
 REAL, DIMENSION(KSIZE), INTENT(IN)  :: PSIGMA_RC  ! Standard deviation of rc at time t
-REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HCF   ! HLCLOUDS : fraction of High Cloud Fraction in grid
-REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LCF   ! HLCLOUDS : fraction of Low  Cloud Fraction in grid
+!Note for INTENT STATUS: in 'ADJU' case the PHL?_??? variables must be able to "cross" the subroutine untouched
+REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PHLC_HCF   ! HLCLOUDS : fraction of High Cloud Fraction in grid
+REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PHLC_LCF   ! HLCLOUDS : fraction of Low  Cloud Fraction in grid
                                                   !    note that PCF = PHLC_HCF + PHLC_LCF
-REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HRC   ! HLCLOUDS : LWC that is High LWC in grid
-REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LRC   ! HLCLOUDS : LWC that is Low  LWC in grid
+REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PHLC_HRC   ! HLCLOUDS : LWC that is High LWC in grid
+REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PHLC_LRC   ! HLCLOUDS : LWC that is Low  LWC in grid
                                                   !    note that PRC = PHLC_HRC + PHLC_LRC
 REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PHLI_HCF
 REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PHLI_LCF
@@ -97,10 +72,13 @@ REAL, DIMENSION(KSIZE) :: ZRCRAUTC,      & !RC value to begin rain formation =XC
                           ZHLC_HRCLOCAL, & !HLCLOUDS : LWC that is High LWC local in HCF
                                                     !    note that ZRC/CF = ZHLC_HRCLOCAL+ ZHLC_LRCLOCAL
                                                     !                     = PHLC_HRC/HCF+ PHLC_LRC/LCF
-                          ZSUMRC, ZSUMRI                          
+                          ZSUMRC, ZSUMRI
 REAL :: ZCOEFFRCM
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
 !-------------------------------------------------------------------------------
 !
+IF (LHOOK) CALL DR_HOOK('ICE4_COMPUTE_PDF', 0, ZHOOK_HANDLE)!
+
 !Cloud water split between high and low content part is done according to autoconversion option
 ZRCRAUTC(:)=XCRIAUTC/PRHODREF(:) ! Autoconversion rc threshold
 IF(HSUBG_AUCV_RC=='NONE') THEN
@@ -148,7 +126,7 @@ ELSEIF(HSUBG_AUCV_RC=='ADJU') THEN
   ELSEWHERE
     PHLC_LRC(:)=0.
     PHLC_HRC(:)=0.
-  ENDWHERE 
+  ENDWHERE
 ELSEIF(HSUBG_AUCV_RC=='PDF ') THEN
   !Cloud water is split between high and low part according to a PDF
   !    'HLCRECTPDF'    : rectangular PDF form
@@ -321,4 +299,6 @@ ENDIF
 !
 PRF=MAX(PHLC_HCF,PHLI_HCF)
 !
+IF (LHOOK) CALL DR_HOOK('ICE4_COMPUTE_PDF', 1, ZHOOK_HANDLE)
 END SUBROUTINE ICE4_COMPUTE_PDF
+END MODULE MODE_ICE4_COMPUTE_PDF
-- 
GitLab