From 650ea9bc7bd15e880aee05c87a4e743c12846b3c Mon Sep 17 00:00:00 2001
From: Quentin Rodier <quentin.rodier@meteo.fr>
Date: Tue, 25 Jan 2022 17:54:57 +0100
Subject: [PATCH] Quentin 25/01/2022: Merge turb.F90 MNH->COMMON Budgets

---
 src/arome/aux/mode_sources_neg_correct.F90 |  19 ++
 src/common/turb/mode_tke_eps_sources.F90   |  10 -
 src/common/turb/turb.F90                   | 220 +++++++++++++++------
 src/mesonh/turb/turb.f90                   |  10 +-
 4 files changed, 185 insertions(+), 74 deletions(-)
 create mode 100644 src/arome/aux/mode_sources_neg_correct.F90

diff --git a/src/arome/aux/mode_sources_neg_correct.F90 b/src/arome/aux/mode_sources_neg_correct.F90
new file mode 100644
index 000000000..1b49a6e2b
--- /dev/null
+++ b/src/arome/aux/mode_sources_neg_correct.F90
@@ -0,0 +1,19 @@
+MODULE MODE_SOURCES_NEG_CORRECT
+IMPLICIT NONE
+CONTAINS
+SUBROUTINE SOURCES_NEG_CORRECT(HCLOUD, HBUDNAME, KRR, PTSTEP, PPABST, &
+                              &PTHT, PRT, PRTHS, PRRS, PRSVS, PRHODJ)
+IMPLICIT NONE
+CHARACTER(LEN=*),            INTENT(IN)           :: HCLOUD   ! Kind of cloud parameterization
+CHARACTER(LEN=*),            INTENT(IN)           :: HBUDNAME ! Budget name
+INTEGER,                     INTENT(IN)           :: KRR      ! Number of moist variables
+REAL,                        INTENT(IN)           :: PTSTEP   ! Timestep
+REAL, DIMENSION(:, :, :),    INTENT(IN)           :: PPABST   ! Absolute pressure at time t
+REAL, DIMENSION(:, :, :),    INTENT(IN)           :: PTHT     ! Theta at time t
+REAL, DIMENSION(:, :, :, :), INTENT(IN)           :: PRT      ! Moist variables at time t
+REAL, DIMENSION(:, :, :),    INTENT(INOUT)        :: PRTHS    ! Source terms
+REAL, DIMENSION(:, :, :, :), INTENT(INOUT)        :: PRRS     ! Source terms
+REAL, DIMENSION(:, :, :, :), INTENT(INOUT)        :: PRSVS    ! Source terms
+REAL, DIMENSION(:, :, :),    INTENT(IN), OPTIONAL :: PRHODJ   ! Dry density * jacobian
+END SUBROUTINE SOURCES_NEG_CORRECT
+END MODULE MODE_SOURCES_NEG_CORRECT
diff --git a/src/common/turb/mode_tke_eps_sources.F90 b/src/common/turb/mode_tke_eps_sources.F90
index 2f31473d7..a55c661ce 100644
--- a/src/common/turb/mode_tke_eps_sources.F90
+++ b/src/common/turb/mode_tke_eps_sources.F90
@@ -241,11 +241,6 @@ IKE=KKU-JPVEXT_TURB*KKL
 ! compute the effective diffusion coefficient at the mass point
 ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:)) 
 !
-#ifdef REPRO48
-#else
-IF (LBUDGET_TH)  CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TH),  'DISSH', PRTHLS(:, :, :) )
-#endif
-!
 !----------------------------------------------------------------------------
 !
 !*       2.   TKE EQUATION  
@@ -383,11 +378,6 @@ IF (LBUDGET_TKE) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TKE), 'TR', PRTKES(:, :
 !
 PRTHLS(:,:,:) = PRTHLS(:,:,:) + XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:) * &
                 (PEXPL*PTKEM(:,:,:) + PIMPL*ZRES(:,:,:)) * PRHODJ(:,:,:) * PCOEF_DISS(:,:,:)
-
-#ifdef REPRO48
-#else
-IF (LBUDGET_TH) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TH), 'DISSH', PRTHLS(:, :, :) )
-#endif
 !----------------------------------------------------------------------------
 !
 !*       4.   STORES SOME DIAGNOSTICS
diff --git a/src/common/turb/turb.F90 b/src/common/turb/turb.F90
index d448908d9..f0be472cb 100644
--- a/src/common/turb/turb.F90
+++ b/src/common/turb/turb.F90
@@ -222,11 +222,15 @@
 USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !
-USE MODD_PARAMETERS
+USE MODD_PARAMETERS, ONLY: JPVEXT_TURB
 USE MODD_CST
 USE MODD_CTURB
 USE MODD_CONF
-USE MODD_BUDGET
+USE MODD_BUDGET, ONLY: LBUDGET_U,  LBUDGET_V,  LBUDGET_W,  LBUDGET_TH, LBUDGET_RV, LBUDGET_RC,  &
+                            LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, LBUDGET_SV,  &
+                            NBUDGET_U,  NBUDGET_V,  NBUDGET_W,  NBUDGET_TH, NBUDGET_RV, NBUDGET_RC,  &
+                            NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1, &
+                            TBUDGETDATA
 USE MODD_DYN_n, ONLY : LOCEAN
 USE MODD_FIELD, ONLY: TFIELDDATA,TYPEREAL
 USE MODD_IO, ONLY: TFILEDATA
@@ -251,8 +255,10 @@ USE MODI_GRADIENT_W
 USE MODE_TM06, ONLY: TM06
 USE MODI_UPDATE_LM
 !
+USE MODE_BUDGET,         ONLY: BUDGET_STORE_INIT, BUDGET_STORE_END
 USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE
 USE MODE_SBL
+USE MODE_SOURCES_NEG_CORRECT, ONLY: SOURCES_NEG_CORRECT
 !
 USE MODE_EMOIST, ONLY: EMOIST
 USE MODE_ETHETA, ONLY: ETHETA
@@ -861,6 +867,40 @@ ENDIF
 !*      5. TURBULENT SOURCES
 !          -----------------
 !
+IF( LBUDGET_U )  CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_U ), 'VTURB', PRUS(:, :, :)    )
+IF( LBUDGET_v )  CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_V ), 'VTURB', PRVS(:, :, :)    )
+IF( LBUDGET_w )  CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_W ), 'VTURB', PRWS(:, :, :)    )
+
+IF( LBUDGET_th ) THEN
+  IF( KRRI >= 1 .and. KRRL >= 1 ) THEN
+    CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TH), 'VTURB', PRTHLS(:, :, :) + ZLVOCPEXNM(:, :, :) * PRRS(:, :, :, 2) &
+                                                                          + ZLSOCPEXNM(:, :, :) * PRRS(:, :, :, 4) )
+  ELSE IF( KRRL >= 1 ) THEN
+    CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TH), 'VTURB', PRTHLS(:, :, :) + ZLOCPEXNM(:, :, :) * PRRS(:, :, :, 2) )
+  ELSE
+    CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TH), 'VTURB', PRTHLS(:, :, :) )
+  END IF
+END IF
+
+IF( LBUDGET_rv ) THEN
+  IF( KRRI >= 1 .and. KRRL >= 1 ) THEN
+    CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_RV), 'VTURB', PRRS(:, :, :, 1) - PRRS(:, :, :, 2) - PRRS(:, :, :, 4) )
+  ELSE IF( KRRL >= 1 ) THEN
+    CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_RV), 'VTURB', PRRS(:, :, :, 1) - PRRS(:, :, :, 2) )
+  ELSE
+    CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_RV), 'VTURB', PRRS(:, :, :, 1) )
+  END IF
+END IF
+
+IF( LBUDGET_rc ) CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_RC), 'VTURB', PRRS  (:, :, :, 2) )
+IF( LBUDGET_ri ) CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_RI), 'VTURB', PRRS  (:, :, :, 4) )
+
+IF( LBUDGET_sv ) THEN
+  DO JSV = 1, NSV
+    CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_SV1 - 1 + JSV), 'VTURB', PRSVS(:, :, :, JSV) )
+  END DO
+END IF
+
 CALL TURB_VER(KKA,KKU,KKL,KRR, KRRL, KRRI,               &
           OTURB_FLX,                                     &
           HTURBDIM,HTOM,PIMPL,ZEXPL,                     &
@@ -877,40 +917,82 @@ CALL TURB_VER(KKA,KKU,KKL,KRR, KRRL, KRRI,               &
           PSBL_DEPTH,ZLMO,                               &
           PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS,              &
           PDP,PTP,PSIGS,PWTH,PWRC,PWSV                   )
-!
 
-IF (LBUDGET_U) CALL BUDGET_DDH (PRUS,1,'VTURB_BU_RU',YDDDH, YDLDDH, YDMDDH)
-IF (LBUDGET_V) CALL BUDGET_DDH (PRVS,2,'VTURB_BU_RV',YDDDH, YDLDDH, YDMDDH)
-IF (LBUDGET_W) CALL BUDGET_DDH (PRWS,3,'VTURB_BU_RW',YDDDH, YDLDDH, YDMDDH)
-IF (LBUDGET_TH)  THEN
-  IF ( KRRI >= 1 .AND. KRRL >= 1 ) THEN
-    CALL BUDGET_DDH (PRTHLS+ ZLVOCPEXNM * PRRS(:,:,:,2) + ZLSOCPEXNM * PRRS(:,:,:,4),4,'VTURB_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-  ELSE IF ( KRRL >= 1 ) THEN
-    CALL BUDGET_DDH (PRTHLS+ ZLOCPEXNM * PRRS(:,:,:,2),4,'VTURB_BU_RTH',YDDDH, YDLDDH, YDMDDH)
+IF( LBUDGET_U ) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_U), 'VTURB', PRUS(:, :, :) )
+IF( LBUDGET_V ) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_V), 'VTURB', PRVS(:, :, :) )
+IF( LBUDGET_W ) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_W), 'VTURB', PRWS(:, :, :) )
+
+IF( LBUDGET_TH ) THEN
+  IF( KRRI >= 1 .AND. KRRL >= 1 ) THEN
+    CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TH), 'VTURB', PRTHLS(:, :, :) + ZLVOCPEXNM(:, :, :) * PRRS(:, :, :, 2) &
+                                                                          + ZLSOCPEXNM(:, :, :) * PRRS(:, :, :, 4) )
+  ELSE IF( KRRL >= 1 ) THEN
+    CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TH), 'VTURB', PRTHLS(:, :, :) + ZLOCPEXNM(:, :, :) * PRRS(:, :, :, 2) )
   ELSE
-    CALL BUDGET_DDH (PRTHLS,4,'VTURB_BU_RTH',YDDDH, YDLDDH, YDMDDH)
+    CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TH), 'VTURB', PRTHLS(:, :, :) )
   END IF
 END IF
-IF (LBUDGET_SV) THEN
-  DO JSV = 1,NSV
-    CALL BUDGET_DDH (PRSVS(:,:,:,JSV),JSV+12,'VTURB_BU_RSV',YDDDH, YDLDDH, YDMDDH)
+
+IF( LBUDGET_RV ) THEN
+  IF( KRRI >= 1 .AND. KRRL >= 1 ) THEN
+    CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_RV), 'VTURB', PRRS(:, :, :, 1) - PRRS(:, :, :, 2) - PRRS(:, :, :, 4) )
+  ELSE IF( KRRL >= 1 ) THEN
+    CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_RV), 'VTURB', PRRS(:, :, :, 1) - PRRS(:, :, :, 2) )
+  ELSE
+    CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_RV), 'VTURB', PRRS(:, :, :, 1) )
+  END IF
+END IF
+
+IF( LBUDGET_RC ) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_RC), 'VTURB', PRRS(:, :, :, 2) )
+IF( LBUDGET_RI ) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_RI), 'VTURB', PRRS(:, :, :, 4) )
+
+IF( LBUDGET_SV )  THEN
+  DO JSV = 1, NSV
+    CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_SV1 - 1 + JSV), 'VTURB', PRSVS(:, :, :, JSV) )
   END DO
 END IF
-IF (LBUDGET_RV) THEN
-  IF ( KRRI >= 1 .AND. KRRL >= 1) THEN
-    CALL BUDGET_DDH (PRRS(:,:,:,1)-PRRS(:,:,:,2)-PRRS(:,:,:,4),6,'VTURB_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-  ELSE IF ( KRRL >= 1 ) THEN
-    CALL BUDGET_DDH (PRRS(:,:,:,1)-PRRS(:,:,:,2),6,'VTURB_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-  ELSE 
-    CALL BUDGET_DDH (PRRS(:,:,:,1),6,'VTURB_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-  END IF
-END IF  
-IF (LBUDGET_RC) CALL BUDGET_DDH (PRRS(:,:,:,2),7,'VTURB_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-IF (LBUDGET_RI) CALL BUDGET_DDH (PRRS(:,:,:,4),9,'VTURB_BU_RRI',YDDDH, YDLDDH, YDMDDH)
 !
+#ifdef REPRO48
+#else
+IF( HTURBDIM == '3DIM' ) THEN
+#endif
+  IF( LBUDGET_U  ) CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_U ), 'HTURB', PRUS  (:, :, :) )
+  IF( LBUDGET_V  ) CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_V ), 'HTURB', PRVS  (:, :, :) )
+  IF( LBUDGET_W  ) CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_W ), 'HTURB', PRWS  (:, :, :) )
+
+  IF(LBUDGET_TH)  THEN
+    IF( KRRI >= 1 .AND. KRRL >= 1 ) THEN
+      CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TH), 'HTURB', PRTHLS(:, :, :) + ZLVOCPEXNM(:, :, :) * PRRS(:, :, :, 2) &
+                                                                             + ZLSOCPEXNM(:, :, :) * PRRS(:, :, :, 4) )
+    ELSE IF( KRRL >= 1 ) THEN
+      CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TH), 'HTURB', PRTHLS(:, :, :) + ZLOCPEXNM(:, :, :) * PRRS(:, :, :, 2) )
+    ELSE
+      CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TH), 'HTURB', PRTHLS(:, :, :) )
+    END IF
+  END IF
+
+  IF( LBUDGET_RV ) THEN
+    IF( KRRI >= 1 .AND. KRRL >= 1 ) THEN
+      CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_RV), 'HTURB', PRRS(:, :, :, 1) - PRRS(:, :, :, 2) - PRRS(:, :, :, 4) )
+    ELSE IF( KRRL >= 1 ) THEN
+      CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_RV), 'HTURB', PRRS(:, :, :, 1) - PRRS(:, :, :, 2) )
+    ELSE
+      CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_RV), 'HTURB', PRRS(:, :, :, 1) )
+    END IF
+  END IF
+
+  IF( LBUDGET_RC ) CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_RC), 'HTURB', PRRS(:, :, :, 2) )
+  IF( LBUDGET_RI ) CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_RI), 'HTURB', PRRS(:, :, :, 4) )
+
+  IF( LBUDGET_SV )  THEN
+    DO JSV = 1, NSV
+      CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_SV1 - 1 + JSV), 'HTURB', PRSVS(:, :, :, JSV) )
+    END DO
+  END IF
+
 !    CALL TURB_HOR_SPLT(KSPLIT, KRR, KRRL, KRRI, PTSTEP,        &
 !          HLBCX,HLBCY,OTURB_FLX,OSUBG_COND,                    &
-!          TZFILE,                                              &
+!          TPFILE,                                              &
 !          PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ,                        &
 !          PDIRCOSXW,PDIRCOSYW,PDIRCOSZW,                       &
 !          PCOSSLOPE,PSINSLOPE,                                 &
@@ -923,36 +1005,44 @@ IF (LBUDGET_RI) CALL BUDGET_DDH (PRRS(:,:,:,4),9,'VTURB_BU_RRI',YDDDH, YDLDDH, Y
 !          PDYP,PTHP,PSIGS,                                     &
 !          ZTRH,                                                &
 !          PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS                     )
-!
-IF (LBUDGET_U) CALL BUDGET_DDH (PRUS,1,'HTURB_BU_RU',YDDDH, YDLDDH, YDMDDH)
-IF (LBUDGET_V) CALL BUDGET_DDH (PRVS,2,'HTURB_BU_RV',YDDDH, YDLDDH, YDMDDH)
-IF (LBUDGET_W) CALL BUDGET_DDH (PRWS,3,'HTURB_BU_RW',YDDDH, YDLDDH, YDMDDH)
-IF (LBUDGET_TH)  THEN
-  IF ( KRRI >= 1 .AND. KRRL >= 1 ) THEN
-    CALL BUDGET_DDH (PRTHLS+ ZLVOCPEXNM * PRRS(:,:,:,2) + ZLSOCPEXNM * PRRS(:,:,:,4),4,'HTURB_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-  ELSE IF ( KRRL >= 1 ) THEN
-    CALL BUDGET_DDH (PRTHLS+ ZLOCPEXNM * PRRS(:,:,:,2),4,'HTURB_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-  ELSE
-    CALL BUDGET_DDH (PRTHLS,4,'HTURB_BU_RTH',YDDDH, YDLDDH, YDMDDH)
+
+  IF( LBUDGET_U ) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_U), 'HTURB', PRUS(:, :, :) )
+  IF( LBUDGET_V ) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_V), 'HTURB', PRVS(:, :, :) )
+  IF( LBUDGET_W ) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_W), 'HTURB', PRWS(:, :, :) )
+
+  IF( LBUDGET_TH ) THEN
+    IF( KRRI >= 1 .AND. KRRL >= 1 ) THEN
+      CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TH), 'HTURB', PRTHLS(:, :, :) + ZLVOCPEXNM(:, :, :) * PRRS(:, :, :, 2) &
+                                                                            + ZLSOCPEXNM(:, :, :) * PRRS(:, :, :, 4) )
+    ELSE IF( KRRL >= 1 ) THEN
+      CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TH), 'HTURB', PRTHLS(:, :, :) + ZLOCPEXNM(:, :, :) * PRRS(:, :, :, 2) )
+    ELSE
+      CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TH), 'HTURB', PRTHLS(:, :, :) )
+    END IF
   END IF
-END IF
-IF (LBUDGET_SV) THEN
-  DO JSV = 1,NSV
-    CALL BUDGET_DDH (PRSVS(:,:,:,JSV),JSV+12,'HTURB_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-  END DO
-END IF
-IF (LBUDGET_RV) THEN
-  IF ( KRRI >= 1 .AND. KRRL >= 1) THEN
-    CALL BUDGET_DDH (PRRS(:,:,:,1)-PRRS(:,:,:,2)-PRRS(:,:,:,4),6,'HTURB_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-  ELSE IF ( KRRL >= 1 ) THEN
-    CALL BUDGET_DDH (PRRS(:,:,:,1)-PRRS(:,:,:,2),6,'HTURB_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-  ELSE 
-    CALL BUDGET_DDH (PRRS(:,:,:,1),6,'HTURB_BU_RRV',YDDDH, YDLDDH, YDMDDH)
+
+  IF( LBUDGET_RV ) THEN
+    IF( KRRI >= 1 .AND. KRRL >= 1 ) THEN
+      CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_RV), 'HTURB', PRRS(:, :, :, 1) - PRRS(:, :, :, 2) - PRRS(:, :, :, 4) )
+    ELSE IF( KRRL >= 1 ) THEN
+      CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_RV), 'HTURB', PRRS(:, :, :, 1) - PRRS(:, :, :, 2) )
+    ELSE
+      CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_RV), 'HTURB', PRRS(:, :, :, 1) )
+    END IF
   END IF
-END IF  
-IF (LBUDGET_RC) CALL BUDGET_DDH (PRRS(:,:,:,2),7,'HTURB_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-IF (LBUDGET_RI) CALL BUDGET_DDH (PRRS(:,:,:,4),9,'HTURB_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-!
+
+  IF( LBUDGET_RC ) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_RC), 'HTURB', PRRS(:, :, :, 2) )
+  IF( LBUDGET_RI ) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_RI), 'HTURB', PRRS(:, :, :, 4) )
+
+  IF( LBUDGET_SV )  THEN
+    DO JSV = 1, NSV
+      CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_SV1 - 1 + JSV), 'HTURB', PRSVS(:, :, :, JSV) )
+    END DO
+  END IF
+#ifdef REPRO48
+#else
+END IF
+#endif
 !----------------------------------------------------------------------------
 !
 !*      6. EVOLUTION OF THE TKE AND ITS DISSIPATION 
@@ -967,6 +1057,17 @@ IF (LBUDGET_RI) CALL BUDGET_DDH (PRRS(:,:,:,4),9,'HTURB_BU_RRI',YDDDH, YDLDDH, Y
 !  6.2 TKE evolution equation
 
 IF (.NOT. LHARAT) THEN
+!
+IF (LBUDGET_TH)  THEN
+  IF ( KRRI >= 1 .AND. KRRL >= 1 ) THEN
+    CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TH), 'DISSH', PRTHLS+ ZLVOCPEXNM * PRRS(:,:,:,2) &
+                                                          & + ZLSOCPEXNM * PRRS(:,:,:,4) )
+  ELSE IF ( KRRL >= 1 ) THEN
+    CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TH), 'DISSH', PRTHLS+ ZLOCPEXNM * PRRS(:,:,:,2) )
+  ELSE
+    CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TH), 'DISSH', PRTHLS(:, :, :) )
+  END IF
+END IF
 
 CALL TKE_EPS_SOURCES(KKA,KKU,KKL,KMI,PTKET,ZLM,ZLEPS,PDP,ZTRH,       &
                    & PRHODJ,PDZZ,PDXX,PDYY,PDZX,PDZY,PZZ,            &
@@ -978,14 +1079,15 @@ CALL TKE_EPS_SOURCES(KKA,KKU,KKL,KMI,PTKET,ZLM,ZLEPS,PDP,ZTRH,       &
                    & PEDR=PEDR)
 IF (LBUDGET_TH)  THEN
   IF ( KRRI >= 1 .AND. KRRL >= 1 ) THEN
-    CALL BUDGET_DDH (PRTHLS+ ZLVOCPEXNM * PRRS(:,:,:,2) + ZLSOCPEXNM * PRRS(:,:,:,4),4,'DISSH_BU_RTH',YDDDH, YDLDDH, YDMDDH)
+    CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TH), 'DISSH', PRTHLS+ ZLVOCPEXNM * PRRS(:,:,:,2) &
+                                                          & + ZLSOCPEXNM * PRRS(:,:,:,4) )
   ELSE IF ( KRRL >= 1 ) THEN
-    CALL BUDGET_DDH (PRTHLS+ ZLOCPEXNM * PRRS(:,:,:,2),4,'DISSH_BU_RTH',YDDDH, YDLDDH, YDMDDH)
+    CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TH), 'DISSH', PRTHLS+ ZLOCPEXNM * PRRS(:,:,:,2) )
   ELSE
-    CALL BUDGET_DDH (PRTHLS,4,'DISSH_BU_RTH',YDDDH, YDLDDH, YDMDDH)
+    CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TH), 'DISSH', PRTHLS(:, :, :) )
   END IF
 END IF
-
+!
 ENDIF
 !
 !----------------------------------------------------------------------------
diff --git a/src/mesonh/turb/turb.f90 b/src/mesonh/turb/turb.f90
index af6146bd6..cb60d897e 100644
--- a/src/mesonh/turb/turb.f90
+++ b/src/mesonh/turb/turb.f90
@@ -351,11 +351,11 @@ END MODULE MODI_TURB
 !*      0. DECLARATIONS
 !          ------------
 !
-use modd_budget,      only: lbudget_u,  lbudget_v,  lbudget_w,  lbudget_th, lbudget_rv, lbudget_rc,  &
-                            lbudget_rr, lbudget_ri, lbudget_rs, lbudget_rg, lbudget_rh, lbudget_sv,  &
+USE MODD_BUDGET, ONLY: LBUDGET_U,  LBUDGET_V,  LBUDGET_W,  LBUDGET_TH, LBUDGET_RV, LBUDGET_RC,  &
+                            LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, LBUDGET_SV,  &
                             NBUDGET_U,  NBUDGET_V,  NBUDGET_W,  NBUDGET_TH, NBUDGET_RV, NBUDGET_RC,  &
                             NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1, &
-                            tbudgets
+                            TBUDGETS
 USE MODD_CONF
 USE MODD_CST
 USE MODD_CTURB
@@ -384,10 +384,10 @@ USE MODI_TM06
 USE MODI_UPDATE_LM
 USE MODI_GET_HALO
 !
-use mode_budget,         only: Budget_store_init, Budget_store_end
+USE MODE_BUDGET,         ONLY: BUDGET_STORE_INIT, BUDGET_STORE_END
 USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE
 USE MODE_SBL
-use mode_sources_neg_correct, only: Sources_neg_correct
+USE MODE_SOURES_NEG_CORRECT, ONLY: SOURCES_NEG_CORRECT
 !
 USE MODI_EMOIST
 USE MODI_ETHETA
-- 
GitLab