diff --git a/docs/TODO b/docs/TODO index 55b6e2dc32a870dd8ba41867cf2fdb75e4831483..fdbc8c04666d10d0b44bb253924ddc38fd8f3f24 100644 --- a/docs/TODO +++ b/docs/TODO @@ -41,6 +41,7 @@ Pb identifiés à corriger plus tard: concernent qu'une partie des points => à corriger - seules les options oper ont été testées, il manque des test pour sedim_after, nmaxiter, xmrstep, xtstep, autoconv, rainfr +- arome/ini_cmfshall devrait s'appeler ini_param_mfshall Répertoire arome/ext contient les codes non PHYEX qu'il faut modifier dans le pack pour qu'il puisse être compilé. Ce répertoire devra être vidé à la fin du phasage, les modifications nécessaires ayadevront avoir été fournies par ailleurs diff --git a/src/arome/gmkpack_ignored_files b/src/arome/gmkpack_ignored_files index 32f67c1066abc840fd5bfda4688d4e933dad4261..0115464cf82f6a0729cabcf9255107aa3dcd74c3 100644 --- a/src/arome/gmkpack_ignored_files +++ b/src/arome/gmkpack_ignored_files @@ -103,3 +103,6 @@ phyex/micro/modi_tiwmx.F90 phyex/micro/modd_spp_type.F90 phyex/turb/modi_compute_function_thermo_mf.F90 phyex/turb/compute_function_thermo_mf.F90 +phyex/turb/modd_cmfshall.F90 +phyex/turb/mf_turb_expl.F90 +phyex/turb/modi_mf_turb_expl.F90 diff --git a/src/arome/turb/compute_entr_detr.F90 b/src/arome/turb/compute_entr_detr.F90 index 16d23c24e0da948d2781d9661395ec9b4b36065e..4b5c1172ec11dd76df0c1304bef81325c3ea18c9 100644 --- a/src/arome/turb/compute_entr_detr.F90 +++ b/src/arome/turb/compute_entr_detr.F90 @@ -64,7 +64,7 @@ ! USE MODD_CST ! -USE MODD_CMFSHALL +USE MODD_PARAM_MFSHALL_n ! USE MODI_TH_R_FROM_THL_RT_1D diff --git a/src/arome/turb/compute_mf_cloud_bigaus.F90 b/src/arome/turb/compute_mf_cloud_bigaus.F90 index 06f062de47119dbe9f4ef2f3ea3d46c08c27d11d..eb382de5a4203e346ad8ffbb73cff9096cbf151c 100644 --- a/src/arome/turb/compute_mf_cloud_bigaus.F90 +++ b/src/arome/turb/compute_mf_cloud_bigaus.F90 @@ -46,7 +46,7 @@ ! !* 0. DECLARATIONS ! ------------ -USE MODD_CMFSHALL, ONLY : XALPHA_MF, XSIGMA_MF +USE MODD_PARAM_MFSHALL_n, ONLY : XALPHA_MF, XSIGMA_MF USE MODD_CST, ONLY : XPI, XG ! USE MODI_SHUMAN_MF, ONLY: MZF_MF, GZ_M_W_MF diff --git a/src/arome/turb/compute_mf_cloud_direct.F90 b/src/arome/turb/compute_mf_cloud_direct.F90 index e0e3a36ae369d7a1f28929e594f1e6609eede251..c35cfc12b3c6fe7f9759ed572e8eb9d2b39c6a69 100644 --- a/src/arome/turb/compute_mf_cloud_direct.F90 +++ b/src/arome/turb/compute_mf_cloud_direct.F90 @@ -44,7 +44,7 @@ ! !* 0. DECLARATIONS ! ------------ -USE MODD_CMFSHALL, ONLY : XKCF_MF +USE MODD_PARAM_MFSHALL_n, ONLY : XKCF_MF USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK ! diff --git a/src/arome/turb/compute_mf_cloud_stat.F90 b/src/arome/turb/compute_mf_cloud_stat.F90 index 9e33653efcc69956560c68e327bd55e3b5cba340..dd36bc4d9aac1dec2c621aca5b34bbf2f05f81a3 100644 --- a/src/arome/turb/compute_mf_cloud_stat.F90 +++ b/src/arome/turb/compute_mf_cloud_stat.F90 @@ -42,7 +42,7 @@ ! !* 0. DECLARATIONS ! ------------ -USE MODD_CMFSHALL, ONLY : XTAUSIGMF +USE MODD_PARAM_MFSHALL_n, ONLY : XTAUSIGMF USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT ! USE MODI_SHUMAN_MF, ONLY: MZF_MF, MZM_MF, GZ_M_W_MF diff --git a/src/arome/turb/compute_updraft.F90 b/src/arome/turb/compute_updraft.F90 index b0047fc1ec66cfacbeb6093e8910ee1f81381b69..f60bcf56bd128aa47da90aa4b4cd84cb186d5201 100644 --- a/src/arome/turb/compute_updraft.F90 +++ b/src/arome/turb/compute_updraft.F90 @@ -56,7 +56,7 @@ ! ------------ ! USE MODD_CST -USE MODD_CMFSHALL +USE MODD_PARAM_MFSHALL_n USE MODD_TURB_n, ONLY : CTURBLEN USE MODI_COMPUTE_ENTR_DETR diff --git a/src/arome/turb/compute_updraft_raha.F90 b/src/arome/turb/compute_updraft_raha.F90 index 337696338c23e4075da3b4416e6b46a74bd16957..675eaf3f6b746c17aac826091b825ae752bf7295 100644 --- a/src/arome/turb/compute_updraft_raha.F90 +++ b/src/arome/turb/compute_updraft_raha.F90 @@ -52,7 +52,7 @@ ! ------------ USE MODD_CST -USE MODD_CMFSHALL +USE MODD_PARAM_MFSHALL_n USE MODI_TH_R_FROM_THL_RT_1D USE MODI_SHUMAN_MF, ONLY: MZM_MF @@ -267,7 +267,7 @@ PTHL_UP(:,KKB)= ZTHLM_F(:,KKB)+MAX(0.,MIN(ZTMAX,(PSFTH(:)/SQRT(ZTKEM_F(:,KKB)))* PRT_UP(:,KKB) = ZRTM_F(:,KKB)+MAX(0.,MIN(ZRMAX,(PSFRV(:)/SQRT(ZTKEM_F(:,KKB)))*XALP_PERT)) ZQT_UP(:) = PRT_UP(:,KKB)/(1.+PRT_UP(:,KKB)) -ZTHS_UP(:,KKB)=PTHL_UP(:,KKB)*(1.+XLAMBDA*ZQT_UP(:)) +ZTHS_UP(:,KKB)=PTHL_UP(:,KKB)*(1.+XLAMBDA_MF*ZQT_UP(:)) ZTHM_F (:,:) = MZM_MF(PTHM (:,:), KKA, KKU, KKL) ZPRES_F(:,:) = MZM_MF(PPABSM(:,:), KKA, KKU, KKL) @@ -418,13 +418,13 @@ DO JK=KKB,KKE-KKL,KKL ZMIX3(:) = (PZZ(:,JK+KKL)-PZZ(:,JK))*PDETR(:,JK) !& ZQTM(:) = PRTM(:,JK)/(1.+PRTM(:,JK)) - ZTHSM(:,JK) = PTHLM(:,JK)*(1.+XLAMBDA*ZQTM(:)) + ZTHSM(:,JK) = PTHLM(:,JK)*(1.+XLAMBDA_MF*ZQTM(:)) ZTHS_UP(:,JK+KKL)=(ZTHS_UP(:,JK)*(1.-0.5*ZMIX2(:)) + ZTHSM(:,JK)*ZMIX2(:)) & /(1.+0.5*ZMIX2(:)) PRT_UP(:,JK+KKL)=(PRT_UP (:,JK)*(1.-0.5*ZMIX2(:)) + PRTM(:,JK)*ZMIX2(:)) & /(1.+0.5*ZMIX2(:)) ZQT_UP(:) = PRT_UP(:,JK+KKL)/(1.+PRT_UP(:,JK+KKL)) - PTHL_UP(:,JK+KKL)=ZTHS_UP(:,JK+KKL)/(1.+XLAMBDA*ZQT_UP(:)) + PTHL_UP(:,JK+KKL)=ZTHS_UP(:,JK+KKL)/(1.+XLAMBDA_MF*ZQT_UP(:)) ENDWHERE diff --git a/src/arome/turb/compute_updraft_rhcj10.F90 b/src/arome/turb/compute_updraft_rhcj10.F90 index c6d108cf8fe3d7b6ffc3a1d82615587028a2beb7..13d22e0793c8e3522bed53c747197cee2bc59b7a 100644 --- a/src/arome/turb/compute_updraft_rhcj10.F90 +++ b/src/arome/turb/compute_updraft_rhcj10.F90 @@ -51,7 +51,7 @@ ! ------------ ! USE MODD_CST -USE MODD_CMFSHALL +USE MODD_PARAM_MFSHALL_n USE MODD_TURB_n, ONLY : CTURBLEN USE MODI_TH_R_FROM_THL_RT_1D USE MODI_SHUMAN_MF, ONLY: MZF_MF, MZM_MF, GZ_M_W_MF @@ -271,7 +271,7 @@ PTHL_UP(JI,KKB)= ZTHLM_F(JI,KKB)+MAX(0.,MIN(ZTMAX,(PSFTH(JI)/SQRT(ZTKEM_F(JI,KKB PRT_UP(JI,KKB) = ZRTM_F(JI,KKB)+MAX(0.,MIN(ZRMAX,(PSFRV(JI)/SQRT(ZTKEM_F(JI,KKB)))*XALP_PERT)) ZQT_UP(JI) = PRT_UP(JI,KKB)/(1.+PRT_UP(JI,KKB)) -ZTHS_UP(JI,KKB)=PTHL_UP(JI,KKB)*(1.+XLAMBDA*ZQT_UP(JI)) +ZTHS_UP(JI,KKB)=PTHL_UP(JI,KKB)*(1.+XLAMBDA_MF*ZQT_UP(JI)) ENDDO ZTHM_F (:,:) = MZM_MF(PTHM (:,:), KKA, KKU, KKL) @@ -454,13 +454,13 @@ DO JK=KKB,KKE-KKL,KKL ! Utilisation de thetaS ZQTM(JI) = PRTM(JI,JK)/(1.+PRTM(JI,JK)) - ZTHSM(JI,JK) = PTHLM(JI,JK)*(1.+XLAMBDA*ZQTM(JI)) + ZTHSM(JI,JK) = PTHLM(JI,JK)*(1.+XLAMBDA_MF*ZQTM(JI)) ZTHS_UP(JI,JK+KKL)=(ZTHS_UP(JI,JK)*(1.-0.5*ZMIX2(JI)) + ZTHSM(JI,JK)*ZMIX2(JI)) & /(1.+0.5*ZMIX2(JI)) PRT_UP(JI,JK+KKL) =(PRT_UP (JI,JK)*(1.-0.5*ZMIX2(JI)) + PRTM(JI,JK)*ZMIX2(JI)) & /(1.+0.5*ZMIX2(JI)) ZQT_UP(JI) = PRT_UP(JI,JK+KKL)/(1.+PRT_UP(JI,JK+KKL)) - PTHL_UP(JI,JK+KKL)=ZTHS_UP(JI,JK+KKL)/(1.+XLAMBDA*ZQT_UP(JI)) + PTHL_UP(JI,JK+KKL)=ZTHS_UP(JI,JK+KKL)/(1.+XLAMBDA_MF*ZQT_UP(JI)) ENDIF ! GTEST ENDDO diff --git a/src/arome/turb/ini_cmfshall.F90 b/src/arome/turb/ini_cmfshall.F90 index 6842cea3ff764e9b055b3e6ecff8dad83f52596a..be8bbfc007e971b855346474292edb41e2ae88a5 100644 --- a/src/arome/turb/ini_cmfshall.F90 +++ b/src/arome/turb/ini_cmfshall.F90 @@ -12,7 +12,7 @@ !! PURPOSE !! ------- ! The purpose of this routine is to initialize the mass flux -! scheme constants that are stored in module MODD_CMFSHALL +! scheme constants that are stored in module MODD_PARAM_MFSHALL_n ! !! METHOD !! ------ @@ -36,12 +36,13 @@ !! MODIFICATIONS !! ------------- !! S. Riette april 2011 : XALPHA and XSIGMA added +!! S. Riette Jan 2022: Merge with Méso-NH: MODD_MCFSHALL -> MODD_PARAM_MFSHALL_n !! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODD_CMFSHALL +USE MODD_PARAM_MFSHALL_n ! IMPLICIT NONE @@ -76,6 +77,9 @@ REAL, INTENT(IN) :: PLAMBDA ! REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK('INI_CMFSHALL',0,ZHOOK_HANDLE) + +CALL PARAM_MFSHALL_GOTO_MODEL(1, 1) + XALP_PERT = PALP_PERT ! coefficient for the perturbation of ! theta_l and r_t at the first level of ! the updraft @@ -111,7 +115,7 @@ XR = PR ! Aspect ratio of updraft ! Thermodynamic parameter -XLAMBDA = PLAMBDA ! Lambda to compute ThetaS1 from ThetaL +XLAMBDA_MF = PLAMBDA ! Lambda to compute ThetaS1 from ThetaL IF (LHOOK) CALL DR_HOOK('INI_CMFSHALL',1,ZHOOK_HANDLE) END SUBROUTINE INI_CMFSHALL diff --git a/src/arome/turb/mf_turb.F90 b/src/arome/turb/mf_turb.F90 index ee1e2cbf2b3be24d91653abc9987bbd08d6dfc50..66a8d9b86dc4f0e755202f828b411879e3fda57d 100644 --- a/src/arome/turb/mf_turb.F90 +++ b/src/arome/turb/mf_turb.F90 @@ -56,7 +56,7 @@ !* 0. DECLARATIONS ! ------------ ! -USE MODD_CMFSHALL +USE MODD_PARAM_MFSHALL_n ! USE MODI_SHUMAN_MF, ONLY: MZM_MF USE MODI_TRIDIAG_MASSFLUX diff --git a/src/arome/turb/modd_cmfshall.F90 b/src/arome/turb/modd_cmfshall.F90 deleted file mode 100644 index 1d4819faefd4cfe476ec8b6e0f1c71b73c72fadf..0000000000000000000000000000000000000000 --- a/src/arome/turb/modd_cmfshall.F90 +++ /dev/null @@ -1,76 +0,0 @@ -! ######spl - MODULE MODD_CMFSHALL -! ############################# -! -!!**** *MODD_CMFSHALL* - Declaration of Mass flux scheme constants -!! -!! PURPOSE -!! ------- -!! The purpose of this declarative module is to declare some -!! constants for Mass Flux Scheme in the shallow convection -!! parameterization. -! -!! -!!** IMPLICIT ARGUMENTS -!! ------------------ -!! None -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! S. Malardel, J. Pergaud (Meteo France) -!! -!! MODIFICATIONS -!! ------------- -!! Original 01/02/07 -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ - -IMPLICIT NONE - -REAL,SAVE :: XALP_PERT ! coefficient for the perturbation of - ! theta_l and r_t at the first level of - ! the updraft -REAL,SAVE :: XABUO ! coefficient of the buoyancy term in the w_up equation -REAL,SAVE :: XBENTR ! coefficient of the entrainment term in the w_up equation -REAL,SAVE :: XBDETR ! coefficient of the detrainment term in the w_up equation -REAL,SAVE :: XCMF ! coefficient for the mass flux at the first level - ! of the updraft (closure) -REAL,SAVE :: XENTR_MF ! entrainment constant (m/Pa) = 0.2 (m) -REAL,SAVE :: XCRAD_MF ! cloud radius in cloudy part -REAL,SAVE :: XENTR_DRY ! coefficient for entrainment in dry part -REAL,SAVE :: XDETR_DRY ! coefficient for detrainment in dry part -REAL,SAVE :: XDETR_LUP ! coefficient for detrainment in dry part -REAL,SAVE :: XKCF_MF ! coefficient for cloud fraction -REAL,SAVE :: XKRC_MF ! coefficient for convective rc -REAL,SAVE :: XTAUSIGMF -REAL,SAVE :: XPRES_UV ! coefficient for pressure term in wind - ! mixing - -REAL,SAVE :: XALPHA_MF ! coefficient for cloudy fraction -REAL,SAVE :: XSIGMA_MF ! coefficient for sigma computation - -REAL,SAVE :: XFRAC_UP_MAX! maximum Updraft fraction - - -! Parameter for Rio et al (2010) formulation for entrainment and detrainment - -REAL,SAVE :: XA1 ! a1 -REAL,SAVE :: XB ! b -REAL,SAVE :: XC ! c -REAL,SAVE :: XBETA1 ! beta1 - -! Parameters for closure assumption of Hourdin et al 2002 - -REAL,SAVE :: XR ! Aspect ratio of updraft - -! Thermodynamic parameter - -REAL,SAVE :: XLAMBDA ! Lambda to compute ThetaS1 from ThetaL - -END MODULE MODD_CMFSHALL diff --git a/src/arome/turb/modi_mf_turb_expl.F90 b/src/arome/turb/modi_mf_turb_expl.F90 deleted file mode 100644 index 768afa201393af341bb8bbeecab7d13486f0a8c2..0000000000000000000000000000000000000000 --- a/src/arome/turb/modi_mf_turb_expl.F90 +++ /dev/null @@ -1,63 +0,0 @@ -! ######spl - MODULE MODI_MF_TURB_EXPL -! ###################### -! -INTERFACE -! ################################################################# - SUBROUTINE MF_TURB_EXPL(KKA,KKB,KKE,KKU,KKL,OMIXUV, & - PRHODJ, & - PTHLM,PTHVM,PRTM,PUM,PVM, & - PTHLDT,PRTDT,PUDT,PVDT, & - PEMF,PTHL_UP,PTHV_UP,PRT_UP,PU_UP,PV_UP, & - PFLXZTHLMF,PFLXZTHVMF,PFLXZRMF,PFLXZUMF,PFLXZVMF) - -! ################################################################# -! -! -!* 1.1 Declaration of Arguments -! -! -INTEGER, INTENT(IN) :: KKA ! near ground array index -INTEGER, INTENT(IN) :: KKB ! near ground physical index -INTEGER, INTENT(IN) :: KKE ! uppest atmosphere physical index -INTEGER, INTENT(IN) :: KKU ! uppest atmosphere array index -INTEGER, INTENT(IN) :: KKL ! +1 if grid goes from ground to atmosphere top, -1 otherwise -LOGICAL, INTENT(IN) :: OMIXUV ! True if mixing of momentum - -REAL, DIMENSION(:,:), INTENT(IN) :: PRHODJ ! dry density * Grid size - -! Conservative var. at t-dt -REAL, DIMENSION(:,:), INTENT(IN) :: PTHLM ! conservative pot. temp. -REAL, DIMENSION(:,:), INTENT(IN) :: PRTM ! water var. where -!REAL, DIMENSION(:,:), INTENT(IN) :: PRVM -! Virtual potential temperature at t-dt -REAL, DIMENSION(:,:), INTENT(IN) :: PTHVM -! Potential temperature at t-dt -!REAL, DIMENSION(:,:), INTENT(IN) :: PTHM -! Momentum at t-dt -REAL, DIMENSION(:,:), INTENT(IN) :: PUM -REAL, DIMENSION(:,:), INTENT(IN) :: PVM -! -! Tendencies of conservative variables -REAL, DIMENSION(:,:), INTENT(OUT) :: PTHLDT -!REAL, DIMENSION(:,:), INTENT(OUT) :: PTHVDT -!REAL, DIMENSION(:,:), INTENT(OUT) :: PTHDT - -REAL, DIMENSION(:,:), INTENT(OUT) :: PRTDT -!REAL, DIMENSION(:,:), INTENT(OUT) :: PRVDT -! Tendencies of momentum -REAL, DIMENSION(:,:), INTENT(OUT) :: PUDT -REAL, DIMENSION(:,:), INTENT(OUT) :: PVDT - -! Updraft characteritics -REAL, DIMENSION(:,:), INTENT(IN) :: PEMF,PTHL_UP,PTHV_UP,PRT_UP,PU_UP,PV_UP -!REAL, DIMENSION(:,:), INTENT(IN) :: PRV_UP -! Fluxes -REAL, DIMENSION(:,:), INTENT(OUT) :: PFLXZTHLMF,PFLXZTHVMF,PFLXZRMF,PFLXZUMF,PFLXZVMF -!REAL, DIMENSION(:,:), INTENT(OUT) :: PFLXZTHMF - -END SUBROUTINE MF_TURB_EXPL - -END INTERFACE -! -END MODULE MODI_MF_TURB_EXPL diff --git a/src/arome/turb/shallow_mf.F90 b/src/arome/turb/shallow_mf.F90 index d73839a6b6f077934c42780c6542bd5bb1d0d196..2ffd24749c21f87c0e98c845f34ad9e0345f07fa 100644 --- a/src/arome/turb/shallow_mf.F90 +++ b/src/arome/turb/shallow_mf.F90 @@ -61,7 +61,7 @@ ! USE MODD_CST USE MODD_PARAMETERS, ONLY: JPVEXT -USE MODD_CMFSHALL +USE MODD_PARAM_MFSHALL_n USE MODI_THL_RT_FROM_TH_R_MF USE MODI_COMPUTE_UPDRAFT diff --git a/src/arome/turb/mf_turb_expl.F90 b/src/common/turb/mf_turb_expl.F90 similarity index 88% rename from src/arome/turb/mf_turb_expl.F90 rename to src/common/turb/mf_turb_expl.F90 index 0ac56e3236e5bf9ae5a995c7d509397fde4593fe..304c5d3634af7ba1460689c19bd38609e3b84901 100644 --- a/src/arome/turb/mf_turb_expl.F90 +++ b/src/common/turb/mf_turb_expl.F90 @@ -1,4 +1,12 @@ -! ######spl +!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC for details. version 1. +! ###################### + MODULE MODE_MF_TURB_EXPL +! ###################### +IMPLICIT NONE +CONTAINS SUBROUTINE MF_TURB_EXPL(KKA,KKB,KKE,KKU,KKL,OMIXUV, & PRHODJ, & PTHLM,PTHVM,PRTM,PUM,PVM, & @@ -6,9 +14,6 @@ PEMF,PTHL_UP,PTHV_UP,PRT_UP,PU_UP,PV_UP, & PFLXZTHLMF,PFLXZTHVMF,PFLXZRMF,PFLXZUMF,PFLXZVMF) - USE PARKIND1, ONLY : JPRB - USE YOMHOOK , ONLY : LHOOK, DR_HOOK - ! ################################################################# ! ! @@ -47,7 +52,9 @@ !* 0. DECLARATIONS ! ------------ -USE MODD_CMFSHALL +USE PARKIND1, ONLY : JPRB +USE YOMHOOK , ONLY : LHOOK, DR_HOOK +USE MODD_PARAM_MFSHALL_n, ONLY: XLAMBDA_MF USE MODI_SHUMAN_MF, ONLY: MZM_MF IMPLICIT NONE @@ -95,13 +102,13 @@ REAL, DIMENSION(SIZE(PFLXZTHLMF,1),SIZE(PFLXZTHLMF,2)) :: ZQT_UP,ZQTM,ZTHSDT,ZQT REAL, DIMENSION(SIZE(PFLXZTHLMF,1),SIZE(PFLXZTHLMF,2)) :: ZTHLM_F,ZRTM_F INTEGER :: JK ! loop counter +REAL(KIND=JPRB) :: ZHOOK_HANDLE !---------------------------------------------------------------------------- ! !* 1.PRELIMINARIES ! ------------- -REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK('MF_TURB_EXPL',0,ZHOOK_HANDLE) PFLXZRMF = 0. @@ -127,8 +134,8 @@ ZRTM_F (:,:) = MZM_MF(PRTM (:,:), KKA, KKU, KKL) ZTHLM_F(:,:) = MZM_MF(PTHLM(:,:), KKA, KKU, KKL) ZQTM (:,:) = ZRTM_F (:,:)/(1.+ZRTM_F (:,:)) ZQT_UP (:,:) = PRT_UP (:,:)/(1.+PRT_UP (:,:)) -ZTHS_UP(:,:) = PTHL_UP(:,:)*(1.+XLAMBDA*ZQT_UP(:,:)) -ZTHSM (:,:) = ZTHLM_F(:,:)*(1.+XLAMBDA*ZQTM(:,:)) +ZTHS_UP(:,:) = PTHL_UP(:,:)*(1.+XLAMBDA_MF*ZQT_UP(:,:)) +ZTHSM (:,:) = ZTHLM_F(:,:)*(1.+XLAMBDA_MF*ZQTM(:,:)) PFLXZTHLMF(:,:) = PEMF(:,:)*(PTHL_UP(:,:)-MZM_MF(PTHLM(:,:), KKA, KKU, KKL)) ! ThetaL PFLXZRMF(:,:) = PEMF(:,:)*(PRT_UP (:,:)-MZM_MF(PRTM (:,:), KKA, KKU, KKL)) ! Rt @@ -156,7 +163,7 @@ DO JK=KKB,KKE-KKL,KKL PRTDT (:,JK) = (PFLXZRMF (:,JK ) - PFLXZRMF (:,JK+KKL)) / PRHODJ(:,JK) ZQTDT (:,JK) = PRTDT (:,JK)/(1.+ ZRTM_F (:,JK)*ZRTM_F (:,JK)) ZTHSDT(:,JK) = (ZFLXZTHSMF(:,JK ) - ZFLXZTHSMF(:,JK+KKL)) / PRHODJ(:,JK) - PTHLDT(:,JK) = ZTHSDT(:,JK)/(1.+XLAMBDA*ZQTM(:,JK)) - ZTHLM_F(:,JK)*XLAMBDA*ZQTDT(:,JK) + PTHLDT(:,JK) = ZTHSDT(:,JK)/(1.+XLAMBDA_MF*ZQTM(:,JK)) - ZTHLM_F(:,JK)*XLAMBDA_MF*ZQTDT(:,JK) END DO IF (OMIXUV) THEN diff --git a/src/common/turb/modd_param_mfshalln.F90 b/src/common/turb/modd_param_mfshalln.F90 new file mode 100644 index 0000000000000000000000000000000000000000..936d408ae32e3996df7c130e438f71c0180b9d9b --- /dev/null +++ b/src/common/turb/modd_param_mfshalln.F90 @@ -0,0 +1,171 @@ +!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC for details. version 1. +!----------------------------------------------------------------- +!----------------------------------------------------------------- +! ############################# + MODULE MODD_PARAM_MFSHALL_n +! ############################# +! +!!**** *MODD_PARAM_MFSHALL_n* - Declaration of Mass flux scheme free parameters +!! +!! PURPOSE +!! ------- +!! The purpose of this declarative module is to declare the +!! variables that may be set by namelist for the mass flux scheme +!! +!!** IMPLICIT ARGUMENTS +!! ------------------ +!! None +!! +!! REFERENCE +!! --------- +!! +!! +!! AUTHOR +!! ------ +!! S. Malardel, J. Pergaud (Meteo France) +!! +!! MODIFICATIONS +!! ------------- +!! Original 01/02/07 +!! 10/16 R.Honnert Update with AROME +!! 01/2019 R.Honnert add parameters for the reduction of mass-flux surface closure with resolution +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_PARAMETERS, ONLY: JPMODELMAX +IMPLICIT NONE + +TYPE PARAM_MFSHALL_t + +REAL :: XIMPL_MF ! degre of implicitness + +CHARACTER (LEN=4) :: CMF_UPDRAFT ! Type of Mass Flux Scheme + ! 'NONE' if no parameterization +CHARACTER (LEN=4) :: CMF_CLOUD + + +LOGICAL :: LMIXUV ! True if mixing of momentum +LOGICAL :: LMF_FLX ! logical switch for the storage of + ! the mass flux fluxes +REAL :: XALP_PERT ! coefficient for the perturbation of + ! theta_l and r_t at the first level of + ! the updraft +REAL :: XABUO ! coefficient of the buoyancy term in the w_up equation +REAL :: XBENTR ! coefficient of the entrainment term in the w_up equation +REAL :: XBDETR ! coefficient of the detrainment term in the w_up equation +REAL :: XCMF ! coefficient for the mass flux at the first level + ! of the updraft (closure) +REAL :: XENTR_MF ! entrainment constant (m/Pa) = 0.2 (m) +REAL :: XCRAD_MF ! cloud radius in cloudy part +REAL :: XENTR_DRY ! coefficient for entrainment in dry part +REAL :: XDETR_DRY ! coefficient for detrainment in dry part +REAL :: XDETR_LUP ! coefficient for detrainment in dry part +REAL :: XKCF_MF ! coefficient for cloud fraction +REAL :: XKRC_MF ! coefficient for convective rc +REAL :: XTAUSIGMF +REAL :: XPRES_UV ! coefficient for pressure term in wind + ! mixing +REAL :: XALPHA_MF ! coefficient for cloudy fraction +REAL :: XSIGMA_MF ! coefficient for sigma computation +REAL :: XFRAC_UP_MAX! maximum Updraft fraction +! +! Parameter for Rio et al (2010) formulation for entrainment and detrainment (RHCJ10) +REAL :: XA1 +REAL :: XB +REAL :: XC +REAL :: XBETA1 +! +! Parameters for closure assumption of Hourdin et al 2002 + +REAL :: XR ! Aspect ratio of updraft +! +! Grey Zone +LOGICAL :: LGZ ! Grey Zone Surface Closure +REAL :: XGZ ! Tuning of the surface initialisation +! +! Thermodynamic parameter +REAL :: XLAMBDA_MF ! Lambda to compute ThetaS1 from ThetaL + +END TYPE PARAM_MFSHALL_t + +TYPE(PARAM_MFSHALL_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: PARAM_MFSHALL_MODEL + +REAL , POINTER :: XIMPL_MF=>NULL() +CHARACTER (LEN=4), POINTER :: CMF_UPDRAFT=>NULL() +CHARACTER (LEN=4), POINTER :: CMF_CLOUD=>NULL() +LOGICAL , POINTER :: LMIXUV=>NULL() +LOGICAL , POINTER :: LMF_FLX=>NULL() +! +REAL, POINTER :: XALP_PERT=>NULL() +REAL, POINTER :: XABUO=>NULL() +REAL, POINTER :: XBENTR=>NULL() +REAL, POINTER :: XBDETR=>NULL() +REAL, POINTER :: XCMF=>NULL() +REAL, POINTER :: XENTR_MF=>NULL() +REAL, POINTER :: XCRAD_MF=>NULL() +REAL, POINTER :: XENTR_DRY=>NULL() +REAL, POINTER :: XDETR_DRY=>NULL() +REAL, POINTER :: XDETR_LUP=>NULL() +REAL, POINTER :: XKCF_MF=>NULL() +REAL, POINTER :: XKRC_MF=>NULL() +REAL, POINTER :: XTAUSIGMF=>NULL() +REAL, POINTER :: XPRES_UV=>NULL() +REAL, POINTER :: XALPHA_MF=>NULL() +REAL, POINTER :: XSIGMA_MF=>NULL() +REAL, POINTER :: XFRAC_UP_MAX=>NULL() +REAL, POINTER :: XA1=>NULL() +REAL, POINTER :: XB=>NULL() +REAL, POINTER :: XC=>NULL() +REAL, POINTER :: XBETA1=>NULL() +REAL, POINTER :: XR=>NULL() +REAL, POINTER :: XLAMBDA_MF=>NULL() +LOGICAL, POINTER :: LGZ=>NULL() +REAL, POINTER :: XGZ=>NULL() +CONTAINS + +SUBROUTINE PARAM_MFSHALL_GOTO_MODEL(KFROM, KTO) +INTEGER, INTENT(IN) :: KFROM, KTO +! +! Save current state for allocated arrays +! +! Current model is set to model KTO +XIMPL_MF=>PARAM_MFSHALL_MODEL(KTO)%XIMPL_MF +CMF_UPDRAFT=>PARAM_MFSHALL_MODEL(KTO)%CMF_UPDRAFT +CMF_CLOUD=>PARAM_MFSHALL_MODEL(KTO)%CMF_CLOUD +LMIXUV=>PARAM_MFSHALL_MODEL(KTO)%LMIXUV +LMF_FLX=>PARAM_MFSHALL_MODEL(KTO)%LMF_FLX +! +XALP_PERT=>PARAM_MFSHALL_MODEL(KTO)%XALP_PERT +XABUO=>PARAM_MFSHALL_MODEL(KTO)%XABUO +XBENTR=>PARAM_MFSHALL_MODEL(KTO)%XBENTR +XBDETR=>PARAM_MFSHALL_MODEL(KTO)%XBDETR +XCMF=>PARAM_MFSHALL_MODEL(KTO)%XCMF +XENTR_MF=>PARAM_MFSHALL_MODEL(KTO)%XENTR_MF +XCRAD_MF=>PARAM_MFSHALL_MODEL(KTO)%XCRAD_MF +XENTR_DRY=>PARAM_MFSHALL_MODEL(KTO)%XENTR_DRY +XDETR_DRY=>PARAM_MFSHALL_MODEL(KTO)%XDETR_DRY +XDETR_LUP=>PARAM_MFSHALL_MODEL(KTO)%XDETR_LUP +XKCF_MF=>PARAM_MFSHALL_MODEL(KTO)%XKCF_MF +XKRC_MF=>PARAM_MFSHALL_MODEL(KTO)%XKRC_MF +XTAUSIGMF=>PARAM_MFSHALL_MODEL(KTO)%XTAUSIGMF +XPRES_UV=>PARAM_MFSHALL_MODEL(KTO)%XPRES_UV +XALPHA_MF=>PARAM_MFSHALL_MODEL(KTO)%XALPHA_MF +XSIGMA_MF=>PARAM_MFSHALL_MODEL(KTO)%XSIGMA_MF +XFRAC_UP_MAX=>PARAM_MFSHALL_MODEL(KTO)%XFRAC_UP_MAX +XA1=>PARAM_MFSHALL_MODEL(KTO)%XA1 +XB=>PARAM_MFSHALL_MODEL(KTO)%XB +XC=>PARAM_MFSHALL_MODEL(KTO)%XC +XBETA1=>PARAM_MFSHALL_MODEL(KTO)%XBETA1 +XR=>PARAM_MFSHALL_MODEL(KTO)%XR +XLAMBDA_MF=>PARAM_MFSHALL_MODEL(KTO)%XLAMBDA_MF +LGZ=>PARAM_MFSHALL_MODEL(KTO)%LGZ +XGZ=>PARAM_MFSHALL_MODEL(KTO)%XGZ +! +END SUBROUTINE PARAM_MFSHALL_GOTO_MODEL + +END MODULE MODD_PARAM_MFSHALL_n diff --git a/src/mesonh/turb/mf_turb_expl.f90 b/src/mesonh/turb/mf_turb_expl.f90 deleted file mode 100644 index a22f092c2747410eef8c2728b1966736f8eeed2a..0000000000000000000000000000000000000000 --- a/src/mesonh/turb/mf_turb_expl.f90 +++ /dev/null @@ -1,227 +0,0 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -! ###################### - MODULE MODI_MF_TURB_EXPL -! ###################### -! -INTERFACE -! -! ################################################################# - SUBROUTINE MF_TURB_EXPL(KKA,KKB,KKE,KKU,KKL,OMIXUV, & - PRHODJ, & - PTHLM,PTHVM,PRTM,PUM,PVM, & - PTHLDT,PRTDT,PUDT,PVDT, & - PEMF,PTHL_UP,PTHV_UP,PRT_UP,PU_UP,PV_UP, & - PFLXZTHLMF,PFLXZTHVMF,PFLXZRMF,PFLXZUMF,PFLXZVMF) -! ################################################################# -! -!* 1.1 Declaration of Arguments -! -! -INTEGER, INTENT(IN) :: KKA ! near ground array index -INTEGER, INTENT(IN) :: KKB ! near ground physical index -INTEGER, INTENT(IN) :: KKE ! uppest atmosphere physical index -INTEGER, INTENT(IN) :: KKU ! uppest atmosphere array index -INTEGER, INTENT(IN) :: KKL ! +1 if grid goes from ground to atmosphere top, -1 otherwise -LOGICAL, INTENT(IN) :: OMIXUV ! True if mixing of momentum - -REAL, DIMENSION(:,:), INTENT(IN) :: PRHODJ ! dry density * Grid size - -! Conservative var. at t-dt -REAL, DIMENSION(:,:), INTENT(IN) :: PTHLM ! conservative pot. temp. -REAL, DIMENSION(:,:), INTENT(IN) :: PRTM ! water var. where - -! Virtual potential temperature at t-dt -REAL, DIMENSION(:,:), INTENT(IN) :: PTHVM -! Momentum at t-dt -REAL, DIMENSION(:,:), INTENT(IN) :: PUM -REAL, DIMENSION(:,:), INTENT(IN) :: PVM -! -! Tendencies of conservative variables -REAL, DIMENSION(:,:), INTENT(OUT) :: PTHLDT - -REAL, DIMENSION(:,:), INTENT(OUT) :: PRTDT - -! Tendencies of momentum -REAL, DIMENSION(:,:), INTENT(OUT) :: PUDT -REAL, DIMENSION(:,:), INTENT(OUT) :: PVDT - -! Updraft characteritics -REAL, DIMENSION(:,:), INTENT(IN) :: PEMF,PTHL_UP,PTHV_UP,PRT_UP,PU_UP,PV_UP - -! Fluxes -REAL, DIMENSION(:,:), INTENT(OUT) :: PFLXZTHLMF,PFLXZTHVMF,PFLXZRMF,PFLXZUMF,PFLXZVMF - -END SUBROUTINE MF_TURB_EXPL - -END INTERFACE -! -END MODULE MODI_MF_TURB_EXPL -! - -! ######spl - SUBROUTINE MF_TURB_EXPL(KKA,KKB,KKE,KKU,KKL,OMIXUV, & - PRHODJ, & - PTHLM,PTHVM,PRTM,PUM,PVM, & - PTHLDT,PRTDT,PUDT,PVDT, & - PEMF,PTHL_UP,PTHV_UP,PRT_UP,PU_UP,PV_UP, & - PFLXZTHLMF,PFLXZTHVMF,PFLXZRMF,PFLXZUMF,PFLXZVMF) - -! ################################################################# -! -! -!!**** *MF_TURB_EXPL* - computes the MF_turbulent source terms for the prognostic -!! variables (when PIMPL=0) -!! -!! PURPOSE -!! ------- -!!**** The purpose of this routine is to compute the source terms in -!! the evolution equations due to the MF turbulent mixing. -!! The source term is computed as the divergence of the turbulent fluxes. -! -!!** METHOD -!! ------ -!! -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! -!! REFERENCE -!! --------- -!! -!! AUTHOR -!! ------ -!! -!! -!! MODIFICATIONS -!! ------------- -!! -!! -------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ - -USE MODD_PARAM_MFSHALL_n -USE MODI_SHUMAN_MF - -IMPLICIT NONE - - -!* 0.1 declarations of arguments - - -INTEGER, INTENT(IN) :: KKA ! near ground array index -INTEGER, INTENT(IN) :: KKB ! near ground physical index -INTEGER, INTENT(IN) :: KKE ! uppest atmosphere physical index -INTEGER, INTENT(IN) :: KKU ! uppest atmosphere array index -INTEGER, INTENT(IN) :: KKL ! +1 if grid goes from ground to atmosphere top, -1 otherwise -LOGICAL, INTENT(IN) :: OMIXUV ! True if mixing of momentum - -REAL, DIMENSION(:,:), INTENT(IN) :: PRHODJ ! dry density * Grid size - -! Conservative var. at t-dt -REAL, DIMENSION(:,:), INTENT(IN) :: PTHLM ! conservative pot. temp. -REAL, DIMENSION(:,:), INTENT(IN) :: PRTM ! water var. where - -! Virtual potential temperature at t-dt -REAL, DIMENSION(:,:), INTENT(IN) :: PTHVM -! Momentum at t-dt -REAL, DIMENSION(:,:), INTENT(IN) :: PUM -REAL, DIMENSION(:,:), INTENT(IN) :: PVM -! -! Tendencies of conservative variables -REAL, DIMENSION(:,:), INTENT(OUT) :: PTHLDT - -REAL, DIMENSION(:,:), INTENT(OUT) :: PRTDT - -! Tendencies of momentum -REAL, DIMENSION(:,:), INTENT(OUT) :: PUDT -REAL, DIMENSION(:,:), INTENT(OUT) :: PVDT - -! Updraft characteritics -REAL, DIMENSION(:,:), INTENT(IN) :: PEMF,PTHL_UP,PTHV_UP,PRT_UP,PU_UP,PV_UP - -! Fluxes -REAL, DIMENSION(:,:), INTENT(OUT) :: PFLXZTHLMF,PFLXZTHVMF,PFLXZRMF,PFLXZUMF,PFLXZVMF - -REAL, DIMENSION(SIZE(PFLXZTHLMF,1),SIZE(PFLXZTHLMF,2)) :: ZFLXZTHSMF,ZTHS_UP,ZTHSM ! Theta S flux -REAL, DIMENSION(SIZE(PFLXZTHLMF,1),SIZE(PFLXZTHLMF,2)) :: ZQT_UP,ZQTM,ZTHSDT,ZQTDT -REAL, DIMENSION(SIZE(PFLXZTHLMF,1),SIZE(PFLXZTHLMF,2)) :: ZTHLM_F,ZRTM_F - -INTEGER :: JK ! loop counter - -!---------------------------------------------------------------------------- -! -!* 1.PRELIMINARIES -! ------------- - -PFLXZRMF = 0. -PFLXZTHVMF = 0. -PFLXZTHLMF = 0. -PFLXZUMF = 0. -PFLXZVMF = 0. -PTHLDT = 0. -PRTDT = 0. -PUDT = 0. -PVDT = 0. - -! -!---------------------------------------------------------------------------- -! -!* 2. COMPUTE THE MEAN FLUX OF CONSERVATIVE VARIABLES at time t-dt -! (equation (3) of Soares et al) -! + THE MEAN FLUX OF THETA_V (buoyancy flux) -! ----------------------------------------------- -! ( Resulting fluxes are in flux level (w-point) as PEMF and PTHL_UP ) - -ZRTM_F (:,:) = MZM_MF(KKA,KKU,KKL,PRTM (:,:)) -ZTHLM_F(:,:) = MZM_MF(KKA,KKU,KKL,PTHLM(:,:)) -ZQTM (:,:) = ZRTM_F (:,:)/(1.+ZRTM_F (:,:)) -ZQT_UP (:,:) = PRT_UP (:,:)/(1.+PRT_UP (:,:)) -ZTHS_UP(:,:) = PTHL_UP(:,:)*(1.+XLAMBDA_MF*ZQT_UP(:,:)) -ZTHSM (:,:) = ZTHLM_F(:,:)*(1.+XLAMBDA_MF*ZQTM(:,:)) - -PFLXZTHLMF(:,:) = PEMF(:,:)*(PTHL_UP(:,:)-MZM_MF(KKA,KKU,KKL,PTHLM(:,:))) ! ThetaL -PFLXZRMF(:,:) = PEMF(:,:)*(PRT_UP (:,:)-MZM_MF(KKA,KKU,KKL,PRTM (:,:))) ! Rt -PFLXZTHVMF(:,:) = PEMF(:,:)*(PTHV_UP(:,:)-MZM_MF(KKA,KKU,KKL,PTHVM(:,:))) ! ThetaV - -ZFLXZTHSMF(:,:) = PEMF(:,:)*(ZTHS_UP(:,:)-ZTHSM(:,:)) ! Theta S flux - -IF (OMIXUV) THEN - PFLXZUMF(:,:) = PEMF(:,:)*(PU_UP(:,:)-MZM_MF(KKA,KKU,KKL,PUM(:,:))) ! U - PFLXZVMF(:,:) = PEMF(:,:)*(PV_UP(:,:)-MZM_MF(KKA,KKU,KKL,PVM(:,:))) ! V -ELSE - PFLXZUMF(:,:) = 0. - PFLXZVMF(:,:) = 0. -ENDIF - - -!---------------------------------------------------------------------------- -! -!* 3. COMPUTE TENDENCIES OF CONSERVATIVE VARIABLES (or treated as such...) -! (explicit formulation) -! -------------------------------------------- - -DO JK=KKB,KKE-KKL,KKL -! PTHLDT(:,JK) = (PFLXZTHLMF(:,JK ) - PFLXZTHLMF(:,JK+KKL)) / PRHODJ(:,JK) - PRTDT (:,JK) = (PFLXZRMF (:,JK ) - PFLXZRMF (:,JK+KKL)) / PRHODJ(:,JK) - ZQTDT (:,JK) = PRTDT (:,JK)/(1.+ ZRTM_F (:,JK)*ZRTM_F (:,JK)) - ZTHSDT(:,JK) = (ZFLXZTHSMF(:,JK ) - ZFLXZTHSMF(:,JK+KKL)) / PRHODJ(:,JK) - PTHLDT(:,JK) = ZTHSDT(:,JK)/(1.+XLAMBDA_MF*ZQTM(:,JK)) - ZTHLM_F(:,JK)*XLAMBDA_MF*ZQTDT(:,JK) -END DO - -IF (OMIXUV) THEN - DO JK=KKB,KKE-KKL,KKL - PUDT(:,JK) = (PFLXZUMF(:,JK ) - PFLXZUMF(:,JK+KKL)) / PRHODJ(:,JK) - PVDT(:,JK) = (PFLXZVMF(:,JK ) - PFLXZVMF(:,JK+KKL)) / PRHODJ(:,JK) - END DO -ENDIF - - -END SUBROUTINE MF_TURB_EXPL