From 8e7e9ad08606b32dff5e5bb439a4a6f0737bb00c Mon Sep 17 00:00:00 2001 From: Quentin Rodier <quentin.rodier@meteo.fr> Date: Fri, 5 Nov 2021 17:29:17 +0100 Subject: [PATCH] Quentin 05/11/2021: Merge clean rmc01 --- src/arome/turb/rmc01.F90 | 236 ---------------------------------- src/mesonh/turb/rmc01.f90 | 260 -------------------------------------- 2 files changed, 496 deletions(-) delete mode 100644 src/arome/turb/rmc01.F90 delete mode 100644 src/mesonh/turb/rmc01.f90 diff --git a/src/arome/turb/rmc01.F90 b/src/arome/turb/rmc01.F90 deleted file mode 100644 index 406406d87..000000000 --- a/src/arome/turb/rmc01.F90 +++ /dev/null @@ -1,236 +0,0 @@ -! ######spl - SUBROUTINE RMC01(HTURBLEN,KKA, KKU, KKL, PZZ, PDXX, PDYY, & - PDZZ, PDIRCOSZW, PSBL_DEPTH, PLMO, PLK, PLEPS ) - USE PARKIND1, ONLY : JPRB - USE YOMHOOK , ONLY : LHOOK, DR_HOOK -! ############################################################## -! -!!**** *RMC01* - -!! -!! PURPOSE -!! ------- -!! This routine modifies the mixing and dissipative length near the SBL. -!! (Redelsperger, Mahe and Carlotti, 2001) -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! -!! REFERENCE -!! --------- -!! -!! Book 2 -!! -!! AUTHOR -!! ------ -!! -!! V. Masson - Meteo-France - -!! -!! MODIFICATIONS -!! ------------- -!! Original 14/02/02 -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAMETERS -USE MODD_CST -USE MODD_CTURB -! -USE MODE_SBL -! -USE MODI_SHUMAN -! -IMPLICIT NONE -! -!* 0.1 Declaration of arguments -! ------------------------ -! -CHARACTER(LEN=4), INTENT(IN) :: HTURBLEN ! type of mixing length -INTEGER, INTENT(IN) :: KKA !near ground array index -INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index -INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO -REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! altitude of flux points -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX ! width of grid mesh (X dir) -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDYY ! width of grid mesh (Y dir) -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! width of vert. layers -REAL, DIMENSION(:,:), INTENT(IN) :: PDIRCOSZW ! Director Cosinus -REAL, DIMENSION(:,:), INTENT(IN) :: PSBL_DEPTH! SBL depth -REAL, DIMENSION(:,:), INTENT(IN) :: PLMO ! Monin Obuhkov length -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLK ! Mixing length -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLEPS ! Dissipative length -! -!* 0.2 Declaration of local variables -! ------------------------------ -! -INTEGER :: IKB,IKE ! first,last physical level -INTEGER :: IKU ! vertical boundary -INTEGER :: IKT ! array size in k direction -INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain -INTEGER :: IIU ! horizontal x boundary -INTEGER :: IJU ! horizontal y boundary -INTEGER :: JK ! loop counter -! -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) :: ZZZ ! height of mass - ! points above ground -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) :: ZZ_O_LMO ! height / LMO -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) :: ZGAM ! factor controling - ! transition betw. - ! SBL and free BL - -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) :: ZPHIM! MO function - ! for stress -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) :: ZPHIE! MO function - ! for TKE -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) :: ZDH ! hor. grid mesh - ! size -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) :: ZL ! SBL length -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) :: ZZC ! alt. where - ! turb. is isotr. -!------------------------------------------------------------------------------- -! -!* 1. Initializations -! --------------- -! -! horizontal boundaries -REAL(KIND=JPRB) :: ZHOOK_HANDLE -IF (LHOOK) CALL DR_HOOK('RMC01',0,ZHOOK_HANDLE) -IIU=SIZE(PZZ,1) -IJU=SIZE(PZZ,2) -! -! vertical boundaries -IKB=KKA+JPVEXT_TURB*KKL -IKE=KKU-JPVEXT_TURB*KKL - -IKTB=1+JPVEXT_TURB -IKT=SIZE(PZZ,3) -IKTE=IKT-JPVEXT_TURB -! -! altitude of mass points -ZZZ=MZF(KKA,KKU,KKL,PZZ) -! replace by height of mass points -DO JK=1,IKT - ZZZ(:,:,JK) = ZZZ(:,:,JK) - PZZ(:,:,IKB) -END DO -! fill upper level with physical value -ZZZ(:,:,KKU) = 2.*ZZZ(:,:,KKU-KKL) - ZZZ(:,:,KKU-2*KKL) -! -!------------------------------------------------------------------------------- -! -!* 2. MO quantities -! ------------- -! -! z/LMO -DO JK=1,IKU - WHERE (PLMO(:,:)==XUNDEF) - ZZ_O_LMO(:,:,JK)=0. - ELSEWHERE - ZZ_O_LMO(:,:,JK)=ZZZ(:,:,JK)*PDIRCOSZW(:,:)/PLMO(:,:) - END WHERE -END DO -ZZ_O_LMO(:,:,:) = MAX(ZZ_O_LMO(:,:,:),-10.) -ZZ_O_LMO(:,:,:) = MIN(ZZ_O_LMO(:,:,:), 10.) -! -! -! MO function for stress -ZPHIM(:,:,:) = BUSINGER_PHIM(ZZ_O_LMO) -! -! MO function for TKE -ZPHIE(:,:,:) = BUSINGER_PHIE(ZZ_O_LMO) -! -!------------------------------------------------------------------------------- -SELECT CASE (HTURBLEN) -!------------------------------------------------------------------------------- -! -!* 3. altitude where turbulence is isotropic inside a layer of given width (3D case) -! -------------------------------------------------------------------- -! -! -!* LES subgrid mixing (unresolved eddies all below mesh size) -! For stable cases, the vertical size of eddies is supposed to be given by the -! same law as in the neutral case (i.e. with Phim = 1). -! - CASE ('DELT','DEAR') - ZDH = SQRT(MXF(PDXX)*MYF(PDYY)) - ZDH(IIU,:,:) = ZDH(IIU-1,:,:) - ZDH(:,IJU,:) = ZDH(:,IJU-1,:) - DO JK=1,IKU - ZZC(:,:,JK) = 2.*MIN(ZPHIM(:,:,JK),1.)/XKARMAN & - * MAX( PDZZ(:,:,JK)*PDIRCOSZW(:,:) , ZDH(:,:,JK)/PDIRCOSZW(:,:)/3. ) - END DO -! -!* 4. factor controling the transition between SBL and free isotropic turb. (3D case) -! -------------------------------------------------------------------- -! - ZGAM(:,:,KKA) = 0. - DO JK=IKTB,IKTE - ZGAM(:,:,JK) = 1. - EXP( -3.*(ZZZ(:,:,JK)-ZZZ(:,:,IKB))/(ZZC(:,:,JK)) ) - WHERE (ZGAM(:,:,JK-KKL)>ZGAM(:,:,JK) .OR. ZGAM(:,:,JK-KKL)>0.99 ) ZGAM(:,:,JK) = 1. - END DO - ZGAM(:,:,KKU) = 1. - EXP( -3.*(ZZZ(:,:,KKU)-ZZZ(:,:,IKB))/(ZZC(:,:,KKU)) ) - WHERE (ZGAM(:,:,KKU-KKL)>ZGAM(:,:,KKU) .OR. ZGAM(:,:,KKU-KKL)>0.99 ) ZGAM(:,:,KKU) = 1. -! -! -!------------------------------------------------------------------------------- -! -!* 5. factor controling the transition between SBL and free isotropic turb.(1D case) -! -------------------------------------------------------------------- -! - CASE DEFAULT -!* SBL depth is used - ZGAM(:,:,:) = 1. - ZGAM(:,:,KKA) = 0. - DO JK=IKTB,IKTE - WHERE(PSBL_DEPTH>0.) & - ZGAM(:,:,JK) = TANH( (ZZZ(:,:,JK)-ZZZ(:,:,IKB))/PSBL_DEPTH(:,:) ) - WHERE (ZGAM(:,:,JK-KKL)>0.99 ) ZGAM(:,:,JK) = 1. - END DO - WHERE(PSBL_DEPTH>0.) & - ZGAM(:,:,KKU) = TANH( (ZZZ(:,:,KKU)-ZZZ(:,:,IKB))/PSBL_DEPTH(:,:) ) - WHERE (ZGAM(:,:,KKU-KKL)>0.99 ) ZGAM(:,:,JK) = 1. -! -!------------------------------------------------------------------------------- -END SELECT -!------------------------------------------------------------------------------- -! -!* 6. Modification of the mixing length -! --------------------------------- -! -DO JK=1,IKT - ZL(:,:,JK) = XKARMAN/SQRT(XALPSBL)/XCMFS & - * ZZZ(:,:,JK)*PDIRCOSZW(:,:)/(ZPHIM(:,:,JK)**2*SQRT(ZPHIE(:,:,JK))) -END DO -! -PLK(:,:,:)=(1.-ZGAM)*ZL+ZGAM*PLK -! -PLK(:,:,KKA) = PLK(:,:,IKB) -PLK(:,:,KKU) = PLK(:,:,IKE) -!------------------------------------------------------------------------------- -! -!* 7. Modification of the dissipative length -! -------------------------------------- -! -ZL = ZL * (XALPSBL**(3./2.)*XKARMAN*XCED) & - / (XKARMAN/SQRT(XALPSBL)/XCMFS) -! -WHERE (ZZ_O_LMO<0.) - ZL = ZL/(1.-1.9*ZZ_O_LMO) -ELSEWHERE - ZL = ZL/(1.-0.3*SQRT(ZZ_O_LMO)) -ENDWHERE -! -PLEPS(:,:,:)=(1.-ZGAM)*ZL+ZGAM*PLEPS -! -PLEPS(:,:,KKA) = PLEPS(:,:,IKB) -PLEPS(:,:,KKU ) = PLEPS(:,:,IKE) -!------------------------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('RMC01',1,ZHOOK_HANDLE) -END SUBROUTINE RMC01 diff --git a/src/mesonh/turb/rmc01.f90 b/src/mesonh/turb/rmc01.f90 deleted file mode 100644 index cf77c5033..000000000 --- a/src/mesonh/turb/rmc01.f90 +++ /dev/null @@ -1,260 +0,0 @@ -!MNH_LIC Copyright 2002-2020 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_RMC01 -! ################ -INTERFACE - SUBROUTINE RMC01(HTURBLEN,KKA,KKU,KKL,PZZ,PDXX,PDYY,PDZZ,PDIRCOSZW, & - PSBL_DEPTH, PLMO, PLK, PLEPS ) -! -CHARACTER(LEN=4), INTENT(IN) :: HTURBLEN ! type of mixing length -INTEGER, INTENT(IN) :: KKA !near ground array index -INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index -INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO -REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! altitude of flux points -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX ! width of grid mesh (X dir) -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDYY ! width of grid mesh (Y dir) -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! width of vert. layers -REAL, DIMENSION(:,:), INTENT(IN) :: PDIRCOSZW ! Director Cosinus -REAL, DIMENSION(:,:), INTENT(IN) :: PSBL_DEPTH! SBL depth -REAL, DIMENSION(:,:), INTENT(IN) :: PLMO ! Monin Obuhkov length -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLK ! Mixing length -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLEPS ! Dissipative length - -END SUBROUTINE RMC01 -END INTERFACE -END MODULE MODI_RMC01 -! -! ############################################################## - SUBROUTINE RMC01(HTURBLEN,KKA, KKU, KKL, PZZ, PDXX, PDYY, PDZZ, PDIRCOSZW, & - PSBL_DEPTH, PLMO, PLK, PLEPS ) -! ############################################################## -! -!!**** *RMC01* - -!! -!! PURPOSE -!! ------- -!! This routine modifies the mixing and dissipative length near the SBL. -!! (Redelsperger, Mahe and Carlotti, 2001) -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! -!! REFERENCE -!! --------- -!! -!! Book 2 -!! -!! AUTHOR -!! ------ -!! -!! V. Masson - Meteo-France - -!! -!! MODIFICATIONS -!! ------------- -!! Original 14/02/02 -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAMETERS -USE MODD_CST -USE MODD_CTURB -! -USE MODE_SBL -! -USE MODI_SHUMAN -! -IMPLICIT NONE -! -!* 0.1 Declaration of arguments -! ------------------------ -! -CHARACTER(LEN=4), INTENT(IN) :: HTURBLEN ! type of mixing length -INTEGER, INTENT(IN) :: KKA !near ground array index -INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index -INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO -REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! altitude of flux points -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX ! width of grid mesh (X dir) -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDYY ! width of grid mesh (Y dir) -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! width of vert. layers -REAL, DIMENSION(:,:), INTENT(IN) :: PDIRCOSZW ! Director Cosinus -REAL, DIMENSION(:,:), INTENT(IN) :: PSBL_DEPTH! SBL depth -REAL, DIMENSION(:,:), INTENT(IN) :: PLMO ! Monin Obuhkov length -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLK ! Mixing length -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLEPS ! Dissipative length -! -!* 0.2 Declaration of local variables -! ------------------------------ -! -INTEGER :: IKB,IKE ! first,last physical level -INTEGER :: IKT ! array size in k direction -INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain -INTEGER :: IIU ! horizontal x boundary -INTEGER :: IJU ! horizontal y boundary -INTEGER :: JK ! loop counter -! -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) :: ZZZ ! height of mass - ! points above ground -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) :: ZZ_O_LMO ! height / LMO -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) :: ZGAM ! factor controling - ! transition betw. - ! SBL and free BL - -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) :: ZPHIM! MO function - ! for stress -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) :: ZPHIE! MO function - ! for TKE -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) :: ZDH ! hor. grid mesh - ! size -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) :: ZL ! SBL length -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) :: ZZC ! alt. where - ! turb. is isotr. -!------------------------------------------------------------------------------- -! -!* 1. Initializations -! --------------- -! -! horizontal boundaries -IIU=SIZE(PZZ,1) -IJU=SIZE(PZZ,2) -! -! vertical boundaries -IKB=KKA+JPVEXT_TURB*KKL -IKE=KKU-JPVEXT_TURB*KKL - -IKTB=1+JPVEXT_TURB -IKT=SIZE(PZZ,3) -IKTE=IKT-JPVEXT_TURB -! -! altitude of mass points -ZZZ=MZF(PZZ) -! replace by height of mass points -DO JK=1,IKT - ZZZ(:,:,JK) = ZZZ(:,:,JK) - PZZ(:,:,IKB) -END DO -! fill upper level with physical value -ZZZ(:,:,KKU) = 2.*ZZZ(:,:,KKU-KKL) - ZZZ(:,:,KKU-2*KKL) -! -!------------------------------------------------------------------------------- -! -!* 2. MO quantities -! ------------- -! -! z/LMO -DO JK=1,IKT - WHERE (PLMO(:,:)==XUNDEF) - ZZ_O_LMO(:,:,JK)=0. - ELSEWHERE - ZZ_O_LMO(:,:,JK)=ZZZ(:,:,JK)*PDIRCOSZW(:,:)/PLMO(:,:) - END WHERE -END DO -ZZ_O_LMO(:,:,:) = MAX(ZZ_O_LMO(:,:,:),-10.) -ZZ_O_LMO(:,:,:) = MIN(ZZ_O_LMO(:,:,:), 10.) -! -! -! MO function for stress -ZPHIM(:,:,:) = BUSINGER_PHIM(ZZ_O_LMO) -! -! MO function for TKE -ZPHIE(:,:,:) = BUSINGER_PHIE(ZZ_O_LMO) -! -!------------------------------------------------------------------------------- -SELECT CASE (HTURBLEN) -!------------------------------------------------------------------------------- -! -!* 3. altitude where turbulence is isotropic inside a layer of given width (3D case) -! -------------------------------------------------------------------- -! -! -!* LES subgrid mixing (unresolved eddies all below mesh size) -! For stable cases, the vertical size of eddies is supposed to be given by the -! same law as in the neutral case (i.e. with Phim = 1). -! - CASE ('DELT','DEAR') - ZDH = SQRT(MXF(PDXX)*MYF(PDYY)) - ZDH(IIU,:,:) = ZDH(IIU-1,:,:) - ZDH(:,IJU,:) = ZDH(:,IJU-1,:) - DO JK=1,IKT - ZZC(:,:,JK) = 2.*MIN(ZPHIM(:,:,JK),1.)/XKARMAN & - * MAX( PDZZ(:,:,JK)*PDIRCOSZW(:,:) , ZDH(:,:,JK)/PDIRCOSZW(:,:)/3. ) - END DO -! -!* 4. factor controling the transition between SBL and free isotropic turb. (3D case) -! -------------------------------------------------------------------- -! - ZGAM(:,:,KKA) = 0. - DO JK=IKTB,IKTE - ZGAM(:,:,JK) = 1. - EXP( -3.*(ZZZ(:,:,JK)-ZZZ(:,:,IKB))/(ZZC(:,:,JK)) ) - WHERE (ZGAM(:,:,JK-KKL)>ZGAM(:,:,JK) .OR. ZGAM(:,:,JK-KKL)>0.99 ) ZGAM(:,:,JK) = 1. - END DO - ZGAM(:,:,KKU) = 1. - EXP( -3.*(ZZZ(:,:,KKU)-ZZZ(:,:,IKB))/(ZZC(:,:,KKU)) ) - WHERE (ZGAM(:,:,KKU-KKL)>ZGAM(:,:,KKU) .OR. ZGAM(:,:,KKU-KKL)>0.99 ) ZGAM(:,:,KKU) = 1. -! -! -!------------------------------------------------------------------------------- -! -!* 5. factor controling the transition between SBL and free isotropic turb.(1D case) -! -------------------------------------------------------------------- -! - CASE DEFAULT -!* SBL depth is used - ZGAM(:,:,:) = 1. - ZGAM(:,:,KKA) = 0. - DO JK=IKTB,IKTE - WHERE(PSBL_DEPTH>0.) & - ZGAM(:,:,JK) = TANH( (ZZZ(:,:,JK)-ZZZ(:,:,IKB))/PSBL_DEPTH(:,:) ) - WHERE (ZGAM(:,:,JK-KKL)>0.99 ) ZGAM(:,:,JK) = 1. - END DO - WHERE(PSBL_DEPTH>0.) & - ZGAM(:,:,KKU) = TANH( (ZZZ(:,:,KKU)-ZZZ(:,:,IKB))/PSBL_DEPTH(:,:) ) - WHERE (ZGAM(:,:,KKU-KKL)>0.99 ) ZGAM(:,:,JK) = 1. -! -!------------------------------------------------------------------------------- -END SELECT -!------------------------------------------------------------------------------- -! -!* 6. Modification of the mixing length -! --------------------------------- -! -DO JK=1,IKT - ZL(:,:,JK) = XKARMAN/SQRT(XALPSBL)/XCMFS & - * ZZZ(:,:,JK)*PDIRCOSZW(:,:)/(ZPHIM(:,:,JK)**2*SQRT(ZPHIE(:,:,JK))) -END DO -! -PLK(:,:,:)=(1.-ZGAM)*ZL+ZGAM*PLK -! -PLK(:,:,KKA) = PLK(:,:,IKB) -PLK(:,:,KKU) = PLK(:,:,IKE) -!------------------------------------------------------------------------------- -! -!* 7. Modification of the dissipative length -! -------------------------------------- -! -ZL = ZL * (XALPSBL**(3./2.)*XKARMAN*XCED) & - / (XKARMAN/SQRT(XALPSBL)/XCMFS) -! -WHERE (ZZ_O_LMO<0.) - ZL = ZL/(1.-1.9*ZZ_O_LMO) -ELSEWHERE - ZL = ZL/(1.-0.3*SQRT(ZZ_O_LMO)) -ENDWHERE -! -PLEPS(:,:,:)=(1.-ZGAM)*ZL+ZGAM*PLEPS -! -PLEPS(:,:,KKA) = PLEPS(:,:,IKB) -PLEPS(:,:,KKU ) = PLEPS(:,:,IKE) -!------------------------------------------------------------------------------- -! -END SUBROUTINE RMC01 -- GitLab