diff --git a/src/arome/ext/aro_turb_mnh.F90 b/src/arome/ext/aro_turb_mnh.F90 index 2fb817cc9ee9601de92adfba82323452647091ca..09944b25d1d3450aff54cc1a06aed263cf96cb5c 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 f15aacae111577715479d28b1660c0148e2704d5..28176fa63c0799e5609c458dc8fbeee2d669ebae 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 c862c0824749fbcadb055863bb9d471619525ce2..0120f583bdfdb428e3fe41b84f62438a765d36af 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 72ed8b202d12285f91b50a841ff8dfdd9e66810c..f9440cfa0d7af13cd6bd8ae4feefbdcdd176c6b1 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 1e03d12f27e8e9f602760ed1db667e88b91c99af..04af09a38ec1e638eddd91f6179647b5cdcf3dae 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)