From a217e71fba824f9901dedfaefc6ba11b0324daf9 Mon Sep 17 00:00:00 2001 From: Quentin Rodier <quentin.rodier@meteo.fr> Date: Thu, 18 Aug 2022 17:03:23 +0200 Subject: [PATCH] Quentin 18/08/2022: Incomplete NPROMA bloc test lead to correction on loop index computation (IIJB:IIJE) --- src/common/aux/shuman_phy.F90 | 84 +++++++----- src/common/turb/mode_bl89.F90 | 58 ++++---- src/common/turb/mode_rmc01.F90 | 170 ++++++++++++------------ src/common/turb/mode_tridiag.F90 | 99 +++++++------- src/common/turb/mode_tridiag_thermo.F90 | 139 +++++++++---------- src/common/turb/mode_tridiag_tke.F90 | 99 +++++++------- src/common/turb/mode_tridiag_wind.F90 | 99 +++++++------- 7 files changed, 390 insertions(+), 358 deletions(-) diff --git a/src/common/aux/shuman_phy.F90 b/src/common/aux/shuman_phy.F90 index 3679a76fb..f7d599102 100644 --- a/src/common/aux/shuman_phy.F90 +++ b/src/common/aux/shuman_phy.F90 @@ -371,13 +371,13 @@ IMPLICIT NONE ! ------------------------------------ ! TYPE(DIMPHYEX_t), INTENT(IN) :: D -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PA ! variable at mass localization -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT) :: PMZM ! result at flux localization +REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PA ! variable at mass localization +REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT) :: PMZM ! result at flux localization ! !* 0.2 Declarations of local variables ! ------------------------------- ! -INTEGER :: JK ! Loop index in z direction +INTEGER :: JK,JIJ,IIJB,IIJE ! Loop index ! !------------------------------------------------------------------------------- ! @@ -386,11 +386,17 @@ INTEGER :: JK ! Loop index in z direction ! REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK('MZM',0,ZHOOK_HANDLE) -DO JK=2,SIZE(PA,3)-1 - PMZM(:,:,JK) = 0.5*( PA(:,:,JK)+PA(:,:,JK-D%NKL) ) +IIJB = D%NIJB +IIJE = D%NIJE +DO JK=2,D%NKT-1 + !$mnh_expand_array(JIJ=IIJB:IIJE) + PMZM(IIJB:IIJE,JK) = 0.5*( PA(IIJB:IIJE,JK)+PA(IIJB:IIJE,JK-D%NKL) ) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO -PMZM(:,:,D%NKA) = -999. -PMZM(:,:,D%NKU) = 0.5*( PA(:,:,D%NKU)+PA(:,:,D%NKU-D%NKL) ) +!$mnh_expand_array(JIJ=IIJB:IIJE) +PMZM(IIJB:IIJE,D%NKA) = -999. +PMZM(IIJB:IIJE,D%NKU) = 0.5*( PA(IIJB:IIJE,D%NKU)+PA(IIJB:IIJE,D%NKU-D%NKL) ) +!$mnh_end_expand_array(JIJ=IIJB:IIJE) ! ! !------------------------------------------------------------------------------- @@ -451,14 +457,14 @@ IMPLICIT NONE ! ------------------------------------ ! TYPE(DIMPHYEX_t), INTENT(IN) :: D -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PA ! variable at mass localization -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT) :: PDZM ! result at flux +REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PA ! variable at mass localization +REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT) :: PDZM ! result at flux ! side ! !* 0.2 Declarations of local variables ! ------------------------------- ! -INTEGER :: JK ! Loop index in z direction +INTEGER :: JK,JIJ,IIJB,IIJE ! Loop index ! !------------------------------------------------------------------------------- ! @@ -467,11 +473,17 @@ INTEGER :: JK ! Loop index in z direction ! REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK('DZM',0,ZHOOK_HANDLE) -DO JK=2,SIZE(PA,3)-1 - PDZM(:,:,JK) = PA(:,:,JK) - PA(:,:,JK-D%NKL) +IIJB = D%NIJB +IIJE = D%NIJE +DO JK=2,D%NKT-1 + !$mnh_expand_array(JIJ=IIJB:IIJE) + PDZM(IIJB:IIJE,JK) = PA(IIJB:IIJE,JK) - PA(IIJB:IIJE,JK-D%NKL) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO -PDZM(:,:,D%NKA) = -999. -PDZM(:,:,D%NKU) = PA(:,:,D%NKU) - PA(:,:,D%NKU-D%NKL) +!$mnh_expand_array(JIJ=IIJB:IIJE) +PDZM(IIJB:IIJE,D%NKA) = -999. +PDZM(IIJB:IIJE,D%NKU) = PA(IIJB:IIJE,D%NKU) - PA(IIJB:IIJE,D%NKU-D%NKL) +!$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !------------------------------------------------------------------------------- ! @@ -845,14 +857,13 @@ IMPLICIT NONE ! ------------------------------------ ! TYPE(DIMPHYEX_t), INTENT(IN) :: D -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PA ! variable at flux localization -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT) :: PMZF ! result at mass localization +REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PA ! variable at flux localization +REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT) :: PMZF ! result at mass localization ! !* 0.2 Declarations of local variables ! ------------------------------- ! -INTEGER :: JK ! Loop index in z direction -INTEGER :: IKT ! upper bound in z direction of PA +INTEGER :: JK,JIJ,IIJB,IIJE ! Loop index ! !------------------------------------------------------------------------------- ! @@ -861,12 +872,17 @@ INTEGER :: IKT ! upper bound in z direction of PA ! REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK('MZF',0,ZHOOK_HANDLE) -IKT = SIZE(PA,3) -DO JK=2,IKT-1 - PMZF(:,:,JK) = 0.5*( PA(:,:,JK)+PA(:,:,JK+D%NKL) ) +IIJB = D%NIJB +IIJE = D%NIJE +DO JK=2,D%NKT-1 + !$mnh_expand_array(JIJ=IIJB:IIJE) + PMZF(IIJB:IIJE,JK) = 0.5*( PA(IIJB:IIJE,JK)+PA(IIJB:IIJE,JK+D%NKL) ) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO -PMZF(:,:,D%NKU) = -999. -PMZF(:,:,D%NKA) = 0.5*( PA(:,:,D%NKA)+PA(:,:,D%NKA+D%NKL) ) +!$mnh_expand_array(JIJ=IIJB:IIJE) +PMZF(IIJB:IIJE,D%NKU) = -999. +PMZF(IIJB:IIJE,D%NKA) = 0.5*( PA(IIJB:IIJE,D%NKA)+PA(IIJB:IIJE,D%NKA+D%NKL) ) +!$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !------------------------------------------------------------------------------- ! @@ -926,14 +942,13 @@ IMPLICIT NONE ! ------------------------------------ ! TYPE(DIMPHYEX_t), INTENT(IN) :: D -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PA ! variable at flux localization -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT) :: PDZF ! result at mass localization +REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PA ! variable at flux localization +REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT) :: PDZF ! result at mass localization ! !* 0.2 Declarations of local variables ! ------------------------------- ! -INTEGER :: JK ! Loop index in z direction -INTEGER :: IKT ! upper bound in z direction of PA +INTEGER :: JK,JIJ,IIJB,IIJE ! Loop index ! !------------------------------------------------------------------------------- ! @@ -942,12 +957,17 @@ INTEGER :: IKT ! upper bound in z direction of PA ! REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK('DZF',0,ZHOOK_HANDLE) -IKT = SIZE(PA,3) -DO JK=2,IKT-1 - PDZF(:,:,JK) = PA(:,:,JK+D%NKL) - PA(:,:,JK) +IIJB = D%NIJB +IIJE = D%NIJE +DO JK=2,D%NKT-1 + !$mnh_expand_array(JIJ=IIJB:IIJE) + PDZF(IIJB:IIJE,JK) = PA(IIJB:IIJE,JK+D%NKL) - PA(IIJB:IIJE,JK) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO -PDZF(:,:,D%NKA) = PA(:,:,D%NKA+D%NKL) - PA(:,:,D%NKA) -PDZF(:,:,D%NKU) = -999. +!$mnh_expand_array(JIJ=IIJB:IIJE) +PDZF(IIJB:IIJE,D%NKA) = PA(IIJB:IIJE,D%NKA+D%NKL) - PA(IIJB:IIJE,D%NKA) +PDZF(IIJB:IIJE,D%NKU) = -999. +!$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !------------------------------------------------------------------------------- ! diff --git a/src/common/turb/mode_bl89.F90 b/src/common/turb/mode_bl89.F90 index c110da535..ce9a0898f 100644 --- a/src/common/turb/mode_bl89.F90 +++ b/src/common/turb/mode_bl89.F90 @@ -106,7 +106,7 @@ REAL, DIMENSION(D%NIJT,D%NKT) :: ZG_O_THVREF REAL, DIMENSION(D%NIJT,D%NKT) :: ZSQRT_TKE REAL, DIMENSION(D%NIJT,D%NKT) :: PLMDN ! -INTEGER :: IIU,IJU +INTEGER :: IIJB, IIJE INTEGER :: JIJ ! horizontal loop counter INTEGER :: JK,JKK ! loop counters INTEGER :: JRR ! moist loop counter @@ -122,6 +122,8 @@ Z2SQRT2=2.*SQRT(2.) ! ZRVORD = CST%XRV / CST%XRD ! +IIJB = D%NIJB +IIJE = D%NIJE !------------------------------------------------------------------------------- ! !* 1. pack the horizontal dimensions into one @@ -132,21 +134,21 @@ ZRVORD = CST%XRV / CST%XRD ! IF (OOCEAN) THEN DO JK=1,D%NKT - DO JIJ=1,D%NIJT + DO JIJ=IIJB,IIJE ZG_O_THVREF(JIJ,JK) = CST%XG * CST%XALPHAOC END DO END DO ELSE !Atmosphere case DO JK=1,D%NKT - DO JIJ=1,D%NIJT + DO JIJ=IIJB,IIJE ZG_O_THVREF(JIJ,JK) = CST%XG / PTHVREF(JIJ,JK) END DO END DO END IF ! -!$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) +!$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) +ZSQRT_TKE(IIJB:IIJE,1:D%NKT) = SQRT(PTKEM(IIJB:IIJE,1:D%NKT)) +!$mnh_end_expand_array(JIJ=IIJB:IIJE,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 +159,18 @@ ZUSRBL89 = 1./ZBL89EXP ! ----------------------------------------------- ! IF(KRR /= 0) THEN - ZSUM(D%NIJB:D%NIJE,1:D%NKT) = 0. + ZSUM(IIJB:IIJE,1:D%NKT) = 0. DO JRR=1,KRR - !$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) + !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) + ZSUM(IIJB:IIJE,1:D%NKT) = ZSUM(IIJB:IIJE,1:D%NKT)+PRM(IIJB:IIJE,1:D%NKT,JRR) + !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) ENDDO - !$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) + !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) + ZVPT(IIJB:IIJE,1:D%NKT)=PTHLM(IIJB:IIJE,1:D%NKT) * ( 1. + ZRVORD*PRM(IIJB:IIJE,1:D%NKT,1) ) & + / ( 1. + ZSUM(IIJB:IIJE,1:D%NKT) ) + !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) ELSE - ZVPT(D%NIJB:D%NIJE,1:D%NKT)=PTHLM(D%NIJB:D%NIJE,1:D%NKT) + ZVPT(IIJB:IIJE,1:D%NKT)=PTHLM(IIJB:IIJE,1:D%NKT) END IF ! !!!!!!!!!!!! @@ -183,13 +185,13 @@ END IF !!!!!!!!!!!! ! DO JK=D%NKTB,D%NKTE - DO JIJ=1,D%NIJT + DO JIJ=IIJB,IIJE ZDELTVPT(JIJ,JK) = ZVPT(JIJ,JK) - ZVPT(JIJ,JK-D%NKL) ZHLVPT(JIJ,JK) = 0.5 * ( ZVPT(JIJ,JK) + ZVPT(JIJ,JK-D%NKL) ) END DO END DO ! -DO JIJ=1,D%NIJT +DO JIJ=IIJB,IIJE ZDELTVPT(JIJ,D%NKU) = ZVPT(JIJ,D%NKU) - ZVPT(JIJ,D%NKU-D%NKL) ZDELTVPT(JIJ,D%NKA) = 0. ZHLVPT(JIJ,D%NKU) = 0.5 * ( ZVPT(JIJ,D%NKU) + ZVPT(JIJ,D%NKU-D%NKL) ) @@ -197,7 +199,7 @@ DO JIJ=1,D%NIJT END DO ! DO JK=1,D%NKT - DO JIJ=1,D%NIJT + DO JIJ=IIJB,IIJE IF(ABS(ZDELTVPT(JIJ,JK))<CSTURB%XLINF) THEN ZDELTVPT(JIJ,JK)=CSTURB%XLINF END IF @@ -215,13 +217,13 @@ DO JK=D%NKTB,D%NKTE ! !* 4. mixing length for a downwards displacement ! ------------------------------------------ - ZINTE(D%NIJB:D%NIJE)=PTKEM(D%NIJB:D%NIJE,JK) + ZINTE(IIJB:IIJE)=PTKEM(IIJB:IIJE,JK) ZLWORK=0. ZTESTM=1. DO JKK=JK,D%NKB,-D%NKL IF(ZTESTM > 0.) THEN ZTESTM=0. - DO JIJ=1,D%NIJT + DO JIJ=IIJB,IIJE ZTEST0=0.5+SIGN(0.5,ZINTE(JIJ)) !--------- SHEAR + STABILITY ----------- ZPOTE = ZTEST0* & @@ -255,7 +257,7 @@ DO JK=D%NKTB,D%NKTE !* 5. intermediate storage of the final mixing length ! ----------------------------------------------- ! - DO JIJ=1,D%NIJT + DO JIJ=IIJB,IIJE PLMDN(JIJ,JK)=MIN(ZLWORK(JIJ),0.5*(PZZ(JIJ,JK)+PZZ(JIJ,JK+D%NKL))-PZZ(JIJ,D%NKB)) END DO ! @@ -264,14 +266,14 @@ DO JK=D%NKTB,D%NKTE !* 6. mixing length for an upwards displacement ! ----------------------------------------- ! - ZINTE(D%NIJB:D%NIJE)=PTKEM(D%NIJB:D%NIJE,JK) - ZLWORK(D%NIJB:D%NIJE)=0. + ZINTE(IIJB:IIJE)=PTKEM(IIJB:IIJE,JK) + ZLWORK(IIJB:IIJE)=0. ZTESTM=1. ! DO JKK=JK+D%NKL,D%NKE,D%NKL IF(ZTESTM > 0.) THEN ZTESTM=0. - DO JIJ=1,D%NIJT + DO JIJ=IIJB,IIJE ZTEST0=0.5+SIGN(0.5,ZINTE(JIJ)) !--------- SHEAR + STABILITY ----------- ZPOTE = ZTEST0* & @@ -304,7 +306,7 @@ DO JK=D%NKTB,D%NKTE ! !* 7. final mixing length ! - DO JIJ=1,D%NIJT + DO JIJ=IIJB,IIJE ZLWORK1=MAX(PLMDN(JIJ,JK),1.E-10_MNHREAL) ZLWORK2=MAX(ZLWORK(JIJ),1.E-10_MNHREAL) ZPOTE = ZLWORK1 / ZLWORK2 @@ -330,9 +332,9 @@ END DO !* 9. boundaries ! ---------- ! -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) +PLM(IIJB:IIJE,D%NKA)=PLM(IIJB:IIJE,D%NKB) +PLM(IIJB:IIJE,D%NKE)=PLM(IIJB:IIJE,D%NKE-D%NKL) +PLM(IIJB:IIJE,D%NKU)=PLM(IIJB:IIJE,D%NKE-D%NKL) ! !------------------------------------------------------------------------------- ! diff --git a/src/common/turb/mode_rmc01.F90 b/src/common/turb/mode_rmc01.F90 index f15d2d9a3..9faf02606 100644 --- a/src/common/turb/mode_rmc01.F90 +++ b/src/common/turb/mode_rmc01.F90 @@ -79,7 +79,7 @@ REAL, DIMENSION(D%NIJT,D%NKT), INTENT(INOUT) :: PLEPS ! Dissipative length INTEGER :: IKB,IKE ! first,last physical level INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain INTEGER :: JK,JIJ ! loop counter -INTEGER :: IIE,IIB,IJE,IJB +INTEGER :: IIJB,IIJE ! REAL, DIMENSION(D%NIJT,D%NKT) :: ZZZ ! height of mass ! points above ground @@ -109,23 +109,21 @@ IKTB=D%NKTB IKTE=D%NKTE IKB=D%NKB IKE=D%NKE -IIE=D%NIEC -IIB=D%NIBC -IJE=D%NJEC -IJB=D%NJBC +IIJB=D%NIJB +IIJE=D%NIJE ! ! altitude of mass points CALL MZF_PHY(D,PZZ,ZZZ) ! replace by height of mass points DO JK=1,D%NKT - !$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) + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZZZ(IIJB:IIJE,JK) = ZZZ(IIJB:IIJE,JK) - PZZ(IIJB:IIJE,IKB) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! fill upper level with physical value -!$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) +!$mnh_expand_array(JIJ=IIJB:IIJE) +ZZZ(IIJB:IIJE,D%NKU) = 2.*ZZZ(IIJB:IIJE,D%NKU-D%NKL) - ZZZ(IIJB:IIJE,D%NKU-2*D%NKL) +!$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !------------------------------------------------------------------------------- ! @@ -134,18 +132,18 @@ ZZZ(D%NIJB:D%NIJE,D%NKU) = 2.*ZZZ(D%NIJB:D%NIJE,D%NKU-D%NKL) - ZZZ(D%NIJB:D%NIJE ! ! z/LMO DO JK=1,D%NKT - !$mnh_expand_where(JIJ=D%NIJB:D%NIJE) - WHERE (PLMO(D%NIJB:D%NIJE)==XUNDEF) - ZZ_O_LMO(D%NIJB:D%NIJE,JK)=0. + !$mnh_expand_where(JIJ=IIJB:IIJE) + WHERE (PLMO(IIJB:IIJE)==XUNDEF) + ZZ_O_LMO(IIJB:IIJE,JK)=0. ELSEWHERE - ZZ_O_LMO(D%NIJB:D%NIJE,JK)=ZZZ(D%NIJB:D%NIJE,JK)*PDIRCOSZW(D%NIJB:D%NIJE)/PLMO(D%NIJB:D%NIJE) + ZZ_O_LMO(IIJB:IIJE,JK)=ZZZ(IIJB:IIJE,JK)*PDIRCOSZW(IIJB:IIJE)/PLMO(IIJB:IIJE) END WHERE - !$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE) + !$mnh_end_expand_where(JIJ=IIJB:IIJE) END DO -!$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) +!$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) +ZZ_O_LMO(IIJB:IIJE,1:D%NKT) = MAX(ZZ_O_LMO(IIJB:IIJE,1:D%NKT),-10.) +ZZ_O_LMO(IIJB:IIJE,1:D%NKT) = MIN(ZZ_O_LMO(IIJB:IIJE,1:D%NKT), 10.) +!$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) ! ! ! MO function for stress @@ -169,42 +167,42 @@ SELECT CASE (HTURBLEN) CASE ('DELT','DEAR') CALL MXF_PHY(D,PDXX,ZWORK1) CALL MYF_PHY(D,PDYY,ZWORK2) - !$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) + !$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) 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=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) + !$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) ! -------------------------------------------------------------------- ! - ZGAM(D%NIJB:D%NIJE,D%NKA) = 0. + ZGAM(IIJB:IIJE,D%NKA) = 0. DO JK=IKTB,IKTE - !$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. + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZGAM(IIJB:IIJE,JK) = 1. - EXP( -3.*(ZZZ(IIJB:IIJE,JK)-ZZZ(IIJB:IIJE,IKB))/(ZZC(IIJB:IIJE,JK)) ) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) + !$mnh_expand_where(JIJ=IIJB:IIJE) + WHERE (ZGAM(IIJB:IIJE,JK-D%NKL)>ZGAM(IIJB:IIJE,JK) .OR. ZGAM(IIJB:IIJE,JK-D%NKL)>0.99 ) + ZGAM(IIJB:IIJE,JK) = 1. END WHERE - !$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE) + !$mnh_end_expand_where(JIJ=IIJB:IIJE) END DO - !$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. + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZGAM(IIJB:IIJE,D%NKU) = 1. - EXP( -3.*(ZZZ(IIJB:IIJE,D%NKU)-ZZZ(IIJB:IIJE,IKB))& + /(ZZC(IIJB:IIJE,D%NKU)) ) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) + !$mnh_expand_where(JIJ=IIJB:IIJE) + WHERE (ZGAM(IIJB:IIJE,D%NKU-D%NKL)>ZGAM(IIJB:IIJE,D%NKU) .OR. ZGAM(IIJB:IIJE,D%NKU-D%NKL)>0.99 ) + ZGAM(IIJB:IIJE,D%NKU) = 1. END WHERE - !$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE) + !$mnh_end_expand_where(JIJ=IIJB:IIJE) ! ! !------------------------------------------------------------------------------- @@ -214,30 +212,30 @@ SELECT CASE (HTURBLEN) ! CASE DEFAULT !* SBL depth is used - ZGAM(D%NIJB:D%NIJE,1:D%NKT) = 1. - ZGAM(D%NIJB:D%NIJE,D%NKA) = 0. + ZGAM(IIJB:IIJE,1:D%NKT) = 1. + ZGAM(IIJB:IIJE,D%NKA) = 0. DO JK=IKTB,IKTE - !$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) ) + !$mnh_expand_where(JIJ=IIJB:IIJE) + WHERE(PSBL_DEPTH(IIJB:IIJE)>0.) + ZGAM(IIJB:IIJE,JK) = TANH( (ZZZ(IIJB:IIJE,JK)-ZZZ(IIJB:IIJE,IKB))/PSBL_DEPTH(IIJB:IIJE) ) END WHERE - !$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. + !$mnh_end_expand_where(JIJ=IIJB:IIJE) + !$mnh_expand_where(JIJ=IIJB:IIJE) + WHERE (ZGAM(IIJB:IIJE,JK-D%NKL)>0.99 ) + ZGAM(IIJB:IIJE,JK) = 1. END WHERE - !$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE) + !$mnh_end_expand_where(JIJ=IIJB:IIJE) END DO - !$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) ) + !$mnh_expand_where(JIJ=IIJB:IIJE) + WHERE(PSBL_DEPTH(IIJB:IIJE)>0.) + ZGAM(IIJB:IIJE,D%NKU) = TANH( (ZZZ(IIJB:IIJE,D%NKU)-ZZZ(IIJB:IIJE,IKB))/PSBL_DEPTH(IIJB:IIJE) ) END WHERE - !$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. + !$mnh_end_expand_where(JIJ=IIJB:IIJE) + !$mnh_expand_where(JIJ=IIJB:IIJE) + WHERE (ZGAM(IIJB:IIJE,D%NKU-D%NKL)>0.99 ) + ZGAM(IIJB:IIJE,JK) = 1. END WHERE - !$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE) + !$mnh_end_expand_where(JIJ=IIJB:IIJE) ! !------------------------------------------------------------------------------- END SELECT @@ -247,44 +245,44 @@ END SELECT ! --------------------------------- ! DO JK=1,D%NKT -!$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) +!$mnh_expand_array(JIJ=IIJB:IIJE) + ZL(IIJB:IIJE,JK) = CST%XKARMAN/SQRT(CSTURB%XALPSBL)/CSTURB%XCMFS & + * ZZZ(IIJB:IIJE,JK)*PDIRCOSZW(IIJB:IIJE)/(ZPHIM(IIJB:IIJE,JK)**2*SQRT(ZPHIE(IIJB:IIJE,JK))) +!$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! -!$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) +!$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) +PLK(IIJB:IIJE,1:D%NKT)=(1.-ZGAM(IIJB:IIJE,1:D%NKT))*ZL(IIJB:IIJE,1:D%NKT) & + +ZGAM(IIJB:IIJE,1:D%NKT)*PLK(IIJB:IIJE,1:D%NKT) +!$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) ! -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) +PLK(IIJB:IIJE,D%NKA) = PLK(IIJB:IIJE,IKB) +PLK(IIJB:IIJE,D%NKU) = PLK(IIJB:IIJE,IKE) !------------------------------------------------------------------------------- ! !* 7. Modification of the dissipative length ! -------------------------------------- ! -!$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) & +!$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) +ZL(IIJB:IIJE,1:D%NKT) = ZL(IIJB:IIJE,1:D%NKT) * (CSTURB%XALPSBL**(3./2.)*CST%XKARMAN*CSTURB%XCED) & / (CST%XKARMAN/SQRT(CSTURB%XALPSBL)/CSTURB%XCMFS) -!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT) +!$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=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)) +!$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:D%NKT) +WHERE (ZZ_O_LMO(IIJB:IIJE,1:D%NKT)<0.) + ZL(IIJB:IIJE,1:D%NKT) = ZL(IIJB:IIJE,1:D%NKT)/(1.-1.9*ZZ_O_LMO(IIJB:IIJE,1:D%NKT)) ELSEWHERE - 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))) + ZL(IIJB:IIJE,1:D%NKT) = ZL(IIJB:IIJE,1:D%NKT)/(1.-0.3*SQRT(ZZ_O_LMO(IIJB:IIJE,1:D%NKT))) END WHERE -!$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE,JK=1:D%NKT) +!$mnh_end_expand_where(JIJ=IIJB:IIJE,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) +!$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) +PLEPS(IIJB:IIJE,1:D%NKT)=(1.-ZGAM(IIJB:IIJE,1:D%NKT))*ZL(IIJB:IIJE,1:D%NKT) & + +ZGAM(IIJB:IIJE,1:D%NKT)*PLEPS(IIJB:IIJE,1:D%NKT) +!$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) ! -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) +PLEPS(IIJB:IIJE,D%NKA) = PLEPS(IIJB:IIJE,IKB) +PLEPS(IIJB:IIJE,D%NKU) = PLEPS(IIJB:IIJE,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 78a23b2cf..fe9729a90 100644 --- a/src/common/turb/mode_tridiag.F90 +++ b/src/common/turb/mode_tridiag.F90 @@ -141,7 +141,8 @@ REAL, DIMENSION(D%NIJT) :: ZBET INTEGER :: JIJ,JK ! loop counter INTEGER :: IKB,IKE ! inner vertical limits 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 :: IIJB, IIJE ! start, end of ij loops in physical domain ! ! --------------------------------------------------------------------------- @@ -157,28 +158,30 @@ IKTB=D%NKTB IKTE=D%NKTE IKB=D%NKB IKE=D%NKE +IIJB=D%NIJB +IIJE=D%NIJE ! -!$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) +!$mnh_expand_array(JIJ=IIJB:IIJE) +ZY(IIJB:IIJE,IKB) = PVARM(IIJB:IIJE,IKB) + PTSTEP*PSOURCE(IIJB:IIJE,IKB) - & + PEXPL / PRHODJ(IIJB:IIJE,IKB) * PA(IIJB:IIJE,IKB+D%NKL) * & + (PVARM(IIJB:IIJE,IKB+D%NKL) - PVARM(IIJB:IIJE,IKB)) +!$mnh_end_expand_array(JIJ=IIJB:IIJE) ! DO JK=IKTB+1,IKTE-1 - !$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_expand_array(JIJ=IIJB:IIJE) + ZY(IIJB:IIJE,JK)= PVARM(IIJB:IIJE,JK) + PTSTEP*PSOURCE(IIJB:IIJE,JK) - & + PEXPL / PRHODJ(IIJB:IIJE,JK) * & + ( PVARM(IIJB:IIJE,JK-D%NKL)*PA(IIJB:IIJE,JK) & + -PVARM(IIJB:IIJE,JK)*(PA(IIJB:IIJE,JK)+PA(IIJB:IIJE,JK+D%NKL)) & + +PVARM(IIJB:IIJE,JK+D%NKL)*PA(IIJB:IIJE,JK+D%NKL) & ) - !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! -!$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) +!$mnh_expand_array(JIJ=IIJB:IIJE) +ZY(IIJB:IIJE,IKE)= PVARM(IIJB:IIJE,IKE) + PTSTEP*PSOURCE(IIJB:IIJE,IKE) + & + PEXPL / PRHODJ(IIJB:IIJE,IKE) * PA(IIJB:IIJE,IKE) * (PVARM(IIJB:IIJE,IKE)-PVARM(IIJB:IIJE,IKE-D%NKL)) +!$mnh_end_expand_array(JIJ=IIJB:IIJE) ! ! !* 2. INVERSION OF THE TRIDIAGONAL SYSTEM @@ -189,52 +192,52 @@ IF ( PIMPL > 1.E-10 ) THEN ! ! going up ! - !$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) + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZBET(IIJB:IIJE) = 1. - PIMPL * PA(IIJB:IIJE,IKB+D%NKL) / PRHODJ(IIJB:IIJE,IKB) ! bet = b(ikb) + PVARP(IIJB:IIJE,IKB) = ZY(IIJB:IIJE,IKB) / ZBET(IIJB:IIJE) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! DO JK = IKB+D%NKL,IKE-D%NKL,D%NKL - !$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) + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZGAM(IIJB:IIJE,JK) = PIMPL * PA(IIJB:IIJE,JK) / PRHODJ(IIJB:IIJE,JK-D%NKL) / ZBET(IIJB:IIJE) ! gam(k) = c(k-1) / bet - 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) + ZBET(IIJB:IIJE) = 1. - PIMPL * ( PA(IIJB:IIJE,JK) * (1. + ZGAM(IIJB:IIJE,JK)) & + + PA(IIJB:IIJE,JK+D%NKL) & + ) / PRHODJ(IIJB:IIJE,JK) ! bet = b(k) - a(k)* gam(k) - 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) + PVARP(IIJB:IIJE,JK)= ( ZY(IIJB:IIJE,JK) - PIMPL * PA(IIJB:IIJE,JK) / PRHODJ(IIJB:IIJE,JK) & + * PVARP(IIJB:IIJE,JK-D%NKL) & + ) / ZBET(IIJB:IIJE) ! res(k) = (y(k) -a(k)*res(k-1))/ bet - !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO - !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + !$mnh_expand_array(JIJ=IIJB:IIJE) ! special treatment for the last level - 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) + ZGAM(IIJB:IIJE,IKE) = PIMPL * PA(IIJB:IIJE,IKE) / PRHODJ(IIJB:IIJE,IKE-D%NKL) / ZBET(IIJB:IIJE) ! gam(k) = c(k-1) / bet - 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) + ZBET(IIJB:IIJE) = 1. - PIMPL * ( PA(IIJB:IIJE,IKE) * (1. + ZGAM(IIJB:IIJE,IKE)) & + ) / PRHODJ(IIJB:IIJE,IKE) ! bet = b(k) - a(k)* gam(k) - 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) + PVARP(IIJB:IIJE,IKE)= ( ZY(IIJB:IIJE,IKE) - PIMPL * PA(IIJB:IIJE,IKE) / PRHODJ(IIJB:IIJE,IKE) & + * PVARP(IIJB:IIJE,IKE-D%NKL) & + ) / ZBET(IIJB:IIJE) ! res(k) = (y(k) -a(k)*res(k-1))/ bet ! ! going down ! - !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) DO JK = IKE-D%NKL,IKB,-1*D%NKL - !$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) + !$mnh_expand_array(JIJ=IIJB:IIJE) + PVARP(IIJB:IIJE,JK) = PVARP(IIJB:IIJE,JK) - ZGAM(IIJB:IIJE,JK+D%NKL) * PVARP(IIJB:IIJE,JK+D%NKL) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! ELSE ! DO JK=IKTB,IKTE - !$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) + !$mnh_expand_array(JIJ=IIJB:IIJE) + PVARP(IIJB:IIJE,JK) = ZY(IIJB:IIJE,JK) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! END IF @@ -243,10 +246,10 @@ END IF !* 3. FILL THE UPPER AND LOWER EXTERNAL VALUES ! ---------------------------------------- ! -!$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) +!$mnh_expand_array(JIJ=IIJB:IIJE) +PVARP(IIJB:IIJE,D%NKA)=PVARP(IIJB:IIJE,IKB) +PVARP(IIJB:IIJE,D%NKU)=PVARP(IIJB:IIJE,IKE) +!$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !------------------------------------------------------------------------------- ! diff --git a/src/common/turb/mode_tridiag_thermo.F90 b/src/common/turb/mode_tridiag_thermo.F90 index 2d10fbc7a..037563f68 100644 --- a/src/common/turb/mode_tridiag_thermo.F90 +++ b/src/common/turb/mode_tridiag_thermo.F90 @@ -154,6 +154,7 @@ INTEGER :: JIJ,JK ! loop counter INTEGER :: IKB,IKE ! inner limits INTEGER :: IKT ! array size in k direction INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain +INTEGER :: IIJB, IIJE ! start, end of ij loops in physical domain ! ! --------------------------------------------------------------------------- ! @@ -167,12 +168,14 @@ IKTB=D%NKTB IKTE=D%NKTE IKB=D%NKB IKE=D%NKE +IIJB=D%NIJB +IIJE=D%NIJE ! CALL MZM_PHY(D,PRHODJ,ZMZM_RHODJ) -!$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) +!$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) +ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,1:D%NKT) = ZMZM_RHODJ(IIJB:IIJE,1:D%NKT)*PDFDDTDZ(IIJB:IIJE,1:D%NKT) & + /PDZZ(IIJB:IIJE,1:D%NKT)**2 +!$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) ! ZA=0. ZB=0. @@ -183,33 +186,33 @@ ZY=0. !* 2. COMPUTE THE RIGHT HAND SIDE ! --------------------------- ! -!$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) +!$mnh_expand_array(JIJ=IIJB:IIJE) +ZY(IIJB:IIJE,IKB) = PRHODJ(IIJB:IIJE,IKB)*PVARM(IIJB:IIJE,IKB)/PTSTEP & + - ZMZM_RHODJ(IIJB:IIJE,IKB+D%NKL) * PF(IIJB:IIJE,IKB+D%NKL)/PDZZ(IIJB:IIJE,IKB+D%NKL) & + + ZMZM_RHODJ(IIJB:IIJE,IKB ) * PF(IIJB:IIJE,IKB )/PDZZ(IIJB:IIJE,IKB ) & + + ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,IKB+D%NKL) * PIMPL * PVARM(IIJB:IIJE,IKB+D%NKL) & + - ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,IKB+D%NKL) * PIMPL * PVARM(IIJB:IIJE,IKB ) +!$mnh_end_expand_array(JIJ=IIJB:IIJE) ! DO JK=IKTB+1,IKTE-1 - !$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) + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZY(IIJB:IIJE,JK) = PRHODJ(IIJB:IIJE,JK)*PVARM(IIJB:IIJE,JK)/PTSTEP & + - ZMZM_RHODJ(IIJB:IIJE,JK+D%NKL) * PF(IIJB:IIJE,JK+D%NKL)/PDZZ(IIJB:IIJE,JK+D%NKL) & + + ZMZM_RHODJ(IIJB:IIJE,JK ) * PF(IIJB:IIJE,JK )/PDZZ(IIJB:IIJE,JK ) & + + ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,JK+D%NKL) * PIMPL * PVARM(IIJB:IIJE,JK+D%NKL) & + - ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,JK+D%NKL) * PIMPL * PVARM(IIJB:IIJE,JK ) & + - ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,JK ) * PIMPL * PVARM(IIJB:IIJE,JK ) & + + ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,JK ) * PIMPL * PVARM(IIJB:IIJE,JK-D%NKL) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! -!$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) +!$mnh_expand_array(JIJ=IIJB:IIJE) +ZY(IIJB:IIJE,IKE) = PRHODJ(IIJB:IIJE,IKE)*PVARM(IIJB:IIJE,IKE)/PTSTEP & + - ZMZM_RHODJ(IIJB:IIJE,IKE+D%NKL) * PF(IIJB:IIJE,IKE+D%NKL)/PDZZ(IIJB:IIJE,IKE+D%NKL) & + + ZMZM_RHODJ(IIJB:IIJE,IKE ) * PF(IIJB:IIJE,IKE )/PDZZ(IIJB:IIJE,IKE ) & + - ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,IKE ) * PIMPL * PVARM(IIJB:IIJE,IKE ) & + + ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,IKE ) * PIMPL * PVARM(IIJB:IIJE,IKE-D%NKL) +!$mnh_end_expand_array(JIJ=IIJB:IIJE) ! ! !* 3. INVERSION OF THE TRIDIAGONAL SYSTEM @@ -220,72 +223,72 @@ IF ( PIMPL > 1.E-10 ) THEN !* 3.1 arrays A, B, C ! -------------- ! - !$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) + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZB(IIJB:IIJE,IKB) = PRHODJ(IIJB:IIJE,IKB)/PTSTEP & + - ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,IKB+D%NKL) * PIMPL + ZC(IIJB:IIJE,IKB) = ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,IKB+D%NKL) * PIMPL + !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! DO JK=IKTB+1,IKTE-1 - !$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) + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZA(IIJB:IIJE,JK) = ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,JK) * PIMPL + ZB(IIJB:IIJE,JK) = PRHODJ(IIJB:IIJE,JK)/PTSTEP & + - ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,JK+D%NKL) * PIMPL & + - ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,JK) * PIMPL + ZC(IIJB:IIJE,JK) = ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,JK+D%NKL) * PIMPL + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! - !$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 + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZA(IIJB:IIJE,IKE) = ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,IKE ) * PIMPL + ZB(IIJB:IIJE,IKE) = PRHODJ(IIJB:IIJE,IKE)/PTSTEP & + - ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,IKE ) * PIMPL ! !* 3.2 going up ! -------- ! - 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) + ZBET(IIJB:IIJE) = ZB(IIJB:IIJE,IKB) ! bet = b(ikb) + PVARP(IIJB:IIJE,IKB) = ZY(IIJB:IIJE,IKB) / ZBET(IIJB:IIJE) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! DO JK = IKB+D%NKL,IKE-D%NKL,D%NKL - !$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) + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZGAM(IIJB:IIJE,JK) = ZC(IIJB:IIJE,JK-D%NKL) / ZBET(IIJB:IIJE) ! gam(k) = c(k-1) / bet - ZBET(D%NIJB:D%NIJE) = ZB(D%NIJB:D%NIJE,JK) - ZA(D%NIJB:D%NIJE,JK) * ZGAM(D%NIJB:D%NIJE,JK) + ZBET(IIJB:IIJE) = ZB(IIJB:IIJE,JK) - ZA(IIJB:IIJE,JK) * ZGAM(IIJB:IIJE,JK) ! bet = b(k) - a(k)* gam(k) - 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) + PVARP(IIJB:IIJE,JK)= ( ZY(IIJB:IIJE,JK) - ZA(IIJB:IIJE,JK) * PVARP(IIJB:IIJE,JK-D%NKL) ) & + / ZBET(IIJB:IIJE) ! res(k) = (y(k) -a(k)*res(k-1))/ bet - !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! special treatment for the last level - !$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) + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZGAM(IIJB:IIJE,IKE) = ZC(IIJB:IIJE,IKE-D%NKL) / ZBET(IIJB:IIJE) ! gam(k) = c(k-1) / bet - ZBET(D%NIJB:D%NIJE) = ZB(D%NIJB:D%NIJE,IKE) - ZA(D%NIJB:D%NIJE,IKE) * ZGAM(D%NIJB:D%NIJE,IKE) + ZBET(IIJB:IIJE) = ZB(IIJB:IIJE,IKE) - ZA(IIJB:IIJE,IKE) * ZGAM(IIJB:IIJE,IKE) ! bet = b(k) - a(k)* gam(k) - 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) + PVARP(IIJB:IIJE,IKE)= ( ZY(IIJB:IIJE,IKE) - ZA(IIJB:IIJE,IKE) * PVARP(IIJB:IIJE,IKE-D%NKL) ) & + / ZBET(IIJB:IIJE) ! res(k) = (y(k) -a(k)*res(k-1))/ bet - !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !* 3.3 going down ! ---------- ! DO JK = IKE-D%NKL,IKB,-1*D%NKL - !$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) + !$mnh_expand_array(JIJ=IIJB:IIJE) + PVARP(IIJB:IIJE,JK) = PVARP(IIJB:IIJE,JK) - ZGAM(IIJB:IIJE,JK+D%NKL) * PVARP(IIJB:IIJE,JK+D%NKL) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! ELSE ! DO JK=IKTB,IKTE - !$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) + !$mnh_expand_array(JIJ=IIJB:IIJE) + PVARP(IIJB:IIJE,JK) = ZY(IIJB:IIJE,JK) * PTSTEP / PRHODJ(IIJB:IIJE,JK) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! END IF @@ -294,10 +297,10 @@ END IF !* 4. FILL THE UPPER AND LOWER EXTERNAL VALUES ! ---------------------------------------- ! -!$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) +!$mnh_expand_array(JIJ=IIJB:IIJE) +PVARP(IIJB:IIJE,D%NKA)=PVARP(IIJB:IIJE,IKB) +PVARP(IIJB:IIJE,D%NKU)=PVARP(IIJB:IIJE,IKE) +!$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !------------------------------------------------------------------------------- ! diff --git a/src/common/turb/mode_tridiag_tke.F90 b/src/common/turb/mode_tridiag_tke.F90 index 2b3f97af2..533664d70 100644 --- a/src/common/turb/mode_tridiag_tke.F90 +++ b/src/common/turb/mode_tridiag_tke.F90 @@ -142,6 +142,7 @@ INTEGER :: JIJ,JK ! loop counter INTEGER :: IKB,IKE ! inner vertical limits INTEGER :: IKT ! array size in k direction INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain +INTEGER :: IIJB, IIJE ! start, end of ij loops in physical domain ! ! --------------------------------------------------------------------------- ! @@ -156,28 +157,30 @@ IKTB=D%NKTB IKTE=D%NKTE IKB=D%NKB IKE=D%NKE +IIJB=D%NIJB +IIJE=D%NIJE ! -!$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) +!$mnh_expand_array(JIJ=IIJB:IIJE) +ZY(IIJB:IIJE,IKB) = PVARM(IIJB:IIJE,IKB) + PTSTEP*PSOURCE(IIJB:IIJE,IKB) - & + PEXPL / PRHODJ(IIJB:IIJE,IKB) * PA(IIJB:IIJE,IKB+D%NKL) * & + (PVARM(IIJB:IIJE,IKB+D%NKL) - PVARM(IIJB:IIJE,IKB)) +!$mnh_end_expand_array(JIJ=IIJB:IIJE) ! DO JK=IKTB+1,IKTE-1 - !$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_expand_array(JIJ=IIJB:IIJE) + ZY(IIJB:IIJE,JK)= PVARM(IIJB:IIJE,JK) + PTSTEP*PSOURCE(IIJB:IIJE,JK) - & + PEXPL / PRHODJ(IIJB:IIJE,JK) * & + ( PVARM(IIJB:IIJE,JK-D%NKL)*PA(IIJB:IIJE,JK) & + -PVARM(IIJB:IIJE,JK)*(PA(IIJB:IIJE,JK)+PA(IIJB:IIJE,JK+D%NKL)) & + +PVARM(IIJB:IIJE,JK+D%NKL)*PA(IIJB:IIJE,JK+D%NKL) & ) - !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! -!$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) +!$mnh_expand_array(JIJ=IIJB:IIJE) +ZY(IIJB:IIJE,IKE)= PVARM(IIJB:IIJE,IKE) + PTSTEP*PSOURCE(IIJB:IIJE,IKE) + & + PEXPL / PRHODJ(IIJB:IIJE,IKE) * PA(IIJB:IIJE,IKE) * (PVARM(IIJB:IIJE,IKE)-PVARM(IIJB:IIJE,IKE-D%NKL)) +!$mnh_end_expand_array(JIJ=IIJB:IIJE) ! ! !* 2. INVERSION OF THE TRIDIAGONAL SYSTEM @@ -188,55 +191,55 @@ IF ( PIMPL > 1.E-10 ) THEN ! ! going up ! - !$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)) + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZBET(IIJB:IIJE) = 1. + PIMPL * (PDIAG(IIJB:IIJE,IKB)-PA(IIJB:IIJE,IKB+D%NKL) / PRHODJ(IIJB:IIJE,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) + PVARP(IIJB:IIJE,IKB) = ZY(IIJB:IIJE,IKB) / ZBET(IIJB:IIJE) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! DO JK = IKB+D%NKL,IKE-D%NKL,D%NKL - !$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) + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZGAM(IIJB:IIJE,JK) = PIMPL * PA(IIJB:IIJE,JK) / PRHODJ(IIJB:IIJE,JK-D%NKL) / ZBET(IIJB:IIJE) ! gam(k) = c(k-1) / bet - 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) & + ZBET(IIJB:IIJE) = 1. + PIMPL * ( PDIAG(IIJB:IIJE,JK) - & + ( PA(IIJB:IIJE,JK) * (1. + ZGAM(IIJB:IIJE,JK)) & + + PA(IIJB:IIJE,JK+D%NKL) & + ) / PRHODJ(IIJB:IIJE,JK) & ) ! bet = b(k) - a(k)* gam(k) - 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) + PVARP(IIJB:IIJE,JK)= ( ZY(IIJB:IIJE,JK) - PIMPL * PA(IIJB:IIJE,JK) / PRHODJ(IIJB:IIJE,JK) & + * PVARP(IIJB:IIJE,JK-D%NKL) & + ) / ZBET(IIJB:IIJE) ! res(k) = (y(k) -a(k)*res(k-1))/ bet - !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO - !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + !$mnh_expand_array(JIJ=IIJB:IIJE) ! special treatment for the last level - 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) + ZGAM(IIJB:IIJE,IKE) = PIMPL * PA(IIJB:IIJE,IKE) / PRHODJ(IIJB:IIJE,IKE-D%NKL) / ZBET(IIJB:IIJE) ! gam(k) = c(k-1) / bet - 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) & + ZBET(IIJB:IIJE) = 1. + PIMPL * ( PDIAG(IIJB:IIJE,IKE) - & + ( PA(IIJB:IIJE,IKE) * (1. + ZGAM(IIJB:IIJE,IKE)) ) / PRHODJ(IIJB:IIJE,IKE) & ) ! bet = b(k) - a(k)* gam(k) - 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) + PVARP(IIJB:IIJE,IKE)= ( ZY(IIJB:IIJE,IKE) - PIMPL * PA(IIJB:IIJE,IKE) / PRHODJ(IIJB:IIJE,IKE) & + * PVARP(IIJB:IIJE,IKE-D%NKL) & + ) / ZBET(IIJB:IIJE) ! res(k) = (y(k) -a(k)*res(k-1))/ bet ! ! going down ! - !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) DO JK = IKE-D%NKL,IKB,-1*D%NKL - !$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) + !$mnh_expand_array(JIJ=IIJB:IIJE) + PVARP(IIJB:IIJE,JK) = PVARP(IIJB:IIJE,JK) - ZGAM(IIJB:IIJE,JK+D%NKL) * PVARP(IIJB:IIJE,JK+D%NKL) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! ELSE ! DO JK=IKTB,IKTE - !$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) + !$mnh_expand_array(JIJ=IIJB:IIJE) + PVARP(IIJB:IIJE,JK) = ZY(IIJB:IIJE,JK) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! END IF @@ -245,10 +248,10 @@ END IF !* 3. FILL THE UPPER AND LOWER EXTERNAL VALUES ! ---------------------------------------- ! -!$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) +!$mnh_expand_array(JIJ=IIJB:IIJE) +PVARP(IIJB:IIJE,D%NKA)=PVARP(IIJB:IIJE,IKB) +PVARP(IIJB:IIJE,D%NKU)=PVARP(IIJB:IIJE,IKE) +!$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !------------------------------------------------------------------------------- ! diff --git a/src/common/turb/mode_tridiag_wind.F90 b/src/common/turb/mode_tridiag_wind.F90 index ef323530a..96b79dd53 100644 --- a/src/common/turb/mode_tridiag_wind.F90 +++ b/src/common/turb/mode_tridiag_wind.F90 @@ -147,6 +147,7 @@ INTEGER :: JIJ,JK ! loop counter INTEGER :: IKB,IKE ! inner vertical limits INTEGER :: IKT ! array size in k direction INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain +INTEGER :: IIJB, IIJE ! start, end of ij loops in physical domain ! ! --------------------------------------------------------------------------- ! @@ -161,28 +162,30 @@ IKTB=D%NKTB IKTE=D%NKTE IKB=D%NKB IKE=D%NKE +IIJB=D%NIJB +IIJE=D%NIJE ! -!$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) +!$mnh_expand_array(JIJ=IIJB:IIJE) +ZY(IIJB:IIJE,IKB) = PVARM(IIJB:IIJE,IKB) + PTSTEP*PSOURCE(IIJB:IIJE,IKB) - & + PEXPL / PRHODJA(IIJB:IIJE,IKB) * PA(IIJB:IIJE,IKB+D%NKL) * & + (PVARM(IIJB:IIJE,IKB+D%NKL) - PVARM(IIJB:IIJE,IKB)) +!$mnh_end_expand_array(JIJ=IIJB:IIJE) ! DO JK=IKTB+1,IKTE-1 - !$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_expand_array(JIJ=IIJB:IIJE) + ZY(IIJB:IIJE,JK)= PVARM(IIJB:IIJE,JK) + PTSTEP*PSOURCE(IIJB:IIJE,JK) - & + PEXPL / PRHODJA(IIJB:IIJE,JK) * & + ( PVARM(IIJB:IIJE,JK-D%NKL)*PA(IIJB:IIJE,JK) & + -PVARM(IIJB:IIJE,JK)*(PA(IIJB:IIJE,JK)+PA(IIJB:IIJE,JK+D%NKL)) & + +PVARM(IIJB:IIJE,JK+D%NKL)*PA(IIJB:IIJE,JK+D%NKL) & ) - !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! -!$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) +!$mnh_expand_array(JIJ=IIJB:IIJE) +ZY(IIJB:IIJE,IKE)= PVARM(IIJB:IIJE,IKE) + PTSTEP*PSOURCE(IIJB:IIJE,IKE) + & + PEXPL / PRHODJA(IIJB:IIJE,IKE) * PA(IIJB:IIJE,IKE) * (PVARM(IIJB:IIJE,IKE)-PVARM(IIJB:IIJE,IKE-D%NKL)) +!$mnh_end_expand_array(JIJ=IIJB:IIJE) ! ! !* 2. INVERSION OF THE TRIDIAGONAL SYSTEM @@ -193,53 +196,53 @@ IF ( PIMPL > 1.E-10 ) THEN ! ! going up ! - !$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) + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZBET(IIJB:IIJE) = 1. - PIMPL * ( PA(IIJB:IIJE,IKB+D%NKL) / PRHODJA(IIJB:IIJE,IKB) & + + PCOEFS(IIJB:IIJE) * PTSTEP ) ! bet = b(ikb) + PVARP(IIJB:IIJE,IKB) = ZY(IIJB:IIJE,IKB) / ZBET(IIJB:IIJE) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! DO JK = IKB+D%NKL,IKE-D%NKL,D%NKL - !$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) + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZGAM(IIJB:IIJE,JK) = PIMPL * PA(IIJB:IIJE,JK) / PRHODJA(IIJB:IIJE,JK-D%NKL) / ZBET(IIJB:IIJE) ! gam(k) = c(k-1) / bet - 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) + ZBET(IIJB:IIJE) = 1. - PIMPL * ( PA(IIJB:IIJE,JK) * (1. + ZGAM(IIJB:IIJE,JK)) & + + PA(IIJB:IIJE,JK+D%NKL) & + ) / PRHODJA(IIJB:IIJE,JK) ! bet = b(k) - a(k)* gam(k) - 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) + PVARP(IIJB:IIJE,JK)= ( ZY(IIJB:IIJE,JK) - PIMPL * PA(IIJB:IIJE,JK) / PRHODJA(IIJB:IIJE,JK) & + * PVARP(IIJB:IIJE,JK-D%NKL) & + ) / ZBET(IIJB:IIJE) ! res(k) = (y(k) -a(k)*res(k-1))/ bet - !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO - !$mnh_expand_array(JIJ=D%NIJB:D%NIJE) + !$mnh_expand_array(JIJ=IIJB:IIJE) ! special treatment for the last level - 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) + ZGAM(IIJB:IIJE,IKE) = PIMPL * PA(IIJB:IIJE,IKE) / PRHODJA(IIJB:IIJE,IKE-D%NKL) / ZBET(IIJB:IIJE) ! gam(k) = c(k-1) / bet - 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) + ZBET(IIJB:IIJE) = 1. - PIMPL * ( PA(IIJB:IIJE,IKE) * (1. + ZGAM(IIJB:IIJE,IKE)) & + ) / PRHODJA(IIJB:IIJE,IKE) ! bet = b(k) - a(k)* gam(k) - 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) + PVARP(IIJB:IIJE,IKE)= ( ZY(IIJB:IIJE,IKE) - PIMPL * PA(IIJB:IIJE,IKE) / PRHODJA(IIJB:IIJE,IKE) & + * PVARP(IIJB:IIJE,IKE-D%NKL) & + ) / ZBET(IIJB:IIJE) ! res(k) = (y(k) -a(k)*res(k-1))/ bet ! ! going down ! - !$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) DO JK = IKE-D%NKL,IKB,-1*D%NKL - !$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) + !$mnh_expand_array(JIJ=IIJB:IIJE) + PVARP(IIJB:IIJE,JK) = PVARP(IIJB:IIJE,JK) - ZGAM(IIJB:IIJE,JK+D%NKL) * PVARP(IIJB:IIJE,JK+D%NKL) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! ELSE ! DO JK=IKTB,IKTE - !$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) + !$mnh_expand_array(JIJ=IIJB:IIJE) + PVARP(IIJB:IIJE,JK) = ZY(IIJB:IIJE,JK) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! END IF @@ -248,10 +251,10 @@ END IF !* 3. FILL THE UPPER AND LOWER EXTERNAL VALUES ! ---------------------------------------- ! -!$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) +!$mnh_expand_array(JIJ=IIJB:IIJE) +PVARP(IIJB:IIJE,D%NKA)=PVARP(IIJB:IIJE,IKB) +PVARP(IIJB:IIJE,D%NKU)=PVARP(IIJB:IIJE,IKE) +!$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !------------------------------------------------------------------------------- ! -- GitLab