From 3a1f79db6aaf1905a5fd84dacd56e3efa3a85e1d Mon Sep 17 00:00:00 2001
From: Quentin Rodier <quentin.rodier@meteo.fr>
Date: Fri, 19 Apr 2019 10:36:38 +0200
Subject: [PATCH] Quentin 19/04/2019: corrections in LIMA with respect to
 rhodref use (minor)

(cherry picked from commit ed03cd89f4cd8d1551fbcdb8fa1e8d9ecfbbd5b9)
---
 src/MNH/lima_cold_sedimentation.f90   | 12 +++-------
 src/MNH/lima_cold_slow_processes.f90  | 10 +++------
 src/MNH/lima_graupel_deposition.f90   | 32 ++++++++++++++-------------
 src/MNH/lima_ice_aggregation_snow.f90 |  8 ++++---
 src/MNH/lima_ice_snow_deposition.f90  |  4 ++--
 src/MNH/lima_mixed_slow_processes.f90 |  4 +---
 src/MNH/lima_sedimentation.f90        |  4 +---
 src/MNH/lima_tendencies.f90           |  4 ++--
 8 files changed, 34 insertions(+), 44 deletions(-)

diff --git a/src/MNH/lima_cold_sedimentation.f90 b/src/MNH/lima_cold_sedimentation.f90
index 2764324ee..c81d3924f 100644
--- a/src/MNH/lima_cold_sedimentation.f90
+++ b/src/MNH/lima_cold_sedimentation.f90
@@ -263,9 +263,7 @@ DO JN = 1 , KSPLITG
             ZRSS(JL) = PRSS(I1(JL),I2(JL),I3(JL))
          END DO
          WHERE( ZRSS(:)>XRTMIN(5) )
-! Correction BVIE ZRHODREF
-!            ZZW(:) = XFSEDS * ZRSS(:)**XEXSEDS * ZRHODREF(:)**(XEXSEDS-XCEXVT)
-            ZZW(:) = XFSEDS * ZRSS(:)**XEXSEDS * ZRHODREF(:)**(-XCEXVT) * ZRHODREF(:)
+            ZZW(:) = XFSEDS * (ZRSS(:)*ZRHODREF(:))**XEXSEDS * ZRHODREF(:)**(-XCEXVT)
          END WHERE
          ZWSEDR(:,:,:) = UNPACK( ZZW(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
          ZWSEDR(:,:,IKB:IKE) = MIN( ZWSEDR(:,:,IKB:IKE), PRSS(:,:,IKB:IKE) * PRHODREF(:,:,IKB:IKE) / ZW(:,:,IKB:IKE) )
@@ -289,9 +287,7 @@ DO JN = 1 , KSPLITG
             ZRGS(JL) = PRGS(I1(JL),I2(JL),I3(JL))
          END DO
          WHERE( ZRGS(:)>XRTMIN(6) )
-! Correction BVIE ZRHODREF
-!            ZZW(:) = XFSEDG * ZRGS(:)**XEXSEDG * ZRHODREF(:)**(XEXSEDG-XCEXVT)
-            ZZW(:) = XFSEDG * ZRGS(:)**XEXSEDG * ZRHODREF(:)**(-XCEXVT) * ZRHODREF(:)
+            ZZW(:) = XFSEDG * (ZRGS(:)*ZRHODREF(:))**XEXSEDG * ZRHODREF(:)**(-XCEXVT)
          END WHERE
          ZWSEDR(:,:,:) = UNPACK( ZZW(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
          ZWSEDR(:,:,IKB:IKE) = MIN( ZWSEDR(:,:,IKB:IKE), PRGS(:,:,IKB:IKE) * PRHODREF(:,:,IKB:IKE) / ZW(:,:,IKB:IKE) )
@@ -315,9 +311,7 @@ DO JN = 1 , KSPLITG
             ZRHS(JL) = PRHS(I1(JL),I2(JL),I3(JL))
          END DO
          WHERE( ZRHS(:)>XRTMIN(7) )
-! Correction BVIE ZRHODREF
-!            ZZW(:) = XFSEDH * ZRHS(:)**XEXSEDH * ZRHODREF(:)**(XEXSEDH-XCEXVT)
-            ZZW(:) = XFSEDH * ZRHS(:)**XEXSEDH * ZRHODREF(:)**(-XCEXVT) * ZRHODREF(:)
+            ZZW(:) = XFSEDH * (ZRHS(:)*ZRHODREF(:))**XEXSEDH * ZRHODREF(:)**(-XCEXVT)
          END WHERE
          ZWSEDR(:,:,:) = UNPACK( ZZW(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
          ZWSEDR(:,:,IKB:IKE) = MIN( ZWSEDR(:,:,IKB:IKE), PRHS(:,:,IKB:IKE) * PRHODREF(:,:,IKB:IKE) / ZW(:,:,IKB:IKE) )
diff --git a/src/MNH/lima_cold_slow_processes.f90 b/src/MNH/lima_cold_slow_processes.f90
index 08ad1dc79..0aeb16cfc 100644
--- a/src/MNH/lima_cold_slow_processes.f90
+++ b/src/MNH/lima_cold_slow_processes.f90
@@ -339,11 +339,9 @@ IF( IMICRO >= 1 ) THEN
       WHERE ( ZLBDAS(:)<XLBDASCNVI_MAX .AND. (ZRST(:)>XRTMIN(5)) &
                                        .AND. (ZSSI(:)<0.0)       )
          ZZW(:) = (ZLBDAS(:)*XDSCNVI_LIM)**(XALPHAS)
-         ZZX(:) = ( -ZSSI(:)/ZAI(:) ) * (XCCS*ZLBDAS(:)**XCXS) * (ZZW(:)**XNUI) &
+         ZZX(:) = ( -ZSSI(:)/ZAI(:) ) * (XCCS*ZLBDAS(:)**XCXS)/ZRHODREF(:) * (ZZW(:)**XNUI) &
                                                                * EXP(-ZZW(:))
 !
-! Correction BVIE RHODREF
-!         ZZW(:) = MIN( ( XR0DEPSI+XR1DEPSI*ZCJ(:) )*ZZX(:)/ZRHODREF(:),ZRSS(:) )
          ZZW(:) = MIN( ( XR0DEPSI+XR1DEPSI*ZCJ(:) )*ZZX(:),ZRSS(:) )
          ZRIS(:) = ZRIS(:) + ZZW(:)
          ZRSS(:) = ZRSS(:) - ZZW(:)
@@ -372,9 +370,7 @@ IF( IMICRO >= 1 ) THEN
 !
       ZZW(:) = 0.0
       WHERE ( (ZRST(:)>XRTMIN(5)) .AND. (ZRSS(:)>ZRTMIN(5)) )
-!Correction BVIE rhodref
-!         ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) *                               &
-         ZZW(:) = ( ZSSI(:)/(ZAI(:)) ) *                               &
+         ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) *                               &
                   ( X0DEPS*ZLBDAS(:)**XEX0DEPS + X1DEPS*ZCJ(:)*ZLBDAS(:)**XEX1DEPS )
          ZZW(:) =    MIN( ZRVS(:),ZZW(:)      )*(0.5+SIGN(0.5,ZZW(:))) &
                    - MIN( ZRSS(:),ABS(ZZW(:)) )*(0.5-SIGN(0.5,ZZW(:)))
@@ -440,7 +436,7 @@ IF( IMICRO >= 1 ) THEN
       WHERE ( (ZRIT(:)>XRTMIN(4)) .AND. (ZRST(:)>XRTMIN(5)) .AND. (ZRIS(:)>ZRTMIN(4)) &
                                                             .AND. (ZCIS(:)>ZCTMIN(4)) )
          ZZW1(:,3) = (ZLBDAI(:) / ZLBDAS(:))**3
-         ZZW1(:,1) = (ZCIT(:)*(XCCS*ZLBDAS(:)**XCXS)*EXP( XCOLEXIS*(ZZT(:)-XTT) )) &
+         ZZW1(:,1) = (ZCIT(:)*(XCCS*ZLBDAS(:)**XCXS)/ZRHODREF(:)*EXP( XCOLEXIS*(ZZT(:)-XTT) )) &
                                                     / (ZLBDAI(:)**3)
          ZZW1(:,2) = MIN( ZZW1(:,1)*(XAGGS_CLARGE1+XAGGS_CLARGE2*ZZW1(:,3)),ZCIS(:) )
          ZCIS(:) = ZCIS(:) - ZZW1(:,2)
diff --git a/src/MNH/lima_graupel_deposition.f90 b/src/MNH/lima_graupel_deposition.f90
index 85fbbe915..4c042364d 100644
--- a/src/MNH/lima_graupel_deposition.f90
+++ b/src/MNH/lima_graupel_deposition.f90
@@ -7,19 +7,20 @@
 !      #################################
 !
 INTERFACE
-   SUBROUTINE LIMA_GRAUPEL_DEPOSITION (LDCOMPUTE,                            &
+   SUBROUTINE LIMA_GRAUPEL_DEPOSITION (LDCOMPUTE, PRHODREF,                  &
                                        PRGT, PSSI, PLBDG, PAI, PCJ, PLSFACT, &
                                        P_TH_DEPG, P_RG_DEPG,                 &
                                        PA_TH, PA_RV, PA_RG                   )
 !
 LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
+REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! 
 !
-REAL, DIMENSION(:),   INTENT(IN)    :: PRGT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PSSI    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDG   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PAI     ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCJ     ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT ! 
+REAL, DIMENSION(:),   INTENT(IN)    :: PRGT     ! Cloud water C. at t
+REAL, DIMENSION(:),   INTENT(IN)    :: PSSI     ! 
+REAL, DIMENSION(:),   INTENT(IN)    :: PLBDG    ! 
+REAL, DIMENSION(:),   INTENT(IN)    :: PAI      ! 
+REAL, DIMENSION(:),   INTENT(IN)    :: PCJ      ! 
+REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT  ! 
 !
 REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_DEPG
 REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_DEPG
@@ -33,7 +34,7 @@ END INTERFACE
 END MODULE MODI_LIMA_GRAUPEL_DEPOSITION
 !
 !     ###########################################################################
-      SUBROUTINE LIMA_GRAUPEL_DEPOSITION (LDCOMPUTE,                            &
+      SUBROUTINE LIMA_GRAUPEL_DEPOSITION (LDCOMPUTE, PRHODREF,                  &
                                           PRGT, PSSI, PLBDG, PAI, PCJ, PLSFACT, &
                                           P_TH_DEPG, P_RG_DEPG,                 &
                                           PA_TH, PA_RV, PA_RG                   )
@@ -68,13 +69,14 @@ IMPLICIT NONE
 !*       0.1   Declarations of dummy arguments :
 !
 LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
+REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! 
 !
-REAL, DIMENSION(:),   INTENT(IN)    :: PRGT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PSSI    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDG   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PAI     ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCJ     ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT ! 
+REAL, DIMENSION(:),   INTENT(IN)    :: PRGT     ! Cloud water C. at t
+REAL, DIMENSION(:),   INTENT(IN)    :: PSSI     ! 
+REAL, DIMENSION(:),   INTENT(IN)    :: PLBDG    ! 
+REAL, DIMENSION(:),   INTENT(IN)    :: PAI      ! 
+REAL, DIMENSION(:),   INTENT(IN)    :: PCJ      ! 
+REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT  ! 
 !
 REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_DEPG
 REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_DEPG
@@ -93,7 +95,7 @@ REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RG
 P_TH_DEPG(:) = 0.0
 P_RG_DEPG(:) = 0.0
 WHERE ( (PRGT(:)>XRTMIN(6)) .AND. LDCOMPUTE(:) )
-   P_RG_DEPG(:) = ( PSSI(:)/(PAI(:)) ) *                               &
+   P_RG_DEPG(:) = ( PSSI(:)/PAI(:)/PRHODREF(:) ) *                       &
         ( X0DEPG*PLBDG(:)**XEX0DEPG + X1DEPG*PCJ(:)*PLBDG(:)**XEX1DEPG )
    P_TH_DEPG(:) = P_RG_DEPG(:)*PLSFACT(:)
 END WHERE
diff --git a/src/MNH/lima_ice_aggregation_snow.f90 b/src/MNH/lima_ice_aggregation_snow.f90
index 15c1d699c..09ebc41dc 100644
--- a/src/MNH/lima_ice_aggregation_snow.f90
+++ b/src/MNH/lima_ice_aggregation_snow.f90
@@ -8,7 +8,7 @@
 !
 INTERFACE
    SUBROUTINE LIMA_ICE_AGGREGATION_SNOW (LDCOMPUTE,                      &
-                                         PT,                             &
+                                         PT, PRHODREF,                   &
                                          PRIT, PRST, PCIT, PLBDI, PLBDS, &
                                          P_RI_AGGS, P_CI_AGGS,           &
                                          PA_RI, PA_CI, PA_RS             )
@@ -16,6 +16,7 @@ INTERFACE
 LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
 !
 REAL, DIMENSION(:),   INTENT(IN)    :: PT
+REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF
 !
 REAL, DIMENSION(:),   INTENT(IN)    :: PRIT
 REAL, DIMENSION(:),   INTENT(IN)    :: PRST
@@ -36,7 +37,7 @@ END MODULE MODI_LIMA_ICE_AGGREGATION_SNOW
 !
 !     #######################################################################
       SUBROUTINE LIMA_ICE_AGGREGATION_SNOW (LDCOMPUTE,                      &
-                                            PT,                             &
+                                            PT, PRHODREF,                   &
                                             PRIT, PRST, PCIT, PLBDI, PLBDS, &
                                             P_RI_AGGS, P_CI_AGGS,           &
                                             PA_RI, PA_CI, PA_RS             )
@@ -74,6 +75,7 @@ IMPLICIT NONE
 LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
 !
 REAL, DIMENSION(:),   INTENT(IN)    :: PT
+REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF
 !
 REAL, DIMENSION(:),   INTENT(IN)    :: PRIT
 REAL, DIMENSION(:),   INTENT(IN)    :: PRST
@@ -108,7 +110,7 @@ P_CI_AGGS(:) = 0.
 !
 WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PRST(:)>XRTMIN(5)) .AND. LDCOMPUTE(:) )
    ZZW1(:) = (PLBDI(:) / PLBDS(:))**3
-   ZZW2(:) = (PCIT(:)*(XCCS*PLBDS(:)**XCXS)*EXP( XCOLEXIS*(PT(:)-XTT) )) &
+   ZZW2(:) = (PCIT(:)*(XCCS*PLBDS(:)**XCXS)/PRHODREF(:)*EXP( XCOLEXIS*(PT(:)-XTT) )) &
         / (PLBDI(:)**3)
    ZZW3(:) = ZZW2(:)*(XAGGS_CLARGE1+XAGGS_CLARGE2*ZZW1(:))
 !
diff --git a/src/MNH/lima_ice_snow_deposition.f90 b/src/MNH/lima_ice_snow_deposition.f90
index 7563412ba..4d92b528a 100644
--- a/src/MNH/lima_ice_snow_deposition.f90
+++ b/src/MNH/lima_ice_snow_deposition.f90
@@ -166,7 +166,7 @@ WHERE( GMICRO )
    WHERE ( PLBDS(:)<XLBDASCNVI_MAX .AND. (PRST(:)>XRTMIN(5)) &
                                    .AND. (PSSI(:)<0.0)       )
       ZZW(:) = (PLBDS(:)*XDSCNVI_LIM)**(XALPHAS)
-      ZZX(:) = ( -PSSI(:)/PAI(:) ) * (XCCS*PLBDS(:)**XCXS) * (ZZW(:)**XNUS) * EXP(-ZZW(:))
+      ZZX(:) = ( -PSSI(:)/PAI(:) ) * (XCCS*PLBDS(:)**XCXS)/PRHODREF(:) * (ZZW(:)**XNUS) * EXP(-ZZW(:))
 !
       ZZW(:) = ( XR0DEPSI+XR1DEPSI*PCJ(:) )*ZZX(:)
 !
@@ -187,7 +187,7 @@ WHERE( GMICRO )
 !
    ZZW(:) = 0.0
    WHERE ( (PRST(:)>XRTMIN(5)) )
-      ZZW(:) = ( PSSI(:)/(PAI(:)) ) * &
+      ZZW(:) = ( PSSI(:)/(PAI(:))/PRHODREF(:) ) * &
            ( X0DEPS*PLBDS(:)**XEX0DEPS + X1DEPS*PCJ(:)*PLBDS(:)**XEX1DEPS )
       ZZW(:) =    ZZW(:)*(0.5+SIGN(0.5,ZZW(:))) - ABS(ZZW(:))*(0.5-SIGN(0.5,ZZW(:)))
    END WHERE
diff --git a/src/MNH/lima_mixed_slow_processes.f90 b/src/MNH/lima_mixed_slow_processes.f90
index 3e217b691..7c58f4910 100644
--- a/src/MNH/lima_mixed_slow_processes.f90
+++ b/src/MNH/lima_mixed_slow_processes.f90
@@ -181,9 +181,7 @@ INTEGER :: JMOD_IFN
 IF (LSNOW) THEN
    ZZW(:) = 0.0
    WHERE ( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>XRTMIN(6)/PTSTEP) )
-!Correction BVIE RHODREF
-!      ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) *                               &
-      ZZW(:) = ( ZSSI(:)/(ZAI(:)) ) *                               &
+      ZZW(:) = ( ZSSI(:)/ZAI(:)/ZRHODREF(:) ) *                               &
                ( X0DEPG*ZLBDAG(:)**XEX0DEPG + X1DEPG*ZCJ(:)*ZLBDAG(:)**XEX1DEPG )
       ZZW(:) =         MIN( ZRVS(:),ZZW(:)      )*(0.5+SIGN(0.5,ZZW(:))) &
                      - MIN( ZRGS(:),ABS(ZZW(:)) )*(0.5-SIGN(0.5,ZZW(:)))
diff --git a/src/MNH/lima_sedimentation.f90 b/src/MNH/lima_sedimentation.f90
index 36b173a84..b64244b29 100644
--- a/src/MNH/lima_sedimentation.f90
+++ b/src/MNH/lima_sedimentation.f90
@@ -67,9 +67,7 @@ END MODULE MODI_LIMA_SEDIMENTATION
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_PARAM_LIMA_COLD,  ONLY : XLBEXI, XLBI, XDI,                 &
-                                  XFSEDRI, XFSEDCI, XFSEDS, XEXSEDS
-USE MODD_PARAM_LIMA_MIXED, ONLY : XFSEDG, XEXSEDG, XFSEDH, XEXSEDH
+USE MODD_PARAM_LIMA_COLD,  ONLY : XLBEXI, XLBI, XDI
 USE MODD_PARAM_LIMA,       ONLY : XCEXVT, XRTMIN, XCTMIN, NSPLITSED, &
                                   XLB, XLBEX, XD, XFSEDR, XFSEDC,    &
                                   XALPHAC, XNUC
diff --git a/src/MNH/lima_tendencies.f90 b/src/MNH/lima_tendencies.f90
index cb1cf7d00..b66b19c3d 100644
--- a/src/MNH/lima_tendencies.f90
+++ b/src/MNH/lima_tendencies.f90
@@ -550,14 +550,14 @@ ZLBDS(:) = MIN( XLBDAS_MAX, ZLBDS(:))
 !
 IF (LCOLD .AND. LSNOW) THEN
    CALL LIMA_ICE_AGGREGATION_SNOW (LDCOMPUTE,                      &
-                                   ZT,                             &
+                                   ZT, PRHODREF,                   &
                                    PRIT, PRST, PCIT, ZLBDI, ZLBDS, &
                                    P_RI_AGGS, P_CI_AGGS,           &
                                    PA_RI, PA_CI, PA_RS             )
 END IF
 !
 IF (LWARM .AND. LCOLD) THEN
-   CALL LIMA_GRAUPEL_DEPOSITION (LDCOMPUTE,                            &
+   CALL LIMA_GRAUPEL_DEPOSITION (LDCOMPUTE, PRHODREF,                  &
                                  PRGT, ZSSI, ZLBDG, ZAI, ZCJ, ZLSFACT, &
                                  P_TH_DEPG, P_RG_DEPG,                 &
                                  PA_TH, PA_RV, PA_RG                   )
-- 
GitLab