From e509a6e4860ffd9727c99aa427f71d232cbfc3f7 Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Tue, 23 Jun 2020 11:48:37 +0200
Subject: [PATCH] Philippe 23/06/2020: remove ZSVS and ZSVT to improve code
 readability

---
 src/MNH/resolved_cloud.f90 | 196 ++++++++++++++++++-------------------
 1 file changed, 94 insertions(+), 102 deletions(-)

diff --git a/src/MNH/resolved_cloud.f90 b/src/MNH/resolved_cloud.f90
index 090d6f691..34e7b5c6b 100644
--- a/src/MNH/resolved_cloud.f90
+++ b/src/MNH/resolved_cloud.f90
@@ -274,6 +274,7 @@ END MODULE MODI_RESOLVED_CLOUD
 !  P. Wautelet 11/06/2020: bugfix: add "Non local correction for precipitating species" for ICE4
 !  P. Wautelet + Benoit Vié 11/06/2020: improve removal of negative scalar variables + adapt the corresponding budgets
 !  P. Wautelet + Benoit Vié 18/06/2020: improve removal of negative scalar variables: use ZEXN instead of PEXNREF
+!  P. Wautelet 23/06/2020: remove ZSVS and ZSVT to improve code readability
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -463,8 +464,6 @@ REAL  :: ZRATIO                     ! ZMASSTOT / ZMASSCOR
 INTEGER                               :: ISVBEG ! first scalar index for microphysics
 INTEGER                               :: ISVEND ! last  scalar index for microphysics
 REAL, DIMENSION(:),       ALLOCATABLE :: ZRSMIN ! Minimum value for tendencies
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSVT   ! scalar variable for microphysics only
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSVS   ! scalar tendency for microphysics only
 LOGICAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: LLMICRO ! mask to limit computation
 REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3), KRR) :: ZFPR
 !
@@ -493,15 +492,9 @@ ELSE IF (HCLOUD == 'LIMA') THEN
   ISVEND = NSV_LIMA_END
 ELSE
   ISVBEG = 0
-  ISVEND = 0
+  ISVEND = -1
 END IF
 !
-IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') THEN
-  ALLOCATE(ZSVT(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3),ISVEND - ISVBEG + 1))
-  ALLOCATE(ZSVS(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3),ISVEND - ISVBEG + 1))
-  ZSVT(:,:,:,:) = PSVT(:,:,:,ISVBEG:ISVEND)
-  ZSVS(:,:,:,:) = PSVS(:,:,:,ISVBEG:ISVEND)
-END IF
 IF (HCLOUD(1:3)=='ICE') THEN
   ALLOCATE(ZRSMIN(SIZE(XRTMIN)))
   ZRSMIN(:) = XRTMIN(:) / PTSTEP
@@ -516,8 +509,8 @@ DO JRR = 1,KRR
 END DO
 !
 IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') THEN
-  DO JSV = 1,SIZE(ZSVS,4)
-    ZSVS(:,:,:,JSV) = ZSVS(:,:,:,JSV) / PRHODJ(:,:,:)
+  DO JSV = ISVBEG, ISVEND
+    PSVS(:,:,:,JSV) = PSVS(:,:,:,JSV) / PRHODJ(:,:,:)
   ENDDO
 ENDIF
 !
@@ -544,18 +537,18 @@ IF(LNORTH_ll() .AND. HLBCY(2) /= 'CYCL')  PRT(:,IJE+1:,:,2:) = 0.0
 !
 IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') THEN
 DO JI=1,JPHEXT
-  ZSVS(JI,:,:,:) = ZSVS(IIB,:,:,:)
-  ZSVS(IIE+JI,:,:,:) = ZSVS(IIE,:,:,:)
-  ZSVS(:,JI,:,:) = ZSVS(:,IJB,:,:)
-  ZSVS(:,IJE+JI,:,:) = ZSVS(:,IJE,:,:)
+  PSVS(JI,     :,      :, ISVBEG:ISVEND) = PSVS(IIB, :,   :, ISVBEG:ISVEND)
+  PSVS(IIE+JI, :,      :, ISVBEG:ISVEND) = PSVS(IIE, :,   :, ISVBEG:ISVEND)
+  PSVS(:,      JI,     :, ISVBEG:ISVEND) = PSVS(:,   IJB, :, ISVBEG:ISVEND)
+  PSVS(:,      IJE+JI, :, ISVBEG:ISVEND) = PSVS(:,   IJE, :, ISVBEG:ISVEND)
 END DO
  !
 !  complete the physical boundaries to avoid some computations
 !
-  IF(LWEST_ll()  .AND. HLBCX(1) /= 'CYCL')  ZSVT(:IIB-1,:,:,:) = 0.0
-  IF(LEAST_ll()  .AND. HLBCX(2) /= 'CYCL')  ZSVT(IIE+1:,:,:,:) = 0.0
-  IF(LSOUTH_ll() .AND. HLBCY(1) /= 'CYCL')  ZSVT(:,:IJB-1,:,:) = 0.0
-  IF(LNORTH_ll() .AND. HLBCY(2) /= 'CYCL')  ZSVT(:,IJE+1:,:,:) = 0.0
+  IF(LWEST_ll()  .AND. HLBCX(1) /= 'CYCL') PSVT(:IIB-1, :,      :, ISVBEG:ISVEND) = 0.0
+  IF(LEAST_ll()  .AND. HLBCX(2) /= 'CYCL') PSVT(IIE+1:, :,      :, ISVBEG:ISVEND) = 0.0
+  IF(LSOUTH_ll() .AND. HLBCY(1) /= 'CYCL') PSVT(:,      :IJB-1, :, ISVBEG:ISVEND) = 0.0
+  IF(LNORTH_ll() .AND. HLBCY(2) /= 'CYCL') PSVT(:,      IJE+1:, :, ISVBEG:ISVEND) = 0.0
 ENDIF
 !
 !  complete the vertical boundaries
@@ -571,10 +564,10 @@ PRT(:,:,IKE+1,:) = PRT(:,:,IKE,:)
 !
 IF (HCLOUD == 'C2R2' .OR. HCLOUD == 'C3R5' .OR. HCLOUD == 'KHKO' &
                                            .OR. HCLOUD == 'LIMA') THEN
-  ZSVS(:,:,IKB-1,:) = ZSVS(:,:,IKB,:)
-  ZSVS(:,:,IKE+1,:) = ZSVS(:,:,IKE,:)
-  ZSVT(:,:,IKB-1,:) = ZSVT(:,:,IKB,:)
-  ZSVT(:,:,IKE+1,:) = ZSVT(:,:,IKE,:)
+  PSVS(:,:,IKB-1,ISVBEG:ISVEND) = PSVS(:,:,IKB,ISVBEG:ISVEND)
+  PSVS(:,:,IKE+1,ISVBEG:ISVEND) = PSVS(:,:,IKE,ISVBEG:ISVEND)
+  PSVT(:,:,IKB-1,ISVBEG:ISVEND) = PSVT(:,:,IKB,ISVBEG:ISVEND)
+  PSVT(:,:,IKE+1,ISVBEG:ISVEND) = PSVT(:,:,IKE,ISVBEG:ISVEND)
 ENDIF
 !
 ! personal comment:  tranfering these variables to the
@@ -641,16 +634,16 @@ SELECT CASE ( HCLOUD )
 !
 !
   CASE('C2R2','KHKO')
-    WHERE (PRS(:,:,:,2) < 0. .OR. ZSVS(:,:,:,2) < 0.)
-      ZSVS(:,:,:,1) = 0.0
+    WHERE (PRS(:,:,:,2) < 0. .OR. PSVS(:,:,:,NSV_C2R2BEG+1) < 0.)
+      PSVS(:,:,:,NSV_C2R2BEG) = 0.0
     END WHERE
     DO JSV = 2, 3
-      WHERE (PRS(:,:,:,JSV) < 0. .OR. ZSVS(:,:,:,JSV) < 0.)
+      WHERE (PRS(:,:,:,JSV) < 0. .OR. PSVS(:,:,:,NSV_C2R2BEG-1+JSV) < 0.)
         PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,JSV)
         PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,JSV) * ZLV(:,:,:) /  &
             ZCPH(:,:,:) / ZEXN(:,:,:)
         PRS(:,:,:,JSV)  = 0.0
-        ZSVS(:,:,:,JSV) = 0.0
+        PSVS(:,:,:,NSV_C2R2BEG-1+JSV) = 0.0
       END WHERE
     ENDDO
 !
@@ -695,16 +688,16 @@ SELECT CASE ( HCLOUD )
     PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) )
 !
    CASE('C3R5')
-    WHERE (PRS(:,:,:,2) < 0. .OR. ZSVS(:,:,:,2) < 0.)
-      ZSVS(:,:,:,1) = 0.0
+    WHERE (PRS(:,:,:,2) < 0. .OR. PSVS(:,:,:,NSV_C2R2BEG+1) < 0.)
+      PSVS(:,:,:,NSV_C2R2BEG) = 0.0
     END WHERE
     DO JSV = 2, 3
-      WHERE (PRS(:,:,:,JSV) < 0. .OR. ZSVS(:,:,:,JSV) < 0.)
+      WHERE (PRS(:,:,:,JSV) < 0. .OR. PSVS(:,:,:,NSV_C2R2BEG-1+JSV) < 0.)
         PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,JSV)
         PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,JSV) * ZLV(:,:,:) /  &
              ZCPH(:,:,:) / ZEXN(:,:,:)
         PRS(:,:,:,JSV)  = 0.0
-        ZSVS(:,:,:,JSV) = 0.0
+        PSVS(:,:,:,NSV_C2R2BEG-1+JSV) = 0.0
       END WHERE
     ENDDO
 !   ice
@@ -713,7 +706,7 @@ SELECT CASE ( HCLOUD )
       PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLV(:,:,:) /  &
            ZCPH(:,:,:) / ZEXN(:,:,:)
       PRS(:,:,:,4)  = 0.0
-      ZSVS(:,:,:,4) = 0.0
+      PSVS(:,:,:,NSV_C2R2BEG+3) = 0.0
     END WHERE
 !   cloud
     WHERE (PRS(:,:,:,2) < 0.)
@@ -721,45 +714,45 @@ SELECT CASE ( HCLOUD )
       PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) /  &
            ZCPH(:,:,:) / ZEXN(:,:,:)
       PRS(:,:,:,2)  = 0.0
-      ZSVS(:,:,:,2) = 0.0
+      PSVS(:,:,:,NSV_C2R2BEG+1) = 0.0
     END WHERE
 !
-    ZSVS(:,:,:,:) = MAX( 0.0,ZSVS(:,:,:,:) )
+    PSVS(:,:,:,ISVBEG:ISVEND) = MAX( 0.0,PSVS(:,:,:,ISVBEG:ISVEND) )
     PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) )
 !
    CASE('LIMA')
 ! Correction where rc<0 or Nc<0
       IF (OWARM) THEN
-         WHERE (PRS(:,:,:,2) < YRTMIN(2)/PTSTEP .OR. ZSVS(:,:,:,NSV_LIMA_NC-NSV_LIMA_BEG+1) < YCTMIN(2)/PTSTEP)
+         WHERE (PRS(:,:,:,2) < YRTMIN(2)/PTSTEP .OR. PSVS(:,:,:,NSV_LIMA_NC) < YCTMIN(2)/PTSTEP)
             PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2)
             PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) /  &
                  ZCPH(:,:,:) / ZEXN(:,:,:)
             PRS(:,:,:,2)  = 0.0
-            ZSVS(:,:,:,NSV_LIMA_NC-NSV_LIMA_BEG+1) = 0.0
+            PSVS(:,:,:,NSV_LIMA_NC) = 0.0
          END WHERE
       END IF
 ! Correction where rr<0 or Nr<0
       IF (OWARM .AND. ORAIN) THEN
-         WHERE (PRS(:,:,:,3) < YRTMIN(3)/PTSTEP .OR. ZSVS(:,:,:,NSV_LIMA_NR-NSV_LIMA_BEG+1) < YCTMIN(3)/PTSTEP)
+         WHERE (PRS(:,:,:,3) < YRTMIN(3)/PTSTEP .OR. PSVS(:,:,:,NSV_LIMA_NR) < YCTMIN(3)/PTSTEP)
             PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,3)
             PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,3) * ZLV(:,:,:) /  &
                  ZCPH(:,:,:) / ZEXN(:,:,:)
             PRS(:,:,:,3)  = 0.0
-            ZSVS(:,:,:,NSV_LIMA_NR-NSV_LIMA_BEG+1) = 0.0
+            PSVS(:,:,:,NSV_LIMA_NR) = 0.0
          END WHERE
       END IF
 ! Correction where ri<0 or Ni<0
       IF (LCOLD) THEN
-         WHERE (PRS(:,:,:,4) < YRTMIN(4)/PTSTEP .OR. ZSVS(:,:,:,NSV_LIMA_NI-NSV_LIMA_BEG+1) < YCTMIN(4)/PTSTEP)
+         WHERE (PRS(:,:,:,4) < YRTMIN(4)/PTSTEP .OR. PSVS(:,:,:,NSV_LIMA_NI) < YCTMIN(4)/PTSTEP)
             PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4)
             PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLS(:,:,:) /  &
                  ZCPH(:,:,:) / ZEXN(:,:,:)
             PRS(:,:,:,4)  = 0.0
-            ZSVS(:,:,:,NSV_LIMA_NI-NSV_LIMA_BEG+1) = 0.0
+            PSVS(:,:,:,NSV_LIMA_NI) = 0.0
          END WHERE
       END IF
 !
-     ZSVS(:,:,:,:) = MAX( 0.0,ZSVS(:,:,:,:) )
+     PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END) = MAX( 0.0,PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END) )
      PRS(:,:,:,:)  = MAX( 0.0,PRS(:,:,:,:) )
 !
 END SELECT
@@ -779,17 +772,17 @@ IF (LBUDGET_RH) CALL BUDGET (PRS(:,:,:,7) * PRHODJ(:,:,:),12,'NEGA_BU_RRH')
 
 IF (LBUDGET_SV .AND. (HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO')) THEN
   DO JSV = 1, 3
-    CALL BUDGET ( ZSVS(:,:,:,JSV),12+NSV_C2R2BEG-1+JSV,'NEGA_BU_RSV')
+    CALL BUDGET ( PSVS(:,:,:,NSV_C2R2BEG-1+JSV),12+NSV_C2R2BEG-1+JSV,'NEGA_BU_RSV')
   END DO
 END IF
 IF (LBUDGET_SV .AND. HCLOUD == 'C3R5') THEN
   DO JSV = 1, 4
-    CALL BUDGET ( ZSVS(:,:,:,JSV),12+NSV_C2R2BEG-1+JSV,'NEGA_BU_RSV')
+    CALL BUDGET ( PSVS(:,:,:,NSV_C2R2BEG-1+JSV),12+NSV_C2R2BEG-1+JSV,'NEGA_BU_RSV')
   END DO
 END IF
 IF (LBUDGET_SV .AND. HCLOUD == 'LIMA') THEN
   DO JSV = NSV_LIMA_BEG, NSV_LIMA_END
-    CALL BUDGET ( ZSVS(:,:,:,JSV-NSV_LIMA_BEG+1),12+JSV,'NEGA_BU_RSV')
+    CALL BUDGET ( PSVS(:,:,:,JSV),12+JSV,'NEGA_BU_RSV')
   END DO
 END IF
 !
@@ -862,8 +855,9 @@ SELECT CASE ( HCLOUD )
                      PPABST, PTHT, PRT(:,:,:,1), PRT(:,:,:,2),  PRT(:,:,:,3),     &
                      PTHM, PRCM, PPABSM,                                          &
                      PW_ACT,PDTHRAD,PTHS, PRS(:,:,:,1),PRS(:,:,:,2),PRS(:,:,:,3), &
-                     ZSVT(:,:,:,1), ZSVT(:,:,:,2), ZSVT(:,:,:,3),                 &
-                     ZSVS(:,:,:,1), ZSVS(:,:,:,2), ZSVS(:,:,:,3),                 &
+                     PSVT(:,:,:,NSV_C2R2BEG),   PSVT(:,:,:,NSV_C2R2BEG+1),        &
+                     PSVT(:,:,:,NSV_C2R2BEG+2), PSVS(:,:,:,NSV_C2R2BEG),          &
+                     PSVS(:,:,:,NSV_C2R2BEG+1), PSVS(:,:,:,NSV_C2R2BEG+2),        &
                      PINPRC, PINPRR, PINPRR3D, PEVAP3D ,                          &
                      PSVT(:,:,:,:), PSOLORG, PMI, HACTCCN,                        &
                      PINDEP, PSUPSAT, PNACT                                       )
@@ -876,16 +870,17 @@ SELECT CASE ( HCLOUD )
                          PTSTEP, PRHODJ, PPABSM, PPABST, PRHODREF, PZZ,          &
                          PTHT,PRT(:,:,:,1),PRT(:,:,:,2),PRT(:,:,:,3),            &
                          PTHS,PRS(:,:,:,1),PRS(:,:,:,2),PRS(:,:,:,3),            &
-                         ZSVS(:,:,:,2),ZSVS(:,:,:,1),                            &
-                         ZSVS(:,:,:,4), PCLDFR, PSRCS , PNPRO,PSSPRO             )
+                         PSVS(:,:,:,NSV_C2R2BEG+1), PSVS(:,:,:,NSV_C2R2BEG),     &
+                         PSVS(:,:,:,NSV_C2R2BEG+3), PCLDFR, PSRCS, PNPRO, PSSPRO )
 !
    ELSE
-    CALL C2R2_ADJUST ( KRR,TPFILE, HRAD,                              &
-                       HTURBDIM, OCLOSE_OUT, OSUBG_COND, PTSTEP,               &
-                       PRHODJ, PSIGS, PPABST,                                  &
-                       PTHS=PTHS, PRVS=PRS(:,:,:,1), PRCS=PRS(:,:,:,2),        &
-                       PCNUCS=ZSVS(:,:,:,1), PCCS=ZSVS(:,:,:,2),               &
-                       PSRCS=PSRCS, PCLDFR=PCLDFR, PRRS=PRS(:,:,:,3)           )
+    CALL C2R2_ADJUST ( KRR,TPFILE, HRAD,                                &
+                       HTURBDIM, OCLOSE_OUT, OSUBG_COND, PTSTEP,        &
+                       PRHODJ, PSIGS, PPABST,                           &
+                       PTHS=PTHS, PRVS=PRS(:,:,:,1), PRCS=PRS(:,:,:,2), &
+                       PCNUCS=PSVS(:,:,:,NSV_C2R2BEG),                  &
+                       PCCS=PSVS(:,:,:,NSV_C2R2BEG+1),                  &
+                       PSRCS=PSRCS, PCLDFR=PCLDFR, PRRS=PRS(:,:,:,3)    )
 !
    END IF
 !
@@ -1073,34 +1068,35 @@ SELECT CASE ( HCLOUD )
                    PRHODREF, PEXNREF, ZDZZ,                                &
                    PRHODJ, PPABSM, PPABST,                                 &
                    NMOD_CCN, NMOD_IFN, NMOD_IMM,                           &
-                   PDTHRAD, PTHT, PRT, ZSVT, PW_ACT,                       &
-                   PTHS, PRS, ZSVS,                                        &
+                   PDTHRAD, PTHT, PRT,                                     &
+                   PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), PW_ACT,          &
+                   PTHS, PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END),       &
                    PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, PINPRH, &
-                   PEVAP3D                                         )
+                   PEVAP3D                                                 )
      ELSE
 
-        IF (OWARM) CALL LIMA_WARM(OACTIT, OSEDC, ORAIN, KSPLITR, PTSTEP, KMI,   &
-                                  TPFILE, OCLOSE_OUT, KRR, PZZ, PRHODJ,         &
-                                  PRHODREF, PEXNREF, PW_ACT, PPABSM, PPABST,    &
-                                  PDTHRAD, PRCM,                                   &
-                                  PTHT, PRT, ZSVT,                              &
-                                  PTHS, PRS, ZSVS,                              &
-                                  PINPRC, PINPRR, PINDEP, PINPRR3D, PEVAP3D     )
+        IF (OWARM) CALL LIMA_WARM(OACTIT, OSEDC, ORAIN, KSPLITR, PTSTEP, KMI,       &
+                                  TPFILE, OCLOSE_OUT, KRR, PZZ, PRHODJ,             &
+                                  PRHODREF, PEXNREF, PW_ACT, PPABSM, PPABST,        &
+                                  PDTHRAD, PRCM,                                    &
+                                  PTHT, PRT, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), &
+                                  PTHS, PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), &
+                                  PINPRC, PINPRR, PINDEP, PINPRR3D, PEVAP3D         )
 !
         IF (LCOLD) CALL LIMA_COLD(OSEDI, OHHONI, KSPLITG, PTSTEP, KMI,               &
                                   KRR, PZZ, PRHODJ,                                  &
                                   PRHODREF, PEXNREF, PPABST, PW_ACT,                 &
                                   PTHM, PPABSM,                                      &
-                                  PTHT, PRT, ZSVT,                                   &
-                                  PTHS, PRS, ZSVS,                                   &
-                                  PINPRS, PINPRG, PINPRH)
-!
-        IF (OWARM .AND. LCOLD) CALL LIMA_MIXED(OSEDI, OHHONI, KSPLITG, PTSTEP, KMI,    &
-                                               KRR, PZZ, PRHODJ,                       &
-                                               PRHODREF, PEXNREF, PPABST, PW_ACT,      &
-                                               PTHM, PPABSM,                           &
-                                               PTHT, PRT, ZSVT,                        &
-                                               PTHS, PRS, ZSVS                         )
+                                  PTHT, PRT, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END),  &
+                                  PTHS, PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END),  &
+                                  PINPRS, PINPRG, PINPRH                             )
+!
+        IF (OWARM .AND. LCOLD) CALL LIMA_MIXED(OSEDI, OHHONI, KSPLITG, PTSTEP, KMI,              &
+                                               KRR, PZZ, PRHODJ,                                 &
+                                               PRHODREF, PEXNREF, PPABST, PW_ACT,                &
+                                               PTHM, PPABSM,                                     &
+                                               PTHT, PRT, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), &
+                                               PTHS, PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END)  )
      ENDIF
 !
 !*       12.2   Perform the saturation adjustment
@@ -1108,7 +1104,8 @@ SELECT CASE ( HCLOUD )
      CALL LIMA_ADJUST(KRR, KMI, TPFILE, HRAD,                           &
                       HTURBDIM, OCLOSE_OUT, OSUBG_COND, PTSTEP,         &
                       PRHODREF, PRHODJ, PEXNREF, PPABST, PSIGS, PPABST, &
-                      PRT, PRS, ZSVT, ZSVS,                             &
+                      PRT, PRS, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END),  &
+                      PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END),            &
                       PTHS, PSRCS, PCLDFR                               )
 !
 END SELECT
@@ -1188,32 +1185,32 @@ SELECT CASE ( HCLOUD )
     PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) )
 !
    CASE('C2R2','KHKO')
-    WHERE (PRS(:,:,:,2) < 0. .OR. ZSVS(:,:,:,2) < 0.)
-      ZSVS(:,:,:,1) = 0.0
+    WHERE (PRS(:,:,:,2) < 0. .OR. PSVS(:,:,:,NSV_C2R2BEG+1) < 0.)
+      PSVS(:,:,:,NSV_C2R2BEG) = 0.0
     END WHERE
     DO JSV = 2, 3
-      WHERE (PRS(:,:,:,JSV) < 0. .OR. ZSVS(:,:,:,JSV) < 0.)
+      WHERE (PRS(:,:,:,JSV) < 0. .OR. PSVS(:,:,:,NSV_C2R2BEG-1+JSV) < 0.)
         PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,JSV)
         PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,JSV) * ZLV(:,:,:) /  &
              ZCPH(:,:,:) / ZEXN(:,:,:)
         PRS(:,:,:,JSV)  = 0.0
-        ZSVS(:,:,:,JSV) = 0.0
+        PSVS(:,:,:,NSV_C2R2BEG-1+JSV) = 0.0
       END WHERE
     ENDDO
 !
     PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) )
 !
    CASE('C3R5')
-    WHERE (PRS(:,:,:,2) < 0. .OR. ZSVS(:,:,:,2) < 0.)
-      ZSVS(:,:,:,1) = 0.0
+    WHERE (PRS(:,:,:,2) < 0. .OR. PSVS(:,:,:,NSV_C2R2BEG+1) < 0.)
+      PSVS(:,:,:,NSV_C2R2BEG) = 0.0
     END WHERE
     DO JSV = 2, 3
-      WHERE (PRS(:,:,:,JSV) < 0. .OR. ZSVS(:,:,:,JSV) < 0.)
+      WHERE (PRS(:,:,:,JSV) < 0. .OR. PSVS(:,:,:,NSV_C2R2BEG-1+JSV) < 0.)
         PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,JSV)
         PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,JSV) * ZLV(:,:,:) /  &
              ZCPH(:,:,:) / ZEXN(:,:,:)
         PRS(:,:,:,JSV)  = 0.0
-        ZSVS(:,:,:,JSV) = 0.0
+        PSVS(:,:,:,NSV_C2R2BEG-1+JSV) = 0.0
       END WHERE
     ENDDO
 !   ice
@@ -1222,7 +1219,7 @@ SELECT CASE ( HCLOUD )
       PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLV(:,:,:) /  &
            ZCPH(:,:,:) / ZEXN(:,:,:)
       PRS(:,:,:,4)  = 0.0
-      ZSVS(:,:,:,4) = 0.0
+      PSVS(:,:,:,NSV_C2R2BEG+3) = 0.0
     END WHERE
 !   cloud
     WHERE (PRS(:,:,:,2) < 0.)
@@ -1230,7 +1227,7 @@ SELECT CASE ( HCLOUD )
       PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) /  &
            ZCPH(:,:,:) / ZEXN(:,:,:)
       PRS(:,:,:,2)  = 0.0
-      ZSVS(:,:,:,2) = 0.0
+      PSVS(:,:,:,NSV_C2R2BEG+1) = 0.0
     END WHERE
 !
     PRS(:,:,:,:) = MAX( 0.0,PRS(:,:,:,:) )
@@ -1238,36 +1235,36 @@ SELECT CASE ( HCLOUD )
    CASE('LIMA')   
 ! Correction where rc<0 or Nc<0
       IF (OWARM) THEN
-         WHERE (PRS(:,:,:,2) < YRTMIN(2)/PTSTEP .OR. ZSVS(:,:,:,NSV_LIMA_NC-NSV_LIMA_BEG+1) < YCTMIN(2)/PTSTEP)
+         WHERE (PRS(:,:,:,2) < YRTMIN(2)/PTSTEP .OR. PSVS(:,:,:,NSV_LIMA_NC) < YCTMIN(2)/PTSTEP)
             PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2)
             PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) /  &
                  ZCPH(:,:,:) / ZEXN(:,:,:)
             PRS(:,:,:,2)  = 0.0
-            ZSVS(:,:,:,NSV_LIMA_NC-NSV_LIMA_BEG+1) = 0.0
+            PSVS(:,:,:,NSV_LIMA_NC) = 0.0
          END WHERE
       END IF
 ! Correction where rr<0 or Nr<0
       IF (OWARM .AND. ORAIN) THEN
-         WHERE (PRS(:,:,:,3) < YRTMIN(3)/PTSTEP .OR. ZSVS(:,:,:,NSV_LIMA_NR-NSV_LIMA_BEG+1) < YCTMIN(3)/PTSTEP)
+         WHERE (PRS(:,:,:,3) < YRTMIN(3)/PTSTEP .OR. PSVS(:,:,:,NSV_LIMA_NR) < YCTMIN(3)/PTSTEP)
             PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,3)
             PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,3) * ZLV(:,:,:) /  &
                  ZCPH(:,:,:) / ZEXN(:,:,:)
             PRS(:,:,:,3)  = 0.0
-            ZSVS(:,:,:,NSV_LIMA_NR-NSV_LIMA_BEG+1) = 0.0
+            PSVS(:,:,:,NSV_LIMA_NR) = 0.0
          END WHERE
       END IF
 ! Correction where ri<0 or Ni<0
       IF (LCOLD) THEN
-         WHERE (PRS(:,:,:,4) < YRTMIN(4)/PTSTEP .OR. ZSVS(:,:,:,NSV_LIMA_NI-NSV_LIMA_BEG+1) < YCTMIN(4)/PTSTEP)
+         WHERE (PRS(:,:,:,4) < YRTMIN(4)/PTSTEP .OR. PSVS(:,:,:,NSV_LIMA_NI) < YCTMIN(4)/PTSTEP)
             PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4)
             PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLS(:,:,:) /  &
                  ZCPH(:,:,:) / ZEXN(:,:,:)
             PRS(:,:,:,4)  = 0.0
-            ZSVS(:,:,:,NSV_LIMA_NI-NSV_LIMA_BEG+1) = 0.0
+            PSVS(:,:,:,NSV_LIMA_NI) = 0.0
          END WHERE
       END IF
 !
-     ZSVS(:,:,:,:) = MAX( 0.0,ZSVS(:,:,:,:) )
+     PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END) = MAX( 0.0,PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END) )
      PRS(:,:,:,:)  = MAX( 0.0,PRS (:,:,:,:) )
 !
 END SELECT
@@ -1287,17 +1284,17 @@ IF (LBUDGET_RH) CALL BUDGET (PRS(:,:,:,7) * PRHODJ(:,:,:),12,'NECON_BU_RRH')
 
 IF (LBUDGET_SV .AND. (HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO')) THEN
   DO JSV = 1, 3
-    CALL BUDGET ( ZSVS(:,:,:,JSV),12+NSV_C2R2BEG-1+JSV,'NECON_BU_RSV')
+    CALL BUDGET ( PSVS(:,:,:,NSV_C2R2BEG-1+JSV),12+NSV_C2R2BEG-1+JSV,'NECON_BU_RSV')
   END DO
 END IF
 IF (LBUDGET_SV .AND. HCLOUD == 'C3R5') THEN
   DO JSV = 1, 4
-    CALL BUDGET ( ZSVS(:,:,:,JSV),12+NSV_C2R2BEG-1+JSV,'NECON_BU_RSV')
+    CALL BUDGET ( PSVS(:,:,:,NSV_C2R2BEG-1+JSV),12+NSV_C2R2BEG-1+JSV,'NECON_BU_RSV')
   END DO
 END IF
 IF (LBUDGET_SV .AND. HCLOUD == 'LIMA') THEN
   DO JSV = NSV_LIMA_BEG, NSV_LIMA_END
-    CALL BUDGET ( ZSVS(:,:,:,JSV-NSV_LIMA_BEG+1),12+JSV,'NECON_BU_RSV')
+    CALL BUDGET ( PSVS(:,:,:,JSV),12+JSV,'NECON_BU_RSV')
   END DO
 END IF
 !-------------------------------------------------------------------------------
@@ -1313,14 +1310,9 @@ DO JRR = 1,KRR
 END DO
 !
 IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') THEN
-  DO JSV = 1,SIZE(ZSVS,4)
-    PSVS(:,:,:,JSV+ISVBEG-1) = ZSVS(:,:,:,JSV) * PRHODJ(:,:,:)
-  ENDDO
-  DO JSV = 1,SIZE(ZSVT,4)
-    PSVT(:,:,:,JSV+ISVBEG-1) = ZSVT(:,:,:,JSV)
+  DO JSV = ISVBEG, ISVEND
+    PSVS(:,:,:,JSV) = PSVS(:,:,:,JSV) * PRHODJ(:,:,:)
   ENDDO
-  DEALLOCATE(ZSVS)
-  DEALLOCATE(ZSVT)
 ENDIF
 !
 !-------------------------------------------------------------------------------
-- 
GitLab