From b51dca890595f79e06939f6b1d7b10704a94c990 Mon Sep 17 00:00:00 2001
From: Quentin Rodier <quentin.rodier@meteo.fr>
Date: Thu, 1 Dec 2022 12:22:21 +0100
Subject: [PATCH] Quentin 01/12/2022: merge ice4_sedimentation_stat with Ryads
 opti for new SNOW sedim computation from Mesonh 5.5 to 5.6

---
 .../micro/mode_ice4_sedimentation_stat.F90    | 53 +++++++++++++++++++
 src/common/micro/rain_ice.F90                 | 11 +++-
 2 files changed, 63 insertions(+), 1 deletion(-)

diff --git a/src/common/micro/mode_ice4_sedimentation_stat.F90 b/src/common/micro/mode_ice4_sedimentation_stat.F90
index d4e52e8fd..1da68847d 100644
--- a/src/common/micro/mode_ice4_sedimentation_stat.F90
+++ b/src/common/micro/mode_ice4_sedimentation_stat.F90
@@ -173,7 +173,11 @@ DO JK = D%NKE , D%NKB, -1*D%NKL
     ELSEIF (JRR==5) THEN
 
       !*       2.4   for aggregates/snow
+#ifdef REPRO48
       CALL OTHER_SPECIES(ICEP%XFSEDS,ICEP%XEXSEDS,PRST(:,:,JK))
+#else
+      CALL SNOW(PRST(:,:,JK))
+#endif
 
     ELSEIF (JRR==6) THEN
 
@@ -352,6 +356,55 @@ CONTAINS
 
   END SUBROUTINE PRISTINE_ICE
 
+  SUBROUTINE SNOW(PRXT)
+
+    REAL, INTENT(IN)    :: PRXT(D%NIT,D%NJT) ! mr of specy X
+
+    REAL(KIND=JPRB) :: ZHOOK_HANDLE
+
+    !!IF (LHOOK) CALL DR_HOOK('ICE4_SEDIMENTATION_STAT:SNOW',0,ZHOOK_HANDLE)
+
+    ! ******* for snow
+    DO JJ = D%NJB, D%NJE
+      DO JI = D%NIB, D%NIE
+        ZQP=ZSED(JI,JJ,IKPLUS,JRR)*ZTSORHODZ(JI,JJ)
+        IF ((PRXT(JI,JJ) > ICED%XRTMIN(JRR)) .OR. (ZQP > ICED%XRTMIN(JRR))) THEN
+          !calculation of w
+          IF ( PRXT(JI,JJ) > ICED%XRTMIN(JRR) ) THEN
+            ZWSEDW1(JI)= ICEP%XFSEDS *  &
+                          & PRHODREF(JI,JJ,JK)**(-ICED%XCEXVT) * &
+                          & (1+(ICED%XFVELOS/PLBDAS(JI,JJ,JK))**ICED%XALPHAS)**(-ICED%XNUS+ICEP%XEXSEDS/ICED%XALPHAS)* &
+			   & PLBDAS(JI,JJ,JK)**(ICED%XBS+ICEP%XEXSEDS) 
+          ELSE
+            ZWSEDW1(JI)=0.
+          ENDIF
+          IF ( ZQP > ICED%XRTMIN(JRR) ) THEN
+            ZWSEDW2(JI)= ICEP%XFSEDS *  &
+                          & PRHODREF(JI,JJ,JK)**(-ICED%XCEXVT) * &
+                          & (1+(ICED%XFVELOS/PLBDAS(JI,JJ,JK))**ICED%XALPHAS)**(-ICED%XNUS+ICEP%XEXSEDS/ICED%XALPHAS)* &
+			   & PLBDAS(JI,JJ,JK)**(ICED%XBS+ICEP%XEXSEDS) 
+          ELSE
+            ZWSEDW2(JI)=0.
+          ENDIF
+        ELSE
+          ZWSEDW1(JI)=0.
+          ZWSEDW2(JI)=0.
+        ENDIF
+!- duplicated code -------------------------------------------------------------------------
+        IF (ZWSEDW2(JI) /= 0.) THEN
+          ZSED(JI,JJ,IK,JRR)=FWSED1(ZWSEDW1(JI),PTSTEP,PDZZ(JI,JJ,JK),PRHODREF(JI,JJ,JK),PRXT(JI,JJ),ZINVTSTEP) &
+           & + FWSED2(ZWSEDW2(JI),PTSTEP,PDZZ(JI,JJ,JK),ZSED(JI,JJ,IKPLUS,JRR))
+        ELSE
+          ZSED(JI,JJ,IK,JRR)=FWSED1(ZWSEDW1(JI),PTSTEP,PDZZ(JI,JJ,JK),PRHODREF(JI,JJ,JK),PRXT(JI,JJ),ZINVTSTEP)
+        ENDIF
+!-------------------------------------------------------------------------------------------
+      ENDDO
+    ENDDO
+
+    !!IF (LHOOK) CALL DR_HOOK('ICE4_SEDIMENTATION_STAT:SNOW',1,ZHOOK_HANDLE)
+
+  END SUBROUTINE SNOW
+
   SUBROUTINE OTHER_SPECIES(PFSED,PEXSED,PRXT)
 
     REAL, INTENT(IN)    :: PFSED
diff --git a/src/common/micro/rain_ice.F90 b/src/common/micro/rain_ice.F90
index 01ef96e1e..7c46fcaaf 100644
--- a/src/common/micro/rain_ice.F90
+++ b/src/common/micro/rain_ice.F90
@@ -529,6 +529,7 @@ IF(.NOT. PARAMI%LSEDIM_AFTER) THEN
       CALL ICE4_SEDIMENTATION_STAT(D, CST, ICEP, ICED, &
                                   &PTSTEP, KRR, OSEDIC, PDZZ, &
                                   &PRHODREF, PPABST, PTHT, PRHODJ, &
+                                  &ZLBDAS, &
                                   &PRCS, ZRCT, PRRS, ZRRT, PRIS, ZRIT,&
                                   &PRSS, ZRST, PRGS, ZRGT,&
                                   &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, &
@@ -547,6 +548,7 @@ IF(.NOT. PARAMI%LSEDIM_AFTER) THEN
       CALL ICE4_SEDIMENTATION_STAT(D, CST, ICEP, ICED, &
                                   &PTSTEP, KRR, OSEDIC, PDZZ, &
                                   &PRHODREF, PPABST, PTHT, PRHODJ, &
+                                  &ZLBDAS, &
                                   &PRCS, ZRCT, PRRS, ZRRT, PRIS, ZRIT,&
                                   &PRSS, ZRST, PRGS, ZRGT,&
                                   &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, &
@@ -1208,10 +1210,15 @@ IF(BUCONF%LBU_ENABLE) THEN
       ZW(JIJ,JK)=ZW(JIJ,JK)+ZZ_RVHENI(JIJ,JK)
     ENDDO
   ENDDO
+#ifdef REPRO48
   IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HENU',  ZW(:, :)*ZZ_LSFACT(:, :)*PRHODJ(:, :))
   IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'HENU', -ZW(:, :)                *PRHODJ(:, :))
   IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HENU',  ZW(:, :)                *PRHODJ(:, :))
-
+#else
+  IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HIN',  ZW(:, :)*ZZ_LSFACT(:, :)*PRHODJ(:, :))
+  IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'HIN', -ZW(:, :)                *PRHODJ(:, :))
+  IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HIN',  ZW(:, :)                *PRHODJ(:, :))
+#endif
   ZW(:,:) = 0.
   DO JL=1, KSIZE
     ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RCHONI(JL) * ZINV_TSTEP
@@ -1611,6 +1618,7 @@ IF(PARAMI%LSEDIM_AFTER) THEN
       CALL ICE4_SEDIMENTATION_STAT(D, CST, ICEP, ICED, &
                                   &PTSTEP, KRR, OSEDIC, PDZZ, &
                                   &PRHODREF, PPABST, PTHT, PRHODJ, &
+                                  &ZLBDAS, &
                                   &PRCS, ZRCT, PRRS, ZRRT, PRIS, ZRIT,&
                                   &PRSS, ZRST, PRGS, ZRGT,&
                                   &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, &
@@ -1629,6 +1637,7 @@ IF(PARAMI%LSEDIM_AFTER) THEN
       CALL ICE4_SEDIMENTATION_STAT(D, CST, ICEP, ICED, &
                                   &PTSTEP, KRR, OSEDIC, PDZZ, &
                                   &PRHODREF, PPABST, PTHT, PRHODJ, &
+                                  &ZLBDAS, &
                                   &PRCS, ZRCT, PRRS, ZRRT, PRIS, ZRIT,&
                                   &PRSS, ZRST, PRGS, ZRGT,&
                                   &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, &
-- 
GitLab