From 628226982db04d53c34e1fb730ed061a22ea82a2 Mon Sep 17 00:00:00 2001
From: Quentin Rodier <quentin.rodier@meteo.fr>
Date: Wed, 19 Jan 2022 16:57:35 +0100
Subject: [PATCH] Quentin 19/01/2022: Budget added in tke_eps_sources - REPRO48
 used for TH Budget (dissipation term TKE ==> TH) was not present in AROME
 (bug) - Problem remaining : Budgets terms TP,TR,DP has changed names

---
 src/arome/ext/aro_turb_mnh.F90          | 22 +++++++---
 src/arome/turb/modi_tke_eps_sources.F90 | 14 ++-----
 src/arome/turb/modi_turb.F90            |  9 ++++-
 src/common/turb/tke_eps_sources.F90     | 54 ++++++++++++-------------
 src/common/turb/turb.F90                | 26 +++++-------
 5 files changed, 63 insertions(+), 62 deletions(-)

diff --git a/src/arome/ext/aro_turb_mnh.F90 b/src/arome/ext/aro_turb_mnh.F90
index 2fb817cc9..09944b25d 100644
--- a/src/arome/ext/aro_turb_mnh.F90
+++ b/src/arome/ext/aro_turb_mnh.F90
@@ -71,7 +71,7 @@
 USE MODD_CONF
 USE MODD_CST
 USE MODD_PARAMETERS
-
+USE MODD_BUDGET, ONLY: NBUDGET_RI, TBUDGETDATA
 !
 USE MODI_TURB
 !
@@ -170,11 +170,12 @@ LOGICAL , INTENT(IN)                            ::  OSUBG_COND   ! switch
 REAL, DIMENSION(KLON,1,KLEV+2),  INTENT(OUT)   :: PDP, PTP, PTPMF, PTDIFF, PTDISS
 !                                                !for TKE DDH budgets
 !
-TYPE(TYP_DDH), INTENT(INOUT)   :: YDDDH
-TYPE(TLDDH),   INTENT(IN)      :: YDLDDH
-TYPE(TMDDH),   INTENT(IN)      :: YDMDDH
+TYPE(TYP_DDH), INTENT(INOUT), TARGET   :: YDDDH
+TYPE(TLDDH),   INTENT(IN), TARGET      :: YDLDDH
+TYPE(TMDDH),   INTENT(IN), TARGET      :: YDMDDH
 !
 !
+ TYPE(TBUDGETDATA), DIMENSION(NBUDGET_RI) :: YLBUDGET !NBUDGET_RI is the one with the highest number needed for turb
 !*       0.2   Declarations of local variables :
 !
 INTEGER :: JRR,JSV       ! Loop index for the moist and scalar variables
@@ -412,6 +413,13 @@ ZCEI_MIN=0.0
 ZCEI=0.0
 ZCOEF_AMPL_SAT=0.0
 
+DO JRR=1, NBUDGET_RI
+  YLBUDGET(JRR)%NBUDGET=JRR
+  YLBUDGET(JRR)%YDDDH=>YDDDH
+  YLBUDGET(JRR)%YDLDDH=>YDLDDH
+  YLBUDGET(JRR)%YDMDDH=>YDMDDH
+ENDDO
+
 CL=HINST_SFU
 CALL TURB (KLEV+2,1,KKL,IMI, KRR, KRRL, KRRI, HLBCX, HLBCY, ISPLIT,IMI, &
    & OCLOSE_OUT,OTURB_FLX,OTURB_DIAG,OSUBG_COND,ORMC01,    &
@@ -431,8 +439,10 @@ CALL TURB (KLEV+2,1,KKL,IMI, KRR, KRRL, KRRI, HLBCX, HLBCY, ISPLIT,IMI, &
    & ZHGRAD,PSIGS,                                         &
    & PDRUS_TURB,PDRVS_TURB,                                &
    & PDRTHLS_TURB,PDRRTS_TURB,ZDRSVS_TURB,                 &
-  & PFLXZTHVMF,ZWTH,ZWRC,ZWSV,PDP,PTP,PTPMF,PTDIFF,    &
-  & PTDISS,YDDDH,YDLDDH,YDMDDH,PEDR=PEDR)
+   & PFLXZTHVMF,ZWTH,ZWRC,ZWSV,PDP,PTP,PTPMF,PTDIFF,PTDISS,&
+   & YDDDH,YDLDDH,YDMDDH,                                  &
+   & YLBUDGET, KBUDGETS=SIZE(YLBUDGET),                    &
+   & PEDR=PEDR)
 !
 !
 !------------------------------------------------------------------------------
diff --git a/src/arome/turb/modi_tke_eps_sources.F90 b/src/arome/turb/modi_tke_eps_sources.F90
index f15aacae1..28176fa63 100644
--- a/src/arome/turb/modi_tke_eps_sources.F90
+++ b/src/arome/turb/modi_tke_eps_sources.F90
@@ -8,13 +8,10 @@ INTERFACE
                     & PTSTEP,PIMPL,PEXPL,                              &
                     & HTURBLEN,HTURBDIM,                               &
                     & TPFILE,OTURB_DIAG,                               &
-                    & PTP,PRTKES,PRTHLS,PCOEF_DISS,PTDIFF,PTDISS,&
-                    & PEDR, YDDDH, YDLDDH, YDMDDH,TBUDGETS, KBUDGETS,  &
-                    & PTR,PDISS,PRTKESM                                )
-!
-USE DDH_MIX, ONLY : TYP_DDH
-USE YOMLDDH, ONLY : TLDDH
-USE YOMMDDH, ONLY : TMDDH
+                    & PTP,PRTKES,PRTHLS,PCOEF_DISS,PTDIFF,PTDISS,      &
+                    & TBUDGETS, KBUDGETS,                              &
+                    & PEDR, PTR,PDISS,PRTKESM                          )
+                    !
 USE MODD_IO, ONLY: TFILEDATA
 USE MODD_BUDGET, ONLY : TBUDGETDATA
 !
@@ -47,9 +44,6 @@ REAL, DIMENSION(:,:,:),  INTENT(INOUT)::  PRTHLS       ! Source of Theta_l
 REAL, DIMENSION(:,:,:),  INTENT(IN)   ::  PCOEF_DISS   ! 1/(Cph*Exner)
 REAL, DIMENSION(:,:,:),  INTENT(OUT)  ::  PTDIFF       ! Diffusion TKE term
 REAL, DIMENSION(:,:,:),  INTENT(OUT)  ::  PTDISS       ! Dissipation TKE term
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
 TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS
 INTEGER, INTENT(IN) :: KBUDGETS
 REAL, DIMENSION(:,:,:),  INTENT(OUT), OPTIONAL  ::  PTR          ! Transport prod. of TKE
diff --git a/src/arome/turb/modi_turb.F90 b/src/arome/turb/modi_turb.F90
index c862c0824..0120f583b 100644
--- a/src/arome/turb/modi_turb.F90
+++ b/src/arome/turb/modi_turb.F90
@@ -24,11 +24,13 @@ INTERFACE
               & PDRTHLS_TURB,PDRRTS_TURB,PDRSVS_TURB,                 &
               & PFLXZTHVMF,PWTH,PWRC,PWSV,PDP,PTP,PTPMF,PTDIFF,PTDISS,&
               & YDDDH,YDLDDH,YDMDDH,                                  &
+              & TBUDGETS, KBUDGETS,                                   &
               & PTR,PDISS,PEDR                                        ) 
 !
-USE DDH_MIX, ONLY : TYP_DDH
+USE DDH_MIX, ONLY  : TYP_DDH
 USE YOMLDDH, ONLY  : TLDDH
 USE YOMMDDH, ONLY  : TMDDH
+USE MODD_BUDGET, ONLY : TBUDGETDATA
 !
 INTEGER,                INTENT(IN)   :: KKA           !near ground array index  
 INTEGER,                INTENT(IN)   :: KKU           !uppest atmosphere array index
@@ -151,9 +153,12 @@ TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
 TYPE(TLDDH),   INTENT(IN)    :: YDLDDH
 TYPE(TMDDH),   INTENT(IN)    :: YDMDDH
 !
+TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS
+INTEGER, INTENT(IN) :: KBUDGETS
+!
 REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  :: PTR   ! Transport production of TKE
 REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  :: PDISS ! Dissipation of TKE
-REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  ::  PEDR       ! EDR
+REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  :: PEDR       ! EDR
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/common/turb/tke_eps_sources.F90 b/src/common/turb/tke_eps_sources.F90
index 72ed8b202..f9440cfa0 100644
--- a/src/common/turb/tke_eps_sources.F90
+++ b/src/common/turb/tke_eps_sources.F90
@@ -10,8 +10,8 @@
                     & HTURBLEN,HTURBDIM,                               &
                     & TPFILE,OTURB_DIAG,                               &
                     & PTP,PRTKES,PRTHLS,PCOEF_DISS,PTDIFF,PTDISS,&
-                    & PEDR, YDDDH, YDLDDH, YDMDDH, TBUDGETS, KBUDGETS, &
-                    & PTR,PDISS,PRTKESM                                )
+                    & TBUDGETS, KBUDGETS, &
+                    & PEDR, PTR,PDISS,PRTKESM                          )
 !     ##################################################################
 !
 !
@@ -148,15 +148,10 @@ USE MODI_GRADIENT_M
 USE MODI_GRADIENT_U
 USE MODI_GRADIENT_V
 USE MODI_GRADIENT_W
-USE MODI_BUDGET_DDH
 USE MODI_LES_MEAN_SUBGRID
 USE MODI_TRIDIAG_TKE
 USE MODI_SHUMAN , ONLY : DZM, DZF, MZM, MZF
 !
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
 !
 IMPLICIT NONE
 !
@@ -193,9 +188,6 @@ REAL, DIMENSION(:,:,:),  INTENT(INOUT)::  PRTHLS       ! Source of Theta_l
 REAL, DIMENSION(:,:,:),  INTENT(IN)   ::  PCOEF_DISS   ! 1/(Cph*Exner)
 REAL, DIMENSION(:,:,:),  INTENT(OUT)  ::  PTDIFF       ! Diffusion TKE term
 REAL, DIMENSION(:,:,:),  INTENT(OUT)  ::  PTDISS       ! Dissipation TKE term
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
 TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS
 INTEGER, INTENT(IN) :: KBUDGETS
 REAL, DIMENSION(:,:,:),  INTENT(OUT), OPTIONAL  ::  PTR          ! Transport prod. of TKE
@@ -248,7 +240,10 @@ IKE=KKU-JPVEXT_TURB*KKL
 ! compute the effective diffusion coefficient at the mass point
 ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:)) 
 !
-!IF (LBUDGET_TH)  CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TH),  'DISSH', PRTHLS(:, :, :) )
+#ifdef REPRO48
+#else
+IF (LBUDGET_TH)  CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TH),  'DISSH', PRTHLS(:, :, :) )
+#endif
 !
 !----------------------------------------------------------------------------
 !
@@ -350,36 +345,35 @@ END IF
 !
 !*       2.4  stores the explicit sources for budget purposes
 !
-!IF (LBUDGET_TKE) THEN
+IF (LBUDGET_TKE) THEN
   ! Dynamical production
-!  CALL BUDGET_STORE_ADD( TBUDGETS(NBUDGET_TKE), 'DP', PDP(:, :, :) * PRHODJ(:, :, :) )
+  CALL BUDGET_STORE_ADD( TBUDGETS(NBUDGET_TKE), 'DP', PDP(:, :, :) * PRHODJ(:, :, :) )
   ! Thermal production
-!  CALL BUDGET_STORE_ADD( TBUDGETS(NBUDGET_TKE), 'TP', PTP(:, :, :) * PRHODJ(:, :, :) )
+  CALL BUDGET_STORE_ADD( TBUDGETS(NBUDGET_TKE), 'TP', PTP(:, :, :) * PRHODJ(:, :, :) )
   ! Dissipation
-!  CALL BUDGET_STORE_ADD( TBUDGETS(NBUDGET_TKE), 'DISS',- XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:) * &
-!                (PEXPL*PTKEM(:,:,:) + PIMPL*ZRES(:,:,:)) * PRHODJ(:,:,:))
-!END IF 
+  CALL BUDGET_STORE_ADD( TBUDGETS(NBUDGET_TKE), 'DISS',- XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:) * &
+                (PEXPL*PTKEM(:,:,:) + PIMPL*ZRES(:,:,:)) * PRHODJ(:,:,:))
+END IF 
 !
 !*       2.5  computes the final RTKE and stores the whole turbulent transport
 !              with the removal of the advection part for MesoNH
 
+!Store the previous source terms in prtkes before initializing the next one
+!Should be in IF LBUDGET_TKE only. Was removed out for a correct comput. of PTDIFF in case of LBUDGET_TKE=F in AROME
+PRTKES(:,:,:) = PRTKES(:,:,:) + PRHODJ(:,:,:) *                                                           &
+                ( PDP(:,:,:) + PTP(:,:,:)                                                                 &
+                  - XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:) * ( PEXPL*PTKEM(:,:,:) + PIMPL*ZRES(:,:,:) ) )
+!
 PTDIFF(:,:,:) =  ZRES(:,:,:) / PTSTEP - PRTKES(:,:,:)/PRHODJ(:,:,:) &
  & - PDP(:,:,:)- PTP(:,:,:) - PTDISS(:,:,:)
 
-IF (LBUDGET_TKE) THEN
-  !Store the previous source terms in prtkes before initializing the next one
-  PRTKES(:,:,:) = PRTKES(:,:,:) + PRHODJ(:,:,:) *                                                           &
-                  ( PDP(:,:,:) + PTP(:,:,:)                                                                 &
-                    - XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:) * ( PEXPL*PTKEM(:,:,:) + PIMPL*ZRES(:,:,:) ) )
-
-!  CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TKE), 'TR', PRTKES(:, :, :) )
-END IF
-
+IF (LBUDGET_TKE) CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_TKE), 'TR', PRTKES(:, :, :) )
+!
 PRTKES(:,:,:) = ZRES(:,:,:) * PRHODJ(:,:,:) / PTSTEP -  ZRTKESM(:,:,:)
 !
 ! stores the whole turbulent transport
 !
-!IF (LBUDGET_TKE) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TKE), 'TR', PRTKES(:, :, :) )
+IF (LBUDGET_TKE) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TKE), 'TR', PRTKES(:, :, :) )
 
 !----------------------------------------------------------------------------
 !
@@ -389,8 +383,10 @@ PRTKES(:,:,:) = ZRES(:,:,:) * PRHODJ(:,:,:) / PTSTEP -  ZRTKESM(:,:,:)
 PRTHLS(:,:,:) = PRTHLS(:,:,:) + XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:) * &
                 (PEXPL*PTKEM(:,:,:) + PIMPL*ZRES(:,:,:)) * PRHODJ(:,:,:) * PCOEF_DISS(:,:,:)
 
-!IF (LBUDGET_TH) CALL BUDGET_STORE_END( TBUDGETS(NBUDGET_TH), 'DISSH', PRTHLS(:, :, :) )
-
+#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 1e03d12f2..04af09a38 100644
--- a/src/common/turb/turb.F90
+++ b/src/common/turb/turb.F90
@@ -19,6 +19,7 @@
               & PDRTHLS_TURB,PDRRTS_TURB,PDRSVS_TURB,                 &
               & PFLXZTHVMF,PWTH,PWRC,PWSV,PDP,PTP,PTPMF,PTDIFF,PTDISS,&
               & YDDDH,YDLDDH,YDMDDH,                                  &
+              & TBUDGETS, KBUDGETS,                                   &
               & PTR,PDISS,PEDR                                        )
 
       USE PARKIND1, ONLY : JPRB
@@ -378,16 +379,19 @@ REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PDP        ! Dynamic TKE production
 REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PTDIFF     ! Diffusion TKE term
 REAL, DIMENSION(:,:,:), INTENT(OUT)  :: PTDISS     ! Dissipation TKE term
 !
-TYPE(TYP_DDH), INTENT(INOUT), TARGET :: YDDDH
-TYPE(TLDDH),   INTENT(IN), TARGET    :: YDLDDH
-TYPE(TMDDH),   INTENT(IN), TARGET    :: YDMDDH
+TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
+TYPE(TLDDH),   INTENT(IN)   :: YDLDDH
+TYPE(TMDDH),   INTENT(IN)   :: YDMDDH
+!
+TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS
+INTEGER, INTENT(IN) :: KBUDGETS
 !
 ! length scale from vdfexcu
 REAL, DIMENSION(:,:,:), INTENT(IN)    :: PLENGTHM, PLENGTHH
 !
 REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  :: PTR   ! Transport production of TKE
 REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  :: PDISS ! Dissipation of TKE
-REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  ::  PEDR       ! EDR
+REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL  :: PEDR       ! EDR
 !
 !
 !-------------------------------------------------------------------------------
@@ -449,7 +453,6 @@ REAL                :: ZALPHA       ! proportionnality constant between Dz/2 and
 !
 !
 TYPE(TFILEDATA) :: TPFILE ! File type to write fields for MesoNH
-TYPE(TBUDGETDATA), DIMENSION(NBUDGET_RH) :: YLBUDGET !NBUDGET_RH is the one with the highest number
 !
 REAL :: ZTIME1, ZTIME2
 REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3))::  ZSHEAR, ZDUDZ, ZDVDZ
@@ -469,13 +472,6 @@ IF (LHARAT .AND. LLES_CALL) THEN
   CALL ABOR1('LHARATU not implemented for option LLES_CALL')
 ENDIF
 
-DO JRR=1, NBUDGET_RH
-  YLBUDGET(JRR)%NBUDGET=JRR
-  YLBUDGET(JRR)%YDDDH=>YDDDH
-  YLBUDGET(JRR)%YDLDDH=>YDLDDH
-  YLBUDGET(JRR)%YDMDDH=>YDMDDH
-ENDDO
-
 IKT=SIZE(PTHLM,3)          
 IKTB=1+JPVEXT_TURB              
 IKTE=IKT-JPVEXT_TURB
@@ -931,9 +927,9 @@ CALL TKE_EPS_SOURCES(KKA,KKU,KKL,KMI,PTKEM,ZLM,ZLEPS,PDP,ZTRH,       &
                    & PTSTEP_MET,PIMPL,ZEXPL,                         &
                    & HTURBLEN,HTURBDIM,                              &
                    & TPFILE,OTURB_DIAG,           &
-                & PTP,PRTKES,PRTHLS,ZCOEF_DISS,PTDIFF,PTDISS,&
-                & PEDR, YDDDH, YDLDDH, YDMDDH,                       &
-TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET))
+                   & PTP,PRTKES,PRTHLS,ZCOEF_DISS,PTDIFF,PTDISS,&
+                   & TBUDGETS,KBUDGETS,&
+                   & 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)
-- 
GitLab