From b95532025d5e13acfdb8fe6c74e0cc9d396d7d0f Mon Sep 17 00:00:00 2001 From: Quentin Rodier <quentin.rodier@meteo.fr> Date: Fri, 24 Jun 2022 16:19:52 +0200 Subject: [PATCH] Quentin 24/06/2022: preparing NPROMA incomplete blocks by using NIJB and NIJE (next) --- src/arome/aux/mode_fill_dimphyexn.F90 | 2 + src/common/aux/modd_dimphyexn.F90 | 2 + src/common/turb/mode_bl89.F90 | 36 +++--- src/common/turb/mode_rmc01.F90 | 162 ++++++++++++------------ src/common/turb/mode_tridiag.F90 | 94 +++++++------- src/common/turb/mode_tridiag_thermo.F90 | 136 ++++++++++---------- src/common/turb/mode_tridiag_tke.F90 | 96 +++++++------- src/common/turb/mode_tridiag_wind.F90 | 96 +++++++------- 8 files changed, 314 insertions(+), 310 deletions(-) diff --git a/src/arome/aux/mode_fill_dimphyexn.F90 b/src/arome/aux/mode_fill_dimphyexn.F90 index 4fd9eb5f0..713626623 100644 --- a/src/arome/aux/mode_fill_dimphyexn.F90 +++ b/src/arome/aux/mode_fill_dimphyexn.F90 @@ -65,6 +65,8 @@ YDDIMPHYEX%NJB=1 YDDIMPHYEX%NJE=KJT ! YDDIMPHYEX%NIJT=KIT*KJT +YDDIMPHYEX%NIJB=1 +YDDIMPHYEX%NIJE=KIE ! YDDIMPHYEX%NKL=-1 YDDIMPHYEX%NKT=KKT diff --git a/src/common/aux/modd_dimphyexn.F90 b/src/common/aux/modd_dimphyexn.F90 index b734113c7..b1a9ef2c9 100644 --- a/src/common/aux/modd_dimphyexn.F90 +++ b/src/common/aux/modd_dimphyexn.F90 @@ -71,6 +71,8 @@ TYPE DIMPHYEX_t INTEGER :: NIEC ! except in turbulence where external HALO points must be INTEGER :: NJEC ! included so NIBC=NJBC=1 and NIEC/NJEC=NIT/NJT INTEGER :: NIJT ! NIT*NJT for horizontal packing + INTEGER :: NIJB ! First horizontal inner mass point index + INTEGER :: NIJE ! Last horizontal inner mass point index ! END TYPE DIMPHYEX_t ! diff --git a/src/common/turb/mode_bl89.F90 b/src/common/turb/mode_bl89.F90 index a60377ec7..c110da535 100644 --- a/src/common/turb/mode_bl89.F90 +++ b/src/common/turb/mode_bl89.F90 @@ -144,9 +144,9 @@ ELSE !Atmosphere case END DO END IF ! -!$mnh_expand_array(JIJ=1:D%NIJT,JK=1:D%NKT) -ZSQRT_TKE(1:D%NIJT,1:D%NKT) = SQRT(PTKEM(1:D%NIJT,1:D%NKT)) -!$mnh_end_expand_array(JIJ=1:D%NIJT,JK=1:D%NKT) +!$mnh_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT) +ZSQRT_TKE(D%NIJB:D%NIJE,1:D%NKT) = SQRT(PTKEM(D%NIJB:D%NIJE,1:D%NKT)) +!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT) ! !ZBL89EXP is defined here because (and not in ini_cturb) because CSTURB%XCED is defined in read_exseg (depending on BL89/RM17) ZBL89EXP = LOG(16.)/(4.*LOG(CST%XKARMAN)+LOG(CSTURB%XCED)-3.*LOG(CSTURB%XCMFS)) @@ -157,18 +157,18 @@ ZUSRBL89 = 1./ZBL89EXP ! ----------------------------------------------- ! IF(KRR /= 0) THEN - ZSUM(1:D%NIJT,1:D%NKT) = 0. + ZSUM(D%NIJB:D%NIJE,1:D%NKT) = 0. DO JRR=1,KRR - !$mnh_expand_array(JIJ=1:D%NIJT,JK=1:D%NKT) - ZSUM(1:D%NIJT,1:D%NKT) = ZSUM(1:D%NIJT,1:D%NKT)+PRM(1:D%NIJT,1:D%NKT,JRR) - !$mnh_end_expand_array(JIJ=1:D%NIJT,JK=1:D%NKT) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT) + ZSUM(D%NIJB:D%NIJE,1:D%NKT) = ZSUM(D%NIJB:D%NIJE,1:D%NKT)+PRM(D%NIJB:D%NIJE,1:D%NKT,JRR) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT) ENDDO - !$mnh_expand_array(JIJ=1:D%NIJT,JK=1:D%NKT) - ZVPT(1:D%NIJT,1:D%NKT)=PTHLM(1:D%NIJT,1:D%NKT) * ( 1. + ZRVORD*PRM(1:D%NIJT,1:D%NKT,1) ) & - / ( 1. + ZSUM(1:D%NIJT,1:D%NKT) ) - !$mnh_end_expand_array(JIJ=1:D%NIJT,JK=1:D%NKT) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT) + ZVPT(D%NIJB:D%NIJE,1:D%NKT)=PTHLM(D%NIJB:D%NIJE,1:D%NKT) * ( 1. + ZRVORD*PRM(D%NIJB:D%NIJE,1:D%NKT,1) ) & + / ( 1. + ZSUM(D%NIJB:D%NIJE,1:D%NKT) ) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT) ELSE - ZVPT(1:D%NIJT,1:D%NKT)=PTHLM(1:D%NIJT,1:D%NKT) + ZVPT(D%NIJB:D%NIJE,1:D%NKT)=PTHLM(D%NIJB:D%NIJE,1:D%NKT) END IF ! !!!!!!!!!!!! @@ -215,7 +215,7 @@ DO JK=D%NKTB,D%NKTE ! !* 4. mixing length for a downwards displacement ! ------------------------------------------ - ZINTE(1:D%NIJT)=PTKEM(1:D%NIJT,JK) + ZINTE(D%NIJB:D%NIJE)=PTKEM(D%NIJB:D%NIJE,JK) ZLWORK=0. ZTESTM=1. DO JKK=JK,D%NKB,-D%NKL @@ -264,8 +264,8 @@ DO JK=D%NKTB,D%NKTE !* 6. mixing length for an upwards displacement ! ----------------------------------------- ! - ZINTE(1:D%NIJT)=PTKEM(1:D%NIJT,JK) - ZLWORK(1:D%NIJT)=0. + ZINTE(D%NIJB:D%NIJE)=PTKEM(D%NIJB:D%NIJE,JK) + ZLWORK(D%NIJB:D%NIJE)=0. ZTESTM=1. ! DO JKK=JK+D%NKL,D%NKE,D%NKL @@ -330,9 +330,9 @@ END DO !* 9. boundaries ! ---------- ! -PLM(1:D%NIJT,D%NKA)=PLM(1:D%NIJT,D%NKB) -PLM(1:D%NIJT,D%NKE)=PLM(1:D%NIJT,D%NKE-D%NKL) -PLM(1:D%NIJT,D%NKU)=PLM(1:D%NIJT,D%NKE-D%NKL) +PLM(D%NIJB:D%NIJE,D%NKA)=PLM(D%NIJB:D%NIJE,D%NKB) +PLM(D%NIJB:D%NIJE,D%NKE)=PLM(D%NIJB:D%NIJE,D%NKE-D%NKL) +PLM(D%NIJB:D%NIJE,D%NKU)=PLM(D%NIJB:D%NIJE,D%NKE-D%NKL) ! !------------------------------------------------------------------------------- ! diff --git a/src/common/turb/mode_rmc01.F90 b/src/common/turb/mode_rmc01.F90 index 709d5879a..f15d2d9a3 100644 --- a/src/common/turb/mode_rmc01.F90 +++ b/src/common/turb/mode_rmc01.F90 @@ -118,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(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) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + ZZZ(D%NIJB:D%NIJE,JK) = ZZZ(D%NIJB:D%NIJE,JK) - PZZ(D%NIJB:D%NIJE,IKB) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) END DO ! fill upper level with physical value -!$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) +!$mnh_expand_array(JIJ=D%NIJB:D%NIJE) +ZZZ(D%NIJB:D%NIJE,D%NKU) = 2.*ZZZ(D%NIJB:D%NIJE,D%NKU-D%NKL) - ZZZ(D%NIJB:D%NIJE,D%NKU-2*D%NKL) +!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) ! !------------------------------------------------------------------------------- ! @@ -134,18 +134,18 @@ ZZZ(1:D%NIJT,D%NKU) = 2.*ZZZ(1:D%NIJT,D%NKU-D%NKL) - ZZZ(1:D%NIJT,D%NKU-2*D%NKL) ! ! z/LMO DO JK=1,D%NKT - !$mnh_expand_where(JIJ=1:D%NIJT) - WHERE (PLMO(1:D%NIJT)==XUNDEF) - ZZ_O_LMO(1:D%NIJT,JK)=0. + !$mnh_expand_where(JIJ=D%NIJB:D%NIJE) + WHERE (PLMO(D%NIJB:D%NIJE)==XUNDEF) + ZZ_O_LMO(D%NIJB:D%NIJE,JK)=0. ELSEWHERE - ZZ_O_LMO(1:D%NIJT,JK)=ZZZ(1:D%NIJT,JK)*PDIRCOSZW(1:D%NIJT)/PLMO(1:D%NIJT) + ZZ_O_LMO(D%NIJB:D%NIJE,JK)=ZZZ(D%NIJB:D%NIJE,JK)*PDIRCOSZW(D%NIJB:D%NIJE)/PLMO(D%NIJB:D%NIJE) END WHERE - !$mnh_end_expand_where(JIJ=1:D%NIJT) + !$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE) END DO -!$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) +!$mnh_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT) +ZZ_O_LMO(D%NIJB:D%NIJE,1:D%NKT) = MAX(ZZ_O_LMO(D%NIJB:D%NIJE,1:D%NKT),-10.) +ZZ_O_LMO(D%NIJB:D%NIJE,1:D%NKT) = MIN(ZZ_O_LMO(D%NIJB:D%NIJE,1:D%NKT), 10.) +!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT) ! ! ! MO function for stress @@ -169,42 +169,42 @@ SELECT CASE (HTURBLEN) CASE ('DELT','DEAR') CALL MXF_PHY(D,PDXX,ZWORK1) CALL MYF_PHY(D,PDYY,ZWORK2) - !$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) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT) + ZDH(D%NIJB:D%NIJE,1:D%NKT) = SQRT(ZWORK1(D%NIJB:D%NIJE,1:D%NKT)*ZWORK2(D%NIJB:D%NIJE,1:D%NKT)) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE,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(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) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + ZZC(D%NIJB:D%NIJE,JK) = 2.*MIN(ZPHIM(D%NIJB:D%NIJE,JK),1.)/CST%XKARMAN & + * MAX( PDZZ(D%NIJB:D%NIJE,JK)*PDIRCOSZW(D%NIJB:D%NIJE) , & + ZDH(D%NIJB:D%NIJE,JK)/PDIRCOSZW(D%NIJB:D%NIJE)/3. ) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) END DO ! !* 4. factor controling the transition between SBL and free isotropic turb. (3D case) ! -------------------------------------------------------------------- ! - ZGAM(1:D%NIJT,D%NKA) = 0. + ZGAM(D%NIJB:D%NIJE,D%NKA) = 0. DO JK=IKTB,IKTE - !$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. + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + ZGAM(D%NIJB:D%NIJE,JK) = 1. - EXP( -3.*(ZZZ(D%NIJB:D%NIJE,JK)-ZZZ(D%NIJB:D%NIJE,IKB))/(ZZC(D%NIJB:D%NIJE,JK)) ) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) + !$mnh_expand_where(JIJ=D%NIJB:D%NIJE) + WHERE (ZGAM(D%NIJB:D%NIJE,JK-D%NKL)>ZGAM(D%NIJB:D%NIJE,JK) .OR. ZGAM(D%NIJB:D%NIJE,JK-D%NKL)>0.99 ) + ZGAM(D%NIJB:D%NIJE,JK) = 1. END WHERE - !$mnh_end_expand_where(JIJ=1:D%NIJT) + !$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE) END DO - !$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. + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + ZGAM(D%NIJB:D%NIJE,D%NKU) = 1. - EXP( -3.*(ZZZ(D%NIJB:D%NIJE,D%NKU)-ZZZ(D%NIJB:D%NIJE,IKB))& + /(ZZC(D%NIJB:D%NIJE,D%NKU)) ) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) + !$mnh_expand_where(JIJ=D%NIJB:D%NIJE) + WHERE (ZGAM(D%NIJB:D%NIJE,D%NKU-D%NKL)>ZGAM(D%NIJB:D%NIJE,D%NKU) .OR. ZGAM(D%NIJB:D%NIJE,D%NKU-D%NKL)>0.99 ) + ZGAM(D%NIJB:D%NIJE,D%NKU) = 1. END WHERE - !$mnh_end_expand_where(JIJ=1:D%NIJT) + !$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE) ! ! !------------------------------------------------------------------------------- @@ -214,30 +214,30 @@ SELECT CASE (HTURBLEN) ! CASE DEFAULT !* SBL depth is used - ZGAM(1:D%NIJT,1:D%NKT) = 1. - ZGAM(1:D%NIJT,D%NKA) = 0. + ZGAM(D%NIJB:D%NIJE,1:D%NKT) = 1. + ZGAM(D%NIJB:D%NIJE,D%NKA) = 0. DO JK=IKTB,IKTE - !$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) ) + !$mnh_expand_where(JIJ=D%NIJB:D%NIJE) + WHERE(PSBL_DEPTH(D%NIJB:D%NIJE)>0.) + ZGAM(D%NIJB:D%NIJE,JK) = TANH( (ZZZ(D%NIJB:D%NIJE,JK)-ZZZ(D%NIJB:D%NIJE,IKB))/PSBL_DEPTH(D%NIJB:D%NIJE) ) END WHERE - !$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. + !$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE) + !$mnh_expand_where(JIJ=D%NIJB:D%NIJE) + WHERE (ZGAM(D%NIJB:D%NIJE,JK-D%NKL)>0.99 ) + ZGAM(D%NIJB:D%NIJE,JK) = 1. END WHERE - !$mnh_end_expand_where(JIJ=1:D%NIJT) + !$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE) END DO - !$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) ) + !$mnh_expand_where(JIJ=D%NIJB:D%NIJE) + WHERE(PSBL_DEPTH(D%NIJB:D%NIJE)>0.) + ZGAM(D%NIJB:D%NIJE,D%NKU) = TANH( (ZZZ(D%NIJB:D%NIJE,D%NKU)-ZZZ(D%NIJB:D%NIJE,IKB))/PSBL_DEPTH(D%NIJB:D%NIJE) ) END WHERE - !$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. + !$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE) + !$mnh_expand_where(JIJ=D%NIJB:D%NIJE) + WHERE (ZGAM(D%NIJB:D%NIJE,D%NKU-D%NKL)>0.99 ) + ZGAM(D%NIJB:D%NIJE,JK) = 1. END WHERE - !$mnh_end_expand_where(JIJ=1:D%NIJT) + !$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE) ! !------------------------------------------------------------------------------- END SELECT @@ -247,44 +247,44 @@ END SELECT ! --------------------------------- ! DO JK=1,D%NKT -!$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) +!$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + ZL(D%NIJB:D%NIJE,JK) = CST%XKARMAN/SQRT(CSTURB%XALPSBL)/CSTURB%XCMFS & + * ZZZ(D%NIJB:D%NIJE,JK)*PDIRCOSZW(D%NIJB:D%NIJE)/(ZPHIM(D%NIJB:D%NIJE,JK)**2*SQRT(ZPHIE(D%NIJB:D%NIJE,JK))) +!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) END DO ! -!$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) +!$mnh_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT) +PLK(D%NIJB:D%NIJE,1:D%NKT)=(1.-ZGAM(D%NIJB:D%NIJE,1:D%NKT))*ZL(D%NIJB:D%NIJE,1:D%NKT) & + +ZGAM(D%NIJB:D%NIJE,1:D%NKT)*PLK(D%NIJB:D%NIJE,1:D%NKT) +!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT) ! -PLK(1:D%NIJT,D%NKA) = PLK(1:D%NIJT,IKB) -PLK(1:D%NIJT,D%NKU) = PLK(1:D%NIJT,IKE) +PLK(D%NIJB:D%NIJE,D%NKA) = PLK(D%NIJB:D%NIJE,IKB) +PLK(D%NIJB:D%NIJE,D%NKU) = PLK(D%NIJB:D%NIJE,IKE) !------------------------------------------------------------------------------- ! !* 7. Modification of the dissipative length ! -------------------------------------- ! -!$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) & +!$mnh_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT) +ZL(D%NIJB:D%NIJE,1:D%NKT) = ZL(D%NIJB:D%NIJE,1:D%NKT) * (CSTURB%XALPSBL**(3./2.)*CST%XKARMAN*CSTURB%XCED) & / (CST%XKARMAN/SQRT(CSTURB%XALPSBL)/CSTURB%XCMFS) -!$mnh_end_expand_array(JIJ=1:D%NIJT,JK=1:D%NKT) +!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE,JK=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)) +!$mnh_expand_where(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT) +WHERE (ZZ_O_LMO(D%NIJB:D%NIJE,1:D%NKT)<0.) + ZL(D%NIJB:D%NIJE,1:D%NKT) = ZL(D%NIJB:D%NIJE,1:D%NKT)/(1.-1.9*ZZ_O_LMO(D%NIJB:D%NIJE,1:D%NKT)) ELSEWHERE - 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))) + ZL(D%NIJB:D%NIJE,1:D%NKT) = ZL(D%NIJB:D%NIJE,1:D%NKT)/(1.-0.3*SQRT(ZZ_O_LMO(D%NIJB:D%NIJE,1:D%NKT))) END WHERE -!$mnh_end_expand_where(JIJ=1:D%NIJT,JK=1:D%NKT) +!$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE,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) +!$mnh_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT) +PLEPS(D%NIJB:D%NIJE,1:D%NKT)=(1.-ZGAM(D%NIJB:D%NIJE,1:D%NKT))*ZL(D%NIJB:D%NIJE,1:D%NKT) & + +ZGAM(D%NIJB:D%NIJE,1:D%NKT)*PLEPS(D%NIJB:D%NIJE,1:D%NKT) +!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT) ! -PLEPS(1:D%NIJT,D%NKA) = PLEPS(1:D%NIJT,IKB) -PLEPS(1:D%NIJT,D%NKU) = PLEPS(1:D%NIJT,IKE) +PLEPS(D%NIJB:D%NIJE,D%NKA) = PLEPS(D%NIJB:D%NIJE,IKB) +PLEPS(D%NIJB:D%NIJE,D%NKU) = PLEPS(D%NIJB:D%NIJE,IKE) !------------------------------------------------------------------------------- ! IF (LHOOK) CALL DR_HOOK('RMC01',1,ZHOOK_HANDLE) diff --git a/src/common/turb/mode_tridiag.F90 b/src/common/turb/mode_tridiag.F90 index 046a0dcc8..78a23b2cf 100644 --- a/src/common/turb/mode_tridiag.F90 +++ b/src/common/turb/mode_tridiag.F90 @@ -158,27 +158,27 @@ IKTE=D%NKTE IKB=D%NKB IKE=D%NKE ! -!$mnh_expand_array(JIJ=1:D%NIJT) -ZY(1:D%NIJT,IKB) = PVARM(1:D%NIJT,IKB) + PTSTEP*PSOURCE(1:D%NIJT,IKB) - & - PEXPL / PRHODJ(1:D%NIJT,IKB) * PA(1:D%NIJT,IKB+D%NKL) * & - (PVARM(1:D%NIJT,IKB+D%NKL) - PVARM(1:D%NIJT,IKB)) -!$mnh_end_expand_array(JIJ=1:D%NIJT) +!$mnh_expand_array(JIJ=D%NIJB:D%NIJE) +ZY(D%NIJB:D%NIJE,IKB) = PVARM(D%NIJB:D%NIJE,IKB) + PTSTEP*PSOURCE(D%NIJB:D%NIJE,IKB) - & + PEXPL / PRHODJ(D%NIJB:D%NIJE,IKB) * PA(D%NIJB:D%NIJE,IKB+D%NKL) * & + (PVARM(D%NIJB:D%NIJE,IKB+D%NKL) - PVARM(D%NIJB:D%NIJE,IKB)) +!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) ! DO JK=IKTB+1,IKTE-1 - !$mnh_expand_array(JIJ=1:D%NIJT) - ZY(1:D%NIJT,JK)= PVARM(1:D%NIJT,JK) + PTSTEP*PSOURCE(1:D%NIJT,JK) - & - PEXPL / PRHODJ(1:D%NIJT,JK) * & - ( PVARM(1:D%NIJT,JK-D%NKL)*PA(1:D%NIJT,JK) & - -PVARM(1:D%NIJT,JK)*(PA(1:D%NIJT,JK)+PA(1:D%NIJT,JK+D%NKL)) & - +PVARM(1:D%NIJT,JK+D%NKL)*PA(1:D%NIJT,JK+D%NKL) & + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + ZY(D%NIJB:D%NIJE,JK)= PVARM(D%NIJB:D%NIJE,JK) + PTSTEP*PSOURCE(D%NIJB:D%NIJE,JK) - & + PEXPL / PRHODJ(D%NIJB:D%NIJE,JK) * & + ( PVARM(D%NIJB:D%NIJE,JK-D%NKL)*PA(D%NIJB:D%NIJE,JK) & + -PVARM(D%NIJB:D%NIJE,JK)*(PA(D%NIJB:D%NIJE,JK)+PA(D%NIJB:D%NIJE,JK+D%NKL)) & + +PVARM(D%NIJB:D%NIJE,JK+D%NKL)*PA(D%NIJB:D%NIJE,JK+D%NKL) & ) - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) END DO ! -!$mnh_expand_array(JIJ=1:D%NIJT) -ZY(1:D%NIJT,IKE)= PVARM(1:D%NIJT,IKE) + PTSTEP*PSOURCE(1:D%NIJT,IKE) + & - PEXPL / PRHODJ(1:D%NIJT,IKE) * PA(1:D%NIJT,IKE) * (PVARM(1:D%NIJT,IKE)-PVARM(1:D%NIJT,IKE-D%NKL)) -!$mnh_end_expand_array(JIJ=1:D%NIJT) +!$mnh_expand_array(JIJ=D%NIJB:D%NIJE) +ZY(D%NIJB:D%NIJE,IKE)= PVARM(D%NIJB:D%NIJE,IKE) + PTSTEP*PSOURCE(D%NIJB:D%NIJE,IKE) + & + PEXPL / PRHODJ(D%NIJB:D%NIJE,IKE) * PA(D%NIJB:D%NIJE,IKE) * (PVARM(D%NIJB:D%NIJE,IKE)-PVARM(D%NIJB:D%NIJE,IKE-D%NKL)) +!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) ! ! !* 2. INVERSION OF THE TRIDIAGONAL SYSTEM @@ -189,52 +189,52 @@ IF ( PIMPL > 1.E-10 ) THEN ! ! going up ! - !$mnh_expand_array(JIJ=1:D%NIJT) - ZBET(1:D%NIJT) = 1. - PIMPL * PA(1:D%NIJT,IKB+D%NKL) / PRHODJ(1:D%NIJT,IKB) ! bet = b(ikb) - PVARP(1:D%NIJT,IKB) = ZY(1:D%NIJT,IKB) / ZBET(1:D%NIJT) - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + ZBET(D%NIJB:D%NIJE) = 1. - PIMPL * PA(D%NIJB:D%NIJE,IKB+D%NKL) / PRHODJ(D%NIJB:D%NIJE,IKB) ! bet = b(ikb) + PVARP(D%NIJB:D%NIJE,IKB) = ZY(D%NIJB:D%NIJE,IKB) / ZBET(D%NIJB:D%NIJE) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) ! DO JK = IKB+D%NKL,IKE-D%NKL,D%NKL - !$mnh_expand_array(JIJ=1:D%NIJT) - ZGAM(1:D%NIJT,JK) = PIMPL * PA(1:D%NIJT,JK) / PRHODJ(1:D%NIJT,JK-D%NKL) / ZBET(1:D%NIJT) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + ZGAM(D%NIJB:D%NIJE,JK) = PIMPL * PA(D%NIJB:D%NIJE,JK) / PRHODJ(D%NIJB:D%NIJE,JK-D%NKL) / ZBET(D%NIJB:D%NIJE) ! gam(k) = c(k-1) / bet - ZBET(1:D%NIJT) = 1. - PIMPL * ( PA(1:D%NIJT,JK) * (1. + ZGAM(1:D%NIJT,JK)) & - + PA(1:D%NIJT,JK+D%NKL) & - ) / PRHODJ(1:D%NIJT,JK) + ZBET(D%NIJB:D%NIJE) = 1. - PIMPL * ( PA(D%NIJB:D%NIJE,JK) * (1. + ZGAM(D%NIJB:D%NIJE,JK)) & + + PA(D%NIJB:D%NIJE,JK+D%NKL) & + ) / PRHODJ(D%NIJB:D%NIJE,JK) ! bet = b(k) - a(k)* gam(k) - PVARP(1:D%NIJT,JK)= ( ZY(1:D%NIJT,JK) - PIMPL * PA(1:D%NIJT,JK) / PRHODJ(1:D%NIJT,JK) & - * PVARP(1:D%NIJT,JK-D%NKL) & - ) / ZBET(1:D%NIJT) + PVARP(D%NIJB:D%NIJE,JK)= ( ZY(D%NIJB:D%NIJE,JK) - PIMPL * PA(D%NIJB:D%NIJE,JK) / PRHODJ(D%NIJB:D%NIJE,JK) & + * PVARP(D%NIJB:D%NIJE,JK-D%NKL) & + ) / ZBET(D%NIJB:D%NIJE) ! res(k) = (y(k) -a(k)*res(k-1))/ bet - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) END DO - !$mnh_expand_array(JIJ=1:D%NIJT) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) ! special treatment for the last level - ZGAM(1:D%NIJT,IKE) = PIMPL * PA(1:D%NIJT,IKE) / PRHODJ(1:D%NIJT,IKE-D%NKL) / ZBET(1:D%NIJT) + ZGAM(D%NIJB:D%NIJE,IKE) = PIMPL * PA(D%NIJB:D%NIJE,IKE) / PRHODJ(D%NIJB:D%NIJE,IKE-D%NKL) / ZBET(D%NIJB:D%NIJE) ! gam(k) = c(k-1) / bet - ZBET(1:D%NIJT) = 1. - PIMPL * ( PA(1:D%NIJT,IKE) * (1. + ZGAM(1:D%NIJT,IKE)) & - ) / PRHODJ(1:D%NIJT,IKE) + ZBET(D%NIJB:D%NIJE) = 1. - PIMPL * ( PA(D%NIJB:D%NIJE,IKE) * (1. + ZGAM(D%NIJB:D%NIJE,IKE)) & + ) / PRHODJ(D%NIJB:D%NIJE,IKE) ! bet = b(k) - a(k)* gam(k) - PVARP(1:D%NIJT,IKE)= ( ZY(1:D%NIJT,IKE) - PIMPL * PA(1:D%NIJT,IKE) / PRHODJ(1:D%NIJT,IKE) & - * PVARP(1:D%NIJT,IKE-D%NKL) & - ) / ZBET(1:D%NIJT) + PVARP(D%NIJB:D%NIJE,IKE)= ( ZY(D%NIJB:D%NIJE,IKE) - PIMPL * PA(D%NIJB:D%NIJE,IKE) / PRHODJ(D%NIJB:D%NIJE,IKE) & + * PVARP(D%NIJB:D%NIJE,IKE-D%NKL) & + ) / ZBET(D%NIJB:D%NIJE) ! res(k) = (y(k) -a(k)*res(k-1))/ bet ! ! going down ! - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) DO JK = IKE-D%NKL,IKB,-1*D%NKL - !$mnh_expand_array(JIJ=1:D%NIJT) - PVARP(1:D%NIJT,JK) = PVARP(1:D%NIJT,JK) - ZGAM(1:D%NIJT,JK+D%NKL) * PVARP(1:D%NIJT,JK+D%NKL) - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + PVARP(D%NIJB:D%NIJE,JK) = PVARP(D%NIJB:D%NIJE,JK) - ZGAM(D%NIJB:D%NIJE,JK+D%NKL) * PVARP(D%NIJB:D%NIJE,JK+D%NKL) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) END DO ! ELSE ! DO JK=IKTB,IKTE - !$mnh_expand_array(JIJ=1:D%NIJT) - PVARP(1:D%NIJT,JK) = ZY(1:D%NIJT,JK) - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + PVARP(D%NIJB:D%NIJE,JK) = ZY(D%NIJB:D%NIJE,JK) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) END DO ! END IF @@ -243,10 +243,10 @@ END IF !* 3. FILL THE UPPER AND LOWER EXTERNAL VALUES ! ---------------------------------------- ! -!$mnh_expand_array(JIJ=1:D%NIJT) -PVARP(1:D%NIJT,D%NKA)=PVARP(1:D%NIJT,IKB) -PVARP(1:D%NIJT,D%NKU)=PVARP(1:D%NIJT,IKE) -!$mnh_end_expand_array(JIJ=1:D%NIJT) +!$mnh_expand_array(JIJ=D%NIJB:D%NIJE) +PVARP(D%NIJB:D%NIJE,D%NKA)=PVARP(D%NIJB:D%NIJE,IKB) +PVARP(D%NIJB:D%NIJE,D%NKU)=PVARP(D%NIJB:D%NIJE,IKE) +!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) ! !------------------------------------------------------------------------------- ! diff --git a/src/common/turb/mode_tridiag_thermo.F90 b/src/common/turb/mode_tridiag_thermo.F90 index 14c21040c..2d10fbc7a 100644 --- a/src/common/turb/mode_tridiag_thermo.F90 +++ b/src/common/turb/mode_tridiag_thermo.F90 @@ -169,10 +169,10 @@ IKB=D%NKB IKE=D%NKE ! CALL MZM_PHY(D,PRHODJ,ZMZM_RHODJ) -!$mnh_expand_array(JIJ=1:D%NIJT,JK=1:D%NKT) -ZRHODJ_DFDDTDZ_O_DZ2(1:D%NIJT,1:D%NKT) = ZMZM_RHODJ(1:D%NIJT,1:D%NKT)*PDFDDTDZ(1:D%NIJT,1:D%NKT) & - /PDZZ(1:D%NIJT,1:D%NKT)**2 -!$mnh_end_expand_array(JIJ=1:D%NIJT,JK=1:D%NKT) +!$mnh_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT) +ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,1:D%NKT) = ZMZM_RHODJ(D%NIJB:D%NIJE,1:D%NKT)*PDFDDTDZ(D%NIJB:D%NIJE,1:D%NKT) & + /PDZZ(D%NIJB:D%NIJE,1:D%NKT)**2 +!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT) ! ZA=0. ZB=0. @@ -183,33 +183,33 @@ ZY=0. !* 2. COMPUTE THE RIGHT HAND SIDE ! --------------------------- ! -!$mnh_expand_array(JIJ=1:D%NIJT) -ZY(1:D%NIJT,IKB) = PRHODJ(1:D%NIJT,IKB)*PVARM(1:D%NIJT,IKB)/PTSTEP & - - ZMZM_RHODJ(1:D%NIJT,IKB+D%NKL) * PF(1:D%NIJT,IKB+D%NKL)/PDZZ(1:D%NIJT,IKB+D%NKL) & - + ZMZM_RHODJ(1:D%NIJT,IKB ) * PF(1:D%NIJT,IKB )/PDZZ(1:D%NIJT,IKB ) & - + ZRHODJ_DFDDTDZ_O_DZ2(1:D%NIJT,IKB+D%NKL) * PIMPL * PVARM(1:D%NIJT,IKB+D%NKL) & - - ZRHODJ_DFDDTDZ_O_DZ2(1:D%NIJT,IKB+D%NKL) * PIMPL * PVARM(1:D%NIJT,IKB ) -!$mnh_end_expand_array(JIJ=1:D%NIJT) +!$mnh_expand_array(JIJ=D%NIJB:D%NIJE) +ZY(D%NIJB:D%NIJE,IKB) = PRHODJ(D%NIJB:D%NIJE,IKB)*PVARM(D%NIJB:D%NIJE,IKB)/PTSTEP & + - ZMZM_RHODJ(D%NIJB:D%NIJE,IKB+D%NKL) * PF(D%NIJB:D%NIJE,IKB+D%NKL)/PDZZ(D%NIJB:D%NIJE,IKB+D%NKL) & + + ZMZM_RHODJ(D%NIJB:D%NIJE,IKB ) * PF(D%NIJB:D%NIJE,IKB )/PDZZ(D%NIJB:D%NIJE,IKB ) & + + ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,IKB+D%NKL) * PIMPL * PVARM(D%NIJB:D%NIJE,IKB+D%NKL) & + - ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,IKB+D%NKL) * PIMPL * PVARM(D%NIJB:D%NIJE,IKB ) +!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) ! DO JK=IKTB+1,IKTE-1 - !$mnh_expand_array(JIJ=1:D%NIJT) - ZY(1:D%NIJT,JK) = PRHODJ(1:D%NIJT,JK)*PVARM(1:D%NIJT,JK)/PTSTEP & - - ZMZM_RHODJ(1:D%NIJT,JK+D%NKL) * PF(1:D%NIJT,JK+D%NKL)/PDZZ(1:D%NIJT,JK+D%NKL) & - + ZMZM_RHODJ(1:D%NIJT,JK ) * PF(1:D%NIJT,JK )/PDZZ(1:D%NIJT,JK ) & - + ZRHODJ_DFDDTDZ_O_DZ2(1:D%NIJT,JK+D%NKL) * PIMPL * PVARM(1:D%NIJT,JK+D%NKL) & - - ZRHODJ_DFDDTDZ_O_DZ2(1:D%NIJT,JK+D%NKL) * PIMPL * PVARM(1:D%NIJT,JK ) & - - ZRHODJ_DFDDTDZ_O_DZ2(1:D%NIJT,JK ) * PIMPL * PVARM(1:D%NIJT,JK ) & - + ZRHODJ_DFDDTDZ_O_DZ2(1:D%NIJT,JK ) * PIMPL * PVARM(1:D%NIJT,JK-D%NKL) - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + ZY(D%NIJB:D%NIJE,JK) = PRHODJ(D%NIJB:D%NIJE,JK)*PVARM(D%NIJB:D%NIJE,JK)/PTSTEP & + - ZMZM_RHODJ(D%NIJB:D%NIJE,JK+D%NKL) * PF(D%NIJB:D%NIJE,JK+D%NKL)/PDZZ(D%NIJB:D%NIJE,JK+D%NKL) & + + ZMZM_RHODJ(D%NIJB:D%NIJE,JK ) * PF(D%NIJB:D%NIJE,JK )/PDZZ(D%NIJB:D%NIJE,JK ) & + + ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,JK+D%NKL) * PIMPL * PVARM(D%NIJB:D%NIJE,JK+D%NKL) & + - ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,JK+D%NKL) * PIMPL * PVARM(D%NIJB:D%NIJE,JK ) & + - ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,JK ) * PIMPL * PVARM(D%NIJB:D%NIJE,JK ) & + + ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,JK ) * PIMPL * PVARM(D%NIJB:D%NIJE,JK-D%NKL) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) END DO ! -!$mnh_expand_array(JIJ=1:D%NIJT) -ZY(1:D%NIJT,IKE) = PRHODJ(1:D%NIJT,IKE)*PVARM(1:D%NIJT,IKE)/PTSTEP & - - ZMZM_RHODJ(1:D%NIJT,IKE+D%NKL) * PF(1:D%NIJT,IKE+D%NKL)/PDZZ(1:D%NIJT,IKE+D%NKL) & - + ZMZM_RHODJ(1:D%NIJT,IKE ) * PF(1:D%NIJT,IKE )/PDZZ(1:D%NIJT,IKE ) & - - ZRHODJ_DFDDTDZ_O_DZ2(1:D%NIJT,IKE ) * PIMPL * PVARM(1:D%NIJT,IKE ) & - + ZRHODJ_DFDDTDZ_O_DZ2(1:D%NIJT,IKE ) * PIMPL * PVARM(1:D%NIJT,IKE-D%NKL) -!$mnh_end_expand_array(JIJ=1:D%NIJT) +!$mnh_expand_array(JIJ=D%NIJB:D%NIJE) +ZY(D%NIJB:D%NIJE,IKE) = PRHODJ(D%NIJB:D%NIJE,IKE)*PVARM(D%NIJB:D%NIJE,IKE)/PTSTEP & + - ZMZM_RHODJ(D%NIJB:D%NIJE,IKE+D%NKL) * PF(D%NIJB:D%NIJE,IKE+D%NKL)/PDZZ(D%NIJB:D%NIJE,IKE+D%NKL) & + + ZMZM_RHODJ(D%NIJB:D%NIJE,IKE ) * PF(D%NIJB:D%NIJE,IKE )/PDZZ(D%NIJB:D%NIJE,IKE ) & + - ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,IKE ) * PIMPL * PVARM(D%NIJB:D%NIJE,IKE ) & + + ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,IKE ) * PIMPL * PVARM(D%NIJB:D%NIJE,IKE-D%NKL) +!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) ! ! !* 3. INVERSION OF THE TRIDIAGONAL SYSTEM @@ -220,72 +220,72 @@ IF ( PIMPL > 1.E-10 ) THEN !* 3.1 arrays A, B, C ! -------------- ! - !$mnh_expand_array(JIJ=1:D%NIJT) - ZB(1:D%NIJT,IKB) = PRHODJ(1:D%NIJT,IKB)/PTSTEP & - - ZRHODJ_DFDDTDZ_O_DZ2(1:D%NIJT,IKB+D%NKL) * PIMPL - ZC(1:D%NIJT,IKB) = ZRHODJ_DFDDTDZ_O_DZ2(1:D%NIJT,IKB+D%NKL) * PIMPL - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + ZB(D%NIJB:D%NIJE,IKB) = PRHODJ(D%NIJB:D%NIJE,IKB)/PTSTEP & + - ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,IKB+D%NKL) * PIMPL + ZC(D%NIJB:D%NIJE,IKB) = ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,IKB+D%NKL) * PIMPL + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) ! DO JK=IKTB+1,IKTE-1 - !$mnh_expand_array(JIJ=1:D%NIJT) - ZA(1:D%NIJT,JK) = ZRHODJ_DFDDTDZ_O_DZ2(1:D%NIJT,JK) * PIMPL - ZB(1:D%NIJT,JK) = PRHODJ(1:D%NIJT,JK)/PTSTEP & - - ZRHODJ_DFDDTDZ_O_DZ2(1:D%NIJT,JK+D%NKL) * PIMPL & - - ZRHODJ_DFDDTDZ_O_DZ2(1:D%NIJT,JK) * PIMPL - ZC(1:D%NIJT,JK) = ZRHODJ_DFDDTDZ_O_DZ2(1:D%NIJT,JK+D%NKL) * PIMPL - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + ZA(D%NIJB:D%NIJE,JK) = ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,JK) * PIMPL + ZB(D%NIJB:D%NIJE,JK) = PRHODJ(D%NIJB:D%NIJE,JK)/PTSTEP & + - ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,JK+D%NKL) * PIMPL & + - ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,JK) * PIMPL + ZC(D%NIJB:D%NIJE,JK) = ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,JK+D%NKL) * PIMPL + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) END DO ! - !$mnh_expand_array(JIJ=1:D%NIJT) - ZA(1:D%NIJT,IKE) = ZRHODJ_DFDDTDZ_O_DZ2(1:D%NIJT,IKE ) * PIMPL - ZB(1:D%NIJT,IKE) = PRHODJ(1:D%NIJT,IKE)/PTSTEP & - - ZRHODJ_DFDDTDZ_O_DZ2(1:D%NIJT,IKE ) * PIMPL + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + ZA(D%NIJB:D%NIJE,IKE) = ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,IKE ) * PIMPL + ZB(D%NIJB:D%NIJE,IKE) = PRHODJ(D%NIJB:D%NIJE,IKE)/PTSTEP & + - ZRHODJ_DFDDTDZ_O_DZ2(D%NIJB:D%NIJE,IKE ) * PIMPL ! !* 3.2 going up ! -------- ! - ZBET(1:D%NIJT) = ZB(1:D%NIJT,IKB) ! bet = b(ikb) - PVARP(1:D%NIJT,IKB) = ZY(1:D%NIJT,IKB) / ZBET(1:D%NIJT) - !$mnh_end_expand_array(JIJ=1:D%NIJT) + ZBET(D%NIJB:D%NIJE) = ZB(D%NIJB:D%NIJE,IKB) ! bet = b(ikb) + PVARP(D%NIJB:D%NIJE,IKB) = ZY(D%NIJB:D%NIJE,IKB) / ZBET(D%NIJB:D%NIJE) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) ! DO JK = IKB+D%NKL,IKE-D%NKL,D%NKL - !$mnh_expand_array(JIJ=1:D%NIJT) - ZGAM(1:D%NIJT,JK) = ZC(1:D%NIJT,JK-D%NKL) / ZBET(1:D%NIJT) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + ZGAM(D%NIJB:D%NIJE,JK) = ZC(D%NIJB:D%NIJE,JK-D%NKL) / ZBET(D%NIJB:D%NIJE) ! gam(k) = c(k-1) / bet - ZBET(1:D%NIJT) = ZB(1:D%NIJT,JK) - ZA(1:D%NIJT,JK) * ZGAM(1:D%NIJT,JK) + ZBET(D%NIJB:D%NIJE) = ZB(D%NIJB:D%NIJE,JK) - ZA(D%NIJB:D%NIJE,JK) * ZGAM(D%NIJB:D%NIJE,JK) ! bet = b(k) - a(k)* gam(k) - PVARP(1:D%NIJT,JK)= ( ZY(1:D%NIJT,JK) - ZA(1:D%NIJT,JK) * PVARP(1:D%NIJT,JK-D%NKL) ) & - / ZBET(1:D%NIJT) + PVARP(D%NIJB:D%NIJE,JK)= ( ZY(D%NIJB:D%NIJE,JK) - ZA(D%NIJB:D%NIJE,JK) * PVARP(D%NIJB:D%NIJE,JK-D%NKL) ) & + / ZBET(D%NIJB:D%NIJE) ! res(k) = (y(k) -a(k)*res(k-1))/ bet - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) END DO ! special treatment for the last level - !$mnh_expand_array(JIJ=1:D%NIJT) - ZGAM(1:D%NIJT,IKE) = ZC(1:D%NIJT,IKE-D%NKL) / ZBET(1:D%NIJT) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + ZGAM(D%NIJB:D%NIJE,IKE) = ZC(D%NIJB:D%NIJE,IKE-D%NKL) / ZBET(D%NIJB:D%NIJE) ! gam(k) = c(k-1) / bet - ZBET(1:D%NIJT) = ZB(1:D%NIJT,IKE) - ZA(1:D%NIJT,IKE) * ZGAM(1:D%NIJT,IKE) + ZBET(D%NIJB:D%NIJE) = ZB(D%NIJB:D%NIJE,IKE) - ZA(D%NIJB:D%NIJE,IKE) * ZGAM(D%NIJB:D%NIJE,IKE) ! bet = b(k) - a(k)* gam(k) - PVARP(1:D%NIJT,IKE)= ( ZY(1:D%NIJT,IKE) - ZA(1:D%NIJT,IKE) * PVARP(1:D%NIJT,IKE-D%NKL) ) & - / ZBET(1:D%NIJT) + PVARP(D%NIJB:D%NIJE,IKE)= ( ZY(D%NIJB:D%NIJE,IKE) - ZA(D%NIJB:D%NIJE,IKE) * PVARP(D%NIJB:D%NIJE,IKE-D%NKL) ) & + / ZBET(D%NIJB:D%NIJE) ! res(k) = (y(k) -a(k)*res(k-1))/ bet - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) ! !* 3.3 going down ! ---------- ! DO JK = IKE-D%NKL,IKB,-1*D%NKL - !$mnh_expand_array(JIJ=1:D%NIJT) - PVARP(1:D%NIJT,JK) = PVARP(1:D%NIJT,JK) - ZGAM(1:D%NIJT,JK+D%NKL) * PVARP(1:D%NIJT,JK+D%NKL) - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + PVARP(D%NIJB:D%NIJE,JK) = PVARP(D%NIJB:D%NIJE,JK) - ZGAM(D%NIJB:D%NIJE,JK+D%NKL) * PVARP(D%NIJB:D%NIJE,JK+D%NKL) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) END DO ! ELSE ! DO JK=IKTB,IKTE - !$mnh_expand_array(JIJ=1:D%NIJT) - PVARP(1:D%NIJT,JK) = ZY(1:D%NIJT,JK) * PTSTEP / PRHODJ(1:D%NIJT,JK) - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + PVARP(D%NIJB:D%NIJE,JK) = ZY(D%NIJB:D%NIJE,JK) * PTSTEP / PRHODJ(D%NIJB:D%NIJE,JK) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) END DO ! END IF @@ -294,10 +294,10 @@ END IF !* 4. FILL THE UPPER AND LOWER EXTERNAL VALUES ! ---------------------------------------- ! -!$mnh_expand_array(JIJ=1:D%NIJT) -PVARP(1:D%NIJT,D%NKA)=PVARP(1:D%NIJT,IKB) -PVARP(1:D%NIJT,D%NKU)=PVARP(1:D%NIJT,IKE) -!$mnh_end_expand_array(JIJ=1:D%NIJT) +!$mnh_expand_array(JIJ=D%NIJB:D%NIJE) +PVARP(D%NIJB:D%NIJE,D%NKA)=PVARP(D%NIJB:D%NIJE,IKB) +PVARP(D%NIJB:D%NIJE,D%NKU)=PVARP(D%NIJB:D%NIJE,IKE) +!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) ! !------------------------------------------------------------------------------- ! diff --git a/src/common/turb/mode_tridiag_tke.F90 b/src/common/turb/mode_tridiag_tke.F90 index b1d6d3379..2b3f97af2 100644 --- a/src/common/turb/mode_tridiag_tke.F90 +++ b/src/common/turb/mode_tridiag_tke.F90 @@ -157,27 +157,27 @@ IKTE=D%NKTE IKB=D%NKB IKE=D%NKE ! -!$mnh_expand_array(JIJ=1:D%NIJT) -ZY(1:D%NIJT,IKB) = PVARM(1:D%NIJT,IKB) + PTSTEP*PSOURCE(1:D%NIJT,IKB) - & - PEXPL / PRHODJ(1:D%NIJT,IKB) * PA(1:D%NIJT,IKB+D%NKL) * & - (PVARM(1:D%NIJT,IKB+D%NKL) - PVARM(1:D%NIJT,IKB)) -!$mnh_end_expand_array(JIJ=1:D%NIJT) +!$mnh_expand_array(JIJ=D%NIJB:D%NIJE) +ZY(D%NIJB:D%NIJE,IKB) = PVARM(D%NIJB:D%NIJE,IKB) + PTSTEP*PSOURCE(D%NIJB:D%NIJE,IKB) - & + PEXPL / PRHODJ(D%NIJB:D%NIJE,IKB) * PA(D%NIJB:D%NIJE,IKB+D%NKL) * & + (PVARM(D%NIJB:D%NIJE,IKB+D%NKL) - PVARM(D%NIJB:D%NIJE,IKB)) +!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) ! DO JK=IKTB+1,IKTE-1 - !$mnh_expand_array(JIJ=1:D%NIJT) - ZY(1:D%NIJT,JK)= PVARM(1:D%NIJT,JK) + PTSTEP*PSOURCE(1:D%NIJT,JK) - & - PEXPL / PRHODJ(1:D%NIJT,JK) * & - ( PVARM(1:D%NIJT,JK-D%NKL)*PA(1:D%NIJT,JK) & - -PVARM(1:D%NIJT,JK)*(PA(1:D%NIJT,JK)+PA(1:D%NIJT,JK+D%NKL)) & - +PVARM(1:D%NIJT,JK+D%NKL)*PA(1:D%NIJT,JK+D%NKL) & + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + ZY(D%NIJB:D%NIJE,JK)= PVARM(D%NIJB:D%NIJE,JK) + PTSTEP*PSOURCE(D%NIJB:D%NIJE,JK) - & + PEXPL / PRHODJ(D%NIJB:D%NIJE,JK) * & + ( PVARM(D%NIJB:D%NIJE,JK-D%NKL)*PA(D%NIJB:D%NIJE,JK) & + -PVARM(D%NIJB:D%NIJE,JK)*(PA(D%NIJB:D%NIJE,JK)+PA(D%NIJB:D%NIJE,JK+D%NKL)) & + +PVARM(D%NIJB:D%NIJE,JK+D%NKL)*PA(D%NIJB:D%NIJE,JK+D%NKL) & ) - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) END DO ! -!$mnh_expand_array(JIJ=1:D%NIJT) -ZY(1:D%NIJT,IKE)= PVARM(1:D%NIJT,IKE) + PTSTEP*PSOURCE(1:D%NIJT,IKE) + & - PEXPL / PRHODJ(1:D%NIJT,IKE) * PA(1:D%NIJT,IKE) * (PVARM(1:D%NIJT,IKE)-PVARM(1:D%NIJT,IKE-D%NKL)) -!$mnh_end_expand_array(JIJ=1:D%NIJT) +!$mnh_expand_array(JIJ=D%NIJB:D%NIJE) +ZY(D%NIJB:D%NIJE,IKE)= PVARM(D%NIJB:D%NIJE,IKE) + PTSTEP*PSOURCE(D%NIJB:D%NIJE,IKE) + & + PEXPL / PRHODJ(D%NIJB:D%NIJE,IKE) * PA(D%NIJB:D%NIJE,IKE) * (PVARM(D%NIJB:D%NIJE,IKE)-PVARM(D%NIJB:D%NIJE,IKE-D%NKL)) +!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) ! ! !* 2. INVERSION OF THE TRIDIAGONAL SYSTEM @@ -188,55 +188,55 @@ IF ( PIMPL > 1.E-10 ) THEN ! ! going up ! - !$mnh_expand_array(JIJ=1:D%NIJT) - ZBET(1:D%NIJT) = 1. + PIMPL * (PDIAG(1:D%NIJT,IKB)-PA(1:D%NIJT,IKB+D%NKL) / PRHODJ(1:D%NIJT,IKB)) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + ZBET(D%NIJB:D%NIJE) = 1. + PIMPL * (PDIAG(D%NIJB:D%NIJE,IKB)-PA(D%NIJB:D%NIJE,IKB+D%NKL) / PRHODJ(D%NIJB:D%NIJE,IKB)) ! bet = b(ikb) - PVARP(1:D%NIJT,IKB) = ZY(1:D%NIJT,IKB) / ZBET(1:D%NIJT) - !$mnh_end_expand_array(JIJ=1:D%NIJT) + PVARP(D%NIJB:D%NIJE,IKB) = ZY(D%NIJB:D%NIJE,IKB) / ZBET(D%NIJB:D%NIJE) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) ! DO JK = IKB+D%NKL,IKE-D%NKL,D%NKL - !$mnh_expand_array(JIJ=1:D%NIJT) - ZGAM(1:D%NIJT,JK) = PIMPL * PA(1:D%NIJT,JK) / PRHODJ(1:D%NIJT,JK-D%NKL) / ZBET(1:D%NIJT) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + ZGAM(D%NIJB:D%NIJE,JK) = PIMPL * PA(D%NIJB:D%NIJE,JK) / PRHODJ(D%NIJB:D%NIJE,JK-D%NKL) / ZBET(D%NIJB:D%NIJE) ! gam(k) = c(k-1) / bet - ZBET(1:D%NIJT) = 1. + PIMPL * ( PDIAG(1:D%NIJT,JK) - & - ( PA(1:D%NIJT,JK) * (1. + ZGAM(1:D%NIJT,JK)) & - + PA(1:D%NIJT,JK+D%NKL) & - ) / PRHODJ(1:D%NIJT,JK) & + ZBET(D%NIJB:D%NIJE) = 1. + PIMPL * ( PDIAG(D%NIJB:D%NIJE,JK) - & + ( PA(D%NIJB:D%NIJE,JK) * (1. + ZGAM(D%NIJB:D%NIJE,JK)) & + + PA(D%NIJB:D%NIJE,JK+D%NKL) & + ) / PRHODJ(D%NIJB:D%NIJE,JK) & ) ! bet = b(k) - a(k)* gam(k) - PVARP(1:D%NIJT,JK)= ( ZY(1:D%NIJT,JK) - PIMPL * PA(1:D%NIJT,JK) / PRHODJ(1:D%NIJT,JK) & - * PVARP(1:D%NIJT,JK-D%NKL) & - ) / ZBET(1:D%NIJT) + PVARP(D%NIJB:D%NIJE,JK)= ( ZY(D%NIJB:D%NIJE,JK) - PIMPL * PA(D%NIJB:D%NIJE,JK) / PRHODJ(D%NIJB:D%NIJE,JK) & + * PVARP(D%NIJB:D%NIJE,JK-D%NKL) & + ) / ZBET(D%NIJB:D%NIJE) ! res(k) = (y(k) -a(k)*res(k-1))/ bet - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) END DO - !$mnh_expand_array(JIJ=1:D%NIJT) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) ! special treatment for the last level - ZGAM(1:D%NIJT,IKE) = PIMPL * PA(1:D%NIJT,IKE) / PRHODJ(1:D%NIJT,IKE-D%NKL) / ZBET(1:D%NIJT) + ZGAM(D%NIJB:D%NIJE,IKE) = PIMPL * PA(D%NIJB:D%NIJE,IKE) / PRHODJ(D%NIJB:D%NIJE,IKE-D%NKL) / ZBET(D%NIJB:D%NIJE) ! gam(k) = c(k-1) / bet - ZBET(1:D%NIJT) = 1. + PIMPL * ( PDIAG(1:D%NIJT,IKE) - & - ( PA(1:D%NIJT,IKE) * (1. + ZGAM(1:D%NIJT,IKE)) ) / PRHODJ(1:D%NIJT,IKE) & + ZBET(D%NIJB:D%NIJE) = 1. + PIMPL * ( PDIAG(D%NIJB:D%NIJE,IKE) - & + ( PA(D%NIJB:D%NIJE,IKE) * (1. + ZGAM(D%NIJB:D%NIJE,IKE)) ) / PRHODJ(D%NIJB:D%NIJE,IKE) & ) ! bet = b(k) - a(k)* gam(k) - PVARP(1:D%NIJT,IKE)= ( ZY(1:D%NIJT,IKE) - PIMPL * PA(1:D%NIJT,IKE) / PRHODJ(1:D%NIJT,IKE) & - * PVARP(1:D%NIJT,IKE-D%NKL) & - ) / ZBET(1:D%NIJT) + PVARP(D%NIJB:D%NIJE,IKE)= ( ZY(D%NIJB:D%NIJE,IKE) - PIMPL * PA(D%NIJB:D%NIJE,IKE) / PRHODJ(D%NIJB:D%NIJE,IKE) & + * PVARP(D%NIJB:D%NIJE,IKE-D%NKL) & + ) / ZBET(D%NIJB:D%NIJE) ! res(k) = (y(k) -a(k)*res(k-1))/ bet ! ! going down ! - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) DO JK = IKE-D%NKL,IKB,-1*D%NKL - !$mnh_expand_array(JIJ=1:D%NIJT) - PVARP(1:D%NIJT,JK) = PVARP(1:D%NIJT,JK) - ZGAM(1:D%NIJT,JK+D%NKL) * PVARP(1:D%NIJT,JK+D%NKL) - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + PVARP(D%NIJB:D%NIJE,JK) = PVARP(D%NIJB:D%NIJE,JK) - ZGAM(D%NIJB:D%NIJE,JK+D%NKL) * PVARP(D%NIJB:D%NIJE,JK+D%NKL) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) END DO ! ELSE ! DO JK=IKTB,IKTE - !$mnh_expand_array(JIJ=1:D%NIJT) - PVARP(1:D%NIJT,JK) = ZY(1:D%NIJT,JK) - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + PVARP(D%NIJB:D%NIJE,JK) = ZY(D%NIJB:D%NIJE,JK) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) END DO ! END IF @@ -245,10 +245,10 @@ END IF !* 3. FILL THE UPPER AND LOWER EXTERNAL VALUES ! ---------------------------------------- ! -!$mnh_expand_array(JIJ=1:D%NIJT) -PVARP(1:D%NIJT,D%NKA)=PVARP(1:D%NIJT,IKB) -PVARP(1:D%NIJT,D%NKU)=PVARP(1:D%NIJT,IKE) -!$mnh_end_expand_array(JIJ=1:D%NIJT) +!$mnh_expand_array(JIJ=D%NIJB:D%NIJE) +PVARP(D%NIJB:D%NIJE,D%NKA)=PVARP(D%NIJB:D%NIJE,IKB) +PVARP(D%NIJB:D%NIJE,D%NKU)=PVARP(D%NIJB:D%NIJE,IKE) +!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) ! !------------------------------------------------------------------------------- ! diff --git a/src/common/turb/mode_tridiag_wind.F90 b/src/common/turb/mode_tridiag_wind.F90 index a2052df7b..ef323530a 100644 --- a/src/common/turb/mode_tridiag_wind.F90 +++ b/src/common/turb/mode_tridiag_wind.F90 @@ -162,27 +162,27 @@ IKTE=D%NKTE IKB=D%NKB IKE=D%NKE ! -!$mnh_expand_array(JIJ=1:D%NIJT) -ZY(1:D%NIJT,IKB) = PVARM(1:D%NIJT,IKB) + PTSTEP*PSOURCE(1:D%NIJT,IKB) - & - PEXPL / PRHODJA(1:D%NIJT,IKB) * PA(1:D%NIJT,IKB+D%NKL) * & - (PVARM(1:D%NIJT,IKB+D%NKL) - PVARM(1:D%NIJT,IKB)) -!$mnh_end_expand_array(JIJ=1:D%NIJT) +!$mnh_expand_array(JIJ=D%NIJB:D%NIJE) +ZY(D%NIJB:D%NIJE,IKB) = PVARM(D%NIJB:D%NIJE,IKB) + PTSTEP*PSOURCE(D%NIJB:D%NIJE,IKB) - & + PEXPL / PRHODJA(D%NIJB:D%NIJE,IKB) * PA(D%NIJB:D%NIJE,IKB+D%NKL) * & + (PVARM(D%NIJB:D%NIJE,IKB+D%NKL) - PVARM(D%NIJB:D%NIJE,IKB)) +!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) ! DO JK=IKTB+1,IKTE-1 - !$mnh_expand_array(JIJ=1:D%NIJT) - ZY(1:D%NIJT,JK)= PVARM(1:D%NIJT,JK) + PTSTEP*PSOURCE(1:D%NIJT,JK) - & - PEXPL / PRHODJA(1:D%NIJT,JK) * & - ( PVARM(1:D%NIJT,JK-D%NKL)*PA(1:D%NIJT,JK) & - -PVARM(1:D%NIJT,JK)*(PA(1:D%NIJT,JK)+PA(1:D%NIJT,JK+D%NKL)) & - +PVARM(1:D%NIJT,JK+D%NKL)*PA(1:D%NIJT,JK+D%NKL) & + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + ZY(D%NIJB:D%NIJE,JK)= PVARM(D%NIJB:D%NIJE,JK) + PTSTEP*PSOURCE(D%NIJB:D%NIJE,JK) - & + PEXPL / PRHODJA(D%NIJB:D%NIJE,JK) * & + ( PVARM(D%NIJB:D%NIJE,JK-D%NKL)*PA(D%NIJB:D%NIJE,JK) & + -PVARM(D%NIJB:D%NIJE,JK)*(PA(D%NIJB:D%NIJE,JK)+PA(D%NIJB:D%NIJE,JK+D%NKL)) & + +PVARM(D%NIJB:D%NIJE,JK+D%NKL)*PA(D%NIJB:D%NIJE,JK+D%NKL) & ) - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) END DO ! -!$mnh_expand_array(JIJ=1:D%NIJT) -ZY(1:D%NIJT,IKE)= PVARM(1:D%NIJT,IKE) + PTSTEP*PSOURCE(1:D%NIJT,IKE) + & - PEXPL / PRHODJA(1:D%NIJT,IKE) * PA(1:D%NIJT,IKE) * (PVARM(1:D%NIJT,IKE)-PVARM(1:D%NIJT,IKE-D%NKL)) -!$mnh_end_expand_array(JIJ=1:D%NIJT) +!$mnh_expand_array(JIJ=D%NIJB:D%NIJE) +ZY(D%NIJB:D%NIJE,IKE)= PVARM(D%NIJB:D%NIJE,IKE) + PTSTEP*PSOURCE(D%NIJB:D%NIJE,IKE) + & + PEXPL / PRHODJA(D%NIJB:D%NIJE,IKE) * PA(D%NIJB:D%NIJE,IKE) * (PVARM(D%NIJB:D%NIJE,IKE)-PVARM(D%NIJB:D%NIJE,IKE-D%NKL)) +!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) ! ! !* 2. INVERSION OF THE TRIDIAGONAL SYSTEM @@ -193,53 +193,53 @@ IF ( PIMPL > 1.E-10 ) THEN ! ! going up ! - !$mnh_expand_array(JIJ=1:D%NIJT) - ZBET(1:D%NIJT) = 1. - PIMPL * ( PA(1:D%NIJT,IKB+D%NKL) / PRHODJA(1:D%NIJT,IKB) & - + PCOEFS(1:D%NIJT) * PTSTEP ) ! bet = b(ikb) - PVARP(1:D%NIJT,IKB) = ZY(1:D%NIJT,IKB) / ZBET(1:D%NIJT) - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + ZBET(D%NIJB:D%NIJE) = 1. - PIMPL * ( PA(D%NIJB:D%NIJE,IKB+D%NKL) / PRHODJA(D%NIJB:D%NIJE,IKB) & + + PCOEFS(D%NIJB:D%NIJE) * PTSTEP ) ! bet = b(ikb) + PVARP(D%NIJB:D%NIJE,IKB) = ZY(D%NIJB:D%NIJE,IKB) / ZBET(D%NIJB:D%NIJE) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) ! DO JK = IKB+D%NKL,IKE-D%NKL,D%NKL - !$mnh_expand_array(JIJ=1:D%NIJT) - ZGAM(1:D%NIJT,JK) = PIMPL * PA(1:D%NIJT,JK) / PRHODJA(1:D%NIJT,JK-D%NKL) / ZBET(1:D%NIJT) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + ZGAM(D%NIJB:D%NIJE,JK) = PIMPL * PA(D%NIJB:D%NIJE,JK) / PRHODJA(D%NIJB:D%NIJE,JK-D%NKL) / ZBET(D%NIJB:D%NIJE) ! gam(k) = c(k-1) / bet - ZBET(1:D%NIJT) = 1. - PIMPL * ( PA(1:D%NIJT,JK) * (1. + ZGAM(1:D%NIJT,JK)) & - + PA(1:D%NIJT,JK+D%NKL) & - ) / PRHODJA(1:D%NIJT,JK) + ZBET(D%NIJB:D%NIJE) = 1. - PIMPL * ( PA(D%NIJB:D%NIJE,JK) * (1. + ZGAM(D%NIJB:D%NIJE,JK)) & + + PA(D%NIJB:D%NIJE,JK+D%NKL) & + ) / PRHODJA(D%NIJB:D%NIJE,JK) ! bet = b(k) - a(k)* gam(k) - PVARP(1:D%NIJT,JK)= ( ZY(1:D%NIJT,JK) - PIMPL * PA(1:D%NIJT,JK) / PRHODJA(1:D%NIJT,JK) & - * PVARP(1:D%NIJT,JK-D%NKL) & - ) / ZBET(1:D%NIJT) + PVARP(D%NIJB:D%NIJE,JK)= ( ZY(D%NIJB:D%NIJE,JK) - PIMPL * PA(D%NIJB:D%NIJE,JK) / PRHODJA(D%NIJB:D%NIJE,JK) & + * PVARP(D%NIJB:D%NIJE,JK-D%NKL) & + ) / ZBET(D%NIJB:D%NIJE) ! res(k) = (y(k) -a(k)*res(k-1))/ bet - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) END DO - !$mnh_expand_array(JIJ=1:D%NIJT) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) ! special treatment for the last level - ZGAM(1:D%NIJT,IKE) = PIMPL * PA(1:D%NIJT,IKE) / PRHODJA(1:D%NIJT,IKE-D%NKL) / ZBET(1:D%NIJT) + ZGAM(D%NIJB:D%NIJE,IKE) = PIMPL * PA(D%NIJB:D%NIJE,IKE) / PRHODJA(D%NIJB:D%NIJE,IKE-D%NKL) / ZBET(D%NIJB:D%NIJE) ! gam(k) = c(k-1) / bet - ZBET(1:D%NIJT) = 1. - PIMPL * ( PA(1:D%NIJT,IKE) * (1. + ZGAM(1:D%NIJT,IKE)) & - ) / PRHODJA(1:D%NIJT,IKE) + ZBET(D%NIJB:D%NIJE) = 1. - PIMPL * ( PA(D%NIJB:D%NIJE,IKE) * (1. + ZGAM(D%NIJB:D%NIJE,IKE)) & + ) / PRHODJA(D%NIJB:D%NIJE,IKE) ! bet = b(k) - a(k)* gam(k) - PVARP(1:D%NIJT,IKE)= ( ZY(1:D%NIJT,IKE) - PIMPL * PA(1:D%NIJT,IKE) / PRHODJA(1:D%NIJT,IKE) & - * PVARP(1:D%NIJT,IKE-D%NKL) & - ) / ZBET(1:D%NIJT) + PVARP(D%NIJB:D%NIJE,IKE)= ( ZY(D%NIJB:D%NIJE,IKE) - PIMPL * PA(D%NIJB:D%NIJE,IKE) / PRHODJA(D%NIJB:D%NIJE,IKE) & + * PVARP(D%NIJB:D%NIJE,IKE-D%NKL) & + ) / ZBET(D%NIJB:D%NIJE) ! res(k) = (y(k) -a(k)*res(k-1))/ bet ! ! going down ! - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) DO JK = IKE-D%NKL,IKB,-1*D%NKL - !$mnh_expand_array(JIJ=1:D%NIJT) - PVARP(1:D%NIJT,JK) = PVARP(1:D%NIJT,JK) - ZGAM(1:D%NIJT,JK+D%NKL) * PVARP(1:D%NIJT,JK+D%NKL) - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + PVARP(D%NIJB:D%NIJE,JK) = PVARP(D%NIJB:D%NIJE,JK) - ZGAM(D%NIJB:D%NIJE,JK+D%NKL) * PVARP(D%NIJB:D%NIJE,JK+D%NKL) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) END DO ! ELSE ! DO JK=IKTB,IKTE - !$mnh_expand_array(JIJ=1:D%NIJT) - PVARP(1:D%NIJT,JK) = ZY(1:D%NIJT,JK) - !$mnh_end_expand_array(JIJ=1:D%NIJT) + !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + PVARP(D%NIJB:D%NIJE,JK) = ZY(D%NIJB:D%NIJE,JK) + !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) END DO ! END IF @@ -248,10 +248,10 @@ END IF !* 3. FILL THE UPPER AND LOWER EXTERNAL VALUES ! ---------------------------------------- ! -!$mnh_expand_array(JIJ=1:D%NIJT) -PVARP(1:D%NIJT,D%NKA)=PVARP(1:D%NIJT,IKB) -PVARP(1:D%NIJT,D%NKU)=PVARP(1:D%NIJT,IKE) -!$mnh_end_expand_array(JIJ=1:D%NIJT) +!$mnh_expand_array(JIJ=D%NIJB:D%NIJE) +PVARP(D%NIJB:D%NIJE,D%NKA)=PVARP(D%NIJB:D%NIJE,IKB) +PVARP(D%NIJB:D%NIJE,D%NKU)=PVARP(D%NIJB:D%NIJE,IKE) +!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) ! !------------------------------------------------------------------------------- ! -- GitLab