diff --git a/src/arome/ext/aro_turb_mnh.F90 b/src/arome/ext/aro_turb_mnh.F90 index 377c38fc9d5b9d1c9113868f043d044e4cb065d4..619f5392b5d864563c3e3d78198a6397c599778f 100644 --- a/src/arome/ext/aro_turb_mnh.F90 +++ b/src/arome/ext/aro_turb_mnh.F90 @@ -452,7 +452,6 @@ CALL TURB (CST,CSTURB,TBUCONF,TURBN, YLDIMPHYEX,& & OCOMPUTE_SRC, 1.0, & & OOCEAN,ODEEPOC, .FALSE., & & 'NONE',CMICRO, & - & ZIMPL, & & 2*PTSTEP,ZTFILE, & & ZDXX,ZDYY,ZDZZ,ZDZX,ZDZY,ZZZ, & & ZDIRCOSXW,ZDIRCOSYW,ZDIRCOSZW,ZCOSSLOPE,ZSINSLOPE, & diff --git a/src/arome/ext/aroini_turb.h b/src/arome/ext/aroini_turb.h index eeb0a5ab3191974f4ce769e92768c6a5cbe97e63..fd98cf451465248c9477f7a7f0a226299fd9f887 100644 --- a/src/arome/ext/aroini_turb.h +++ b/src/arome/ext/aroini_turb.h @@ -1,8 +1,9 @@ INTERFACE -SUBROUTINE AROINI_TURB(PLINI,OHARATU,OSTATNW) +SUBROUTINE AROINI_TURB(PLINI,OHARATU,OSTATNW,OSUBG_COND) USE PARKIND1 ,ONLY : JPRB REAL(KIND=JPRB),INTENT(IN)::PLINI LOGICAL, INTENT(IN) ::OHARATU LOGICAL, INTENT(IN) ::OSTATNW +LOGICAL, INTENT(IN) :: OSUBG_COND END SUBROUTINE AROINI_TURB END INTERFACE diff --git a/src/arome/ext/suphmpa.F90 b/src/arome/ext/suphmpa.F90 index cafaf9bef0750a63d837caa4e03e7df539f2fe16..681a037ce1a16bcc9c8c0e6c584cdf839ba53438 100644 --- a/src/arome/ext/suphmpa.F90 +++ b/src/arome/ext/suphmpa.F90 @@ -106,7 +106,7 @@ ASSOCIATE(XDETR_LUP=>YDPARAR%XDETR_LUP, XCMF=>YDPARAR%XCMF, & & LAROBU_ENABLE=>YDPARAR%LAROBU_ENABLE, LCRIAUTI=>YDPARAR%LCRIAUTI, & & XKRC_MF=>YDPARAR%XKRC_MF, XALPHA_MF=>YDPARAR%XALPHA_MF, & & XPRES_UV=>YDPARAR%XPRES_UV, NRR=>YDPARAR%NRR, XCRAD_MF=>YDPARAR%XCRAD_MF, & - & CMF_UPDRAFT=>YDPARAR%CMF_UPDRAFT, LHARATU=>YDPARAR%LHARATU, LSUBG_COND=>YDPARAR%LSUBG_COND,& + & CMF_UPDRAFT=>YDPARAR%CMF_UPDRAFT, LHARATU=>YDPARAR%LHARATU, LOSUBG_COND=>YDPARAR%LOSUBG_COND,& & LSTATNW=>YDPARAR%LSTATNW, & & LMPA=>YDARPHY%LMPA, LKFBCONV=>YDARPHY%LKFBCONV, LMFSHAL=>YDARPHY%LMFSHAL, & & LGRADHPHY=>YDARPHY%LGRADHPHY, & @@ -166,7 +166,7 @@ CALL AROINI_BUDGET(LAROBU_ENABLE) ! 4. Initialisation of Turbulence scheme -CALL AROINI_TURB(XLINI,LHARATU,LSTATNW,LSUBG_COND) +CALL AROINI_TURB(XLINI,LHARATU,LSTATNW,LOSUBG_COND) ! 5. Initialisation of Mass Flux Shallow convection scheme diff --git a/src/common/turb/mode_turb_hor.F90 b/src/common/turb/mode_turb_hor.F90 index 576cb3268940d000d05144e872c027511602b730..8679d4cc79dd48b6a430d2385f7fb2c869dc7a3e 100644 --- a/src/common/turb/mode_turb_hor.F90 +++ b/src/common/turb/mode_turb_hor.F90 @@ -7,9 +7,9 @@ IMPLICIT NONE CONTAINS SUBROUTINE TURB_HOR(D,CST,CSTURB,TURBN, & KSPLT, KRR, KRRL, KRRI, PTSTEP, & - OOCEAN,OCOMPUTE_SRC, & + OOCEAN,OCOMPUTE_SRC,OBLOWSNOW, & TPFILE, & - PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ, & + PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ,PRSNOW, & PDIRCOSXW,PDIRCOSYW,PDIRCOSZW, & PCOSSLOPE,PSINSLOPE, & PINV_PDXX, PINV_PDYY, PINV_PDZZ, PMZM_PRHODJ, & @@ -169,13 +169,16 @@ INTEGER, INTENT(IN) :: KRR ! number of moist var. INTEGER, INTENT(IN) :: KRRL ! number of liquid water var. INTEGER, INTENT(IN) :: KRRI ! number of ice water var. REAL, INTENT(IN) :: PTSTEP ! -LOGICAL, INTENT(IN) :: OOCEAN ! switch for ocean version +LOGICAL, INTENT(IN) :: OOCEAN ! switch for ocean version LOGICAL, INTENT(IN) :: OCOMPUTE_SRC ! flag to define dimensions of SIGS and SRCT variables +LOGICAL, INTENT(IN) :: OBLOWSNOW ! switch to activate pronostic blowing snow + TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX, PDYY, PDZZ, PDZX, PDZY ! Metric coefficients REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! vertical grid +REAL, INTENT(IN) :: PRSNOW ! Ratio for diffusion coeff. scalar (blowing snow) REAL, DIMENSION(:,:), INTENT(IN) :: PDIRCOSXW, PDIRCOSYW, PDIRCOSZW ! Director Cosinus along x, y and z directions at surface w-point REAL, DIMENSION(:,:), INTENT(IN) :: PCOSSLOPE ! cosinus of the angle @@ -347,10 +350,10 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSIGS ! !* 15. HORIZONTAL FLUXES OF PASSIVE SCALARS ! - CALL TURB_HOR_SV_FLUX(TURBN,KSPLT, & + CALL TURB_HOR_SV_FLUX(TURBN,KSPLT,OBLOWSNOW, & TPFILE, & PK,PINV_PDXX,PINV_PDYY,PINV_PDZZ,PMZM_PRHODJ, & - PDXX,PDYY,PDZZ,PDZX,PDZY, & + PDXX,PDYY,PDZZ,PDZX,PDZY,PRSNOW, & PDIRCOSXW,PDIRCOSYW, & PRHODJ,PWM, & PSFSVM, & @@ -359,8 +362,8 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSIGS ! IF (KSPLT==1 .AND. LLES_CALL) & CALL TURB_HOR_SV_CORR(D,CST,CSTURB, & - KRR,KRRL,KRRI,OOCEAN,OCOMPUTE_SRC, & - PDXX,PDYY,PDZZ,PDZX,PDZY, & + KRR,KRRL,KRRI,OOCEAN,OCOMPUTE_SRC,OBLOWSNOW, & + PDXX,PDYY,PDZZ,PDZX,PDZY,PRSNOW, & PLM,PLEPS,PTKEM,PTHVREF, & PTHLM,PRM, & PLOCPEXNM,PATHETA,PAMOIST,PSRCM, & diff --git a/src/common/turb/mode_turb_hor_splt.F90 b/src/common/turb/mode_turb_hor_splt.F90 index 75d35905d1b82a084d9692c390a6b6a6ee15e78e..afc97c422506d361940a8d98631ab9c71e4cad07 100644 --- a/src/common/turb/mode_turb_hor_splt.F90 +++ b/src/common/turb/mode_turb_hor_splt.F90 @@ -7,7 +7,7 @@ IMPLICIT NONE CONTAINS SUBROUTINE TURB_HOR_SPLT(D,CST,CSTURB,TURBN, & KSPLIT, KRR,KRRL,KRRI,KSV, PTSTEP,HLBCX,HLBCY, & - OOCEAN,OCOMPUTE_SRC, & + OOCEAN,OCOMPUTE_SRC,OBLOWSNOW,PRSNOW, & TPFILE, & PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ, & PDIRCOSXW,PDIRCOSYW,PDIRCOSZW, & @@ -191,7 +191,8 @@ REAL, INTENT(IN) :: PTSTEP ! timestep CHARACTER (LEN=*), DIMENSION(:), INTENT(IN) :: HLBCX,HLBCY LOGICAL, INTENT(IN) :: OOCEAN ! switch for Ocean model version LOGICAL, INTENT(IN) :: OCOMPUTE_SRC ! flag to define dimensions of SIGS and SRCT variables - +LOGICAL, INTENT(IN) :: OBLOWSNOW ! switch to activate pronostic blowing snow +REAL, INTENT(IN) :: PRSNOW ! Ratio for diffusion coeff. scalar (blowing snow) TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file ! REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDXX, PDYY, PDZZ, PDZX, PDZY @@ -365,10 +366,10 @@ IF (KSPLIT>1 .AND. CPROGRAM=='MESONH') THEN ! ! compute the turbulent tendencies for the small time step CALL TURB_HOR(D,CST,CSTURB,TURBN, & - JSPLT, KRR, KRRL, KRRI, PTSTEP, & - OOCEAN,OCOMPUTE_SRC, & + JSPLT, KRR, KRRL, KRRI, PTSTEP, & + OOCEAN,OCOMPUTE_SRC,OBLOWSNOW, & TPFILE, & - PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ, & + PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ,PRSNOW, & PDIRCOSXW,PDIRCOSYW,PDIRCOSZW, & PCOSSLOPE,PSINSLOPE, & ZINV_PDXX, ZINV_PDYY, ZINV_PDZZ, ZMZM_PRHODJ, & @@ -508,9 +509,9 @@ ELSE ! CALL TURB_HOR(D,CST,CSTURB,TURBN, & 1, KRR, KRRL, KRRI, PTSTEP, & - OOCEAN,OCOMPUTE_SRC, & + OOCEAN,OCOMPUTE_SRC,OBLOWSNOW, & TPFILE, & - PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ, & + PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ,PRSNOW, & PDIRCOSXW,PDIRCOSYW,PDIRCOSZW, & PCOSSLOPE,PSINSLOPE, & ZINV_PDXX, ZINV_PDYY, ZINV_PDZZ, ZMZM_PRHODJ, & diff --git a/src/common/turb/mode_turb_hor_sv_corr.F90 b/src/common/turb/mode_turb_hor_sv_corr.F90 index be965cc091f49954e9790cf901363c366936a85c..693d1979c2c2877d2b81d77368b17af4ae664c3c 100644 --- a/src/common/turb/mode_turb_hor_sv_corr.F90 +++ b/src/common/turb/mode_turb_hor_sv_corr.F90 @@ -6,8 +6,8 @@ MODULE MODE_TURB_HOR_SV_CORR IMPLICIT NONE CONTAINS SUBROUTINE TURB_HOR_SV_CORR(D,CST,CSTURB, & - KRR,KRRL,KRRI,OOCEAN,OCOMPUTE_SRC, & - PDXX,PDYY,PDZZ,PDZX,PDZY, & + KRR,KRRL,KRRI,OOCEAN,OCOMPUTE_SRC,OBLOWSNOW, & + PDXX,PDYY,PDZZ,PDZX,PDZY,PRSNOW, & PLM,PLEPS,PTKEM,PTHVREF, & PTHLM,PRM, & PLOCPEXNM,PATHETA,PAMOIST,PSRCM, & @@ -55,7 +55,6 @@ USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t USE MODD_PARAMETERS USE MODD_NSV, ONLY : NSV,NSV_LGBEG,NSV_LGEND USE MODD_LES -USE MODD_BLOWSNOW ! USE MODI_GRADIENT_M USE MODI_GRADIENT_U @@ -83,6 +82,8 @@ INTEGER, INTENT(IN) :: KRRL ! number of liquid var. INTEGER, INTENT(IN) :: KRRI ! number of ice var. LOGICAL, INTENT(IN) :: OOCEAN ! switch for Ocean model version LOGICAL, INTENT(IN) :: OCOMPUTE_SRC ! flag to define dimensions of SIGS and SRCT variables +LOGICAL, INTENT(IN) :: OBLOWSNOW ! switch to activate pronostic blowing snow +REAL, INTENT(IN) :: PRSNOW ! Ratio for diffusion coeff. scalar (blowing snow) REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX, PDYY, PDZZ, PDZX, PDZY ! Metric coefficients REAL, DIMENSION(:,:,:), INTENT(IN) :: PLM ! mixing length @@ -121,9 +122,9 @@ REAL :: ZCSV !constant for the scalar flux IKU=SIZE(PTKEM,3) 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 + ZCSV= CSTURB%XCHF/PRSNOW ELSE ZCSV= CSTURB%XCHF ENDIF diff --git a/src/common/turb/mode_turb_hor_sv_flux.F90 b/src/common/turb/mode_turb_hor_sv_flux.F90 index d490806f6ca91cb1edbc016c0f5df6bb8d0e8d5d..67f7859194a5396afcbf41cf120c1326aae9e869 100644 --- a/src/common/turb/mode_turb_hor_sv_flux.F90 +++ b/src/common/turb/mode_turb_hor_sv_flux.F90 @@ -6,10 +6,10 @@ MODULE MODE_TURB_HOR_SV_FLUX IMPLICIT NONE CONTAINS - SUBROUTINE TURB_HOR_SV_FLUX(TURBN,KSPLT, & + SUBROUTINE TURB_HOR_SV_FLUX(TURBN,KSPLT,OBLOWSNOW, & TPFILE, & PK,PINV_PDXX,PINV_PDYY,PINV_PDZZ,PMZM_PRHODJ, & - PDXX,PDYY,PDZZ,PDZX,PDZY, & + PDXX,PDYY,PDZZ,PDZX,PDZY,PRSNOW, & PDIRCOSXW,PDIRCOSYW, & PRHODJ,PWM, & PSFSVM, & @@ -69,7 +69,6 @@ USE MODD_IO, ONLY: TFILEDATA USE MODD_PARAMETERS USE MODD_NSV, ONLY: NSV_LGBEG, NSV_LGEND USE MODD_LES -USE MODD_BLOWSNOW ! USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE ! @@ -93,9 +92,11 @@ IMPLICIT NONE TYPE(TURB_t), INTENT(IN) :: TURBN INTEGER, INTENT(IN) :: KSPLT ! split process index TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file +LOGICAL, INTENT(IN) :: OBLOWSNOW ! switch to activate pronostic blowing snow ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PK ! Turbulent diffusion doef. ! PK = PLM * SQRT(PTKEM) +REAL, INTENT(IN) :: PRSNOW ! Ratio for diffusion coeff. scalar (blowing snow) REAL, DIMENSION(:,:,:), INTENT(IN) :: PINV_PDXX ! 1./PDXX REAL, DIMENSION(:,:,:), INTENT(IN) :: PINV_PDYY ! 1./PDYY REAL, DIMENSION(:,:,:), INTENT(IN) :: PINV_PDZZ ! 1./PDZZ @@ -149,9 +150,9 @@ IKU = SIZE(PSVM,3) ! ISV = SIZE(PSVM,4) ! -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= XCHF/XRSNOW + ZCSV= XCHF/PRSNOW ELSE ZCSV= XCHF ENDIF diff --git a/src/common/turb/modi_turb.F90 b/src/common/turb/modi_turb.F90 index e8572e60dd456c22adf798c43315f77f26b9101c..84215a3663eeb13d54d069b5a4679a83b5911ba2 100644 --- a/src/common/turb/modi_turb.F90 +++ b/src/common/turb/modi_turb.F90 @@ -95,10 +95,10 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTKET ! TKE REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KSV), INTENT(IN) :: PSVT ! passive scal. var. REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PSRCT ! Second-order flux ! s'rc'/2Sigma_s2 at time t-1 multiplied by Lambda_3 -REAL, DIMENSION(MERGE(D%NIT,0,HTOM=='TM06'),& - MERGE(D%NJT,0,HTOM=='TM06')),INTENT(INOUT) :: PBL_DEPTH ! BL height for TOMS -REAL, DIMENSION(MERGE(D%NIT,0,ORMC01),& - MERGE(D%NJT,0,ORMC01)),INTENT(INOUT) :: PSBL_DEPTH ! SBL depth for RMC01 +REAL, DIMENSION(MERGE(D%NIT,0,TURBN%CTOM=='TM06'),& + MERGE(D%NJT,0,TURBN%CTOM=='TM06')),INTENT(INOUT) :: PBL_DEPTH ! BL height for TOMS +REAL, DIMENSION(MERGE(D%NIT,0,TURBN%LRMC01),& + MERGE(D%NJT,0,TURBN%LRMC01)),INTENT(INOUT) :: PSBL_DEPTH ! SBL depth for RMC01 ! ! variables for cloud mixing length REAL, DIMENSION(MERGE(D%NIT,0,KMODEL_CL==KMI .AND. HTURBLEN_CL/='NONE'),& diff --git a/src/common/turb/turb.F90 b/src/common/turb/turb.F90 index 2d0d318e15eba1ca8fb92f6565d3979570a2a741..8c445ed9dbcab9b8974b2ed6a12591911dcd2f69 100644 --- a/src/common/turb/turb.F90 +++ b/src/common/turb/turb.F90 @@ -1078,7 +1078,7 @@ IF( TURBN%CTURBDIM == '3DIM' ) THEN #else CALL TURB_HOR_SPLT(D,CST,CSTURB, TURBN, & KSPLIT, KRR, KRRL, KRRI, KSV, PTSTEP,HLBCX,HLBCY, & - OOCEAN,OCOMPUTE_SRC, & + OOCEAN,OCOMPUTE_SRC,OBLOWSNOW,PRSNOW, & TPFILE, & PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ, & PDIRCOSXW,PDIRCOSYW,PDIRCOSZW, &