From 2801bbf2d1fe99c275da572491abd1aa09f27102 Mon Sep 17 00:00:00 2001
From: VIE Benoit <vie@sxphynh>
Date: Wed, 20 Dec 2023 16:50:11 +0100
Subject: [PATCH] updated budget calls in turb + avoid unnecessary computations
 for LTURB_PRECIP=F

---
 src/common/turb/turb.F90 | 74 ++++++++++++++++++++++------------------
 1 file changed, 41 insertions(+), 33 deletions(-)

diff --git a/src/common/turb/turb.F90 b/src/common/turb/turb.F90
index 2851b519a..19116d591 100644
--- a/src/common/turb/turb.F90
+++ b/src/common/turb/turb.F90
@@ -502,10 +502,10 @@ REAL                :: ZALPHA       ! work coefficient :
 REAL :: ZTIME1, ZTIME2
 TYPE(TFIELDMETADATA) :: TZFIELD
 !
-REAL, DIMENSION(D%NIJT,D%NKT,KSV+KRR) :: ZWORKT
-REAL, DIMENSION(D%NIJT,D%NKT,KSV+KRR) :: ZWORKS
-REAL, DIMENSION(D%NIJT,      KSV+KRR) :: ZWORKSFSV
-REAL, DIMENSION(D%NIJT,D%NKT,KSV+KRR) :: ZWORKWSV
+REAL, DIMENSION(D%NIJT,D%NKT,MERGE(KSV+KRR,KSV,TURBN%LTURB_PRECIP)) :: ZWORKT, ZWORKS
+REAL, DIMENSION(D%NIJT,      MERGE(KSV+KRR,KSV,TURBN%LTURB_PRECIP)) :: ZWORKSFSV
+REAL, DIMENSION(D%NIJT,D%NKT,MERGE(KSV+KRR,KSV,TURBN%LTURB_PRECIP)) :: ZWORKWSV
+INTEGER :: ISV
 !
 !*      1.PRELIMINARIES
 !         -------------
@@ -546,10 +546,12 @@ END IF
 !Save LIMA scalar variables sources
 ZRSVS(IIJB:IIJE,1:IKT,1:KSV)=PRSVS(IIJB:IIJE,1:IKT,1:KSV)
 !
+ISV=KSV
+IF (TURBN%LTURB_PRECIP) ISV=KSV+KRR
 ZWORKT(:,:,1:KSV)=PSVT(:,:,:)
 ZWORKS(:,:,1:KSV)=PRSVS(:,:,:)
-ZWORKT(:,:,KSV+1:KSV+KRR)=PRT(:,:,:)
-ZWORKS(:,:,KSV+1:KSV+KRR)=PRRS(:,:,:)
+IF (TURBN%LTURB_PRECIP) ZWORKT(:,:,KSV+1:KSV+KRR)=PRT(:,:,:)
+IF (TURBN%LTURB_PRECIP) ZWORKS(:,:,KSV+1:KSV+KRR)=PRRS(:,:,:)
 ZWORKSFSV(:,:)=0.
 ZWORKWSV(:,:,:)=0.
 ZWORKSFSV(:,1:KSV)=PSFSV(:,:)
@@ -1003,11 +1005,11 @@ IF( BUCONF%LBUDGET_RV ) THEN
 END IF
 
 IF( BUCONF%LBUDGET_RC ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RC), 'VTURB', PRRS  (:,:, 2) )
-IF( BUCONF%LBUDGET_RR ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RR), 'VTURB', ZWORKS  (:,:, KSV + 3) )
+IF( BUCONF%LBUDGET_RR ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RR), 'VTURB', PRRS  (:,:, 3) )
 IF( BUCONF%LBUDGET_RI ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RI), 'VTURB', PRRS  (:,:, 4) )
-IF( BUCONF%LBUDGET_RS ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RS), 'VTURB', ZWORKS  (:,:, KSV + 5) )
-IF( BUCONF%LBUDGET_RG ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RG), 'VTURB', ZWORKS  (:,:, KSV + 6) )
-IF( BUCONF%LBUDGET_RH ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RH), 'VTURB', ZWORKS  (:,:, KSV + 7) )
+IF( BUCONF%LBUDGET_RS ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RS), 'VTURB', PRRS  (:,:, 5) )
+IF( BUCONF%LBUDGET_RG ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RG), 'VTURB', PRRS  (:,:, 6) )
+IF( BUCONF%LBUDGET_RH ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RH), 'VTURB', PRRS  (:,:, 7) )
 
 IF( BUCONF%LBUDGET_SV ) THEN
   DO JSV = 1, KSV
@@ -1018,7 +1020,7 @@ END IF
 CALL TURB_VER(D,CST,CSTURB,TURBN,NEBN,TLES,              &
           KRR,KRRL,KRRI,KGRADIENTS,                      &
           OOCEAN, ODEEPOC, OCOMPUTE_SRC,                 &
-          KSV+KRR,KSV_LGBEG,KSV_LGEND,                   &
+          ISV,KSV_LGBEG,KSV_LGEND,                       &
           ZEXPL, O2D, ONOMIXLG, OFLAT,                   &
           OCOUPLES,OBLOWSNOW,OFLYER, PRSNOW,             &
           PTSTEP,TPFILE,                                 &
@@ -1043,6 +1045,12 @@ CALL TURB_VER(D,CST,CSTURB,TURBN,NEBN,TLES,              &
 !   IF (KSV_LIMA_NG.GT.0) PRSVS(:,:,KSV_LIMA_NG) = ZRSVS(:,:,KSV_LIMA_NG) 
 !   IF (KSV_LIMA_NH.GT.0) PRSVS(:,:,KSV_LIMA_NH) = ZRSVS(:,:,KSV_LIMA_NH)
 !END IF
+IF (TURBN%LTURB_PRECIP) THEN
+   IF (KRR.GE.3) PRRS(:,:,3)=ZWORKS(:,:,KSV+3)
+   IF (KRR.GE.5) PRRS(:,:,5)=ZWORKS(:,:,KSV+5)
+   IF (KRR.GE.6) PRRS(:,:,6)=ZWORKS(:,:,KSV+6)
+   IF (KRR.GE.7) PRRS(:,:,7)=ZWORKS(:,:,KSV+7)
+END IF
 
 IF( BUCONF%LBUDGET_U ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_U), 'VTURB', PRUS(:,:) )
 IF( BUCONF%LBUDGET_V ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_V), 'VTURB', PRVS(:,:) )
@@ -1070,11 +1078,11 @@ IF( BUCONF%LBUDGET_RV ) THEN
 END IF
 
 IF( BUCONF%LBUDGET_RC ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RC), 'VTURB', PRRS(:,:, 2) )
-IF( BUCONF%LBUDGET_RR ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RR), 'VTURB', ZWORKS(:,:, KSV + 3) )
+IF( BUCONF%LBUDGET_RR ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RR), 'VTURB', PRRS(:,:, 3) )
 IF( BUCONF%LBUDGET_RI ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RI), 'VTURB', PRRS(:,:, 4) )
-IF( BUCONF%LBUDGET_RS ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RS), 'VTURB', ZWORKS(:,:, KSV + 5) )
-IF( BUCONF%LBUDGET_RG ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RG), 'VTURB', ZWORKS(:,:, KSV + 6) )
-IF( BUCONF%LBUDGET_RH ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RH), 'VTURB', ZWORKS(:,:, KSV + 7) )
+IF( BUCONF%LBUDGET_RS ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RS), 'VTURB', PRRS(:,:, 5) )
+IF( BUCONF%LBUDGET_RG ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RG), 'VTURB', PRRS(:,:, 6) )
+IF( BUCONF%LBUDGET_RH ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RH), 'VTURB', PRRS(:,:, 7) )
 
 IF( BUCONF%LBUDGET_SV )  THEN
   DO JSV = 1, KSV
@@ -1109,11 +1117,11 @@ IF( TURBN%CTURBDIM == '3DIM' ) THEN
   END IF
 
   IF( BUCONF%LBUDGET_RC ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RC), 'HTURB', PRRS(:,:, 2) )
-  IF( BUCONF%LBUDGET_RR ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RR), 'HTURB', ZWORKS(:,:, KSV+3) )
+  IF( BUCONF%LBUDGET_RR ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RR), 'HTURB', PRRS(:,:, 3) )
   IF( BUCONF%LBUDGET_RI ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RI), 'HTURB', PRRS(:,:, 4) )
-  IF( BUCONF%LBUDGET_RS ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RS), 'HTURB', ZWORKS(:,:, KSV+5) )
-  IF( BUCONF%LBUDGET_RG ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RG), 'HTURB', ZWORKS(:,:, KSV+6) )
-  IF( BUCONF%LBUDGET_RH ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RH), 'HTURB', ZWORKS(:,:, KSV+7) )
+  IF( BUCONF%LBUDGET_RS ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RS), 'HTURB', PRRS(:,:, 5) )
+  IF( BUCONF%LBUDGET_RG ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RG), 'HTURB', PRRS(:,:, 6) )
+  IF( BUCONF%LBUDGET_RH ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RH), 'HTURB', PRRS(:,:, 7) )
 
   IF( BUCONF%LBUDGET_SV )  THEN
     DO JSV = 1, KSV
@@ -1121,8 +1129,7 @@ IF( TURBN%CTURBDIM == '3DIM' ) THEN
     END DO
   END IF
     CALL TURB_HOR_SPLT(D,CST,CSTURB, TURBN, NEBN, TLES,        &
-          KSPLIT, KRR, KRRL, KRRI, KSV,KSV_LGBEG,KSV_LGEND,    & 
-          KSPLIT, KRR, KRRL, KRRI, KSV+KRR,KSV_LGBEG,KSV_LGEND,& 
+          KSPLIT, KRR, KRRL, KRRI, ISV,KSV_LGBEG,KSV_LGEND,    & 
           PTSTEP,HLBCX,HLBCY, OFLAT,O2D, ONOMIXLG,             & 
           OOCEAN,OCOMPUTE_SRC,OBLOWSNOW,PRSNOW,                &
           TPFILE, KHALO,                                       &
@@ -1145,6 +1152,13 @@ IF( TURBN%CTURBDIM == '3DIM' ) THEN
 !     IF (KSV_LIMA_NG.GT.0) PRSVS(:,:,KSV_LIMA_NG) = ZRSVS(:,:,KSV_LIMA_NG) 
 !     IF (KSV_LIMA_NH.GT.0) PRSVS(:,:,KSV_LIMA_NH) = ZRSVS(:,:,KSV_LIMA_NH)
 !  END IF
+  !
+  IF (TURBN%LTURB_PRECIP) THEN
+     IF (KRR.GE.3) PRRS(:,:,3)=ZWORKS(:,:,KSV+3)
+     IF (KRR.GE.5) PRRS(:,:,5)=ZWORKS(:,:,KSV+5)
+     IF (KRR.GE.6) PRRS(:,:,6)=ZWORKS(:,:,KSV+6)
+     IF (KRR.GE.7) PRRS(:,:,7)=ZWORKS(:,:,KSV+7)
+  END IF
   !
   IF( BUCONF%LBUDGET_U ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_U), 'HTURB', PRUS(:,:) )
   IF( BUCONF%LBUDGET_V ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_V), 'HTURB', PRVS(:,:) )
@@ -1172,11 +1186,11 @@ IF( TURBN%CTURBDIM == '3DIM' ) THEN
   END IF
 
   IF( BUCONF%LBUDGET_RC ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RC), 'HTURB', PRRS(:,:, 2) )
-  IF( BUCONF%LBUDGET_RR ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RR), 'HTURB', ZWORKS(:,:, KSV+3) )
+  IF( BUCONF%LBUDGET_RR ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RR), 'HTURB', PRRS(:,:, 3) )
   IF( BUCONF%LBUDGET_RI ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RI), 'HTURB', PRRS(:,:, 4) )
-  IF( BUCONF%LBUDGET_RS ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RS), 'HTURB', ZWORKS(:,:, KSV+5) )
-  IF( BUCONF%LBUDGET_RG ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RG), 'HTURB', ZWORKS(:,:, KSV+6) )
-  IF( BUCONF%LBUDGET_RH ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RH), 'HTURB', ZWORKS(:,:, KSV+7) )
+  IF( BUCONF%LBUDGET_RS ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RS), 'HTURB', PRRS(:,:, 5) )
+  IF( BUCONF%LBUDGET_RG ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RG), 'HTURB', PRRS(:,:, 6) )
+  IF( BUCONF%LBUDGET_RH ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RH), 'HTURB', PRRS(:,:, 7) )
 
   IF( BUCONF%LBUDGET_SV )  THEN
     DO JSV = 1, KSV
@@ -1301,6 +1315,8 @@ IF ( TURBN%LTURB_DIAG .AND. TPFILE%LOPENED ) THEN
    END IF
 END IF
 !
+PRSVS(:,:,:)        = ZWORKS(:,:,1:KSV)
+IF (OFLYER)   PWSV(:,:,:)=ZWORKWSV(:,:,1:KSV)
 !* stores value of conservative variables & wind before turbulence tendency (AROME only)
 IF(PRESENT(PDRUS_TURB)) THEN
   !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT)
@@ -1345,14 +1361,6 @@ IF ( KRRL >= 1 ) THEN
   END IF
 END IF!
 !
-PRSVS(:,:,:)=ZWORKS(:,:,1:KSV)
-IF (TURBN%LTURB_PRECIP) THEN
-   IF (KRR.GE.3) PRRS(:,:,3)=ZWORKS(:,:,KSV+3)
-   IF (KRR.GE.5) PRRS(:,:,5)=ZWORKS(:,:,KSV+5)
-   IF (KRR.GE.6) PRRS(:,:,6)=ZWORKS(:,:,KSV+6)
-   IF (KRR.GE.7) PRRS(:,:,7)=ZWORKS(:,:,KSV+7)
-END IF
-   IF (OFLYER)   PWSV(:,:,:)=ZWORKWSV(:,:,1:KSV)
 !
 ! Remove non-physical negative values (unnecessary in a perfect world) + corresponding budgets
 CALL SOURCES_NEG_CORRECT_PHY(D,KSV,HCLOUD,HELEC,'NETUR',KRR,PTSTEP,PPABST,PTHLT,PRT,PRTHLS,PRRS,PRSVS)
-- 
GitLab