diff --git a/src/common/turb/mode_rmc01.F90 b/src/common/turb/mode_rmc01.F90 index 4cd16a6714c06dcb9eed6f8ec4d0c5c71862ae0a..c64cc0d0d837290b672dfb3dff994d493b6a018e 100644 --- a/src/common/turb/mode_rmc01.F90 +++ b/src/common/turb/mode_rmc01.F90 @@ -63,42 +63,40 @@ TYPE(DIMPHYEX_t), INTENT(IN) :: D TYPE(CST_t), INTENT(IN) :: CST TYPE(CSTURB_t), INTENT(IN) :: CSTURB CHARACTER(LEN=4), INTENT(IN) :: HTURBLEN ! type of mixing length -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PZZ ! altitude of flux points -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), INTENT(IN) :: PDIRCOSZW ! Director Cosinus -REAL, DIMENSION(D%NIT,D%NJT), INTENT(IN) :: PSBL_DEPTH! SBL depth -REAL, DIMENSION(D%NIT,D%NJT), INTENT(IN) :: PLMO ! Monin Obuhkov length -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(INOUT) :: PLK ! Mixing length -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(INOUT) :: PLEPS ! Dissipative length +REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PZZ ! altitude of flux points +REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDXX ! width of grid mesh (X dir) +REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDYY ! width of grid mesh (Y dir) +REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDZZ ! width of vert. layers +REAL, DIMENSION(D%NIJT), INTENT(IN) :: PDIRCOSZW ! Director Cosinus +REAL, DIMENSION(D%NIJT), INTENT(IN) :: PSBL_DEPTH! SBL depth +REAL, DIMENSION(D%NIJT), INTENT(IN) :: PLMO ! Monin Obuhkov length +REAL, DIMENSION(D%NIJT,D%NKT), INTENT(INOUT) :: PLK ! Mixing length +REAL, DIMENSION(D%NIJT,D%NKT), INTENT(INOUT) :: PLEPS ! Dissipative length ! !* 0.2 Declaration of local variables ! ------------------------------ ! INTEGER :: IKB,IKE ! first,last physical level INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain -INTEGER :: IIU ! horizontal x boundary -INTEGER :: IJU ! horizontal y boundary INTEGER :: JK,JI,JJ ! loop counter INTEGER :: IIE,IIB,IJE,IJB ! -REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZZZ ! height of mass +REAL, DIMENSION(D%NIJT,D%NKT) :: ZZZ ! height of mass ! points above ground -REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZZ_O_LMO ! height / LMO -REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZGAM ! factor controling +REAL, DIMENSION(D%NIJT,D%NKT) :: ZZ_O_LMO ! height / LMO +REAL, DIMENSION(D%NIJT,D%NKT) :: ZGAM ! factor controling ! transition betw. ! SBL and free BL -REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZPHIM! MO function +REAL, DIMENSION(D%NIJT,D%NKT) :: ZPHIM! MO function ! for stress -REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZPHIE! MO function +REAL, DIMENSION(D%NIJT,D%NKT) :: ZPHIE! MO function ! for TKE -REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZDH ! hor. grid mesh +REAL, DIMENSION(D%NIJT,D%NKT) :: ZDH ! hor. grid mesh ! size -REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZL ! SBL length -REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZZC ! alt. where turb. is isotr. -REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1, ZWORK2 +REAL, DIMENSION(D%NIJT,D%NKT) :: ZL ! SBL length +REAL, DIMENSION(D%NIJT,D%NKT) :: ZZC ! alt. where turb. is isotr. +REAL, DIMENSION(D%NIJT,D%NKT) :: ZWORK1, ZWORK2 !------------------------------------------------------------------------------- ! !* 1. Initializations @@ -107,8 +105,6 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWORK1, ZWORK2 ! horizontal boundaries REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK('RMC01',0,ZHOOK_HANDLE) -IIU=D%NIT -IJU=D%NJT IKTB=D%NKTB IKTE=D%NKTE IKB=D%NKB @@ -122,14 +118,14 @@ IJB=D%NJBC CALL MZF_PHY(D,PZZ,ZZZ) ! replace by height of mass points DO JK=1,D%NKT - !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE) - ZZZ(IIB:IIE,IJB:IJE,JK) = ZZZ(IIB:IIE,IJB:IJE,JK) - PZZ(IIB:IIE,IJB:IJE,IKB) - !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE) + !$mnh_expand_array(JIJ=1:D%NIJT) + ZZZ(1:D%NIJT,JK) = ZZZ(1:D%NIJT,JK) - PZZ(1:D%NIJT,IKB) + !$mnh_end_expand_array(JIJ=1:D%NIJT) END DO ! fill upper level with physical value -!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE) -ZZZ(IIB:IIE,IJB:IJE,D%NKU) = 2.*ZZZ(IIB:IIE,IJB:IJE,D%NKU-D%NKL) - ZZZ(IIB:IIE,IJB:IJE,D%NKU-2*D%NKL) -!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE) +!$mnh_expand_array(JIJ=1:D%NIJT) +ZZZ(1:D%NIJT,D%NKU) = 2.*ZZZ(1:D%NIJT,D%NKU-D%NKL) - ZZZ(1:D%NIJT,D%NKU-2*D%NKL) +!$mnh_end_expand_array(JIJ=1:D%NIJT) ! !------------------------------------------------------------------------------- ! @@ -138,18 +134,18 @@ ZZZ(IIB:IIE,IJB:IJE,D%NKU) = 2.*ZZZ(IIB:IIE,IJB:IJE,D%NKU-D%NKL) - ZZZ(IIB:IIE,I ! ! z/LMO DO JK=1,D%NKT - !$mnh_expand_where(JI=IIB:IIE,JJ=IJB:IJE) - WHERE (PLMO(IIB:IIE,IJB:IJE)==XUNDEF) - ZZ_O_LMO(IIB:IIE,IJB:IJE,JK)=0. + !$mnh_expand_where(JIJ=1:D%NIJT) + WHERE (PLMO(1:D%NIJT)==XUNDEF) + ZZ_O_LMO(1:D%NIJT,JK)=0. ELSEWHERE - ZZ_O_LMO(IIB:IIE,IJB:IJE,JK)=ZZZ(IIB:IIE,IJB:IJE,JK)*PDIRCOSZW(IIB:IIE,IJB:IJE)/PLMO(IIB:IIE,IJB:IJE) + ZZ_O_LMO(1:D%NIJT,JK)=ZZZ(1:D%NIJT,JK)*PDIRCOSZW(1:D%NIJT)/PLMO(1:D%NIJT) END WHERE - !$mnh_end_expand_where(JI=IIB:IIE,JJ=IJB:IJE) + !$mnh_end_expand_where(JIJ=1:D%NIJT) END DO -!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) -ZZ_O_LMO(IIB:IIE,IJB:IJE,1:D%NKT) = MAX(ZZ_O_LMO(IIB:IIE,IJB:IJE,1:D%NKT),-10.) -ZZ_O_LMO(IIB:IIE,IJB:IJE,1:D%NKT) = MIN(ZZ_O_LMO(IIB:IIE,IJB:IJE,1:D%NKT), 10.) -!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) +!$mnh_expand_array(JIJ=1:D%NIJT,JK=1:D%NKT) +ZZ_O_LMO(1:D%NIJT,1:D%NKT) = MAX(ZZ_O_LMO(1:D%NIJT,1:D%NKT),-10.) +ZZ_O_LMO(1:D%NIJT,1:D%NKT) = MIN(ZZ_O_LMO(1:D%NIJT,1:D%NKT), 10.) +!$mnh_end_expand_array(JIJ=1:D%NIJT,JK=1:D%NKT) ! ! ! MO function for stress @@ -173,42 +169,42 @@ SELECT CASE (HTURBLEN) CASE ('DELT','DEAR') 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) + !$mnh_expand_array(JIJ=1:D%NIJT,JK=1:D%NKT) + ZDH(1:D%NIJT,1:D%NKT) = SQRT(ZWORK1(1:D%NIJT,1:D%NKT)*ZWORK2(1:D%NIJT,1:D%NKT)) + !$mnh_end_expand_array(JIJ=1:D%NIJT,JK=1:D%NKT) + ZDH(D%NIT*IJB:D%NIT*IJE:D%NIT,1:D%NKT) = ZDH(D%NIT*IJB-1:D%NIT*IJE-1:D%NIT,1:D%NKT) + ZDH(D%NIJT-IIE+IIB:D%NIJT,1:D%NKT) = ZDH(D%NIJT-2*IIE+IIB:D%NIJT-IIE,1:D%NKT) DO JK=1,D%NKT - !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE) - ZZC(IIB:IIE,IJB:IJE,JK) = 2.*MIN(ZPHIM(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) + !$mnh_expand_array(JIJ=1:D%NIJT) + ZZC(1:D%NIJT,JK) = 2.*MIN(ZPHIM(1:D%NIJT,JK),1.)/CST%XKARMAN & + * MAX( PDZZ(1:D%NIJT,JK)*PDIRCOSZW(1:D%NIJT) , & + ZDH(1:D%NIJT,JK)/PDIRCOSZW(1:D%NIJT)/3. ) + !$mnh_end_expand_array(JIJ=1:D%NIJT) END DO ! !* 4. factor controling the transition between SBL and free isotropic turb. (3D case) ! -------------------------------------------------------------------- ! - ZGAM(IIB:IIE,IJB:IJE,D%NKA) = 0. + ZGAM(1:D%NIJT,D%NKA) = 0. DO JK=IKTB,IKTE - !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE) - ZGAM(IIB:IIE,IJB:IJE,JK) = 1. - EXP( -3.*(ZZZ(IIB:IIE,IJB:IJE,JK)-ZZZ(IIB:IIE,IJB:IJE,IKB))/(ZZC(IIB:IIE,IJB:IJE,JK)) ) - !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE) - !$mnh_expand_where(JI=IIB:IIE,JJ=IJB:IJE) - WHERE (ZGAM(IIB:IIE,IJB:IJE,JK-D%NKL)>ZGAM(IIB:IIE,IJB:IJE,JK) .OR. ZGAM(IIB:IIE,IJB:IJE,JK-D%NKL)>0.99 ) - ZGAM(IIB:IIE,IJB:IJE,JK) = 1. + !$mnh_expand_array(JIJ=1:D%NIJT) + ZGAM(1:D%NIJT,JK) = 1. - EXP( -3.*(ZZZ(1:D%NIJT,JK)-ZZZ(1:D%NIJT,IKB))/(ZZC(1:D%NIJT,JK)) ) + !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_expand_where(JIJ=1:D%NIJT) + WHERE (ZGAM(1:D%NIJT,JK-D%NKL)>ZGAM(1:D%NIJT,JK) .OR. ZGAM(1:D%NIJT,JK-D%NKL)>0.99 ) + ZGAM(1:D%NIJT,JK) = 1. END WHERE - !$mnh_end_expand_where(JI=IIB:IIE,JJ=IJB:IJE) + !$mnh_end_expand_where(JIJ=1:D%NIJT) END DO - !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE) - ZGAM(IIB:IIE,IJB:IJE,D%NKU) = 1. - EXP( -3.*(ZZZ(IIB:IIE,IJB:IJE,D%NKU)-ZZZ(IIB:IIE,IJB:IJE,IKB))& - /(ZZC(IIB:IIE,IJB:IJE,D%NKU)) ) - !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE) - !$mnh_expand_where(JI=IIB:IIE,JJ=IJB:IJE) - WHERE (ZGAM(IIB:IIE,IJB:IJE,D%NKU-D%NKL)>ZGAM(IIB:IIE,IJB:IJE,D%NKU) .OR. ZGAM(IIB:IIE,IJB:IJE,D%NKU-D%NKL)>0.99 ) - ZGAM(IIB:IIE,IJB:IJE,D%NKU) = 1. + !$mnh_expand_array(JIJ=1:D%NIJT) + ZGAM(1:D%NIJT,D%NKU) = 1. - EXP( -3.*(ZZZ(1:D%NIJT,D%NKU)-ZZZ(1:D%NIJT,IKB))& + /(ZZC(1:D%NIJT,D%NKU)) ) + !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_expand_where(JIJ=1:D%NIJT) + WHERE (ZGAM(1:D%NIJT,D%NKU-D%NKL)>ZGAM(1:D%NIJT,D%NKU) .OR. ZGAM(1:D%NIJT,D%NKU-D%NKL)>0.99 ) + ZGAM(1:D%NIJT,D%NKU) = 1. END WHERE - !$mnh_end_expand_where(JI=IIB:IIE,JJ=IJB:IJE) + !$mnh_end_expand_where(JIJ=1:D%NIJT) ! ! !------------------------------------------------------------------------------- @@ -218,30 +214,30 @@ SELECT CASE (HTURBLEN) ! CASE DEFAULT !* SBL depth is used - ZGAM(IIB:IIE,IJB:IJE,1:D%NKT) = 1. - ZGAM(IIB:IIE,IJB:IJE,D%NKA) = 0. + ZGAM(1:D%NIJT,1:D%NKT) = 1. + ZGAM(1:D%NIJT,D%NKA) = 0. DO JK=IKTB,IKTE - !$mnh_expand_where(JI=IIB:IIE,JJ=IJB:IJE) - WHERE(PSBL_DEPTH(IIB:IIE,IJB:IJE)>0.) - ZGAM(IIB:IIE,IJB:IJE,JK) = TANH( (ZZZ(IIB:IIE,IJB:IJE,JK)-ZZZ(IIB:IIE,IJB:IJE,IKB))/PSBL_DEPTH(IIB:IIE,IJB:IJE) ) + !$mnh_expand_where(JIJ=1:D%NIJT) + WHERE(PSBL_DEPTH(1:D%NIJT)>0.) + ZGAM(1:D%NIJT,JK) = TANH( (ZZZ(1:D%NIJT,JK)-ZZZ(1:D%NIJT,IKB))/PSBL_DEPTH(1:D%NIJT) ) END WHERE - !$mnh_end_expand_where(JI=IIB:IIE,JJ=IJB:IJE) - !$mnh_expand_where(JI=IIB:IIE,JJ=IJB:IJE) - WHERE (ZGAM(IIB:IIE,IJB:IJE,JK-D%NKL)>0.99 ) - ZGAM(IIB:IIE,IJB:IJE,JK) = 1. + !$mnh_end_expand_where(JIJ=1:D%NIJT) + !$mnh_expand_where(JIJ=1:D%NIJT) + WHERE (ZGAM(1:D%NIJT,JK-D%NKL)>0.99 ) + ZGAM(1:D%NIJT,JK) = 1. END WHERE - !$mnh_end_expand_where(JI=IIB:IIE,JJ=IJB:IJE) + !$mnh_end_expand_where(JIJ=1:D%NIJT) END DO - !$mnh_expand_where(JI=IIB:IIE,JJ=IJB:IJE) - WHERE(PSBL_DEPTH(IIB:IIE,IJB:IJE)>0.) - ZGAM(IIB:IIE,IJB:IJE,D%NKU) = TANH( (ZZZ(IIB:IIE,IJB:IJE,D%NKU)-ZZZ(IIB:IIE,IJB:IJE,IKB))/PSBL_DEPTH(IIB:IIE,IJB:IJE) ) + !$mnh_expand_where(JIJ=1:D%NIJT) + WHERE(PSBL_DEPTH(1:D%NIJT)>0.) + ZGAM(1:D%NIJT,D%NKU) = TANH( (ZZZ(1:D%NIJT,D%NKU)-ZZZ(1:D%NIJT,IKB))/PSBL_DEPTH(1:D%NIJT) ) END WHERE - !$mnh_end_expand_where(JI=IIB:IIE,JJ=IJB:IJE) - !$mnh_expand_where(JI=IIB:IIE,JJ=IJB:IJE) - WHERE (ZGAM(IIB:IIE,IJB:IJE,D%NKU-D%NKL)>0.99 ) - ZGAM(IIB:IIE,IJB:IJE,JK) = 1. + !$mnh_end_expand_where(JIJ=1:D%NIJT) + !$mnh_expand_where(JIJ=1:D%NIJT) + WHERE (ZGAM(1:D%NIJT,D%NKU-D%NKL)>0.99 ) + ZGAM(1:D%NIJT,JK) = 1. END WHERE - !$mnh_end_expand_where(JI=IIB:IIE,JJ=IJB:IJE) + !$mnh_end_expand_where(JIJ=1:D%NIJT) ! !------------------------------------------------------------------------------- END SELECT @@ -251,44 +247,44 @@ END SELECT ! --------------------------------- ! DO JK=1,D%NKT -!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE) - ZL(IIB:IIE,IJB:IJE,JK) = CST%XKARMAN/SQRT(CSTURB%XALPSBL)/CSTURB%XCMFS & - * ZZZ(IIB:IIE,IJB:IJE,JK)*PDIRCOSZW(IIB:IIE,IJB:IJE)/(ZPHIM(IIB:IIE,IJB:IJE,JK)**2*SQRT(ZPHIE(IIB:IIE,IJB:IJE,JK))) -!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE) +!$mnh_expand_array(JIJ=1:D%NIJT) + ZL(1:D%NIJT,JK) = CST%XKARMAN/SQRT(CSTURB%XALPSBL)/CSTURB%XCMFS & + * ZZZ(1:D%NIJT,JK)*PDIRCOSZW(1:D%NIJT)/(ZPHIM(1:D%NIJT,JK)**2*SQRT(ZPHIE(1:D%NIJT,JK))) +!$mnh_end_expand_array(JIJ=1:D%NIJT) END DO ! -!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) -PLK(IIB:IIE,IJB:IJE,1:D%NKT)=(1.-ZGAM(IIB:IIE,IJB:IJE,1:D%NKT))*ZL(IIB:IIE,IJB:IJE,1:D%NKT) & - +ZGAM(IIB:IIE,IJB:IJE,1:D%NKT)*PLK(IIB:IIE,IJB:IJE,1:D%NKT) -!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) +!$mnh_expand_array(JIJ=1:D%NIJT,JK=1:D%NKT) +PLK(1:D%NIJT,1:D%NKT)=(1.-ZGAM(1:D%NIJT,1:D%NKT))*ZL(1:D%NIJT,1:D%NKT) & + +ZGAM(1:D%NIJT,1:D%NKT)*PLK(1:D%NIJT,1:D%NKT) +!$mnh_end_expand_array(JIJ=1:D%NIJT,JK=1:D%NKT) ! -PLK(IIB:IIE,IJB:IJE,D%NKA) = PLK(IIB:IIE,IJB:IJE,IKB) -PLK(IIB:IIE,IJB:IJE,D%NKU) = PLK(IIB:IIE,IJB:IJE,IKE) +PLK(1:D%NIJT,D%NKA) = PLK(1:D%NIJT,IKB) +PLK(1:D%NIJT,D%NKU) = PLK(1:D%NIJT,IKE) !------------------------------------------------------------------------------- ! !* 7. Modification of the dissipative length ! -------------------------------------- ! -!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) -ZL(IIB:IIE,IJB:IJE,1:D%NKT) = ZL(IIB:IIE,IJB:IJE,1:D%NKT) * (CSTURB%XALPSBL**(3./2.)*CST%XKARMAN*CSTURB%XCED) & +!$mnh_expand_array(JIJ=1:D%NIJT,JK=1:D%NKT) +ZL(1:D%NIJT,1:D%NKT) = ZL(1:D%NIJT,1:D%NKT) * (CSTURB%XALPSBL**(3./2.)*CST%XKARMAN*CSTURB%XCED) & / (CST%XKARMAN/SQRT(CSTURB%XALPSBL)/CSTURB%XCMFS) -!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) +!$mnh_end_expand_array(JIJ=1:D%NIJT,JK=1:D%NKT) ! -!$mnh_expand_where(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) -WHERE (ZZ_O_LMO(IIB:IIE,IJB:IJE,1:D%NKT)<0.) - ZL(IIB:IIE,IJB:IJE,1:D%NKT) = ZL(IIB:IIE,IJB:IJE,1:D%NKT)/(1.-1.9*ZZ_O_LMO(IIB:IIE,IJB:IJE,1:D%NKT)) +!$mnh_expand_where(JIJ=1:D%NIJT,JK=1:D%NKT) +WHERE (ZZ_O_LMO(1:D%NIJT,1:D%NKT)<0.) + ZL(1:D%NIJT,1:D%NKT) = ZL(1:D%NIJT,1:D%NKT)/(1.-1.9*ZZ_O_LMO(1:D%NIJT,1:D%NKT)) ELSEWHERE - ZL(IIB:IIE,IJB:IJE,1:D%NKT) = ZL(IIB:IIE,IJB:IJE,1:D%NKT)/(1.-0.3*SQRT(ZZ_O_LMO(IIB:IIE,IJB:IJE,1:D%NKT))) + ZL(1:D%NIJT,1:D%NKT) = ZL(1:D%NIJT,1:D%NKT)/(1.-0.3*SQRT(ZZ_O_LMO(1:D%NIJT,1:D%NKT))) END WHERE -!$mnh_end_expand_where(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) +!$mnh_end_expand_where(JIJ=1:D%NIJT,JK=1:D%NKT) ! -!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) -PLEPS(IIB:IIE,IJB:IJE,1:D%NKT)=(1.-ZGAM(IIB:IIE,IJB:IJE,1:D%NKT))*ZL(IIB:IIE,IJB:IJE,1:D%NKT) & - +ZGAM(IIB:IIE,IJB:IJE,1:D%NKT)*PLEPS(IIB:IIE,IJB:IJE,1:D%NKT) -!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT) +!$mnh_expand_array(JIJ=1:D%NIJT,JK=1:D%NKT) +PLEPS(1:D%NIJT,1:D%NKT)=(1.-ZGAM(1:D%NIJT,1:D%NKT))*ZL(1:D%NIJT,1:D%NKT) & + +ZGAM(1:D%NIJT,1:D%NKT)*PLEPS(1:D%NIJT,1:D%NKT) +!$mnh_end_expand_array(JIJ=1:D%NIJT,JK=1:D%NKT) ! -PLEPS(IIB:IIE,IJB:IJE,D%NKA) = PLEPS(IIB:IIE,IJB:IJE,IKB) -PLEPS(IIB:IIE,IJB:IJE,D%NKU) = PLEPS(IIB:IIE,IJB:IJE,IKE) +PLEPS(1:D%NIJT,D%NKA) = PLEPS(1:D%NIJT,IKB) +PLEPS(1:D%NIJT,D%NKU) = PLEPS(1:D%NIJT,IKE) !------------------------------------------------------------------------------- ! IF (LHOOK) CALL DR_HOOK('RMC01',1,ZHOOK_HANDLE) diff --git a/src/common/turb/mode_sbl_phy.F90 b/src/common/turb/mode_sbl_phy.F90 index 82dd100e171783aa49112c836d5686f7b3f5f71e..a68007cbf958791bea23ff491b034dd0e2e2b205 100644 --- a/src/common/turb/mode_sbl_phy.F90 +++ b/src/common/turb/mode_sbl_phy.F90 @@ -54,20 +54,20 @@ USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t IMPLICIT NONE ! TYPE(DIMPHYEX_t), INTENT(IN) :: D -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PZ_O_LMO -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT) :: BUSINGERPHIM +REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PZ_O_LMO +REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT) :: BUSINGERPHIM ! REAL(KIND=JPRB) :: ZHOOK_HANDLE -INTEGER :: JI,JJ,JK +INTEGER :: JIJ,JK ! IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIM',0,ZHOOK_HANDLE) -!$mnh_expand_where(JI=D%NIBC:D%NIEC,JJ=D%NJBC:D%NJEC,JK=1:D%NKT) -WHERE ( PZ_O_LMO(D%NIBC:D%NIEC,D%NJBC:D%NJEC,1:D%NKT) < 0. ) - BUSINGERPHIM(D%NIBC:D%NIEC,D%NJBC:D%NJEC,1:D%NKT) = (1.-15.*PZ_O_LMO(D%NIBC:D%NIEC,D%NJBC:D%NJEC,1:D%NKT))**(-0.25) +!$mnh_expand_where(JIJ=1:D%NIEC*D%NJEC,JK=1:D%NKT) +WHERE ( PZ_O_LMO(1:D%NIEC*D%NJEC,1:D%NKT) < 0. ) + BUSINGERPHIM(1:D%NIEC*D%NJEC,1:D%NKT) = (1.-15.*PZ_O_LMO(1:D%NIEC*D%NJEC,1:D%NKT))**(-0.25) ELSEWHERE - BUSINGERPHIM(D%NIBC:D%NIEC,D%NJBC:D%NJEC,1:D%NKT) = 1. + 4.7 * PZ_O_LMO(D%NIBC:D%NIEC,D%NJBC:D%NJEC,1:D%NKT) + BUSINGERPHIM(1:D%NIEC*D%NJEC,1:D%NKT) = 1. + 4.7 * PZ_O_LMO(1:D%NIEC*D%NJEC,1:D%NKT) END WHERE -!$mnh_end_expand_where(JI=D%NIBC:D%NIEC,JJ=D%NJBC:D%NJEC,JK=1:D%NKT) +!$mnh_end_expand_where(JIJ=1:D%NIEC*D%NJEC,JK=1:D%NKT) IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIM',1,ZHOOK_HANDLE) END SUBROUTINE BUSINGER_PHIM ! @@ -80,20 +80,20 @@ USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t IMPLICIT NONE ! TYPE(DIMPHYEX_t), INTENT(IN) :: D -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PZ_O_LMO -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT) :: BUSINGERPHIH +REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PZ_O_LMO +REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT) :: BUSINGERPHIH ! REAL(KIND=JPRB) :: ZHOOK_HANDLE -INTEGER :: JI,JJ,JK +INTEGER :: JIJ,JK ! IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIH',0,ZHOOK_HANDLE) -!$mnh_expand_where(JI=D%NIBC:D%NIEC,JJ=D%NJBC:D%NJEC,JK=1:D%NKT) -WHERE ( PZ_O_LMO(D%NIBC:D%NIEC,D%NJBC:D%NJEC,1:D%NKT) < 0. ) - BUSINGERPHIH(D%NIBC:D%NIEC,D%NJBC:D%NJEC,1:D%NKT) = 0.74 * (1.-9.*PZ_O_LMO(D%NIBC:D%NIEC,D%NJBC:D%NJEC,1:D%NKT))**(-0.5) +!$mnh_expand_where(JIJ=1:D%NIEC*D%NJEC,JK=1:D%NKT) +WHERE ( PZ_O_LMO(1:D%NIEC*D%NJEC,1:D%NKT) < 0. ) + BUSINGERPHIH(1:D%NIEC*D%NJEC,1:D%NKT) = 0.74 * (1.-9.*PZ_O_LMO(1:D%NIEC*D%NJEC,1:D%NKT))**(-0.5) ELSEWHERE - BUSINGERPHIH(D%NIBC:D%NIEC,D%NJBC:D%NJEC,1:D%NKT) = 0.74 + 4.7 * PZ_O_LMO(D%NIBC:D%NIEC,D%NJBC:D%NJEC,1:D%NKT) + BUSINGERPHIH(1:D%NIEC*D%NJEC,1:D%NKT) = 0.74 + 4.7 * PZ_O_LMO(1:D%NIEC*D%NJEC,1:D%NKT) END WHERE -!$mnh_end_expand_where(JI=D%NIBC:D%NIEC,JJ=D%NJBC:D%NJEC,JK=1:D%NKT) +!$mnh_end_expand_where(JIJ=1:D%NIEC*D%NJEC,JK=1:D%NKT) IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIH',1,ZHOOK_HANDLE) END SUBROUTINE BUSINGER_PHIH ! @@ -107,21 +107,21 @@ IMPLICIT NONE ! TYPE(DIMPHYEX_t), INTENT(IN) :: D TYPE(CSTURB_t), INTENT(IN) :: CSTURB -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PZ_O_LMO -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT) :: BUSINGERPHIE +REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PZ_O_LMO +REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT) :: BUSINGERPHIE ! REAL(KIND=JPRB) :: ZHOOK_HANDLE -INTEGER :: JI,JJ,JK +INTEGER :: JIJ,JK ! IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIE',0,ZHOOK_HANDLE) -!$mnh_expand_where(JI=D%NIBC:D%NIEC,JJ=D%NJBC:D%NJEC,JK=1:D%NKT) -WHERE ( PZ_O_LMO(D%NIBC:D%NIEC,D%NJBC:D%NJEC,1:D%NKT) < 0. ) - BUSINGERPHIE(D%NIBC:D%NIEC,D%NJBC:D%NJEC,1:D%NKT)=(1.+(-PZ_O_LMO(D%NIBC:D%NIEC,D%NJBC:D%NJEC,1:D%NKT))**(2./3.)/CSTURB%XALPSBL)& - * (1.-15.*PZ_O_LMO(D%NIBC:D%NIEC,D%NJBC:D%NJEC,1:D%NKT))**(0.5) +!$mnh_expand_where(JIJ=1:D%NIEC*D%NJEC,JK=1:D%NKT) +WHERE ( PZ_O_LMO(1:D%NIEC*D%NJEC,1:D%NKT) < 0. ) + BUSINGERPHIE(1:D%NIEC*D%NJEC,1:D%NKT)=(1.+(-PZ_O_LMO(1:D%NIEC*D%NJEC,1:D%NKT))**(2./3.)/CSTURB%XALPSBL)& + * (1.-15.*PZ_O_LMO(1:D%NIEC*D%NJEC,1:D%NKT))**(0.5) ELSEWHERE - BUSINGERPHIE(D%NIBC:D%NIEC,D%NJBC:D%NJEC,1:D%NKT) = 1./(1. + 4.7 * PZ_O_LMO(D%NIBC:D%NIEC,D%NJBC:D%NJEC,1:D%NKT))**2 + BUSINGERPHIE(1:D%NIEC*D%NJEC,1:D%NKT) = 1./(1. + 4.7 * PZ_O_LMO(1:D%NIEC*D%NJEC,1:D%NKT))**2 END WHERE -!$mnh_end_expand_where(JI=D%NIBC:D%NIEC,JJ=D%NJBC:D%NJEC,JK=1:D%NKT) +!$mnh_end_expand_where(JIJ=1:D%NIEC*D%NJEC,JK=1:D%NKT) IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIE',1,ZHOOK_HANDLE) END SUBROUTINE BUSINGER_PHIE END MODULE MODE_SBL_PHY