From 88e4a7a3e781f25644c7dd44712c2414f776a50a Mon Sep 17 00:00:00 2001 From: Quentin Rodier <quentin.rodier@meteo.fr> Date: Wed, 14 Dec 2022 17:58:57 +0100 Subject: [PATCH] Quentin 14/12/2022: RMC01, generelize update of horizontal final points in a packed horizontal dimension framework --- src/common/turb/mode_rmc01.F90 | 19 ++++- src/common/turb/mode_rmc01_3D.F90 | 99 ------------------------ src/common/turb/mode_update_iiju_phy.F90 | 71 +++++++++++++++++ 3 files changed, 88 insertions(+), 101 deletions(-) delete mode 100644 src/common/turb/mode_rmc01_3D.F90 create mode 100644 src/common/turb/mode_update_iiju_phy.F90 diff --git a/src/common/turb/mode_rmc01.F90 b/src/common/turb/mode_rmc01.F90 index c531453df..77d980793 100644 --- a/src/common/turb/mode_rmc01.F90 +++ b/src/common/turb/mode_rmc01.F90 @@ -50,7 +50,7 @@ USE MODD_CST, ONLY : CST_t USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t USE MODD_CTURB, ONLY: CSTURB_t ! -USE MODE_RMC01_3D, ONLY: RMC01_3D +USE MODE_UPDATE_IIJU_PHY, ONLY: UPDATE_IIJU_PHY USE MODE_SBL_PHY, ONLY: BUSINGER_PHIM, BUSINGER_PHIE ! USE SHUMAN_PHY, ONLY: MZF_PHY, MYF_PHY, MXF_PHY @@ -96,6 +96,7 @@ REAL, DIMENSION(D%NIJT,D%NKT) :: ZZC ! alt. where turb. is isotr. ! size REAL, DIMENSION(D%NIJT,D%NKT) :: ZL ! SBL length REAL, DIMENSION(D%NIJT,D%NKT) :: ZWORK1, ZWORK2 +REAL, DIMENSION(D%NIJT,D%NKT) :: ZDH ! hor. grid mesh !------------------------------------------------------------------------------- ! !* 1. Initializations @@ -164,7 +165,21 @@ SELECT CASE (HTURBLEN) ! same law as in the neutral case (i.e. with Phim = 1). ! CASE ('DELT','DEAR') - CALL RMC01_3D(D,CST,PDXX,PDYY,PDZZ,PDIRCOSZW,ZPHIM,ZZC) + CALL MXF_PHY(D,PDXX,ZWORK1) + CALL MYF_PHY(D,PDYY,ZWORK2) + !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) + ZDH(IIJB:IIJE,1:D%NKT) = SQRT(ZWORK1(IIJB:IIJE,1:D%NKT)*ZWORK2(IIJB:IIJE,1:D%NKT)) + !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) + ! + CALL UPDATE_IIJU_PHY(D,ZZC) + ! + DO JK=1,D%NKT + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZZC(IIJB:IIJE,JK) = 2.*MIN(ZPHIM(IIJB:IIJE,JK),1.)/CST%XKARMAN & + * MAX( PDZZ(IIJB:IIJE,JK)*PDIRCOSZW(IIJB:IIJE) , & + ZDH(IIJB:IIJE,JK)/PDIRCOSZW(IIJB:IIJE)/3. ) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) + END DO ! !* 4. factor controling the transition between SBL and free isotropic turb. (3D case) ! -------------------------------------------------------------------- diff --git a/src/common/turb/mode_rmc01_3D.F90 b/src/common/turb/mode_rmc01_3D.F90 deleted file mode 100644 index 0619ca250..000000000 --- a/src/common/turb/mode_rmc01_3D.F90 +++ /dev/null @@ -1,99 +0,0 @@ -!MNH_LIC Copyright 1994-2022 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_RMC01_3D -IMPLICIT NONE -CONTAINS -SUBROUTINE RMC01_3D(D,CST,PDXX,PDYY,PDZZ,PDIRCOSZW,PPHIM,PZC) - USE PARKIND1, ONLY : JPRB - USE YOMHOOK , ONLY : LHOOK, DR_HOOK -! ############################################################## -! -!!**** *RMC01* - -!! -!! PURPOSE -!! ------- -!! This routine computes 3D parts of the rmc01.f90 routine -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! -!! REFERENCE -!! --------- -!! -!! AUTHOR -!! ------ -!! -!! Q. Rodier - Meteo-France - -!! -!! MODIFICATIONS -!! ------------- -!! Original 18/08/022 -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST, ONLY : CST_t -USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t -! -USE SHUMAN_PHY, ONLY: MYF_PHY, MXF_PHY -! -IMPLICIT NONE -! -!* 0.1 Declaration of arguments -TYPE(DIMPHYEX_t), INTENT(IN) :: D -TYPE(CST_t), INTENT(IN) :: CST -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDXX ! width of grid mesh (X dir) -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDYY ! width of grid mesh (Y dir) -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDZZ ! width of vert. layers -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PPHIM ! MO function -REAL, DIMENSION(D%NIT,D%NJT), INTENT(IN) :: PDIRCOSZW ! Director Cosinus -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT) :: PZC ! alt. where turb. is isotr. -REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1, ZWORK2 -REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZDH ! hor. grid mesh -! -INTEGER :: IKB,IKE ! first,last physical level -INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain -INTEGER :: JK,JI,JJ ! loop counter -INTEGER :: IIE,IIB,IJE,IJB,IIU,IJU -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -IF (LHOOK) CALL DR_HOOK('RMC01_3D',0,ZHOOK_HANDLE) -IKTB=D%NKTB -IKTE=D%NKTE -IKB=D%NKB -IKE=D%NKE -IIE=D%NIEC -IIB=D%NIBC -IJE=D%NJEC -IJB=D%NJBC -IIU=D%NIT -IJU=D%NJT -! -CALL MXF_PHY(D,PDXX,ZWORK1) -CALL MYF_PHY(D,PDYY,ZWORK2) -!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) -ZDH(IIB:IIE,IJB:IJE,1:D%NKT) = SQRT(ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT)*ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT)) -!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) -ZDH(IIU,IJB:IJE,1:D%NKT) = ZDH(IIU-1,IJB:IJE,1:D%NKT) -ZDH(IIB:IIE,IJU,1:D%NKT) = ZDH(IIB:IIE,IJU-1,1:D%NKT) -DO JK=1,D%NKT - !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE) - PZC(IIB:IIE,IJB:IJE,JK) = 2.*MIN(PPHIM(IIB:IIE,IJB:IJE,JK),1.)/CST%XKARMAN & - * MAX( PDZZ(IIB:IIE,IJB:IJE,JK)*PDIRCOSZW(IIB:IIE,IJB:IJE) , & - ZDH(IIB:IIE,IJB:IJE,JK)/PDIRCOSZW(IIB:IIE,IJB:IJE)/3. ) - !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE) -END DO -! -IF (LHOOK) CALL DR_HOOK('RMC01_3D',1,ZHOOK_HANDLE) -END SUBROUTINE RMC01_3D -END MODULE MODE_RMC01_3D diff --git a/src/common/turb/mode_update_iiju_phy.F90 b/src/common/turb/mode_update_iiju_phy.F90 new file mode 100644 index 000000000..b109abd04 --- /dev/null +++ b/src/common/turb/mode_update_iiju_phy.F90 @@ -0,0 +1,71 @@ +!MNH_LIC Copyright 1994-2022 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_UPDATE_IIJU_PHY +IMPLICIT NONE +CONTAINS +SUBROUTINE UPDATE_IIJU_PHY(D,PVAR) + USE PARKIND1, ONLY : JPRB + USE YOMHOOK , ONLY : LHOOK, DR_HOOK +! ############################################################## +! +!!**** *MODE_UPDATE_IIJU_PHY* - +!! +!! PURPOSE +!! ------- +!! This routine update IIU-1 and IJU-1 values to (IIU,IJU) values in the PHYEX +!! package where all arrays have a single dimension for the horizontal coordinates +!! i.e. ni*nj +!! +!!** METHOD +!! ------ +!! +!! EXTERNAL +!! -------- +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +!! +!! +!! REFERENCE +!! --------- +!! +!! AUTHOR +!! ------ +!! +!! Q. Rodier - Meteo-France - +!! +!! MODIFICATIONS +!! ------------- +!! Original 18/08/22 +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +! +IMPLICIT NONE +! +!* 0.1 Declaration of arguments +TYPE(DIMPHYEX_t), INTENT(IN) :: D +REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(INOUT) :: PVAR ! working variable +! +INTEGER :: IIE,IIB,IJE,IJB,IIU,IJU +! +REAL(KIND=JPRB) :: ZHOOK_HANDLE +IF (LHOOK) CALL DR_HOOK('UPDATE_IIJU_PHY',0,ZHOOK_HANDLE) +IIE=D%NIEC +IIB=D%NIBC +IJE=D%NJEC +IJB=D%NJBC +IIU=D%NIT +IJU=D%NJT +! +PVAR(IIU,IJB:IJE,1:D%NKT) = PVAR(IIU-1,IJB:IJE,1:D%NKT) +PVAR(IIB:IIE,IJU,1:D%NKT) = PVAR(IIB:IIE,IJU-1,1:D%NKT) +! +IF (LHOOK) CALL DR_HOOK('UPDATE_IIJU_PHY',1,ZHOOK_HANDLE) +END SUBROUTINE UPDATE_IIJU_PHY +END MODULE MODE_UPDATE_IIJU_PHY -- GitLab