Skip to content
Snippets Groups Projects
Commit 3dddb3d1 authored by RODIER Quentin's avatar RODIER Quentin
Browse files

Quentin 05/11/2021: Merge MNH->AROME bugfix rmc01

parent 6cc95a7e
No related branches found
No related tags found
No related merge requests found
!MNH_LIC Copyright 2002-2020 CNRS, Meteo-France and Universite Paul Sabatier ! ######spl
!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence SUBROUTINE RMC01(HTURBLEN,KKA,KKU,KKL,PZZ,PDXX,PDYY, &
!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt PDZZ,PDIRCOSZW,PSBL_DEPTH,PLMO,PLK,PLEPS)
!MNH_LIC for details. version 1. USE PARKIND1, ONLY : JPRB
!----------------------------------------------------------------- USE YOMHOOK , ONLY : LHOOK, DR_HOOK
! ################
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* - !!**** *RMC01* -
!! !!
!! PURPOSE !! PURPOSE
!! ------- !! -------
!! This routine modifies the mixing and dissipative length near the SBL. !! This routine modifies the mixing and dissipative length near the SBL.
...@@ -57,7 +29,7 @@ END MODULE MODI_RMC01 ...@@ -57,7 +29,7 @@ END MODULE MODI_RMC01
!! !!
!! AUTHOR !! AUTHOR
!! ------ !! ------
!! !!
!! V. Masson - Meteo-France - !! V. Masson - Meteo-France -
!! !!
!! MODIFICATIONS !! MODIFICATIONS
...@@ -82,14 +54,14 @@ IMPLICIT NONE ...@@ -82,14 +54,14 @@ IMPLICIT NONE
! ------------------------ ! ------------------------
! !
CHARACTER(LEN=4), INTENT(IN) :: HTURBLEN ! type of mixing length CHARACTER(LEN=4), INTENT(IN) :: HTURBLEN ! type of mixing length
INTEGER, INTENT(IN) :: KKA !near ground array index INTEGER, INTENT(IN) :: KKA !near ground array index
INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index
INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO
REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! altitude of flux points REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! altitude of flux points
REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX ! width of grid mesh (X dir) 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) :: PDYY ! width of grid mesh (Y dir)
REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! width of vert. layers REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! width of vert. layers
REAL, DIMENSION(:,:), INTENT(IN) :: PDIRCOSZW ! Director Cosinus REAL, DIMENSION(:,:), INTENT(IN) :: PDIRCOSZW ! Director Cosinus
REAL, DIMENSION(:,:), INTENT(IN) :: PSBL_DEPTH! SBL depth REAL, DIMENSION(:,:), INTENT(IN) :: PSBL_DEPTH! SBL depth
REAL, DIMENSION(:,:), INTENT(IN) :: PLMO ! Monin Obuhkov length REAL, DIMENSION(:,:), INTENT(IN) :: PLMO ! Monin Obuhkov length
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLK ! Mixing length REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLK ! Mixing length
...@@ -100,7 +72,7 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLEPS ! Dissipative length ...@@ -100,7 +72,7 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLEPS ! Dissipative length
! !
INTEGER :: IKB,IKE ! first,last physical level INTEGER :: IKB,IKE ! first,last physical level
INTEGER :: IKT ! array size in k direction INTEGER :: IKT ! array size in k direction
INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain
INTEGER :: IIU ! horizontal x boundary INTEGER :: IIU ! horizontal x boundary
INTEGER :: IJU ! horizontal y boundary INTEGER :: IJU ! horizontal y boundary
INTEGER :: JK ! loop counter INTEGER :: JK ! loop counter
...@@ -127,6 +99,8 @@ REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) :: ZZC ! alt. where ...@@ -127,6 +99,8 @@ REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) :: ZZC ! alt. where
! --------------- ! ---------------
! !
! horizontal boundaries ! horizontal boundaries
REAL(KIND=JPRB) :: ZHOOK_HANDLE
IF (LHOOK) CALL DR_HOOK('RMC01',0,ZHOOK_HANDLE)
IIU=SIZE(PZZ,1) IIU=SIZE(PZZ,1)
IJU=SIZE(PZZ,2) IJU=SIZE(PZZ,2)
! !
...@@ -139,7 +113,7 @@ IKT=SIZE(PZZ,3) ...@@ -139,7 +113,7 @@ IKT=SIZE(PZZ,3)
IKTE=IKT-JPVEXT_TURB IKTE=IKT-JPVEXT_TURB
! !
! altitude of mass points ! altitude of mass points
ZZZ=MZF(PZZ) ZZZ=MZF(KKA,KKU,KKL,PZZ)
! replace by height of mass points ! replace by height of mass points
DO JK=1,IKT DO JK=1,IKT
ZZZ(:,:,JK) = ZZZ(:,:,JK) - PZZ(:,:,IKB) ZZZ(:,:,JK) = ZZZ(:,:,JK) - PZZ(:,:,IKB)
...@@ -157,7 +131,7 @@ DO JK=1,IKT ...@@ -157,7 +131,7 @@ DO JK=1,IKT
WHERE (PLMO(:,:)==XUNDEF) WHERE (PLMO(:,:)==XUNDEF)
ZZ_O_LMO(:,:,JK)=0. ZZ_O_LMO(:,:,JK)=0.
ELSEWHERE ELSEWHERE
ZZ_O_LMO(:,:,JK)=ZZZ(:,:,JK)*PDIRCOSZW(:,:)/PLMO(:,:) ZZ_O_LMO(:,:,JK)=ZZZ(:,:,JK)*PDIRCOSZW(:,:)/PLMO(:,:)
END WHERE END WHERE
END DO END DO
ZZ_O_LMO(:,:,:) = MAX(ZZ_O_LMO(:,:,:),-10.) ZZ_O_LMO(:,:,:) = MAX(ZZ_O_LMO(:,:,:),-10.)
...@@ -257,4 +231,5 @@ PLEPS(:,:,KKA) = PLEPS(:,:,IKB) ...@@ -257,4 +231,5 @@ PLEPS(:,:,KKA) = PLEPS(:,:,IKB)
PLEPS(:,:,KKU ) = PLEPS(:,:,IKE) PLEPS(:,:,KKU ) = PLEPS(:,:,IKE)
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
! !
IF (LHOOK) CALL DR_HOOK('RMC01',1,ZHOOK_HANDLE)
END SUBROUTINE RMC01 END SUBROUTINE RMC01
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment