diff --git a/src/common/turb/mode_turb_ver_sv_corr.F90 b/src/common/turb/mode_turb_ver_sv_corr.F90 index f140c0792e47cc3315f874e56bd9f2241598d69e..7de442316cf8bdb5210ef16ce366845d4da4eb8a 100644 --- a/src/common/turb/mode_turb_ver_sv_corr.F90 +++ b/src/common/turb/mode_turb_ver_sv_corr.F90 @@ -130,6 +130,13 @@ REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK('TURB_VER_SV_CORR',0,ZHOOK_HANDLE) CALL SECOND_MNH(ZTIME1) ! +IF(LBLOWSNOW) THEN +! See Vionnet (PhD, 2012) for a complete discussion around the value of the Schmidt number for blowing snow variables + ZCSV= XCHF/XRSNOW +ELSE + ZCSV= XCHF +ENDIF +! DO JSV=1,NSV ! IF (LNOMIXLG .AND. JSV >= NSV_LGBEG .AND. JSV<= NSV_LGEND) CYCLE @@ -139,7 +146,7 @@ DO JSV=1,NSV IF (LLES_CALL) THEN ! approximation: diagnosed explicitely (without implicit term) ZFLXZ(:,:,:) = PPSI_SV(:,:,:,JSV)*GZ_M_W(PSVM(:,:,:,JSV),PDZZ, KKA, KKU, KKL)**2 - ZFLXZ(:,:,:) = XCHF / ZCSVD * PLM * PLEPS * MZF(ZFLXZ(:,:,:), KKA, KKU, KKL) + ZFLXZ(:,:,:) = ZCSV / ZCSVD * PLM * PLEPS * MZF(ZFLXZ(:,:,:), KKA, KKU, KKL) CALL LES_MEAN_SUBGRID(-2.*ZCSVD*SQRT(PTKEM)*ZFLXZ/PLEPS, X_LES_SUBGRID_DISS_Sv2(:,:,:,JSV) ) CALL LES_MEAN_SUBGRID(MZF(PWM, KKA, KKU, KKL)*ZFLXZ, X_LES_RES_W_SBG_Sv2(:,:,:,JSV) ) END IF @@ -149,7 +156,7 @@ DO JSV=1,NSV IF (LLES_CALL) THEN ! approximation: diagnosed explicitely (without implicit term) ZA(:,:,:) = ETHETA(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM) - ZFLXZ(:,:,:)= ( XCSHF * PPHI3 + XCHF * PPSI_SV(:,:,:,JSV) ) & + ZFLXZ(:,:,:)= ( XCSHF * PPHI3 + ZCSV * PPSI_SV(:,:,:,JSV) ) & * GZ_M_W(PTHLM,PDZZ, KKA, KKU, KKL) & * GZ_M_W(PSVM(:,:,:,JSV),PDZZ, KKA, KKU, KKL) ZFLXZ(:,:,:)= PLM * PLEPS / (2.*ZCTSVD) * MZF(ZFLXZ, KKA, KKU, KKL) @@ -158,7 +165,7 @@ DO JSV=1,NSV ! IF (KRR>=1) THEN ZA(:,:,:) = EMOIST(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM) - ZFLXZ(:,:,:)= ( XCHF * PPSI3 + XCHF * PPSI_SV(:,:,:,JSV) ) & + ZFLXZ(:,:,:)= ( ZCSV * PPSI3 + ZCSV * PPSI_SV(:,:,:,JSV) ) & * GZ_M_W(PRM(:,:,:,1),PDZZ, KKA, KKU, KKL) & * GZ_M_W(PSVM(:,:,:,JSV),PDZZ, KKA, KKU, KKL) ZFLXZ(:,:,:)= PLM * PLEPS / (2.*ZCQSVD) * MZF(ZFLXZ, KKA, KKU, KKL) diff --git a/src/common/turb/mode_turb_ver_sv_flux.F90 b/src/common/turb/mode_turb_ver_sv_flux.F90 index 9ef220cf8e7ca6883f9e689bcfeaa8cdfd3041bf..41516708838d42b6a2bfd2851c00d66f6f17ebb7 100644 --- a/src/common/turb/mode_turb_ver_sv_flux.F90 +++ b/src/common/turb/mode_turb_ver_sv_flux.F90 @@ -290,9 +290,6 @@ REAL, DIMENSION(SIZE(PSVM,1),SIZE(PSVM,2),SIZE(PSVM,3)) :: & ZFLXZ, & ! vertical flux of the treated variable ZSOURCE, & ! source of evolution for the treated variable ZKEFF ! effectif diffusion coeff = LT * SQRT( TKE ) -INTEGER :: IRESP ! Return code of FM routines -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file INTEGER :: IKB,IKE ! I index values for the Beginning and End ! mass points of the domain in the 3 direct. INTEGER :: IKT ! array size in k direction @@ -300,8 +297,6 @@ INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain INTEGER :: JSV ! loop counters INTEGER :: JK ! loop INTEGER :: ISV ! number of scalar var. -CHARACTER (LEN=100) :: YCOMMENT ! comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file ! REAL :: ZTIME1, ZTIME2 @@ -326,12 +321,17 @@ IKTB =1+JPVEXT_TURB ISV=SIZE(PSVM,4) ! IF (LHARAT) THEN -ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:)) + 50.*MFMOIST(:,:,:) + ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:)) + 50.*MFMOIST(:,:,:) ELSE -ZKEFF(:,:,:) = MZM(PLM(:,:,:) * SQRT(PTKEM(:,:,:)), KKA, KKU, KKL) + ZKEFF(:,:,:) = MZM(PLM(:,:,:) * SQRT(PTKEM(:,:,:)), KKA, KKU, KKL) ENDIF - ! +IF(LBLOWSNOW) THEN +! See Vionnet (PhD, 2012) for a complete discussion around the value of the Schmidt number for blowing snow variables + ZCSV= XCHF/XRSNOW +ELSE + ZCSV= XCHF +ENDIF !---------------------------------------------------------------------------- ! !* 8. SOURCES OF PASSIVE SCALAR VARIABLES @@ -342,15 +342,16 @@ DO JSV=1,ISV IF (LNOMIXLG .AND. JSV >= NSV_LGBEG .AND. JSV<= NSV_LGEND) CYCLE ! ! Preparation of the arguments for TRIDIAG -IF (LHARAT) THEN - ZA(:,:,:) = -PTSTEP* & - ZKEFF * MZM(PRHODJ, KKA, KKU, KKL) / & - PDZZ**2 -ELSE - ZA(:,:,:) = -PTSTEP*XCHF*PPSI_SV(:,:,:,JSV) * & - ZKEFF * MZM(PRHODJ, KKA, KKU, KKL) / & - PDZZ**2 -ENDIF + IF (LHARAT) THEN + ZA(:,:,:) = -PTSTEP* & + ZKEFF * MZM(PRHODJ, KKA, KKU, KKL) / & + PDZZ**2 + ELSE + ZA(:,:,:) = -PTSTEP*ZCSV*PPSI_SV(:,:,:,JSV) * & + ZKEFF * MZM(PRHODJ, KKA, KKU, KKL) / & + PDZZ**2 + ENDIF + ZSOURCE(:,:,:) = 0. ! ! Compute the sources for the JSVth scalar variable @@ -381,7 +382,7 @@ ENDIF IF ( (OTURB_FLX .AND. TPFILE%LOPENED) .OR. LLES_CALL ) THEN ! Diagnostic of the cartesian vertical flux ! - ZFLXZ(:,:,:) = -XCHF * PPSI_SV(:,:,:,JSV) * MZM(PLM*SQRT(PTKEM), KKA, KKU, KKL) / PDZZ * & + ZFLXZ(:,:,:) = -ZCSV * PPSI_SV(:,:,:,JSV) * MZM(PLM*SQRT(PTKEM), KKA, KKU, KKL) / PDZZ * & DZM(PIMPL*ZRES(:,:,:) + PEXPL*PSVM(:,:,:,JSV), KKA, KKU, KKL) ! surface flux !* in 3DIM case, a part of the flux goes vertically, and another goes horizontally diff --git a/src/mesonh/turb/turb_ver_sv_flux.f90 b/src/mesonh/turb/turb_ver_sv_flux.f90 index aa7010e432a73086a2e918a15d98bab9602c913a..678a02e4a5dd5265ebc84b2be954b7df6fd4a85a 100644 --- a/src/mesonh/turb/turb_ver_sv_flux.f90 +++ b/src/mesonh/turb/turb_ver_sv_flux.f90 @@ -430,8 +430,6 @@ DO JSV=1,ISV ! Compute the equivalent tendency for the JSV scalar variable PRSVS(:,:,:,JSV)= PRSVS(:,:,:,JSV)+ & PRHODJ(:,:,:)*(ZRES(:,:,:)-PSVM(:,:,:,JSV))/PTSTEP -! PRSVS(:,:,:,JSV)= MAX((PRSVS(:,:,:,JSV)+ & -! PRHODJ(:,:,:)*(ZRES(:,:,:)-PSVM(:,:,:,JSV))/PTSTEP),XSVMIN(JSV)) ! IF ( (OTURB_FLX .AND. TPFILE%LOPENED) .OR. LLES_CALL ) THEN ! Diagnostic of the cartesian vertical flux