diff --git a/src/arome/ext/aro_turb_mnh.F90 b/src/arome/ext/aro_turb_mnh.F90 index 65bfcf84472eeea0db0ac6dfdba6192e422655c6..da9dc27d866df0b7da6d7bd6f7fab2667764f028 100644 --- a/src/arome/ext/aro_turb_mnh.F90 +++ b/src/arome/ext/aro_turb_mnh.F90 @@ -71,6 +71,7 @@ USE MODD_CONF USE MODD_CST, ONLY:CST USE MODD_CTURB, ONLY:CSTURB +USE MODD_LES, ONLY:LLES_CALL USE MODD_PARAMETERS USE MODD_IO, ONLY: TFILEDATA USE MODD_BUDGET, ONLY: NBUDGET_RI, TBUDGETDATA, TBUCONF @@ -209,7 +210,8 @@ LOGICAL :: OTURB_DIAG ! switch to write some ! diagnostic fields in the syncronous FM-file LOGICAL :: ORMC01 ! switch for RMC01 lengths in SBL LOGICAL :: OOCEAN ! switch for OCEAN version of turbulence scheme - +LOGICAL :: OCOUPLES ! switch for ocean-atm LES coupling +LOGICAL :: OBLOWSNOW ! switch for prognostic blow snow scheme CHARACTER(LEN=4) :: HTURBDIM ! dimensionality of the ! turbulence scheme CHARACTER(LEN=4) :: HTURBLEN ! kind of mixing length @@ -304,7 +306,10 @@ O2D=.FALSE. ONOMIXLG=.FALSE. KSV_LGBEG=0 KSV_LGEND=0 - +! blowsnow scheme with mesonh +OBLOWSNOW=.FALSE. +! ocean-atmo LES interactive coupling +OCOUPLES=.FALSE. ! tableau a recalculer a chaque pas de temps ! attention, ZDZZ est l'altitude entre deux niveaux (et pas l'�paisseur de la couche) @@ -441,7 +446,7 @@ ENDDO HCLOUD="ICE3" CALL TURB (CST,CSTURB,TBUCONF,KLEV+2,1,KKL,IMI, KRR, KRRL, KRRI, HLBCX, HLBCY,& & ISPLIT,IMI, KSV, KSV_LGBEG, KSV_LGEND, & - & HPROGRAM, O2D, ONOMIXLG, OFLAT, & + & HPROGRAM, O2D, ONOMIXLG, OFLAT, LLES_CALL,OCOUPLES,OBLOWSNOW,& & OTURB_FLX,OTURB_DIAG,OSUBG_COND,ORMC01,OOCEAN,LDHARATU, & & HTURBDIM,HTURBLEN,'NONE','NONE','LIMA', & & ZIMPL, & diff --git a/src/common/turb/mode_prandtl.F90 b/src/common/turb/mode_prandtl.F90 index a2aff1b366ff3709d287ae364114972cf0f71776..e3d237cd63cf42bb7f5e9574bc05012a78b14760 100644 --- a/src/common/turb/mode_prandtl.F90 +++ b/src/common/turb/mode_prandtl.F90 @@ -143,7 +143,6 @@ USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK ! USE MODD_CST, ONLY : CST_t -USE MODD_CONF USE MODD_CTURB, ONLY : CSTURB_t USE MODD_FIELD, ONLY: TFIELDDATA, TYPEREAL USE MODD_IO, ONLY: TFILEDATA diff --git a/src/common/turb/mode_tke_eps_sources.F90 b/src/common/turb/mode_tke_eps_sources.F90 index 637d5d6d50f467e0234c4352ff3e8c8234a92cbc..e4593c4a38d272beccb338951b49b6124971f937 100644 --- a/src/common/turb/mode_tke_eps_sources.F90 +++ b/src/common/turb/mode_tke_eps_sources.F90 @@ -10,7 +10,7 @@ CONTAINS & PTRH,PRHODJ,PDZZ,PDXX,PDYY,PDZX,PDZY,PZZ, & & PTSTEP,PIMPL,PEXPL, & & HTURBLEN,HTURBDIM, & - & TPFILE,OTURB_DIAG, & + & TPFILE,OTURB_DIAG,OLES_CALL, & & PTP,PRTKES,PRTHLS,PCOEF_DISS,PTDIFF,PTDISS,PRTKEMS,& & TBUDGETS, KBUDGETS, & & PEDR, PTR,PDISS ) @@ -182,6 +182,7 @@ CHARACTER(LEN=4), INTENT(IN) :: HTURBDIM ! dimensionality of the CHARACTER(LEN=4), INTENT(IN) :: HTURBLEN ! kind of mixing length CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! CPROGRAM is the program currently running (modd_conf) TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file +LOGICAL, INTENT(IN) :: OLES_CALL ! LOGICAL, INTENT(IN) :: OTURB_DIAG ! switch to write some ! diagnostic fields in the syncronous FM-file REAL, DIMENSION(:,:,:), INTENT(INOUT):: PDP ! Dyn. prod. of TKE @@ -311,7 +312,7 @@ IF(HPROGRAM/='MESONH') THEN END IF PTDISS(:,:,:) = - ZFLX(:,:,:)*(PEXPL*PTKEM(:,:,:) + PIMPL*ZRES(:,:,:)) ! -IF ( LLES_CALL .OR. & +IF ( OLES_CALL .OR. & (OTURB_DIAG .AND. TPFILE%LOPENED) ) THEN ! ! Compute the cartesian vertical flux of TKE in ZFLX @@ -329,7 +330,7 @@ IF ( LLES_CALL .OR. & ! ! Storage in the LES configuration ! - IF (LLES_CALL) THEN + IF (OLES_CALL) THEN CALL LES_MEAN_SUBGRID(MZF(ZFLX, KKA, KKU, KKL), X_LES_SUBGRID_WTke ) CALL LES_MEAN_SUBGRID(-ZTR, X_LES_SUBGRID_ddz_WTke ) END IF @@ -446,7 +447,7 @@ END IF ! Storage in the LES configuration of the Dynamic Production of TKE and ! the dissipation of TKE ! -IF (LLES_CALL ) THEN +IF (OLES_CALL ) THEN CALL LES_MEAN_SUBGRID( PDISS, X_LES_SUBGRID_DISS_Tke ) END IF ! diff --git a/src/common/turb/mode_turb_ver.F90 b/src/common/turb/mode_turb_ver.F90 index 52b47898ba2dd6dba67b8b6118948765ff635210..d7920db74d27f9dd1656fe2cf096759fdccbd8a4 100644 --- a/src/common/turb/mode_turb_ver.F90 +++ b/src/common/turb/mode_turb_ver.F90 @@ -10,6 +10,7 @@ SUBROUTINE TURB_VER(CST,CSTURB,KKA,KKU,KKL,KRR,KRRL,KRRI, & KSV,KSV_LGBEG,KSV_LGEND, & HTURBDIM,HTOM,PIMPL,PEXPL, & HPROGRAM, O2D, ONOMIXLG, OFLAT, & + OLES_CALL,OCOUPLES,OBLOWSNOW, & PTSTEP, TPFILE, & PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ, & PCOSSLOPE,PSINSLOPE, & @@ -147,7 +148,6 @@ SUBROUTINE TURB_VER(CST,CSTURB,KKA,KKU,KKL,KRR,KRRL,KRRI, & !! Module MODD_PARAMETERS !! !! JPVEXT_TURB : number of vertical external points -!! JPHEXT : number of horizontal external points !! !! !! REFERENCE @@ -255,9 +255,16 @@ LOGICAL, INTENT(IN) :: OTURB_FLX ! switch to write the ! turbulent fluxes in the syncronous FM-file LOGICAL, INTENT(IN) :: OOCEAN ! switch for Ocean model version LOGICAL, INTENT(IN) :: OHARAT ! -CHARACTER(len=4), INTENT(IN) :: HTURBDIM ! dimensionality of the +LOGICAL, INTENT(IN) :: OFLAT ! Logical for zero ororography +LOGICAL, INTENT(IN) :: OLES_CALL ! compute the LES diagnostics at current time-step +LOGICAL, INTENT(IN) :: OCOUPLES ! switch to activate atmos-ocean LES version +LOGICAL, INTENT(IN) :: OBLOWSNOW ! switch to activate pronostic blowing snow +CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! HPROGRAM is the program currently running +LOGICAL, INTENT(IN) :: ONOMIXLG ! to use turbulence for lagrangian variables +LOGICAL, INTENT(IN) :: O2D ! Logical for 2D model version +CHARACTER(LEN=4), INTENT(IN) :: HTURBDIM ! dimensionality of the ! turbulence scheme -CHARACTER(len=4), INTENT(IN) :: HTOM ! type of Third Order Moment +CHARACTER(LEN=4), INTENT(IN) :: HTOM ! type of Third Order Moment REAL, INTENT(IN) :: PIMPL, PEXPL ! Coef. for temporal disc. REAL, INTENT(IN) :: PTSTEP ! timestep TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file @@ -334,10 +341,6 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PWTH ! heat flux REAL, DIMENSION(:,:,:), INTENT(OUT) :: PWRC ! cloud water flux REAL, DIMENSION(:,:,:,:),INTENT(OUT) :: PWSV ! scalar flux ! -CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! CPROGRAM is the program currently running (modd_conf) -LOGICAL, INTENT(IN) :: ONOMIXLG ! to use turbulence for lagrangian variables (modd_conf) -LOGICAL, INTENT(IN) :: O2D ! Logical for 2D model version (modd_conf) -LOGICAL, INTENT(IN) :: OFLAT ! Logical for zero ororography ! !* 0.2 declaration of local variables ! @@ -476,7 +479,7 @@ ZPSI_SV = PSI_SV(CSTURB,ZREDTH1,ZREDR1,ZREDS1,ZRED2THS,ZRED2RS,ZPHI3,ZPSI3) ! ! LES diagnostics ! -IF (LLES_CALL) THEN +IF (OLES_CALL) THEN CALL SECOND_MNH(ZTIME1) CALL LES_MEAN_SUBGRID(ZPHI3,X_LES_SUBGRID_PHI3) IF(KRR/=0) THEN @@ -508,8 +511,8 @@ ENDIF ! CALL TURB_VER_THERMO_FLUX(CST,CSTURB,KKA,KKU,KKL,KRR,KRRL,KRRI, & OTURB_FLX,HTURBDIM,HTOM,OOCEAN,OHARAT, & - PIMPL,PEXPL,PTSTEP,HPROGRAM, & - TPFILE, & + OCOUPLES,OLES_CALL, & + PIMPL,PEXPL,PTSTEP,HPROGRAM,TPFILE, & PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ, & PRHODJ,PTHVREF, & PSFTHM,PSFRM,PSFTHP,PSFRP, & @@ -525,8 +528,8 @@ ENDIF ! CALL TURB_VER_THERMO_CORR(CST,CSTURB,KKA,KKU,KKL,KRR,KRRL,KRRI, & OTURB_FLX,HTURBDIM,HTOM, OHARAT, & - PIMPL,PEXPL, & - TPFILE, & + OCOUPLES,OLES_CALL, & + PIMPL,PEXPL,TPFILE, & PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW, & PRHODJ,PTHVREF, & PSFTHM,PSFRM,PSFTHP,PSFRP, & @@ -556,9 +559,8 @@ ENDIF IF (OHARAT) ZLM=PLENGTHM ! CALL TURB_VER_DYN_FLUX(CST,CSTURB,KKA,KKU,KKL,KSV,O2D,OFLAT, & - OTURB_FLX,KRR, OOCEAN, OHARAT, & - HTURBDIM,PIMPL,PEXPL,PTSTEP, & - TPFILE, & + OTURB_FLX,KRR,OOCEAN,OHARAT,OCOUPLES,OLES_CALL,& + HTURBDIM,PIMPL,PEXPL,PTSTEP,TPFILE, & PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ, & PCOSSLOPE,PSINSLOPE, & PRHODJ, & @@ -579,7 +581,7 @@ IF (OHARAT) ZLM=PLENGTHH IF (SIZE(PSVM,4)>0) & CALL TURB_VER_SV_FLUX(CST,CSTURB,KKA,KKU,KKL,ONOMIXLG, & KSV_LGBEG,KSV_LGEND, & - OTURB_FLX,HTURBDIM,OHARAT, & + OTURB_FLX,HTURBDIM,OHARAT,OBLOWSNOW,OLES_CALL,& PIMPL,PEXPL,PTSTEP, & TPFILE, & PDZZ,PDIRCOSZW, & @@ -590,9 +592,10 @@ CALL TURB_VER_SV_FLUX(CST,CSTURB,KKA,KKU,KKL,ONOMIXLG, & PRSVS,PWSV ) ! ! -IF (SIZE(PSVM,4)>0 .AND. LLES_CALL) & +IF (SIZE(PSVM,4)>0 .AND. OLES_CALL) & CALL TURB_VER_SV_CORR(CST,CSTURB,KKA,KKU,KKL,KRR,KRRL,KRRI,OOCEAN, & PDZZ,KSV,KSV_LGBEG,KSV_LGEND,ONOMIXLG, & + OBLOWSNOW,OLES_CALL, & PTHLM,PRM,PTHVREF, & PLOCPEXNM,PATHETA,PAMOIST,PSRCM,ZPHI3,ZPSI3, & PWM,PSVM, & diff --git a/src/common/turb/mode_turb_ver_dyn_flux.F90 b/src/common/turb/mode_turb_ver_dyn_flux.F90 index a09e3f7f80ef2e9109482812d36bbb8c57a44af9..ac80c98d5cb6142141d31929e12aa65e223ba688 100644 --- a/src/common/turb/mode_turb_ver_dyn_flux.F90 +++ b/src/common/turb/mode_turb_ver_dyn_flux.F90 @@ -6,7 +6,7 @@ MODULE MODE_TURB_VER_DYN_FLUX IMPLICIT NONE CONTAINS SUBROUTINE TURB_VER_DYN_FLUX(CST,CSTURB,KKA,KKU,KKL,KSV,O2D,OFLAT, & - OTURB_FLX,KRR, OOCEAN,OHARAT, & + OTURB_FLX,KRR, OOCEAN,OHARAT,OCOUPLES,OLES_CALL,& HTURBDIM,PIMPL,PEXPL, & PTSTEP, & TPFILE, & @@ -213,7 +213,6 @@ USE MODD_IO, ONLY: TFILEDATA USE MODD_LES USE MODD_OCEANH USE MODD_PARAMETERS -USE MODD_REF, ONLY : LCOUPLES USE MODD_TURB_n ! ! @@ -248,6 +247,8 @@ LOGICAL, INTENT(IN) :: OOCEAN ! switch for Ocean model v LOGICAL, INTENT(IN) :: OHARAT LOGICAL, INTENT(IN) :: O2D ! Logical for 2D model version (modd_conf) LOGICAL, INTENT(IN) :: OFLAT ! Logical for zero ororography +LOGICAL, INTENT(IN) :: OLES_CALL ! compute the LES diagnostics at current time-step +LOGICAL, INTENT(IN) :: OCOUPLES ! switch to activate atmos-ocean LES version INTEGER, INTENT(IN) :: KRR ! number of moist var. CHARACTER(len=4), INTENT(IN) :: HTURBDIM ! dimensionality of the ! turbulence scheme @@ -407,7 +408,7 @@ ZCOEFS(:,:,1:1)=MXM(ZCOEFS(:,:,1:1) / PDZZ(:,:,IKB:IKB) ) ! ZSOURCE= FLUX /DZ IF (OOCEAN) THEN ! OCEAN MODEL ONLY ! Sfx flux assumed to be in SI & at vorticity point - IF (LCOUPLES) THEN + IF (OCOUPLES) THEN ZSOURCE(:,:,IKE:IKE) = XSSUFL_C(:,:,1:1)/PDZZ(:,:,IKE:IKE) & *0.5 * ( 1. + MXM(PRHODJ(:,:,KKU:KKU)) / MXM(PRHODJ(:,:,IKE:IKE))) ELSE @@ -420,7 +421,7 @@ IF (OOCEAN) THEN ! OCEAN MODEL ONLY ZSOURCE(:,:,IKTB+1:IKTE-1) = 0 ! ELSE !ATMOS MODEL ONLY - IF (LCOUPLES) THEN + IF (OCOUPLES) THEN ZSOURCE(:,:,IKB:IKB) = XSSUFL_C(:,:,1:1)/PDZZ(:,:,IKB:IKB) & * 0.5 * ( 1. + MXM(PRHODJ(:,:,KKA:KKA)) / MXM(PRHODJ(:,:,IKB:IKB)) ) ELSE @@ -518,7 +519,7 @@ END IF ! ! Storage in the LES configuration ! -IF (LLES_CALL) THEN +IF (OLES_CALL) THEN CALL SECOND_MNH(ZTIME1) CALL LES_MEAN_SUBGRID(MZF(MXF(ZFLXZ), KKA, KKU, KKL), X_LES_SUBGRID_WU ) CALL LES_MEAN_SUBGRID(MZF(MXF(GZ_U_UW(PUM,PDZZ, KKA, KKU, KKL) & @@ -587,7 +588,7 @@ END IF ! ! Storage in the LES configuration ! - IF (LLES_CALL) THEN + IF (OLES_CALL) THEN CALL SECOND_MNH(ZTIME1) CALL LES_MEAN_SUBGRID(MZF(MXF(GX_W_UW(PWM,PDXX,& PDZZ,PDZX, KKA, KKU, KKL)*ZFLXZ), KKA, KKU, KKL), X_LES_RES_ddxa_W_SBG_UaW ) @@ -637,7 +638,7 @@ ZCOEFS(:,:,1)= ZCOEFFLXU(:,:,1) * PSINSLOPE(:,:) * PDIRCOSZW(:,:) & ZCOEFS(:,:,1:1)=MYM(ZCOEFS(:,:,1:1) / PDZZ(:,:,IKB:IKB) ) ! IF (OOCEAN) THEN ! Ocean case - IF (LCOUPLES) THEN + IF (OCOUPLES) THEN ZSOURCE(:,:,IKE:IKE) = XSSVFL_C(:,:,1:1)/PDZZ(:,:,IKE:IKE) & *0.5 * ( 1. + MYM(PRHODJ(:,:,KKU:KKU)) / MYM(PRHODJ(:,:,IKE:IKE)) ) ELSE @@ -648,7 +649,7 @@ IF (OOCEAN) THEN ! Ocean case !No flux at the ocean domain bottom ZSOURCE(:,:,IKB) = 0. ELSE ! Atmos case - IF (.NOT.LCOUPLES) THEN ! only atmosp without coupling + IF (.NOT.OCOUPLES) THEN ! only atmosp without coupling ! compute the explicit tangential flux at the W point ZSOURCE(:,:,IKB) = & PTAU11M(:,:) * PSINSLOPE(:,:) * PDIRCOSZW(:,:) * ZDIRSINZW(:,:) & @@ -749,7 +750,7 @@ PDP(:,:,:)=PDP(:,:,:)+ZA(:,:,:) ! ! Storage in the LES configuration ! -IF (LLES_CALL) THEN +IF (OLES_CALL) THEN CALL SECOND_MNH(ZTIME1) CALL LES_MEAN_SUBGRID(MZF(MYF(ZFLXZ), KKA, KKU, KKL), X_LES_SUBGRID_WV ) CALL LES_MEAN_SUBGRID(MZF(MYF(GZ_V_VW(PVM,PDZZ, KKA, KKU, KKL)*& @@ -817,7 +818,7 @@ IF(HTURBDIM=='3DIM') THEN ! ! Storage in the LES configuration ! - IF (LLES_CALL) THEN + IF (OLES_CALL) THEN CALL SECOND_MNH(ZTIME1) CALL LES_MEAN_SUBGRID(MZF(MYF(GY_W_VW(PWM,PDYY,& &PDZZ,PDZY, KKA, KKU, KKL)*ZFLXZ), KKA, KKU, KKL), & diff --git a/src/common/turb/mode_turb_ver_sv_corr.F90 b/src/common/turb/mode_turb_ver_sv_corr.F90 index 79a32ef71e834f57590fa47f1043bb535da3bd09..0e40b6b984dab0f8980196ed83a00bb0abcd106a 100644 --- a/src/common/turb/mode_turb_ver_sv_corr.F90 +++ b/src/common/turb/mode_turb_ver_sv_corr.F90 @@ -7,6 +7,7 @@ IMPLICIT NONE CONTAINS SUBROUTINE TURB_VER_SV_CORR(CST,CSTURB,KKA,KKU,KKL,KRR,KRRL,KRRI,OOCEAN,& PDZZ,KSV,KSV_LGBEG,KSV_LGEND,ONOMIXLG, & + OBLOWSNOW,OLES_CALL, & PTHLM,PRM,PTHVREF, & PLOCPEXNM,PATHETA,PAMOIST,PSRCM,PPHI3,PPSI3, & PWM,PSVM, & @@ -59,7 +60,7 @@ USE MODD_CST, ONLY: CST_t USE MODD_CTURB, ONLY: CSTURB_t USE MODD_PARAMETERS USE MODD_LES -USE MODD_BLOWSNOW +USE MODD_BLOWSNOW, ONLY: XRSNOW ! ! USE MODI_GRADIENT_U @@ -86,6 +87,8 @@ INTEGER, INTENT(IN) :: KKL ! +1 if grid goes from ground to INTEGER, INTENT(IN) :: KSV, KSV_LGBEG, KSV_LGEND ! number of scalar variables LOGICAL, INTENT(IN) :: OOCEAN ! switch for Ocean model version LOGICAL, INTENT(IN) :: ONOMIXLG ! to use turbulence for lagrangian variables (modd_conf) +LOGICAL, INTENT(IN) :: OLES_CALL ! compute the LES diagnostics at current time-step +LOGICAL, INTENT(IN) :: OBLOWSNOW ! switch to activate pronostic blowing snow INTEGER, INTENT(IN) :: KRR ! number of moist var. INTEGER, INTENT(IN) :: KRRL ! number of liquid var. INTEGER, INTENT(IN) :: KRRI ! number of ice var. @@ -133,7 +136,7 @@ REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK('TURB_VER_SV_CORR',0,ZHOOK_HANDLE) CALL SECOND_MNH(ZTIME1) ! -IF(LBLOWSNOW) THEN +IF(OBLOWSNOW) THEN ! See Vionnet (PhD, 2012) for a complete discussion around the value of the Schmidt number for blowing snow variables ZCSV= CSTURB%XCHF/XRSNOW ELSE @@ -146,7 +149,7 @@ DO JSV=1,KSV ! ! variance Sv2 ! - IF (LLES_CALL) THEN + IF (OLES_CALL) THEN ! approximation: diagnosed explicitely (without implicit term) ZFLXZ(:,:,:) = PPSI_SV(:,:,:,JSV)*GZ_M_W(KKA, KKU, KKL,PSVM(:,:,:,JSV),PDZZ)**2 ZFLXZ(:,:,:) = ZCSV / ZCSVD * PLM * PLEPS * MZF(ZFLXZ(:,:,:), KKA, KKU, KKL) @@ -156,7 +159,7 @@ DO JSV=1,KSV ! ! covariance ThvSv ! - IF (LLES_CALL) THEN + IF (OLES_CALL) THEN ! approximation: diagnosed explicitely (without implicit term) ZA(:,:,:) = ETHETA(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN) ZFLXZ(:,:,:)= ( CSTURB%XCSHF * PPHI3 + ZCSV * PPSI_SV(:,:,:,JSV) ) & @@ -180,7 +183,7 @@ DO JSV=1,KSV END DO ! end of scalar loop ! CALL SECOND_MNH(ZTIME2) -XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1 +IF(OLES_CALL) XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1 !---------------------------------------------------------------------------- ! IF (LHOOK) CALL DR_HOOK('TURB_VER_SV_CORR',1,ZHOOK_HANDLE) diff --git a/src/common/turb/mode_turb_ver_sv_flux.F90 b/src/common/turb/mode_turb_ver_sv_flux.F90 index 8fee07a4036efc5590ae6de8b5653fdf40c74c96..d7881699b56853817ccf2a4f65063f03d4389b99 100644 --- a/src/common/turb/mode_turb_ver_sv_flux.F90 +++ b/src/common/turb/mode_turb_ver_sv_flux.F90 @@ -7,7 +7,7 @@ IMPLICIT NONE CONTAINS SUBROUTINE TURB_VER_SV_FLUX(CST,CSTURB,KKA,KKU,KKL,ONOMIXLG, & KSV_LGBEG,KSV_LGEND, & - OTURB_FLX,HTURBDIM,OHARAT, & + OTURB_FLX,HTURBDIM,OHARAT,OBLOWSNOW,OLES_CALL,& PIMPL,PEXPL, & PTSTEP, & TPFILE, & @@ -217,7 +217,7 @@ USE MODD_FIELD, ONLY: TFIELDDATA, TYPEREAL USE MODD_IO, ONLY: TFILEDATA USE MODD_PARAMETERS USE MODD_LES -USE MODD_BLOWSNOW +USE MODD_BLOWSNOW, ONLY: XRSNOW USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE ! USE MODI_GRADIENT_U @@ -249,6 +249,8 @@ LOGICAL, INTENT(IN) :: ONOMIXLG ! to use turbulence for la CHARACTER(len=4), INTENT(IN) :: HTURBDIM ! dimensionality of the ! turbulence scheme LOGICAL, INTENT(IN) :: OHARAT +LOGICAL, INTENT(IN) :: OLES_CALL ! compute the LES diagnostics at current time-step +LOGICAL, INTENT(IN) :: OBLOWSNOW ! switch to activate pronostic blowing snow REAL, INTENT(IN) :: PIMPL, PEXPL ! Coef. for temporal disc. REAL, INTENT(IN) :: PTSTEP ! Double Time Step TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file @@ -329,7 +331,7 @@ ELSE ZKEFF(:,:,:) = MZM(PLM(:,:,:) * SQRT(PTKEM(:,:,:)), KKA, KKU, KKL) ENDIF ! -IF(LBLOWSNOW) THEN +IF(OBLOWSNOW) THEN ! See Vionnet (PhD, 2012) for a complete discussion around the value of the Schmidt number for blowing snow variables ZCSV= CSTURB%XCHF/XRSNOW ELSE @@ -382,7 +384,7 @@ DO JSV=1,ISV PRSVS(:,:,:,JSV)= PRSVS(:,:,:,JSV)+ & PRHODJ(:,:,:)*(ZRES(:,:,:)-PSVM(:,:,:,JSV))/PTSTEP ! - IF ( (OTURB_FLX .AND. TPFILE%LOPENED) .OR. LLES_CALL ) THEN + IF ( (OTURB_FLX .AND. TPFILE%LOPENED) .OR. OLES_CALL ) THEN ! Diagnostic of the cartesian vertical flux ! ZFLXZ(:,:,:) = -ZCSV * PPSI_SV(:,:,:,JSV) * MZM(PLM*SQRT(PTKEM), KKA, KKU, KKL) / PDZZ * & @@ -428,7 +430,7 @@ DO JSV=1,ISV ! ! Storage in the LES configuration ! - IF (LLES_CALL) THEN + IF (OLES_CALL) THEN CALL SECOND_MNH(ZTIME1) CALL LES_MEAN_SUBGRID(MZF(ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_WSv(:,:,:,JSV) ) CALL LES_MEAN_SUBGRID(GZ_W_M(PWM,PDZZ, KKA, KKU, KKL)*MZF(ZFLXZ, KKA, KKU, KKL), & diff --git a/src/common/turb/mode_turb_ver_thermo_corr.F90 b/src/common/turb/mode_turb_ver_thermo_corr.F90 index 9edb09f531ec8a450a1cec4dd16fd6f25f21a28a..885f046af83bcdad6b83e4356a5fddfd20af685f 100644 --- a/src/common/turb/mode_turb_ver_thermo_corr.F90 +++ b/src/common/turb/mode_turb_ver_thermo_corr.F90 @@ -6,9 +6,9 @@ MODULE MODE_TURB_VER_THERMO_CORR IMPLICIT NONE CONTAINS SUBROUTINE TURB_VER_THERMO_CORR(CST,CSTURB,KKA,KKU,KKL,KRR,KRRL,KRRI, & - OTURB_FLX,HTURBDIM,HTOM,OHARAT, & - PIMPL,PEXPL, & - TPFILE, & + OTURB_FLX,HTURBDIM,HTOM,OHARAT, & + OCOUPLES,OLES_CALL, & + PIMPL,PEXPL,TPFILE, & PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW, & PRHODJ,PTHVREF, & PSFTHM,PSFRM,PSFTHP,PSFRP, & @@ -244,6 +244,8 @@ CHARACTER(len=4), INTENT(IN) :: HTURBDIM ! dimensionality of the ! turbulence scheme CHARACTER(len=4), INTENT(IN) :: HTOM ! type of Third Order Moment LOGICAL, INTENT(IN) :: OHARAT +LOGICAL, INTENT(IN) :: OLES_CALL ! compute the LES diagnostics at current time-step +LOGICAL, INTENT(IN) :: OCOUPLES ! switch to activate atmos-ocean LES version REAL, INTENT(IN) :: PIMPL, PEXPL ! Coef. for temporal disc. TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file ! @@ -527,7 +529,7 @@ ENDIF ! ! and we store in LES configuration ! - IF (LLES_CALL) THEN + IF (OLES_CALL) THEN CALL SECOND_MNH(ZTIME1) CALL LES_MEAN_SUBGRID(ZFLXZ, X_LES_SUBGRID_Thl2 ) CALL LES_MEAN_SUBGRID(MZF(PWM, KKA, KKU, KKL)*ZFLXZ, X_LES_RES_W_SBG_Thl2 ) @@ -694,7 +696,7 @@ ENDIF ! ! and we store in LES configuration ! -IF (LLES_CALL) THEN +IF (OLES_CALL) THEN CALL SECOND_MNH(ZTIME1) CALL LES_MEAN_SUBGRID(ZFLXZ, X_LES_SUBGRID_THlRt ) CALL LES_MEAN_SUBGRID(MZF(PWM, KKA, KKU, KKL)*ZFLXZ, X_LES_RES_W_SBG_ThlRt ) @@ -827,7 +829,7 @@ ENDIF ! ! and we store in LES configuration ! - IF (LLES_CALL) THEN + IF (OLES_CALL) THEN CALL SECOND_MNH(ZTIME1) CALL LES_MEAN_SUBGRID(ZFLXZ, X_LES_SUBGRID_Rt2 ) CALL LES_MEAN_SUBGRID(MZF(PWM, KKA, KKU, KKL)*ZFLXZ, X_LES_RES_W_SBG_Rt2 ) diff --git a/src/common/turb/mode_turb_ver_thermo_flux.F90 b/src/common/turb/mode_turb_ver_thermo_flux.F90 index 1c24fb9635da56411affa82402ef574c1d5e71e9..565bef065d86460c3ad4be5b32c08f992e72833f 100644 --- a/src/common/turb/mode_turb_ver_thermo_flux.F90 +++ b/src/common/turb/mode_turb_ver_thermo_flux.F90 @@ -8,6 +8,7 @@ CONTAINS SUBROUTINE TURB_VER_THERMO_FLUX(CST,CSTURB,KKA,KKU,KKL,KRR,KRRL,KRRI, & OTURB_FLX,HTURBDIM,HTOM,OOCEAN,OHARAT, & + OCOUPLES,OLES_CALL, & PIMPL,PEXPL,PTSTEP,HPROGRAM, & TPFILE, & PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ, & @@ -237,7 +238,6 @@ USE MODD_TURB_n, ONLY: LHGRAD, XCOEFHGRADTHL, XCOEFHGRADRM, XALTHGRAD, X USE MODD_LES USE MODD_DIM_n USE MODD_OCEANH -USE MODD_REF, ONLY: LCOUPLES USE MODD_TURB_n USE MODD_FRC ! @@ -283,6 +283,8 @@ CHARACTER(len=4), INTENT(IN) :: HTOM ! type of Third Order Mome REAL, INTENT(IN) :: PIMPL, PEXPL ! Coef. for temporal disc. REAL, INTENT(IN) :: PTSTEP ! Double Time Step TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file +LOGICAL, INTENT(IN) :: OLES_CALL ! compute the LES diagnostics at current time-step +LOGICAL, INTENT(IN) :: OCOUPLES ! switch to activate atmos-ocean LES version ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ, PDXX, PDYY, PDZX, PDZY ! Metric coefficients @@ -569,7 +571,7 @@ IF (GFTHR) THEN & PREDR1,PD,PBLL_O_E,PETHETA) * MZM(PFTHR, KKA, KKU, KKL) END IF ! compute interface flux -IF (LCOUPLES) THEN ! Autocoupling O-A LES +IF (OCOUPLES) THEN ! Autocoupling O-A LES IF (OOCEAN) THEN ! ocean model in coupled case ZF(:,:,IKE) = (XSSTFL_C(:,:,1)+XSSRFL_C(:,:,1)) & *0.5* ( 1. + PRHODJ(:,:,KKU)/PRHODJ(:,:,IKE) ) @@ -714,7 +716,7 @@ END IF ! !* 2.4 Storage in LES configuration ! -IF (LLES_CALL) THEN +IF (OLES_CALL) THEN CALL SECOND_MNH(ZTIME1) CALL LES_MEAN_SUBGRID(MZF(ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_WThl ) CALL LES_MEAN_SUBGRID(MZF(PWM*ZFLXZ, KKA, KKU, KKL), X_LES_RES_W_SBG_WThl ) @@ -821,7 +823,7 @@ IF (KRR /= 0) THEN END IF ! ! compute interface flux - IF (LCOUPLES) THEN ! coupling NH O-A + IF (OCOUPLES) THEN ! coupling NH O-A IF (OOCEAN) THEN ! ocean model in coupled case ! evap effect on salinity to be added later !!! ZF(:,:,IKE) = 0. @@ -956,7 +958,7 @@ END IF ! !* 3.4 Storage in LES configuration ! - IF (LLES_CALL) THEN + IF (OLES_CALL) THEN CALL SECOND_MNH(ZTIME1) CALL LES_MEAN_SUBGRID(MZF(ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_WRt ) CALL LES_MEAN_SUBGRID(MZF(PWM*ZFLXZ, KKA, KKU, KKL), X_LES_RES_W_SBG_WRt ) @@ -981,7 +983,7 @@ END IF ! !* 4.1 <w Rc> ! -IF ( ((OTURB_FLX .AND. TPFILE%LOPENED) .OR. LLES_CALL) .AND. (KRRL > 0) ) THEN +IF ( ((OTURB_FLX .AND. TPFILE%LOPENED) .OR. OLES_CALL) .AND. (KRRL > 0) ) THEN ! ! recover the Conservative potential temperature flux : ! With OHARAT is true tke and length scales at half levels @@ -1018,7 +1020,7 @@ IF ( ((OTURB_FLX .AND. TPFILE%LOPENED) .OR. LLES_CALL) .AND. (KRRL > 0) ) THEN ! ! and we store in LES configuration this subgrid flux <w'rc'> ! - IF (LLES_CALL) THEN + IF (OLES_CALL) THEN CALL SECOND_MNH(ZTIME1) CALL LES_MEAN_SUBGRID( MZF(ZFLXZ, KKA, KKU, KKL), X_LES_SUBGRID_WRc ) CALL SECOND_MNH(ZTIME2) diff --git a/src/common/turb/mode_update_lm.F90 b/src/common/turb/mode_update_lm.F90 index d5ab737b0b7d15fd55afbec372f9990a33654f2a..bbe5c9403e95ef29a89b99ae70cd2c7d2d424e59 100644 --- a/src/common/turb/mode_update_lm.F90 +++ b/src/common/turb/mode_update_lm.F90 @@ -41,7 +41,6 @@ SUBROUTINE UPDATE_LM(HLBCX,HLBCY,PLM,PLEPS) ! !* 0. DECLARATIONS ! -USE MODD_CONF USE MODD_PARAMETERS ! USE MODE_ll diff --git a/src/common/turb/modi_turb.F90 b/src/common/turb/modi_turb.F90 index c99e4fa1b3b450130bc68368f8400aa1220f5878..c624bab70909dbbd4207f47da01b6a5b3368a847 100644 --- a/src/common/turb/modi_turb.F90 +++ b/src/common/turb/modi_turb.F90 @@ -7,6 +7,7 @@ INTERFACE SUBROUTINE TURB(CST,CSTURB,BUCONF,KKA, KKU, KKL, KMI,KRR,KRRL,KRRI,HLBCX,HLBCY, & & KSPLIT,KMODEL_CL,KSV,KSV_LGBEG,KSV_LGEND, & & HPROGRAM, O2D, ONOMIXLG, OFLAT, & + & OLES_CALL,OCOUPLES,OBLOWSNOW, & & OTURB_FLX,OTURB_DIAG,OSUBG_COND,ORMC01,OOCEAN,OHARAT, & & HTURBDIM,HTURBLEN,HTOM,HTURBLEN_CL,HCLOUD, & & PIMPL,PTSTEP,TPFILE, & @@ -56,6 +57,9 @@ LOGICAL, INTENT(IN) :: ORMC01 ! switch for RMC01 lengths LOGICAL, INTENT(IN) :: OOCEAN ! switch for Ocean model version LOGICAL, INTENT(IN) :: OHARAT LOGICAL, INTENT(IN) :: OFLAT ! Logical for zero ororography +LOGICAL, INTENT(IN) :: OLES_CALL ! compute the LES diagnostics at current time-step +LOGICAL, INTENT(IN) :: OCOUPLES ! switch to activate atmos-ocean LES version +LOGICAL, INTENT(IN) :: OBLOWSNOW ! switch to activate pronostic blowing snow CHARACTER(LEN=4) , INTENT(IN) :: HTURBDIM ! dimensionality of the ! turbulence scheme CHARACTER(LEN=4) , INTENT(IN) :: HTURBLEN ! kind of mixing length diff --git a/src/common/turb/turb.F90 b/src/common/turb/turb.F90 index fafe9acee5d6e69b18f48ec9133d41872a524e03..3734ed5a02530357a2cab3e458854875647d4695 100644 --- a/src/common/turb/turb.F90 +++ b/src/common/turb/turb.F90 @@ -4,8 +4,8 @@ !MNH_LIC for details. version 1. !----------------------------------------------------------------- SUBROUTINE TURB(CST,CSTURB,BUCONF,KKA,KKU,KKL,KMI,KRR,KRRL,KRRI,HLBCX,HLBCY, & - & KSPLIT,KMODEL_CL,KSV,KSV_LGBEG,KSV_LGEND, & - & HPROGRAM, O2D, ONOMIXLG,OFLAT, & + & KSPLIT,KMODEL_CL,KSV,KSV_LGBEG,KSV_LGEND,HPROGRAM, & + & O2D,ONOMIXLG,OFLAT,OLES_CALL,OCOUPLES,OBLOWSNOW, & & OTURB_FLX,OTURB_DIAG,OSUBG_COND,ORMC01,OOCEAN,OHARAT, & & HTURBDIM,HTURBLEN,HTOM,HTURBLEN_CL,HCLOUD,PIMPL, & & PTSTEP,TPFILE,PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ, & @@ -299,8 +299,11 @@ LOGICAL, INTENT(IN) :: OSUBG_COND ! switch for SUBGrid ! CONDensation LOGICAL, INTENT(IN) :: ORMC01 ! switch for RMC01 lengths in SBL LOGICAL, INTENT(IN) :: OOCEAN ! switch for Ocean model version -LOGICAL, INTENT(IN) :: OHARAT ! +LOGICAL, INTENT(IN) :: OHARAT ! switch for LHARATU from AROME LOGICAL, INTENT(IN) :: OFLAT ! Logical for zero ororography +LOGICAL, INTENT(IN) :: OLES_CALL ! compute the LES diagnostics at current time-step +LOGICAL, INTENT(IN) :: OCOUPLES ! switch to activate atmos-ocean LES version +LOGICAL, INTENT(IN) :: OBLOWSNOW ! switch to activate pronostic blowing snow CHARACTER(LEN=4), INTENT(IN) :: HTURBDIM ! dimensionality of the ! turbulence scheme CHARACTER(LEN=4), INTENT(IN) :: HTURBLEN ! kind of mixing length @@ -470,7 +473,7 @@ IF (LHOOK) CALL DR_HOOK('TURB',0,ZHOOK_HANDLE) IF (OHARAT .AND. HTURBDIM /= '1DIM') THEN CALL ABOR1('OHARATU only implemented for option HTURBDIM=1DIM!') ENDIF -IF (OHARAT .AND. LLES_CALL) THEN +IF (OHARAT .AND. OLES_CALL) THEN CALL ABOR1('OHARATU not implemented for option LLES_CALL') ENDIF @@ -877,6 +880,7 @@ CALL TURB_VER(CST,CSTURB,KKA,KKU,KKL,KRR, KRRL, KRRI, & KSV,KSV_LGBEG,KSV_LGEND, & HTURBDIM,HTOM,PIMPL,ZEXPL, & HPROGRAM, O2D, ONOMIXLG, OFLAT, & + OLES_CALL,OCOUPLES,OBLOWSNOW, & PTSTEP,TPFILE, & PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ, & PCOSSLOPE,PSINSLOPE, & @@ -1057,7 +1061,7 @@ CALL TKE_EPS_SOURCES(CST,CSTURB,BUCONF,HPROGRAM,& & PRHODJ,PDZZ,PDXX,PDYY,PDZX,PDZY,PZZ, & & PTSTEP,PIMPL,ZEXPL, & & HTURBLEN,HTURBDIM, & - & TPFILE,OTURB_DIAG, & + & TPFILE,OTURB_DIAG,OLES_CALL, & & PTP,PRTKES,PRTHLS,ZCOEF_DISS,PTDIFF,PTDISS,ZRTKEMS,& & TBUDGETS,KBUDGETS, PEDR=PEDR) IF (BUCONF%LBUDGET_TH) THEN @@ -1165,7 +1169,7 @@ CALL SOURCES_NEG_CORRECT(HCLOUD, 'NETUR',KRR,PTSTEP,PPABST,PTHLT,PRT,PRTHLS,PRRS !* 9. LES averaged surface fluxes ! --------------------------- ! -IF (LLES_CALL) THEN +IF (OLES_CALL) THEN CALL SECOND_MNH(ZTIME1) CALL LES_MEAN_SUBGRID(PSFTH,X_LES_Q0) CALL LES_MEAN_SUBGRID(PSFRV,X_LES_E0) diff --git a/src/mesonh/ext/phys_paramn.f90 b/src/mesonh/ext/phys_paramn.f90 index 643e5e23803a708cabb6e7c33f1b57a5c80eb92e..036d9f8bd8feeb4b917b71bec086621b85a8622d 100644 --- a/src/mesonh/ext/phys_paramn.f90 +++ b/src/mesonh/ext/phys_paramn.f90 @@ -244,6 +244,7 @@ END MODULE MODI_PHYS_PARAM_n ! USE MODD_ADV_n, ONLY : XRTKEMS USE MODD_ARGSLIST_ll, ONLY : LIST_ll +USE MODD_BLOWSNOW, ONLY : LBLOWSNOW USE MODD_BUDGET, ONLY: NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RI, NBUDGET_SV1, & TBUDGETS, xtime_bu_process, TBUCONF USE MODD_CH_AEROSOL @@ -1488,6 +1489,7 @@ END IF CALL TURB( CST,CSTURB, TBUCONF,& 1, IKU, 1, IMI, NRR, NRRL, NRRI, CLBCX, CLBCY, 1, NMODEL_CLOUD, & NSV, NSV_LGBEG, NSV_LGEND,CPROGRAM, L2D, LNOMIXLG,LFLAT, & + LLES_CALL, LCOUPLES, LBLOWSNOW, & LTURB_FLX, LTURB_DIAG, LSUBG_COND, LRMC01, LOCEAN, .FALSE., & CTURBDIM, CTURBLEN, CTOM, CTURBLEN_CLOUD, CCLOUD,XIMPL, & XTSTEP, TPFILE, &