From fae1fc82b208f35bd0784ae9ff968cbaabdde9a4 Mon Sep 17 00:00:00 2001 From: Quentin Rodier <quentin.rodier@meteo.fr> Date: Wed, 14 Dec 2022 10:46:53 +0100 Subject: [PATCH] Quentin 14/12/2022: clean MODD in turb : remove MODD_NSV, MODD_CONF (variables L2D, CPROGRAM, LFLAT) use. MODD_CONF can not yet be removed because used in gradients_* version used by hor. turb (not yet GPU adapted) --- src/arome/ext/aro_turb_mnh.F90 | 2 +- src/common/aux/modd_nsv.F90 | 273 ------------------ src/common/turb/mode_turb_hor.F90 | 22 +- src/common/turb/mode_turb_hor_dyn_corr.F90 | 25 +- src/common/turb/mode_turb_hor_splt.F90 | 25 +- src/common/turb/mode_turb_hor_sv_corr.F90 | 18 +- src/common/turb/mode_turb_hor_sv_flux.F90 | 22 +- src/common/turb/mode_turb_hor_thermo_flux.F90 | 39 +-- src/common/turb/mode_turb_hor_tke.F90 | 12 +- src/common/turb/mode_turb_hor_uv.F90 | 17 +- src/common/turb/mode_turb_hor_uw.F90 | 12 +- src/common/turb/mode_turb_hor_vw.F90 | 25 +- src/common/turb/mode_turb_ver_dyn_flux.F90 | 2 +- src/common/turb/modi_turb.F90 | 3 +- src/common/turb/turb.F90 | 9 +- src/mesonh/ext/phys_paramn.f90 | 3 +- 16 files changed, 131 insertions(+), 378 deletions(-) delete mode 100644 src/common/aux/modd_nsv.F90 diff --git a/src/arome/ext/aro_turb_mnh.F90 b/src/arome/ext/aro_turb_mnh.F90 index 234fb549f..261b4fd27 100644 --- a/src/arome/ext/aro_turb_mnh.F90 +++ b/src/arome/ext/aro_turb_mnh.F90 @@ -426,7 +426,7 @@ DO JRR=1, NBUDGET_RI ENDDO OCOMPUTE_SRC=SIZE(PSIGS, 3)/=0 CALL TURB (CST,CSTURB,TBUCONF,TURBN, YLDIMPHYEX,& - & IMI, KRR, KRRL, KRRI, HLBCX, HLBCY, KGRADIENTS,& + & IMI, KRR, KRRL, KRRI, HLBCX, HLBCY, KGRADIENTS, 1, & & ISPLIT,IMI, KSV, KSV_LGBEG, KSV_LGEND, HPROGRAM,& & NSV_LIMA_NR, NSV_LIMA_NS, NSV_LIMA_NG, NSV_LIMA_NH, & & O2D, ONOMIXLG, OFLAT, LLES_CALL,OCOUPLES,OBLOWSNOW,& diff --git a/src/common/aux/modd_nsv.F90 b/src/common/aux/modd_nsv.F90 deleted file mode 100644 index ca85a9433..000000000 --- a/src/common/aux/modd_nsv.F90 +++ /dev/null @@ -1,273 +0,0 @@ -!MNH_LIC Copyright 2001-2021 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_NSV -! ############### -! -!!**** *MODD_NSV* - declaration of scalar variables numbers -!! -!! PURPOSE -!! ------- -!! Arrays to store the per-model NSV_* values number (suffix _A denote an array) -!! -!! AUTHOR -!! ------ -!! D. Gazen L.A. -!! -!! MODIFICATIONS -!! ------------- -!! Original 01/02/01 -!! J.-P. Pinty 29/11/02 add C3R5, ELEC -!! V. Masson 01/2004 add scalar names -!! M. Leriche 12/04/07 add aqueous chemistry -!! M. Leriche 08/07/10 add ice phase chemistry -!! C.Lac 07/11 add conditional sampling -!! Pialat/Tulet 15/02/12 add ForeFire -!! B.Vie /14 LIMA -!! Modification 01/2016 (JP Pinty) Add LIMA -!! V. Vionnet 07/17 add blowing snow -! P. Wautelet 10/03/2021: add CSVNAMES and CSVNAMES_A to store the name of all the scalar variables -! B. Vie 06/2021: add prognostic supersaturation for LIMA -! A. Costes 12/2021: add Blaze fire model smoke -! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAMETERS, ONLY : JPMODELMAX, & ! Maximum allowed number of nested models - JPSVMAX, & ! Maximum number of scalar variables - JPSVNAMELGTMAX ! Maximum length of a scalar variable name -! -IMPLICIT NONE -SAVE -! -REAL,DIMENSION(JPSVMAX) :: XSVMIN ! minimum value for SV variables -! -LOGICAL :: LINI_NSV = .FALSE. ! becomes True when routine INI_NSV is called -! -CHARACTER(LEN=JPSVNAMELGTMAX), DIMENSION(:,:), ALLOCATABLE, TARGET :: CSVNAMES_A !Names of all the scalar variables - -INTEGER,DIMENSION(JPMODELMAX)::NSV_A = 0 ! total number of scalar variables - ! NSV_A = NSV_USER_A+NSV_C2R2_A+NSV_CHEM_A+.. -INTEGER,DIMENSION(JPMODELMAX)::NSV_USER_A = 0 ! number of user scalar variables with - ! indices in the range : 1...NSV_USER_A -! -INTEGER,DIMENSION(JPMODELMAX)::NSV_C2R2_A = 0 ! number of liq scalar in C2R2 - ! and in C3R5 -INTEGER,DIMENSION(JPMODELMAX)::NSV_C2R2BEG_A = 0 ! with indices in the range : -INTEGER,DIMENSION(JPMODELMAX)::NSV_C2R2END_A = 0 ! NSV_C2R2BEG_A...NSV_C2R2END_A -! -INTEGER,DIMENSION(JPMODELMAX)::NSV_C1R3_A = 0 ! number of ice scalar in C3R5 -INTEGER,DIMENSION(JPMODELMAX)::NSV_C1R3BEG_A = 0 ! with indices in the range : -INTEGER,DIMENSION(JPMODELMAX)::NSV_C1R3END_A = 0 ! NSV_C1R3BEG_A...NSV_C1R3END_A -! -INTEGER,DIMENSION(JPMODELMAX)::NSV_ELEC_A = 0 ! number of scalar in ELEC -INTEGER,DIMENSION(JPMODELMAX)::NSV_ELECBEG_A = 0 ! with indices in the range : -INTEGER,DIMENSION(JPMODELMAX)::NSV_ELECEND_A = 0 ! NSV_ELECBEG_A...NSV_ELECEND_A -! -INTEGER,DIMENSION(JPMODELMAX)::NSV_CHEM_A = 0 ! number of chemical scalar -INTEGER,DIMENSION(JPMODELMAX)::NSV_CHEMBEG_A = 0 ! with indices in the range : -INTEGER,DIMENSION(JPMODELMAX)::NSV_CHEMEND_A = 0 ! NSV_CHEMBEG_A...NSV_CHEMEND_A -! -INTEGER,DIMENSION(JPMODELMAX)::NSV_CHGS_A = 0 ! number of gaseous chemcial species -INTEGER,DIMENSION(JPMODELMAX)::NSV_CHGSBEG_A = 0 ! with indices -INTEGER,DIMENSION(JPMODELMAX)::NSV_CHGSEND_A = 0 ! NSV_CHGSBEG_ -! -INTEGER,DIMENSION(JPMODELMAX)::NSV_CHAC_A = 0 ! number of aqueous chemical species -INTEGER,DIMENSION(JPMODELMAX)::NSV_CHACBEG_A = 0 ! with indices -INTEGER,DIMENSION(JPMODELMAX)::NSV_CHACEND_A = 0 ! NSV_CHACBEG -! -INTEGER,DIMENSION(JPMODELMAX)::NSV_CHIC_A = 0 ! number of ice phase chemical species -INTEGER,DIMENSION(JPMODELMAX)::NSV_CHICBEG_A = 0 ! with indices -INTEGER,DIMENSION(JPMODELMAX)::NSV_CHICEND_A = 0 ! NSV_CHICBEG -! -INTEGER,DIMENSION(JPMODELMAX)::NSV_LG_A = 0 ! number of LaGrangian -INTEGER,DIMENSION(JPMODELMAX)::NSV_LGBEG_A = 0 ! with indices in the range : -INTEGER,DIMENSION(JPMODELMAX)::NSV_LGEND_A = 0 ! NSV_LGBEG_A...NSV_LGEND_A -! -INTEGER,DIMENSION(JPMODELMAX)::NSV_LNOX_A = 0 ! number of lightning NOx -INTEGER,DIMENSION(JPMODELMAX)::NSV_LNOXBEG_A = 0 ! with indices in the range : -INTEGER,DIMENSION(JPMODELMAX)::NSV_LNOXEND_A = 0 ! NSV_LNOXBEG_A...NSV_LNOXEND_A ! -INTEGER,DIMENSION(JPMODELMAX)::NSV_DST_A = 0 ! number of dust scalar -INTEGER,DIMENSION(JPMODELMAX)::NSV_DSTBEG_A = 0 ! with indices in the range : -INTEGER,DIMENSION(JPMODELMAX)::NSV_DSTEND_A = 0 ! NSV_DSTBEG_A...NSV_DSTEND_A -! -INTEGER,DIMENSION(JPMODELMAX)::NSV_SLT_A = 0 ! number of sea salt scalar -INTEGER,DIMENSION(JPMODELMAX)::NSV_SLTBEG_A = 0 ! with indices in the range : -INTEGER,DIMENSION(JPMODELMAX)::NSV_SLTEND_A = 0 ! NSV_SLTBEG_A...NSV_SLTEND_A -! -INTEGER,DIMENSION(JPMODELMAX)::NSV_AER_A = 0 ! number of aerosol scalar -INTEGER,DIMENSION(JPMODELMAX)::NSV_AERBEG_A = 0 ! with indices in the range : -INTEGER,DIMENSION(JPMODELMAX)::NSV_AEREND_A = 0 ! NSV_AERBEG_A...NSV_AEREND_A -! -INTEGER,DIMENSION(JPMODELMAX)::NSV_DSTDEP_A = 0 ! number of aerosol scalar -INTEGER,DIMENSION(JPMODELMAX)::NSV_DSTDEPBEG_A = 0 ! with indices in the range : -INTEGER,DIMENSION(JPMODELMAX)::NSV_DSTDEPEND_A = 0 ! NSV_AERBEG_A...NSV_AEREND_A -! -INTEGER,DIMENSION(JPMODELMAX)::NSV_AERDEP_A = 0 ! number of aerosol scalar -INTEGER,DIMENSION(JPMODELMAX)::NSV_AERDEPBEG_A = 0 ! with indices in the range : -INTEGER,DIMENSION(JPMODELMAX)::NSV_AERDEPEND_A = 0 ! NSV_AERBEG_A...NSV_AEREND_A -! -INTEGER,DIMENSION(JPMODELMAX)::NSV_SLTDEP_A = 0 ! number of aerosol scalar -INTEGER,DIMENSION(JPMODELMAX)::NSV_SLTDEPBEG_A = 0 ! with indices in the range : -INTEGER,DIMENSION(JPMODELMAX)::NSV_SLTDEPEND_A = 0 ! NSV_SLTBEG_A...NSV_SLTEND_A -! -INTEGER,DIMENSION(JPMODELMAX)::NSV_PP_A = 0 ! number of passive pol. -INTEGER,DIMENSION(JPMODELMAX)::NSV_PPBEG_A = 0 ! with indices in the range : -INTEGER,DIMENSION(JPMODELMAX)::NSV_PPEND_A = 0 ! NSV_PPBEG_A...NSV_PPEND_A -! -INTEGER,DIMENSION(JPMODELMAX)::NSV_CS_A = 0 ! number of condit.samplings -INTEGER,DIMENSION(JPMODELMAX)::NSV_CSBEG_A = 0 ! with indices in the range : -INTEGER,DIMENSION(JPMODELMAX)::NSV_CSEND_A = 0 ! NSV_CSBEG_A...NSV_CSEND_A -! -INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_A = 0 ! number of scalar in LIMA -INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_BEG_A = 0 ! with indices in the range : -INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_END_A = 0 ! NSV_LIMA_BEG_A...NSV_LIMA_END_A -INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_NC_A = 0 ! First Nc variable -INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_NR_A = 0 ! First Nr variable -INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_CCN_FREE_A = 0 ! First Free CCN conc. -INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_CCN_ACTI_A = 0 ! First Acti. CNN conc. -INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_SCAVMASS_A = 0 ! Scavenged mass variable -INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_NI_A = 0 ! First Ni var. -INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_NS_A = 0 ! First Ns var. -INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_NG_A = 0 ! First Ng var. -INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_NH_A = 0 ! First Nh var. -INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_IFN_FREE_A = 0 ! First Free IFN conc. -INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_IFN_NUCL_A = 0 ! First Nucl. IFN conc. -INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_IMM_NUCL_A = 0 ! First Nucl. IMM conc. -INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_HOM_HAZE_A = 0 ! Hom. freezing of CCN -INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_SPRO_A = 0 ! Supersaturation -! -#ifdef MNH_FOREFIRE -INTEGER,DIMENSION(JPMODELMAX)::NSV_FF_A = 0 ! number of ForeFire scalar variables -INTEGER,DIMENSION(JPMODELMAX)::NSV_FFBEG_A = 0 ! with indices in the range : -INTEGER,DIMENSION(JPMODELMAX)::NSV_FFEND_A = 0 ! NSV_FFBEG_A...NSV_FFEND_A -#endif -! -INTEGER,DIMENSION(JPMODELMAX)::NSV_CO2_A = 0 ! index for CO2 -! Blaze smoke indexes -INTEGER,DIMENSION(JPMODELMAX)::NSV_FIRE_A = 0 ! number of Blaze smoke scalar variables -INTEGER,DIMENSION(JPMODELMAX)::NSV_FIREBEG_A = 0 ! with indices in the range : -INTEGER,DIMENSION(JPMODELMAX)::NSV_FIREEND_A = 0 ! NSV_FIREBEG_A...NSV_FIREEND_A -! -INTEGER,DIMENSION(JPMODELMAX)::NSV_SNW_A = 0 ! number of blowing snow scalar -INTEGER,DIMENSION(JPMODELMAX)::NSV_SNWBEG_A = 0 ! with indices in the range : -INTEGER,DIMENSION(JPMODELMAX)::NSV_SNWEND_A = 0 ! NSV_SNWBEG_A...NSV_SNWEND_A -! -!############################################################################### -! -! variables updated for the current model -! -CHARACTER(LEN=JPSVNAMELGTMAX), DIMENSION(:), POINTER :: CSVNAMES !Names of all the scalar variables -CHARACTER(LEN=6), DIMENSION(:), ALLOCATABLE :: CSV ! name of the scalar variables -INTEGER :: NSV = 0 ! total number of user scalar variables -! -INTEGER :: NSV_USER = 0 ! number of user scalar variables with indices - ! in the range : 1...NSV_USER -INTEGER :: NSV_C2R2 = 0 ! number of liq scalar used in C2R2 and in C3R5 -INTEGER :: NSV_C2R2BEG = 0 ! with indices in the range : -INTEGER :: NSV_C2R2END = 0 ! NSV_C2R2BEG...NSV_C2R2END -! -INTEGER :: NSV_C1R3 = 0 ! number of ice scalar used in C3R5 -INTEGER :: NSV_C1R3BEG = 0 ! with indices in the range : -INTEGER :: NSV_C1R3END = 0 ! NSV_C1R3BEG...NSV_C1R3END -! -INTEGER :: NSV_ELEC = 0 ! number of scalar variables used in ELEC -INTEGER :: NSV_ELECBEG = 0 ! with indices in the range : -INTEGER :: NSV_ELECEND = 0 ! NSV_ELECBEG...NSV_ELECEND -! -INTEGER :: NSV_CHEM = 0 ! number of chemical scalar variables -INTEGER :: NSV_CHEMBEG = 0 ! with indices in the range : -INTEGER :: NSV_CHEMEND = 0 ! NSV_CHEMBEG...NSV_CHEMEND -! -INTEGER :: NSV_CHGS = 0 ! number of gas-phase chemicals -INTEGER :: NSV_CHGSBEG = 0 ! with indices in the range : -INTEGER :: NSV_CHGSEND = 0 ! NSV_CHGSBEG...NSV_CHGSEND -! -INTEGER :: NSV_CHAC = 0 ! number of aqueous-phase chemicals -INTEGER :: NSV_CHACBEG = 0 ! with indices in the range : -INTEGER :: NSV_CHACEND = 0 ! NSV_CHACBEG...NSV_CHACEND -! -INTEGER :: NSV_CHIC = 0 ! number of ice-phase chemicals -INTEGER :: NSV_CHICBEG = 0 ! with indices in the range : -INTEGER :: NSV_CHICEND = 0 ! NSV_CHICBEG...NSV_CHICEND -! -INTEGER :: NSV_LG = 0 ! number of lagrangian -INTEGER :: NSV_LGBEG = 0 ! with indices in the range : -INTEGER :: NSV_LGEND = 0 ! NSV_LGBEG...NSV_LGEND -! -INTEGER :: NSV_LNOX = 0 ! number of lightning NOx variables -INTEGER :: NSV_LNOXBEG = 0 ! with indices in the range : -INTEGER :: NSV_LNOXEND = 0 ! NSV_LNOXBEG...NSV_LNOXEND -! -INTEGER :: NSV_DST = 0 ! number of dust scalar variables -INTEGER :: NSV_DSTBEG = 0 ! with indices in the range : -INTEGER :: NSV_DSTEND = 0 ! NSV_DSTBEG...NSV_DSTEND - -INTEGER :: NSV_SLT = 0 ! number of sea salt scalar variables -INTEGER :: NSV_SLTBEG = 0 ! with indices in the range : -INTEGER :: NSV_SLTEND = 0 ! NSV_SLTBEG...NSV_SLTEND - -INTEGER :: NSV_AER = 0 ! number of aerosol scalar variables -INTEGER :: NSV_AERBEG = 0 ! with indices in the range : -INTEGER :: NSV_AEREND = 0 ! NSV_AERBEG...NSV_AEREND - -INTEGER :: NSV_DSTDEP = 0 ! number of aerosol scalar variables -INTEGER :: NSV_DSTDEPBEG = 0 ! with indices in the range : -INTEGER :: NSV_DSTDEPEND = 0 ! NSV_AERBEG...NSV_AEREND -! -INTEGER :: NSV_AERDEP = 0 ! number of aerosol scalar variables -INTEGER :: NSV_AERDEPBEG = 0 ! with indices in the range : -INTEGER :: NSV_AERDEPEND = 0 ! NSV_AERBEG...NSV_AEREND - -INTEGER :: NSV_SLTDEP = 0 ! number of aerosol scalar variables -INTEGER :: NSV_SLTDEPBEG = 0 ! with indices in the range : -INTEGER :: NSV_SLTDEPEND = 0 ! NSV_AERBEG...NSV_AEREND -! -INTEGER :: NSV_PP = 0 ! number of passive pollutants -INTEGER :: NSV_PPBEG = 0 ! with indices in the range : -INTEGER :: NSV_PPEND = 0 ! NSV_PPBEG...NSV_PPEND -! -INTEGER :: NSV_CS = 0 ! number of condit.samplings -INTEGER :: NSV_CSBEG = 0 ! with indices in the range : -INTEGER :: NSV_CSEND = 0 ! NSV_CSBEG...NSV_CSEND -! -INTEGER :: NSV_LIMA ! number of scalar in LIMA -INTEGER :: NSV_LIMA_BEG ! with indices in the range : -INTEGER :: NSV_LIMA_END ! NSV_LIMA_BEG_A...NSV_LIMA_END_A -INTEGER :: NSV_LIMA_NC ! -INTEGER :: NSV_LIMA_NR ! -INTEGER :: NSV_LIMA_CCN_FREE ! -INTEGER :: NSV_LIMA_CCN_ACTI ! -INTEGER :: NSV_LIMA_SCAVMASS ! -INTEGER :: NSV_LIMA_NI ! -INTEGER :: NSV_LIMA_NS ! -INTEGER :: NSV_LIMA_NG ! -INTEGER :: NSV_LIMA_NH ! -INTEGER :: NSV_LIMA_IFN_FREE ! -INTEGER :: NSV_LIMA_IFN_NUCL ! -INTEGER :: NSV_LIMA_IMM_NUCL ! -INTEGER :: NSV_LIMA_HOM_HAZE ! -INTEGER :: NSV_LIMA_SPRO ! -! -#ifdef MNH_FOREFIRE -INTEGER :: NSV_FF = 0 ! number of ForeFire scalar variables -INTEGER :: NSV_FFBEG = 0 ! with indices in the range : -INTEGER :: NSV_FFEND = 0 ! NSV_FFBEG...NSV_FFEND -#endif -! -INTEGER :: NSV_CO2 = 0 ! index for CO2 -! Blaze smoke -INTEGER :: NSV_FIRE = 0 ! number of Blaze smoke scalar variables -INTEGER :: NSV_FIREBEG = 0 ! with indices in the range : -INTEGER :: NSV_FIREEND = 0 ! NSV_FIREBEG...NSV_FIREEND -! -INTEGER :: NSV_SNW = 0 ! number of blowing snow scalar variables -INTEGER :: NSV_SNWBEG = 0 ! with indices in the range : -INTEGER :: NSV_SNWEND = 0 ! NSV_SNWBEG...NSV_SNWEND - -END MODULE MODD_NSV diff --git a/src/common/turb/mode_turb_hor.F90 b/src/common/turb/mode_turb_hor.F90 index 8679d4cc7..bdaab0106 100644 --- a/src/common/turb/mode_turb_hor.F90 +++ b/src/common/turb/mode_turb_hor.F90 @@ -7,6 +7,7 @@ IMPLICIT NONE CONTAINS SUBROUTINE TURB_HOR(D,CST,CSTURB,TURBN, & KSPLT, KRR, KRRL, KRRI, PTSTEP, & + KSV, KSV_LGBEG, KSV_LGEND, OFLAT,O2D,ONOMIXLG, & OOCEAN,OCOMPUTE_SRC,OBLOWSNOW, & TPFILE, & PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ,PRSNOW, & @@ -168,7 +169,11 @@ INTEGER, INTENT(IN) :: KSPLT ! current split index 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. +INTEGER, INTENT(IN) :: KSV,KSV_LGBEG,KSV_LGEND ! number of sv var. REAL, INTENT(IN) :: PTSTEP ! +LOGICAL, INTENT(IN) :: OFLAT ! Logical for zero ororography +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) :: 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 @@ -257,7 +262,7 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSIGS !* 7. < V' TPV' > ! CALL TURB_HOR_THERMO_FLUX(TURBN,KSPLT, KRR, KRRL, KRRI, & - TPFILE, & + TPFILE,OFLAT, O2D, & PK,PINV_PDXX,PINV_PDYY,PINV_PDZZ,PMZM_PRHODJ, & PDXX,PDYY,PDZZ,PDZX,PDZY, & PDIRCOSXW,PDIRCOSYW, & @@ -289,7 +294,7 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSIGS !* 11. < W'W'> ! CALL TURB_HOR_DYN_CORR(TURBN,KSPLT, PTSTEP, & - KRR, & + KRR,KSV,OFLAT, O2D, & TPFILE, & PK,PINV_PDZZ, & PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ, & @@ -306,7 +311,7 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSIGS ! !* 12. < U'V'> ! - CALL TURB_HOR_UV(TURBN,KSPLT, & + CALL TURB_HOR_UV(TURBN,KSPLT,OFLAT,O2D, & TPFILE, & PK,PINV_PDXX,PINV_PDYY,PINV_PDZZ,PMZM_PRHODJ, & PDXX,PDYY,PDZZ,PDZX,PDZY, & @@ -322,7 +327,7 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSIGS !* 13. < U'W'> ! CALL TURB_HOR_UW(TURBN,KSPLT, & - KRR, & + KRR,KSV,OFLAT, & TPFILE, & PK,PINV_PDXX,PINV_PDZZ,PMZM_PRHODJ, & PDXX,PDZZ,PDZX, & @@ -336,7 +341,7 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSIGS !* 14. < V'W'> ! CALL TURB_HOR_VW(TURBN,KSPLT, & - KRR, & + KRR,KSV,OFLAT,O2D, & TPFILE, & PK,PINV_PDYY,PINV_PDZZ,PMZM_PRHODJ, & PDYY,PDZZ,PDZY, & @@ -350,8 +355,8 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSIGS ! !* 15. HORIZONTAL FLUXES OF PASSIVE SCALARS ! - CALL TURB_HOR_SV_FLUX(TURBN,KSPLT,OBLOWSNOW, & - TPFILE, & + CALL TURB_HOR_SV_FLUX(TURBN,KSPLT,OBLOWSNOW,OFLAT, & + TPFILE,KSV_LGBEG,KSV_LGEND,O2D,ONOMIXLG, & PK,PINV_PDXX,PINV_PDYY,PINV_PDZZ,PMZM_PRHODJ, & PDXX,PDYY,PDZZ,PDZX,PDZY,PRSNOW, & PDIRCOSXW,PDIRCOSYW, & @@ -361,8 +366,9 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSIGS PRSVS ) ! IF (KSPLT==1 .AND. LLES_CALL) & - CALL TURB_HOR_SV_CORR(D,CST,CSTURB, & + CALL TURB_HOR_SV_CORR(D,CST,CSTURB,KSV,KSV_LGBEG,KSV_LGEND,& KRR,KRRL,KRRI,OOCEAN,OCOMPUTE_SRC,OBLOWSNOW, & + ONOMIXLG,O2D, & PDXX,PDYY,PDZZ,PDZX,PDZY,PRSNOW, & PLM,PLEPS,PTKEM,PTHVREF, & PTHLM,PRM, & diff --git a/src/common/turb/mode_turb_hor_dyn_corr.F90 b/src/common/turb/mode_turb_hor_dyn_corr.F90 index ead101cfa..d9f4d2a61 100644 --- a/src/common/turb/mode_turb_hor_dyn_corr.F90 +++ b/src/common/turb/mode_turb_hor_dyn_corr.F90 @@ -7,7 +7,7 @@ MODULE MODE_TURB_HOR_DYN_CORR IMPLICIT NONE CONTAINS SUBROUTINE TURB_HOR_DYN_CORR(TURBN,KSPLT, PTSTEP, & - KRR, & + KRR, KSV,OFLAT,O2D, & TPFILE, & PK,PINV_PDZZ, & PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ, & @@ -51,7 +51,7 @@ CONTAINS !! ------------- !! Aug , 1997 (V. Saravane) spliting of TURB_HOR !! Nov 27, 1997 (V. Masson) clearing of the routine -!! Oct 18, 2000 (V. Masson) LES computations + LFLAT switch +!! Oct 18, 2000 (V. Masson) LES computations + OFLAT switch !! Feb 15, 2001 (J. Stein) remove the use of w=0 at the !! ground !! Mar 12, 2001 (V. Masson and J. Stein) major bugs @@ -74,13 +74,11 @@ USE MODD_TURB_n, ONLY: TURB_t ! USE MODD_ARGSLIST_ll, ONLY: LIST_ll USE MODD_CST -USE MODD_CONF USE MODD_CTURB USE MODD_FIELD, ONLY: TFIELDDATA, TYPEREAL USE MODD_IO, ONLY: TFILEDATA USE MODD_PARAMETERS USE MODD_LES -USE MODD_NSV ! USE MODE_ll USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE @@ -108,6 +106,9 @@ TYPE(TURB_t), INTENT(IN) :: TURBN INTEGER, INTENT(IN) :: KSPLT ! split process index REAL, INTENT(IN) :: PTSTEP ! timestep INTEGER, INTENT(IN) :: KRR ! number of moist var. +INTEGER, INTENT(IN) :: KSV ! number of sv var. +LOGICAL, INTENT(IN) :: OFLAT ! Logical for zero ororography +LOGICAL, INTENT(IN) :: O2D ! Logical for 2D model version (modd_conf) TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PK ! Turbulent diffusion doef. @@ -202,7 +203,7 @@ IKU = SIZE(PUM,3) ZDIRSINZW(:,:) = SQRT( 1. - PDIRCOSZW(:,:)**2 ) ! GX_U_M_PUM = GX_U_M(PUM,PDXX,PDZZ,PDZX) -IF (.NOT. L2D) GY_V_M_PVM = GY_V_M(PVM,PDYY,PDZZ,PDZY) +IF (.NOT. O2D) GY_V_M_PVM = GY_V_M(PVM,PDYY,PDZZ,PDZY) GZ_W_M_PWM = GZ_W_M(PWM,PDZZ) ! ZMZF_DZZ = MZF(PDZZ) @@ -217,7 +218,7 @@ CALL ADD3DFIELD_ll( TZFIELDS_ll, ZFLX, 'TURB_HOR_DYN_CORR::ZFLX' ) ! ------- ! ! Computes the U variance -IF (.NOT. L2D) THEN +IF (.NOT. O2D) THEN ZFLX(:,:,:)= (2./3.) * PTKEM & - XCMFS * PK *( (4./3.) * GX_U_M_PUM & -(2./3.) * ( GY_V_M_PVM & @@ -316,7 +317,7 @@ IF ( TPFILE%LOPENED .AND. TURBN%LTURB_FLX ) THEN END IF ! ! Complete the U tendency -IF (.NOT. LFLAT) THEN +IF (.NOT. OFLAT) THEN CALL MPPDB_CHECK3DM("before turb_corr:PRUS,PRHODJ,ZFLX,PDXX,PDZX,PINV_PDZZ",PRECISION,& & PRUS,PRHODJ,ZFLX,PDXX,PDZX,PINV_PDZZ ) @@ -355,7 +356,7 @@ END IF ! ------- ! ! Computes the V variance -IF (.NOT. L2D) THEN +IF (.NOT. O2D) THEN ZFLX(:,:,:)= (2./3.) * PTKEM & - XCMFS * PK *( (4./3.) * GY_V_M_PVM & -(2./3.) * ( GX_U_M_PUM & @@ -411,8 +412,8 @@ IF ( TPFILE%LOPENED .AND. TURBN%LTURB_FLX ) THEN END IF ! ! Complete the V tendency -IF (.NOT. L2D) THEN - IF (.NOT. LFLAT) THEN +IF (.NOT. O2D) THEN + IF (.NOT. OFLAT) THEN PRVS(:,:,:)=PRVS & -DYM(PRHODJ * ZFLX / MYF(PDYY) ) & +DZF( PDZY / MZM(PDYY) * & @@ -450,7 +451,7 @@ END IF ! ------- ! ! Computes the W variance -IF (.NOT. L2D) THEN +IF (.NOT. O2D) THEN ZFLX(:,:,:)= (2./3.) * PTKEM & - XCMFS * PK *( (4./3.) * GZ_W_M_PWM & -(2./3.) * ( GX_U_M_PUM & @@ -540,7 +541,7 @@ IF (LLES_CALL .AND. KSPLT==1) THEN CALL LES_MEAN_SUBGRID(ZFLX*MZF(GZ_M_W(1,IKU,1,PRM(:,:,:,1),PDZZ)), & X_LES_RES_ddz_Rt_SBG_W2) END IF - DO JSV=1,NSV + DO JSV=1,KSV CALL LES_MEAN_SUBGRID( GZ_M_M(PSVM(:,:,:,JSV),PDZZ)*ZFLX, & X_LES_RES_ddxa_Sv_SBG_UaW(:,:,:,JSV) , .TRUE.) CALL LES_MEAN_SUBGRID(ZFLX*MZF(GZ_M_W(1,IKU,1,PSVM(:,:,:,JSV),PDZZ)), & diff --git a/src/common/turb/mode_turb_hor_splt.F90 b/src/common/turb/mode_turb_hor_splt.F90 index afc97c422..d50a7bfb8 100644 --- a/src/common/turb/mode_turb_hor_splt.F90 +++ b/src/common/turb/mode_turb_hor_splt.F90 @@ -6,9 +6,10 @@ MODULE MODE_TURB_HOR_SPLT IMPLICIT NONE CONTAINS SUBROUTINE TURB_HOR_SPLT(D,CST,CSTURB,TURBN, & - KSPLIT, KRR,KRRL,KRRI,KSV, PTSTEP,HLBCX,HLBCY, & + KSPLIT, KRR,KRRL,KRRI,KSV, KSV_LGBEG,KSV_LGEND,& + PTSTEP,HLBCX,HLBCY, OFLAT, O2D, ONOMIXLG, & OOCEAN,OCOMPUTE_SRC,OBLOWSNOW,PRSNOW, & - TPFILE, & + TPFILE, HPROGRAM, KHALO, & PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ, & PDIRCOSXW,PDIRCOSYW,PDIRCOSZW, & PCOSSLOPE,PSINSLOPE, & @@ -113,7 +114,7 @@ CONTAINS !! !! Module MODD_CONF !! -!! CPROGRAM +!! HPROGRAM !! !! !! REFERENCE @@ -156,7 +157,6 @@ CONTAINS !* 0. DECLARATIONS ! ------------ ! -USE MODD_CONF USE MODD_CST, ONLY: CST_t USE MODD_CTURB, ONLY: CSTURB_t USE MODD_DIMPHYEX, ONLY : DIMPHYEX_t @@ -186,12 +186,17 @@ INTEGER, INTENT(IN) :: KSPLIT ! number of time splitting 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. -INTEGER, INTENT(IN) :: KSV ! number of sv var. +INTEGER, INTENT(IN) :: KSV,KSV_LGBEG,KSV_LGEND ! number of sv var. REAL, INTENT(IN) :: PTSTEP ! timestep CHARACTER (LEN=*), DIMENSION(:), INTENT(IN) :: HLBCX,HLBCY +LOGICAL, INTENT(IN) :: OFLAT ! Logical for zero ororography +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) :: 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 +CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! HPROGRAM is the program currently running (modd_conf) +INTEGER, INTENT(IN) :: KHALO ! Size of the halo for parallel distribution REAL, INTENT(IN) :: PRSNOW ! Ratio for diffusion coeff. scalar (blowing snow) TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file ! @@ -307,7 +312,7 @@ NULLIFY(TZFIELDS_ll) !* 2. SPLIT PROCESS LOOP ! ------------------ ! -IF (KSPLIT>1 .AND. CPROGRAM=='MESONH') THEN +IF (KSPLIT>1 .AND. HPROGRAM=='MESONH') THEN ! !* 2.1 allocations ! ----------- @@ -367,6 +372,7 @@ 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, & + KSV, KSV_LGBEG, KSV_LGEND, OFLAT,O2D, ONOMIXLG,& OOCEAN,OCOMPUTE_SRC,OBLOWSNOW, & TPFILE, & PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ,PRSNOW, & @@ -385,7 +391,7 @@ IF (KSPLIT>1 .AND. CPROGRAM=='MESONH') THEN ! ! horizontal transport of Tke ! - CALL TURB_HOR_TKE(JSPLT, & + CALL TURB_HOR_TKE(JSPLT,OFLAT,O2D, & PDXX,PDYY,PDZZ,PDZX,PDZY, & ZINV_PDXX, ZINV_PDYY, ZINV_PDZZ, ZMZM_PRHODJ, & ZK, PRHODJ, ZTKEM, & @@ -410,7 +416,7 @@ IF (KSPLIT>1 .AND. CPROGRAM=='MESONH') THEN ! ! reinforce boundary conditions ! - IF (JSPLT<KSPLIT-NHALO+1) CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll) + IF (JSPLT<KSPLIT-KHALO+1) CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll) ! IF ( HLBCX(1) /= "CYCL" .AND. LWEST_ll()) THEN ZUM(IIB ,:,:)=PUM(IIB ,:,:) @@ -509,6 +515,7 @@ ELSE ! CALL TURB_HOR(D,CST,CSTURB,TURBN, & 1, KRR, KRRL, KRRI, PTSTEP, & + KSV, KSV_LGBEG, KSV_LGEND, OFLAT,O2D, ONOMIXLG,& OOCEAN,OCOMPUTE_SRC,OBLOWSNOW, & TPFILE, & PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ,PRSNOW, & @@ -528,7 +535,7 @@ ELSE ! horizontal transport of Tke ! - CALL TURB_HOR_TKE(1, & + CALL TURB_HOR_TKE(1,OFLAT,O2D, & PDXX,PDYY,PDZZ,PDZX,PDZY, & ZINV_PDXX, ZINV_PDYY, ZINV_PDZZ, ZMZM_PRHODJ, & ZK, PRHODJ, PTKEM, & diff --git a/src/common/turb/mode_turb_hor_sv_corr.F90 b/src/common/turb/mode_turb_hor_sv_corr.F90 index 693d1979c..cd776d573 100644 --- a/src/common/turb/mode_turb_hor_sv_corr.F90 +++ b/src/common/turb/mode_turb_hor_sv_corr.F90 @@ -5,8 +5,9 @@ MODULE MODE_TURB_HOR_SV_CORR IMPLICIT NONE CONTAINS - SUBROUTINE TURB_HOR_SV_CORR(D,CST,CSTURB, & + SUBROUTINE TURB_HOR_SV_CORR(D,CST,CSTURB,KSV,KSV_LGBEG,KSV_LGEND,& KRR,KRRL,KRRI,OOCEAN,OCOMPUTE_SRC,OBLOWSNOW, & + ONOMIXLG,O2D, & PDXX,PDYY,PDZZ,PDZX,PDZY,PRSNOW, & PLM,PLEPS,PTKEM,PTHVREF, & PTHLM,PRM, & @@ -49,11 +50,9 @@ CONTAINS ! ------------ ! USE MODD_CST, ONLY: CST_t -USE MODD_CONF USE MODD_CTURB, ONLY : CSTURB_t USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t USE MODD_PARAMETERS -USE MODD_NSV, ONLY : NSV,NSV_LGBEG,NSV_LGEND USE MODD_LES ! USE MODI_GRADIENT_M @@ -80,9 +79,12 @@ TYPE(CSTURB_t), INTENT(IN) :: CSTURB INTEGER, INTENT(IN) :: KRR ! number of moist var. INTEGER, INTENT(IN) :: KRRL ! number of liquid var. INTEGER, INTENT(IN) :: KRRI ! number of ice var. +INTEGER, INTENT(IN) :: KSV,KSV_LGBEG,KSV_LGEND ! number of sv 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 +LOGICAL, INTENT(IN) :: ONOMIXLG ! to use turbulence for lagrangian variables (modd_conf) +LOGICAL, INTENT(IN) :: O2D ! Logical for 2D model version (modd_conf) REAL, INTENT(IN) :: PRSNOW ! Ratio for diffusion coeff. scalar (blowing snow) REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX, PDYY, PDZZ, PDZX, PDZY ! Metric coefficients @@ -129,14 +131,14 @@ ELSE ZCSV= CSTURB%XCHF ENDIF ! -DO JSV=1,NSV +DO JSV=1,KSV ! - IF (LNOMIXLG .AND. JSV >= NSV_LGBEG .AND. JSV<= NSV_LGEND) CYCLE + IF (ONOMIXLG .AND. JSV >= KSV_LGBEG .AND. JSV<= KSV_LGEND) CYCLE ! ! variance Sv2 ! IF (LLES_CALL) THEN - IF (.NOT. L2D) THEN + IF (.NOT. O2D) THEN ZFLX(:,:,:) = ZCSV / ZCSVD * PLM(:,:,:) * PLEPS(:,:,:) * & ( GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)**2 & + GY_M_M(PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY)**2 ) @@ -153,7 +155,7 @@ DO JSV=1,NSV ! IF (LLES_CALL) THEN CALL ETHETA(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM,OOCEAN,OCOMPUTE_SRC,ZA) - IF (.NOT. L2D) THEN + IF (.NOT. O2D) THEN ZFLX(:,:,:)= PLM(:,:,:) * PLEPS(:,:,:) & * ( GX_M_M(PTHLM,PDXX,PDZZ,PDZX) * GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX) & + GY_M_M(PTHLM,PDYY,PDZZ,PDZY) * GY_M_M(PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY) & @@ -168,7 +170,7 @@ DO JSV=1,NSV ! IF (KRR>=1) THEN CALL EMOIST(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN,ZA) - IF (.NOT. L2D) THEN + IF (.NOT. O2D) THEN ZFLX(:,:,:)= PLM(:,:,:) * PLEPS(:,:,:) & * ( GX_M_M(PRM(:,:,:,1),PDXX,PDZZ,PDZX) * GX_M_M(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX) & + GY_M_M(PRM(:,:,:,1),PDYY,PDZZ,PDZY) * GY_M_M(PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY) & diff --git a/src/common/turb/mode_turb_hor_sv_flux.F90 b/src/common/turb/mode_turb_hor_sv_flux.F90 index 67f785919..a53b160b9 100644 --- a/src/common/turb/mode_turb_hor_sv_flux.F90 +++ b/src/common/turb/mode_turb_hor_sv_flux.F90 @@ -6,8 +6,8 @@ MODULE MODE_TURB_HOR_SV_FLUX IMPLICIT NONE CONTAINS - SUBROUTINE TURB_HOR_SV_FLUX(TURBN,KSPLT,OBLOWSNOW, & - TPFILE, & + SUBROUTINE TURB_HOR_SV_FLUX(TURBN,KSPLT,OBLOWSNOW,OFLAT, & + TPFILE,KSV_LGBEG,KSV_LGEND,O2D,ONOMIXLG, & PK,PINV_PDXX,PINV_PDYY,PINV_PDZZ,PMZM_PRHODJ, & PDXX,PDYY,PDZZ,PDZX,PDZY,PRSNOW, & PDIRCOSXW,PDIRCOSYW, & @@ -47,7 +47,7 @@ CONTAINS !! ------------- !! Aug , 1997 (V. Saravane) spliting of TURB_HOR !! Nov 27, 1997 (V. Masson) clearing of the routine -!! Oct 18, 2000 (V. Masson) LES computations + LFLAT swith +!! Oct 18, 2000 (V. Masson) LES computations + OFLAT swith !! + bug on Y scalar flux !! Jun 20, 2001 (J Stein) case of lagragian variables !! Nov 06, 2002 (V. Masson) LES budgets @@ -62,12 +62,10 @@ CONTAINS USE MODD_TURB_n, ONLY: TURB_t ! USE MODD_CST -USE MODD_CONF USE MODD_CTURB USE MODD_FIELD, ONLY: TFIELDDATA, TYPEREAL USE MODD_IO, ONLY: TFILEDATA USE MODD_PARAMETERS -USE MODD_NSV, ONLY: NSV_LGBEG, NSV_LGEND USE MODD_LES ! USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE @@ -92,6 +90,10 @@ IMPLICIT NONE TYPE(TURB_t), INTENT(IN) :: TURBN INTEGER, INTENT(IN) :: KSPLT ! split process index TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file +INTEGER, INTENT(IN) :: KSV_LGBEG,KSV_LGEND ! number of sv var. +LOGICAL, INTENT(IN) :: OFLAT ! Logical for zero ororography +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) :: OBLOWSNOW ! switch to activate pronostic blowing snow ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PK ! Turbulent diffusion doef. @@ -173,7 +175,7 @@ ZCOEFF(:,:,IKB)= - (PDZZ(:,:,IKB+2)+2.*PDZZ(:,:,IKB+1)) / & ! DO JSV=1,ISV ! - IF (LNOMIXLG .AND. JSV >= NSV_LGBEG .AND. JSV<= NSV_LGEND) CYCLE + IF (ONOMIXLG .AND. JSV >= KSV_LGBEG .AND. JSV<= KSV_LGEND) CYCLE ! ! 15.1 <U' SVth'> ! ---------- @@ -226,7 +228,7 @@ DO JSV=1,ISV ! 15.2 <V' SVth'> ! ---------- ! - IF (.NOT. L2D) THEN + IF (.NOT. O2D) THEN ! ! Computes the flux in the Y direction ZFLXY(:,:,:)=-ZCSV * MYM(PK) * GY_M_V(1,IKU,1,PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY) @@ -282,8 +284,8 @@ DO JSV=1,ISV ! 15.3 Horizontal source terms ! ----------------------- ! - IF (.NOT. L2D) THEN - IF (.NOT. LFLAT) THEN + IF (.NOT. O2D) THEN + IF (.NOT. OFLAT) THEN PRSVS(:,:,:,JSV)= PRSVS(:,:,:,JSV) & -DXF( MXM(PRHODJ) * ZFLXX * PINV_PDXX ) & -DYF( MYM(PRHODJ) * ZFLXY * PINV_PDYY ) & @@ -296,7 +298,7 @@ DO JSV=1,ISV -DYF( MYM(PRHODJ) * ZFLXY * PINV_PDYY ) END IF ELSE - IF (.NOT. LFLAT) THEN + IF (.NOT. OFLAT) THEN PRSVS(:,:,:,JSV)= PRSVS(:,:,:,JSV) & -DXF( MXM(PRHODJ) * ZFLXX * PINV_PDXX ) & +DZF( PMZM_PRHODJ * PINV_PDZZ * & diff --git a/src/common/turb/mode_turb_hor_thermo_flux.F90 b/src/common/turb/mode_turb_hor_thermo_flux.F90 index f63429c23..b28fa9996 100644 --- a/src/common/turb/mode_turb_hor_thermo_flux.F90 +++ b/src/common/turb/mode_turb_hor_thermo_flux.F90 @@ -8,7 +8,7 @@ IMPLICIT NONE CONTAINS ! ################################################################ SUBROUTINE TURB_HOR_THERMO_FLUX(TURBN, KSPLT, KRR, KRRL, KRRI, & - TPFILE, & + TPFILE,OFLAT,O2D, & PK,PINV_PDXX,PINV_PDYY,PINV_PDZZ,PMZM_PRHODJ, & PDXX,PDYY,PDZZ,PDZX,PDZY, & PDIRCOSXW,PDIRCOSYW, & @@ -50,7 +50,7 @@ CONTAINS !! Aug , 1997 (V. Saravane) spliting of TURB_HOR !! Nov 27, 1997 (V. Masson) clearing of the routine !! Feb. 18, 1998 (J. Stein) bug for v'RC' -!! Oct 18, 2000 (V. Masson) LES computations + LFLAT switch +!! Oct 18, 2000 (V. Masson) LES computations + OFLAT switch !! Nov 06, 2002 (V. Masson) LES budgets !! Feb 20, 2003 (JP Pinty) Add PFRAC_ICE !! October 2009 (G. Tanguy) add ILENCH=LEN(YCOMMENT) after @@ -64,7 +64,6 @@ CONTAINS USE MODD_TURB_n, ONLY: TURB_t ! USE MODD_CST -USE MODD_CONF USE MODD_CTURB USE MODD_FIELD, ONLY: TFIELDDATA, TYPEREAL USE MODD_IO, ONLY: TFILEDATA @@ -96,6 +95,8 @@ INTEGER, INTENT(IN) :: KSPLT ! split process index 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. +LOGICAL, INTENT(IN) :: OFLAT ! Logical for zero ororography +LOGICAL, INTENT(IN) :: O2D ! Logical for 2D model version (modd_conf) TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PK ! Turbulent diffusion doef. @@ -191,7 +192,7 @@ ZFLX(:,:,IKB-1:IKB-1) = 2. * MXM( SPREAD( PSFTHM(:,:)* PDIRCOSXW(:,:), 3,1) ) ! ! Add this source to the Theta_l sources ! -IF (.NOT. LFLAT) THEN +IF (.NOT. OFLAT) THEN PRTHLS(:,:,:) = PRTHLS & - DXF( MXM(PRHODJ) * ZFLX * PINV_PDXX ) & + DZF( PMZM_PRHODJ *MXF(PDZX*(MZM(ZFLX * PINV_PDXX))) * PINV_PDZZ ) @@ -202,7 +203,7 @@ END IF ! Compute the equivalent tendancy for Rc and Ri ! IF ( KRRL >= 1 ) THEN - IF (.NOT. LFLAT) THEN + IF (.NOT. OFLAT) THEN ZFLXC = 2.*( MXF( MXM( PRHODJ*PATHETA*PSRCM )*ZFLX ) & +MZF( MZM( PRHODJ*PATHETA*PSRCM )*MXF( & PDZX*(MZM( ZFLX*PINV_PDXX )) ) )& @@ -296,7 +297,7 @@ IF (KRR/=0) THEN ! ! Add this source to the conservative mixing ratio sources ! - IF (.NOT. LFLAT) THEN + IF (.NOT. OFLAT) THEN PRRS(:,:,:,1) = PRRS(:,:,:,1) & - DXF( MXM(PRHODJ) * ZFLX * PINV_PDXX ) & + DZF( PMZM_PRHODJ *MXF(PDZX*(MZM(ZFLX * PINV_PDXX))) * PINV_PDZZ ) @@ -307,7 +308,7 @@ IF (KRR/=0) THEN ! Compute the equivalent tendancy for Rc and Ri ! IF ( KRRL >= 1 ) THEN - IF (.NOT. LFLAT) THEN + IF (.NOT. OFLAT) THEN ZFLXC = ZFLXC & + 2.*( MXF( MXM( PRHODJ*PAMOIST*PSRCM )*ZFLX ) & +MZF( MZM( PRHODJ*PAMOIST*PSRCM )*MXF( & @@ -418,7 +419,7 @@ END IF ! -------------- ! ! -IF (.NOT. L2D) THEN +IF (.NOT. O2D) THEN ZFLX(:,:,:) = -XCSHF * MYM( PK ) * GY_M_V(1,IKU,1,PTHLM,PDYY,PDZZ,PDZY) ZFLX(:,:,IKE+1) = ZFLX(:,:,IKE) ELSE @@ -443,8 +444,8 @@ ZFLX(:,:,IKB-1:IKB-1) = 2. * MYM( SPREAD( PSFTHM(:,:)* PDIRCOSYW(:,:), 3,1) ) & ! ! Add this source to the Theta_l sources ! -IF (.NOT. L2D) THEN - IF (.NOT. LFLAT) THEN +IF (.NOT. O2D) THEN + IF (.NOT. OFLAT) THEN PRTHLS(:,:,:) = PRTHLS & - DYF( MYM(PRHODJ) * ZFLX * PINV_PDYY ) & + DZF( PMZM_PRHODJ *MYF(PDZY*(MZM(ZFLX * PINV_PDYY))) * PINV_PDZZ ) @@ -455,9 +456,9 @@ END IF ! ! Compute the equivalent tendancy for Rc and Ri ! -!IF ( TURBN%LSUBG_COND .AND. KRRL > 0 .AND. .NOT. L2D) THEN -IF ( KRRL >= 1 .AND. .NOT. L2D) THEN - IF (.NOT. LFLAT) THEN +!IF ( TURBN%LSUBG_COND .AND. KRRL > 0 .AND. .NOT. O2D) THEN +IF ( KRRL >= 1 .AND. .NOT. O2D) THEN + IF (.NOT. OFLAT) THEN ZFLXC = 2.*( MYF( MYM( PRHODJ*PATHETA*PSRCM )*ZFLX ) & +MZF( MZM( PRHODJ*PATHETA*PSRCM )*MYF( & PDZY*(MZM( ZFLX*PINV_PDYY )) ) )& @@ -533,7 +534,7 @@ END IF ! IF (KRR/=0) THEN ! - IF (.NOT. L2D) THEN + IF (.NOT. O2D) THEN ZFLX(:,:,:) = -XCHF * MYM( PK ) * GY_M_V(1,IKU,1,PRM(:,:,:,1),PDYY,PDZZ,PDZY) ZFLX(:,:,IKE+1) = ZFLX(:,:,IKE) ELSE @@ -557,8 +558,8 @@ IF (KRR/=0) THEN ! ! Add this source to the conservative mixing ratio sources ! - IF (.NOT. L2D) THEN - IF (.NOT. LFLAT) THEN + IF (.NOT. O2D) THEN + IF (.NOT. OFLAT) THEN PRRS(:,:,:,1) = PRRS(:,:,:,1) & - DYF( MYM(PRHODJ) * ZFLX * PINV_PDYY ) & @@ -570,8 +571,8 @@ IF (KRR/=0) THEN ! ! Compute the equivalent tendancy for Rc and Ri ! - IF ( KRRL >= 1 .AND. .NOT. L2D) THEN ! Sub-grid condensation - IF (.NOT. LFLAT) THEN + IF ( KRRL >= 1 .AND. .NOT. O2D) THEN ! Sub-grid condensation + IF (.NOT. OFLAT) THEN ZFLXC = ZFLXC & + 2.*( MXF( MYM( PRHODJ*PAMOIST*PSRCM )*ZFLX ) & + MZF( MZM( PRHODJ*PAMOIST*PSRCM )*MYF( & @@ -654,7 +655,7 @@ END IF !!IF (KRR/=0) THEN !! ! here ZFLX= <V'R'np> and ZWORK= <V'Theta'l> !! ! -!! IF (.NOT. L2D) THEN & +!! IF (.NOT. O2D) THEN & !! ZVPTV(:,:,:) = & !! ZWORK(:,:,:)*MYM(ETHETA(KRR,KRRI,PTHLT,PEXNREF,PRT,PLOCPT,PSRCM)) + & !! ZFLX(:,:,:)*MYM(EMOIST(KRR,KRRI,PTHLT,PEXNREF,PRT,PLOCPT,PSRCM)) diff --git a/src/common/turb/mode_turb_hor_tke.F90 b/src/common/turb/mode_turb_hor_tke.F90 index 5ff7a0029..5266601b2 100644 --- a/src/common/turb/mode_turb_hor_tke.F90 +++ b/src/common/turb/mode_turb_hor_tke.F90 @@ -6,7 +6,7 @@ MODULE MODE_TURB_HOR_TKE IMPLICIT NONE CONTAINS - SUBROUTINE TURB_HOR_TKE(KSPLT, & + SUBROUTINE TURB_HOR_TKE(KSPLT,OFLAT,O2D, & PDXX, PDYY, PDZZ,PDZX,PDZY, & PINV_PDXX, PINV_PDYY, PINV_PDZZ, PMZM_PRHODJ, & PK, PRHODJ, PTKEM, & @@ -48,7 +48,6 @@ CONTAINS !* 0. DECLARATIONS ! ------------ ! -USE MODD_CONF USE MODD_CST USE MODD_CTURB USE MODD_PARAMETERS @@ -68,7 +67,8 @@ IMPLICIT NONE ! ! INTEGER, INTENT(IN) :: KSPLT ! current split index -! +LOGICAL, INTENT(IN) :: OFLAT ! Logical for zero ororography +LOGICAL, INTENT(IN) :: O2D ! Logical for 2D model version (modd_conf) REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX, PDYY, PDZZ, PDZX, PDZY ! Metric coefficients REAL, DIMENSION(:,:,:), INTENT(IN) :: PK ! Turbulent diffusion doef. @@ -142,7 +142,7 @@ ZFLX(:,:,IKB-1) = - ZFLX(:,:,IKB) ! ZFLX(:,:,IKU) = ZFLX(:,:,IKU-1) ! -IF (.NOT. LFLAT) THEN +IF (.NOT. OFLAT) THEN PTRH =-( DXF( MXM(PRHODJ) * ZFLX * PINV_PDXX)& - DZF( PMZM_PRHODJ * MXF( PDZX * MZM(ZFLX*PINV_PDXX)) * PINV_PDZZ)& ) /PRHODJ @@ -164,7 +164,7 @@ END IF !* 3. horizontal transport of Tke v'e ! ------------------------------- ! -IF (.NOT. L2D) THEN +IF (.NOT. O2D) THEN ZFLX =-XCET * MYM(PK) * GY_M_V(1,IKU,1,PTKEM,PDYY,PDZZ,PDZY) ! < v'e > ! ! special case near the ground ( uncentred gradient ) @@ -189,7 +189,7 @@ IF (.NOT. L2D) THEN ! ! complete the explicit turbulent transport ! - IF (.NOT. LFLAT) THEN + IF (.NOT. OFLAT) THEN PTRH = PTRH - ( DYF( MYM(PRHODJ) * ZFLX * PINV_PDYY ) & - DZF( PMZM_PRHODJ * MYF( PDZY * MZM(ZFLX*PINV_PDYY) ) * PINV_PDZZ ) & ) /PRHODJ diff --git a/src/common/turb/mode_turb_hor_uv.F90 b/src/common/turb/mode_turb_hor_uv.F90 index 76bddbcb6..fccdc2934 100644 --- a/src/common/turb/mode_turb_hor_uv.F90 +++ b/src/common/turb/mode_turb_hor_uv.F90 @@ -7,7 +7,7 @@ MODULE MODE_TURB_HOR_UV IMPLICIT NONE CONTAINS ! ################################################################ - SUBROUTINE TURB_HOR_UV(TURBN,KSPLT, & + SUBROUTINE TURB_HOR_UV(TURBN,KSPLT,OFLAT,O2D, & TPFILE, & PK,PINV_PDXX,PINV_PDYY,PINV_PDZZ,PMZM_PRHODJ, & PDXX,PDYY,PDZZ,PDZX,PDZY, & @@ -50,7 +50,7 @@ CONTAINS !! ------------- !! Aug , 1997 (V. Saravane) spliting of TURB_HOR !! Nov 27, 1997 (V. Masson) clearing of the routine -!! Oct 18, 2000 (V. Masson) LES computations + LFLAT switch +!! Oct 18, 2000 (V. Masson) LES computations + OFLAT switch !! Nov 06, 2002 (V. Masson) LES budgets !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O !! -------------------------------------------------------------------------- @@ -61,7 +61,6 @@ CONTAINS USE MODD_TURB_n, ONLY: TURB_t ! USE MODD_CST -USE MODD_CONF USE MODD_CTURB USE MODD_FIELD, ONLY: TFIELDDATA, TYPEREAL USE MODD_IO, ONLY: TFILEDATA @@ -90,6 +89,8 @@ 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) :: OFLAT ! Logical for zero ororography +LOGICAL, INTENT(IN) :: O2D ! Logical for 2D model version (modd_conf) ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PK ! Turbulent diffusion doef. ! PK = PLM * SQRT(PTKEM) @@ -156,14 +157,14 @@ IKE = SIZE(PUM,3)-JPVEXT ZDIRSINZW(:,:) = SQRT( 1. - PDIRCOSZW(:,:)**2 ) ! GX_V_UV_PVM = GX_V_UV(PVM,PDXX,PDZZ,PDZX) -IF (.NOT. L2D) GY_U_UV_PUM = GY_U_UV(PUM,PDYY,PDZZ,PDZY) +IF (.NOT. O2D) GY_U_UV_PUM = GY_U_UV(PUM,PDYY,PDZZ,PDZY) ! ! !* 12. < U'V'> ! ------- ! ! -IF (.NOT. L2D) THEN +IF (.NOT. O2D) THEN ZFLX(:,:,:)= - XCMFS * MYM(MXM(PK)) * & (GY_U_UV_PUM + GX_V_UV_PVM) ELSE @@ -222,7 +223,7 @@ END IF ! ! !computation of the source for rho*V due to this flux -IF (.NOT. LFLAT) THEN +IF (.NOT. OFLAT) THEN PRUS(:,:,:) = PRUS(:,:,:) & - DYF(ZFLX * MXM(MYM(PRHODJ) * PINV_PDYY) ) & + DZF( MYF( MZM(ZFLX)*MXM(PDZY/MZM(PDYY))) & @@ -232,7 +233,7 @@ ELSE END IF ! !computation of the source for rho*V due to this flux -IF (.NOT. LFLAT) THEN +IF (.NOT. OFLAT) THEN PRVS(:,:,:) = PRVS(:,:,:) & - DXF(ZFLX * MYM(MXM(PRHODJ) * PINV_PDXX) ) & + DZF( MXF( MZM(ZFLX)*MYM(PDZX/MZM(PDXX))) & @@ -245,7 +246,7 @@ IF (KSPLT==1) THEN ! !Contribution to the dynamic production of TKE: ! - IF (.NOT. L2D) THEN + IF (.NOT. O2D) THEN ZWORK(:,:,:) = - MXF( MYF( ZFLX * & (GY_U_UV_PUM + GX_V_UV_PVM) ) ) ELSE diff --git a/src/common/turb/mode_turb_hor_uw.F90 b/src/common/turb/mode_turb_hor_uw.F90 index a3fbe13e9..d4a20a20b 100644 --- a/src/common/turb/mode_turb_hor_uw.F90 +++ b/src/common/turb/mode_turb_hor_uw.F90 @@ -8,7 +8,7 @@ IMPLICIT NONE CONTAINS ! ################################################################ SUBROUTINE TURB_HOR_UW(TURBN,KSPLT, & - KRR, & + KRR,KSV,OFLAT, & TPFILE, & PK,PINV_PDXX,PINV_PDZZ,PMZM_PRHODJ, & PDXX,PDZZ,PDZX, & @@ -49,7 +49,7 @@ CONTAINS !! ------------- !! Aug , 1997 (V. Saravane) spliting of TURB_HOR !! Nov 27, 1997 (V. Masson) clearing of the routine -!! Oct 18, 2000 (V. Masson) LES computations + LFLAT switch +!! Oct 18, 2000 (V. Masson) LES computations + OFLAT switch !! Feb 14, 2001 (V. Masson and J. Stein) DZF bug on PRWS !! + remove the use of W=0 at the ground !! + extrapolation under the ground @@ -65,13 +65,11 @@ CONTAINS USE MODD_TURB_n, ONLY: TURB_t ! USE MODD_CST -USE MODD_CONF USE MODD_CTURB USE MODD_FIELD, ONLY: TFIELDDATA, TYPEREAL USE MODD_IO, ONLY: TFILEDATA USE MODD_PARAMETERS USE MODD_LES -USE MODD_NSV ! USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE ! @@ -95,6 +93,8 @@ IMPLICIT NONE TYPE(TURB_t), INTENT(IN) :: TURBN INTEGER, INTENT(IN) :: KSPLT ! split process index INTEGER, INTENT(IN) :: KRR ! number of moist var. +INTEGER, INTENT(IN) :: KSV ! number of sv var. +LOGICAL, INTENT(IN) :: OFLAT ! Logical for zero ororography TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file ! @@ -188,7 +188,7 @@ END IF PRUS(:,:,:) = PRUS(:,:,:) - DZF( ZFLX* MXM( PMZM_PRHODJ ) / MXM( PDZZ ) ) ! !computation of the source for rho*W due to this flux -IF (.NOT. LFLAT) THEN +IF (.NOT. OFLAT) THEN PRWS(:,:,:) = PRWS(:,:,:) & -DXF( MZM( MXM(PRHODJ) * PINV_PDXX) * ZFLX) & +DZM( PRHODJ * MXF( MZF( ZFLX*PDZX ) * PINV_PDXX ) / MZF(PDZZ) ) @@ -236,7 +236,7 @@ IF (LLES_CALL .AND. KSPLT==1) THEN CALL LES_MEAN_SUBGRID( MXF(GX_M_U(1,IKU,1,PRM(:,:,:,1),PDXX,PDZZ,PDZX)*MZF(ZFLX)), & X_LES_RES_ddxa_Rt_SBG_UaW , .TRUE.) END IF - DO JSV=1,NSV + DO JSV=1,KSV CALL LES_MEAN_SUBGRID( MXF(GX_M_U(1,IKU,1,PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX)*MZF(ZFLX)), & X_LES_RES_ddxa_Sv_SBG_UaW(:,:,:,JSV) , .TRUE.) END DO diff --git a/src/common/turb/mode_turb_hor_vw.F90 b/src/common/turb/mode_turb_hor_vw.F90 index de637447b..807e229c4 100644 --- a/src/common/turb/mode_turb_hor_vw.F90 +++ b/src/common/turb/mode_turb_hor_vw.F90 @@ -7,7 +7,7 @@ MODULE MODE_TURB_HOR_VW IMPLICIT NONE CONTAINS SUBROUTINE TURB_HOR_VW(TURBN,KSPLT, & - KRR, & + KRR,KSV,OFLAT,O2D, & TPFILE, & PK,PINV_PDYY,PINV_PDZZ,PMZM_PRHODJ, & PDYY,PDZZ,PDZY, & @@ -48,7 +48,7 @@ CONTAINS !! ------------- !! Aug , 1997 (V. Saravane) spliting of TURB_HOR !! Nov 27, 1997 (V. Masson) clearing of the routine -!! Oct 18, 2000 (V. Masson) LES computations + LFLAT switch +!! Oct 18, 2000 (V. Masson) LES computations + OFLAT switch !! Feb 14, 2001 (V. Masson and J. Stein) DZF bug on PRWS !! + remove the use of W=0 at the ground !! + extrapolataion under the ground @@ -64,13 +64,11 @@ CONTAINS USE MODD_TURB_n, ONLY: TURB_t ! USE MODD_CST -USE MODD_CONF USE MODD_CTURB USE MODD_FIELD, ONLY: TFIELDDATA, TYPEREAL USE MODD_IO, ONLY: TFILEDATA USE MODD_PARAMETERS USE MODD_LES -USE MODD_NSV ! USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE ! @@ -94,6 +92,9 @@ IMPLICIT NONE TYPE(TURB_t), INTENT(IN) :: TURBN INTEGER, INTENT(IN) :: KSPLT ! split process index INTEGER, INTENT(IN) :: KRR ! number of moist var. +INTEGER, INTENT(IN) :: KSV ! number of sv var. +LOGICAL, INTENT(IN) :: OFLAT ! Logical for zero ororography +LOGICAL, INTENT(IN) :: O2D ! Logical for 2D model version (modd_conf) TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PK ! Turbulent diffusion doef. @@ -145,7 +146,7 @@ IKE = SIZE(PWM,3)-JPVEXT IKU = SIZE(PWM,3) ! ! -IF (.NOT. L2D) GY_W_VW_PWM = GY_W_VW(PWM,PDYY,PDZZ,PDZY) +IF (.NOT. O2D) GY_W_VW_PWM = GY_W_VW(PWM,PDYY,PDZZ,PDZY) ! ! !* 14. < V'W'> @@ -153,7 +154,7 @@ IF (.NOT. L2D) GY_W_VW_PWM = GY_W_VW(PWM,PDYY,PDZZ,PDZY) ! ! residual part of < V'W'> depending on dw/dy ! -IF (.NOT. L2D) THEN +IF (.NOT. O2D) THEN ZFLX(:,:,:) = & - XCMFS * MYM(MZM(PK)) * GY_W_VW_PWM !! & to be tested @@ -189,12 +190,12 @@ END IF ! ! compute the source for rho*V due to this residual flux ( the other part is ! taken into account in TURB_VER) -IF (.NOT. L2D) & +IF (.NOT. O2D) & PRVS(:,:,:) = PRVS(:,:,:) - DZF( ZFLX* MYM( PMZM_PRHODJ ) / MYM ( PDZZ ) ) ! !computation of the source for rho*W due to this flux -IF (.NOT. L2D) THEN - IF (.NOT. LFLAT) THEN +IF (.NOT. O2D) THEN + IF (.NOT. OFLAT) THEN PRWS(:,:,:) = PRWS(:,:,:) & -DYF( MZM( MYM(PRHODJ) * PINV_PDYY) * ZFLX) & +DZM( PRHODJ * MYF( MZF( ZFLX*PDZY ) * PINV_PDYY ) / MZF(PDZZ) ) @@ -207,7 +208,7 @@ IF (KSPLT==1) THEN ! !Contribution to the dynamic production of TKE: ! - IF (.NOT. L2D) THEN + IF (.NOT. O2D) THEN ZWORK(:,:,:) =-MZF( MYF( ZFLX *( GZ_V_VW(PVM,PDZZ) + GY_W_VW_PWM ) ) ) ! ! @@ -226,7 +227,7 @@ IF (KSPLT==1) THEN ENDIF ! ! dynamic production computation - IF (.NOT. L2D) & + IF (.NOT. O2D) & PDP(:,:,:) = PDP(:,:,:) + ZWORK(:,:,:) ! END IF @@ -246,7 +247,7 @@ IF (LLES_CALL .AND. KSPLT==1) THEN CALL LES_MEAN_SUBGRID( MXF(GY_M_V(1,IKU,1,PRM(:,:,:,1),PDYY,PDZZ,PDZY)*MZF(ZFLX)), & X_LES_RES_ddxa_Rt_SBG_UaW , .TRUE.) END IF - DO JSV=1,NSV + DO JSV=1,KSV CALL LES_MEAN_SUBGRID( MXF(GY_M_V(1,IKU,1,PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY)*MZF(ZFLX)), & X_LES_RES_ddxa_Sv_SBG_UaW(:,:,:,JSV), .TRUE.) END DO diff --git a/src/common/turb/mode_turb_ver_dyn_flux.F90 b/src/common/turb/mode_turb_ver_dyn_flux.F90 index 839e4a1ca..5157b5ac3 100644 --- a/src/common/turb/mode_turb_ver_dyn_flux.F90 +++ b/src/common/turb/mode_turb_ver_dyn_flux.F90 @@ -187,7 +187,7 @@ SUBROUTINE TURB_VER_DYN_FLUX(D,CST,CSTURB,TURBN,KSV,O2D,OFLAT, & !! Modifications: Nov 24, 1997 (V. Masson) removes the DO loops !! Modifications: Mar 31, 1998 (V. Masson) splits the routine TURB_VER_DYN_FLUX !! Modifications: Oct 18, 2000 (J. Stein) Bug in some computations for IKB level -!! Modifications: Oct 18, 2000 (V. Masson) LES computations + LFLAT switch +!! Modifications: Oct 18, 2000 (V. Masson) LES computations + OFLAT switch !! Nov 06, 2002 (V. Masson) LES budgets !! October 2009 (G. Tanguy) add ILENCH=LEN(YCOMMENT) after !! change of YCOMMENT diff --git a/src/common/turb/modi_turb.F90 b/src/common/turb/modi_turb.F90 index 57dca0802..f03211008 100644 --- a/src/common/turb/modi_turb.F90 +++ b/src/common/turb/modi_turb.F90 @@ -5,7 +5,7 @@ INTERFACE ! SUBROUTINE TURB(CST,CSTURB,BUCONF,TURBN,D, & - & KMI,KRR,KRRL,KRRI,HLBCX,HLBCY,KGRADIENTS, & + & KMI,KRR,KRRL,KRRI,HLBCX,HLBCY,KGRADIENTS,KHALO, & & KSPLIT,KMODEL_CL,KSV,KSV_LGBEG,KSV_LGEND,HPROGRAM, & & KSV_LIMA_NR, KSV_LIMA_NS, KSV_LIMA_NG, KSV_LIMA_NH, & & O2D,ONOMIXLG,OFLAT,OLES_CALL,OCOUPLES,OBLOWSNOW, & @@ -54,6 +54,7 @@ INTEGER, INTENT(IN) :: KSV_LIMA_NR,KSV_LIMA_NS,KSV_LIMA_NG,KSV_ CHARACTER(LEN=4),DIMENSION(2),INTENT(IN):: HLBCX, HLBCY ! X- and Y-direc LBC INTEGER, INTENT(IN) :: KSPLIT ! number of time-splitting INTEGER, INTENT(IN) :: KMODEL_CL ! model number for cloud mixing length +INTEGER, INTENT(IN) :: KHALO ! Size of the halo for parallel distribution LOGICAL, INTENT(IN) :: OCOMPUTE_SRC ! flag to define dimensions of SIGS and SRCT variables LOGICAL, INTENT(IN) :: OOCEAN ! switch for Ocean model version LOGICAL, INTENT(IN) :: ODEEPOC ! activates sfc forcing for ideal ocean deep conv diff --git a/src/common/turb/turb.F90 b/src/common/turb/turb.F90 index d6c6908ca..919199a4a 100644 --- a/src/common/turb/turb.F90 +++ b/src/common/turb/turb.F90 @@ -4,7 +4,7 @@ !MNH_LIC for details. version 1. !----------------------------------------------------------------- SUBROUTINE TURB(CST,CSTURB,BUCONF,TURBN,D, & - & KMI,KRR,KRRL,KRRI,HLBCX,HLBCY,KGRADIENTS, & + & KMI,KRR,KRRL,KRRI,HLBCX,HLBCY,KGRADIENTS,KHALO, & & KSPLIT,KMODEL_CL,KSV,KSV_LGBEG,KSV_LGEND,HPROGRAM, & & KSV_LIMA_NR, KSV_LIMA_NS, KSV_LIMA_NG, KSV_LIMA_NH, & & O2D,ONOMIXLG,OFLAT,OLES_CALL,OCOUPLES,OBLOWSNOW, & @@ -311,6 +311,8 @@ LOGICAL, INTENT(IN) :: OBLOWSNOW ! switch to activate prono LOGICAL, INTENT(IN) :: ODIAG_IN_RUN ! switch to activate online diagnostics (mesonh) CHARACTER(LEN=4), INTENT(IN) :: HTURBLEN_CL ! kind of cloud mixing length CHARACTER (LEN=4), INTENT(IN) :: HCLOUD ! Kind of microphysical scheme +INTEGER, INTENT(IN) :: KHALO ! Size of the halo for parallel distribution + REAL, INTENT(IN) :: PRSNOW ! Ratio for diffusion coeff. scalar (blowing snow) REAL, INTENT(IN) :: PTSTEP ! timestep TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file @@ -1096,9 +1098,10 @@ IF( TURBN%CTURBDIM == '3DIM' ) THEN #ifdef REPRO48 #else CALL TURB_HOR_SPLT(D,CST,CSTURB, TURBN, & - KSPLIT, KRR, KRRL, KRRI, KSV, PTSTEP,HLBCX,HLBCY, & + KSPLIT, KRR, KRRL, KRRI, KSV,KSV_LGBEG,KSV_LGEND, & + PTSTEP,HLBCX,HLBCY, OFLAT,O2D, ONOMIXLG, & OOCEAN,OCOMPUTE_SRC,OBLOWSNOW,PRSNOW, & - TPFILE, & + TPFILE, HPROGRAM, KHALO, & PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ, & PDIRCOSXW,PDIRCOSYW,PDIRCOSZW, & PCOSSLOPE,PSINSLOPE, & diff --git a/src/mesonh/ext/phys_paramn.f90 b/src/mesonh/ext/phys_paramn.f90 index 628ed7a96..4dfac6d8a 100644 --- a/src/mesonh/ext/phys_paramn.f90 +++ b/src/mesonh/ext/phys_paramn.f90 @@ -1565,7 +1565,8 @@ IF(LLEONARD) THEN ZHGRAD(:,:,:,6) = GY_M_M(XRT(:,:,:,1), XDXX,XDZZ,XDZX,1,IKU,1) END IF CALL TURB( CST,CSTURB, TBUCONF, TURBN,YLDIMPHYEX,& - IMI, NRR, NRRL, NRRI, CLBCX, CLBCY, IGRADIENTS, 1, NMODEL_CLOUD, & + IMI, NRR, NRRL, NRRI, CLBCX, CLBCY, IGRADIENTS, NHALO, & + 1, NMODEL_CLOUD, & NSV, NSV_LGBEG, NSV_LGEND,CPROGRAM, & NSV_LIMA_NR, NSV_LIMA_NS, NSV_LIMA_NG, NSV_LIMA_NH, & L2D, LNOMIXLG,LFLAT, & -- GitLab