diff --git a/src/PHYEX/aux/gradient_m.f90 b/src/PHYEX/aux/gradient_m.f90 index feb4c58f3910be0ba2ca717db206a06efcde2316..1c46601511db0231d28dc9a567b9aff91d058907 100644 --- a/src/PHYEX/aux/gradient_m.f90 +++ b/src/PHYEX/aux/gradient_m.f90 @@ -742,8 +742,8 @@ IKT=SIZE(PY,3) IKTB=1+JPVEXT_TURB IKTE=IKT-JPVEXT_TURB -PGZ_M_W(:,:,IKTB:IKTE) = (PY(:,:,IKTB:IKTE)-PY(:,:,IKTB-KL:IKTE-KL)) & - / PDZZ(:,:,IKTB:IKTE) +PGZ_M_W(:,:,:) = (PY(:,:,:)-PY(:,:,IKTB-KL:IKTE-KL)) & + / PDZZ(:,:,:) PGZ_M_W(:,:,KKU)= (PY(:,:,KKU)-PY(:,:,KKU-KL)) & / PDZZ(:,:,KKU) PGZ_M_W(:,:,KKA)= PGZ_M_W(:,:,KKU) ! -999. diff --git a/src/PHYEX/aux/modd_nsv.f90 b/src/PHYEX/aux/modd_nsv.f90 index 9cfa343c413e3b78171c89590cf04432585986fc..92f94486d1a377caff8bb9be8956bf5b82f3b32d 100644 --- a/src/PHYEX/aux/modd_nsv.f90 +++ b/src/PHYEX/aux/modd_nsv.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2001-2021 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2001-2023 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. @@ -52,6 +52,7 @@ REAL,DIMENSION(JPSVMAX) :: XSVMIN ! minimum value for SV variables LOGICAL :: LINI_NSV(JPMODELMAX) = .FALSE. ! becomes True when routine INI_NSV is called ! CHARACTER(LEN=NMNHNAMELGTMAX), DIMENSION(:,:), ALLOCATABLE, TARGET :: CSV_CHEM_LIST_A !Names of all the chemical variables +CHARACTER(LEN=6), DIMENSION(:,:), ALLOCATABLE, TARGET :: CSV_A !Names of the scalar variables TYPE(tfieldmetadata), DIMENSION(:,:), ALLOCATABLE, TARGET :: TSVLIST_A !Metadata of all the scalar variables INTEGER,DIMENSION(JPMODELMAX)::NSV_A = 0 ! total number of scalar variables @@ -166,9 +167,9 @@ INTEGER,DIMENSION(JPMODELMAX)::NSV_SNWEND_A = 0 ! NSV_SNWBEG_A...NSV_SNWEND_A ! variables updated for the current model ! CHARACTER(LEN=NMNHNAMELGTMAX), DIMENSION(:), POINTER :: CSV_CHEM_LIST !Names of all the chemical variables -TYPE(tfieldmetadata), DIMENSION(:), POINTER :: TSVLIST !Metadata of all the scalar variables +CHARACTER(LEN=6), DIMENSION(:), POINTER :: CSV !Names of the scalar variables -CHARACTER(LEN=6), DIMENSION(:), ALLOCATABLE :: CSV ! name of the scalar variables +TYPE(tfieldmetadata), DIMENSION(:), POINTER :: TSVLIST !Metadata of all the scalar variables INTEGER :: NSV = 0 ! total number of user scalar variables ! diff --git a/src/PHYEX/aux/mode_gradient_m_phy.f90 b/src/PHYEX/aux/mode_gradient_m_phy.f90 index 6f3c34f01c872849d90154f8b73a90b649854bd3..de27a253baa2139a0f9b9a6aba94d87b6e71b390 100644 --- a/src/PHYEX/aux/mode_gradient_m_phy.f90 +++ b/src/PHYEX/aux/mode_gradient_m_phy.f90 @@ -212,17 +212,17 @@ IF (.NOT. OFLAT) THEN CALL DZM_PHY(D,PA,ZWORK3) CALL MXF_PHY(D,PDZX,ZWORK4) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - ZWORK5(IIB:IIE,IJB:IJE,1:IKT) = ZWORK3(IIB:IIE,IJB:IJE,1:IKT) * ZWORK4(IIB:IIE,IJB:IJE,1:IKT) & - / PDZZ(IIB:IIE,IJB:IJE,1:IKT) + ZWORK5(IIB:IIE,IJB:IJE,:) = ZWORK3(IIB:IIE,IJB:IJE,:) * ZWORK4(IIB:IIE,IJB:IJE,:) & + / PDZZ(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK5,ZWORK6) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - PGX_M_M(IIB:IIE,IJB:IJE,1:IKT)= (ZWORK2(IIB:IIE,IJB:IJE,1:IKT) - ZWORK6(IIB:IIE,IJB:IJE,1:IKT)) & - / ZMXF_PDXX(IIB:IIE,IJB:IJE,1:IKT) + PGX_M_M(IIB:IIE,IJB:IJE,:)= (ZWORK2(IIB:IIE,IJB:IJE,:) - ZWORK6(IIB:IIE,IJB:IJE,:)) & + / ZMXF_PDXX(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) ELSE !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - PGX_M_M(IIB:IIE,IJB:IJE,1:IKT)= ZWORK2(IIB:IIE,IJB:IJE,1:IKT) / ZMXF_PDXX(IIB:IIE,IJB:IJE,1:IKT) + PGX_M_M(IIB:IIE,IJB:IJE,:)= ZWORK2(IIB:IIE,IJB:IJE,:) / ZMXF_PDXX(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) END IF ! @@ -335,17 +335,17 @@ IF (.NOT. OFLAT) THEN CALL DZM_PHY(D,PA,ZWORK3) CALL MYF_PHY(D,PDZY,ZWORK4) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - ZWORK5(IIB:IIE,IJB:IJE,1:IKT) = ZWORK4(IIB:IIE,IJB:IJE,1:IKT) * ZWORK3(IIB:IIE,IJB:IJE,1:IKT) & - / PDZZ(IIB:IIE,IJB:IJE,1:IKT) + ZWORK5(IIB:IIE,IJB:IJE,:) = ZWORK4(IIB:IIE,IJB:IJE,:) * ZWORK3(IIB:IIE,IJB:IJE,:) & + / PDZZ(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK5,ZWORK4) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - PGY_M_M(IIB:IIE,IJB:IJE,1:IKT)= (ZWORK2(IIB:IIE,IJB:IJE,1:IKT)-ZWORK4(IIB:IIE,IJB:IJE,1:IKT)) & - /ZMYF_PDYY(IIB:IIE,IJB:IJE,1:IKT) + PGY_M_M(IIB:IIE,IJB:IJE,:)= (ZWORK2(IIB:IIE,IJB:IJE,:)-ZWORK4(IIB:IIE,IJB:IJE,:)) & + /ZMYF_PDYY(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) ELSE !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - PGY_M_M(IIB:IIE,IJB:IJE,1:IKT) = ZWORK2(IIB:IIE,IJB:IJE,1:IKT)/ZMYF_PDYY(IIB:IIE,IJB:IJE,1:IKT) + PGY_M_M(IIB:IIE,IJB:IJE,:) = ZWORK2(IIB:IIE,IJB:IJE,:)/ZMYF_PDYY(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) ENDIF ! diff --git a/src/PHYEX/aux/mode_gradient_u_phy.f90 b/src/PHYEX/aux/mode_gradient_u_phy.f90 index f66dfeff79fac30aeabb45fe0d91866866caa170..ded89cd72bb39d1127422fec064b8b9efda576a9 100644 --- a/src/PHYEX/aux/mode_gradient_u_phy.f90 +++ b/src/PHYEX/aux/mode_gradient_u_phy.f90 @@ -91,8 +91,8 @@ CALL DZM_PHY(D,PA,PA_WORK) CALL MXM_PHY(D,PDZZ,PDZZ_WORK) ! !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) -PGZ_U_UW(IIB:IIE,IJB:IJE,1:IKT)= PA_WORK(IIB:IIE,IJB:IJE,1:IKT) & - / PDZZ_WORK(IIB:IIE,IJB:IJE,1:IKT) +PGZ_U_UW(IIB:IIE,IJB:IJE,:)= PA_WORK(IIB:IIE,IJB:IJE,:) & + / PDZZ_WORK(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) ! !---------------------------------------------------------------------------- @@ -204,20 +204,20 @@ CALL MXF_PHY(D,PDXX,ZWORK2) IF (.NOT. OFLAT) THEN CALL DZM_PHY(D,PA,ZWORK3) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - ZWORK3(IIB:IIE,IJB:IJE,1:IKT) = ZWORK3(IIB:IIE,IJB:IJE,1:IKT) * PDZX(IIB:IIE,IJB:IJE,1:IKT) + ZWORK3(IIB:IIE,IJB:IJE,:) = ZWORK3(IIB:IIE,IJB:IJE,:) * PDZX(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) CALL MXF_PHY(D,ZWORK3,ZWORK4) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - ZWORK4(IIB:IIE,IJB:IJE,1:IKT) = ZWORK4(IIB:IIE,IJB:IJE,1:IKT) / PDZZ(IIB:IIE,IJB:IJE,1:IKT) + ZWORK4(IIB:IIE,IJB:IJE,:) = ZWORK4(IIB:IIE,IJB:IJE,:) / PDZZ(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK4,ZWORK3) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - PGX_U_M(IIB:IIE,IJB:IJE,1:IKT) = ( ZWORK1(IIB:IIE,IJB:IJE,1:IKT) - ZWORK3(IIB:IIE,IJB:IJE,1:IKT)) & - / ZWORK2(IIB:IIE,IJB:IJE,1:IKT) + PGX_U_M(IIB:IIE,IJB:IJE,:) = ( ZWORK1(IIB:IIE,IJB:IJE,:) - ZWORK3(IIB:IIE,IJB:IJE,:)) & + / ZWORK2(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) ELSE !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - PGX_U_M(IIB:IIE,IJB:IJE,1:IKT)= ZWORK1(IIB:IIE,IJB:IJE,1:IKT) / ZWORK2(IIB:IIE,IJB:IJE,1:IKT) + PGX_U_M(IIB:IIE,IJB:IJE,:)= ZWORK1(IIB:IIE,IJB:IJE,:) / ZWORK2(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) END IF ! diff --git a/src/PHYEX/aux/mode_gradient_v_phy.f90 b/src/PHYEX/aux/mode_gradient_v_phy.f90 index 0e29c0064d67e01b07396f7c7e544ae9968592b6..37832eae6c5e8da6d0f69f71fa3261e868f53e4f 100644 --- a/src/PHYEX/aux/mode_gradient_v_phy.f90 +++ b/src/PHYEX/aux/mode_gradient_v_phy.f90 @@ -90,8 +90,8 @@ CALL DZM_PHY(D,PA,PA_WORK) CALL MYM_PHY(D,PDZZ,PDZZ_WORK) ! !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) -PGZ_V_VW(IIB:IIE,IJB:IJE,1:IKT)= PA_WORK(IIB:IIE,IJB:IJE,1:IKT) & - / PDZZ_WORK(IIB:IIE,IJB:IJE,1:IKT) +PGZ_V_VW(IIB:IIE,IJB:IJE,:)= PA_WORK(IIB:IIE,IJB:IJE,:) & + / PDZZ_WORK(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) !---------------------------------------------------------------------------- ! @@ -198,20 +198,20 @@ CALL MYF_PHY(D,PDYY,ZWORK2) IF (.NOT. OFLAT) THEN CALL DZM_PHY(D,PA,ZWORK3) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - ZWORK3(IIB:IIE,IJB:IJE,1:IKT) = ZWORK3(IIB:IIE,IJB:IJE,1:IKT) * PDZY(IIB:IIE,IJB:IJE,1:IKT) + ZWORK3(IIB:IIE,IJB:IJE,:) = ZWORK3(IIB:IIE,IJB:IJE,:) * PDZY(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) CALL MYF_PHY(D,ZWORK3,ZWORK4) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - ZWORK4(IIB:IIE,IJB:IJE,1:IKT) = ZWORK4(IIB:IIE,IJB:IJE,1:IKT) / PDZZ(IIB:IIE,IJB:IJE,1:IKT) + ZWORK4(IIB:IIE,IJB:IJE,:) = ZWORK4(IIB:IIE,IJB:IJE,:) / PDZZ(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK4,ZWORK3) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - PGY_V_M(IIB:IIE,IJB:IJE,1:IKT) = ( ZWORK1(IIB:IIE,IJB:IJE,1:IKT) - ZWORK3(IIB:IIE,IJB:IJE,1:IKT)) & - / ZWORK2(IIB:IIE,IJB:IJE,1:IKT) + PGY_V_M(IIB:IIE,IJB:IJE,:) = ( ZWORK1(IIB:IIE,IJB:IJE,:) - ZWORK3(IIB:IIE,IJB:IJE,:)) & + / ZWORK2(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) ELSE !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - PGY_V_M(IIB:IIE,IJB:IJE,1:IKT)= ZWORK1(IIB:IIE,IJB:IJE,1:IKT) / ZWORK2(IIB:IIE,IJB:IJE,1:IKT) + PGY_V_M(IIB:IIE,IJB:IJE,:)= ZWORK1(IIB:IIE,IJB:IJE,:) / ZWORK2(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) END IF ! diff --git a/src/PHYEX/aux/mode_gradient_w_phy.f90 b/src/PHYEX/aux/mode_gradient_w_phy.f90 index 0f8db721bfbc5be4d986dd23373fb00eb0f36b2f..924491117970a70303cf00b0b4542b488c4ddeba 100644 --- a/src/PHYEX/aux/mode_gradient_w_phy.f90 +++ b/src/PHYEX/aux/mode_gradient_w_phy.f90 @@ -90,7 +90,7 @@ IKT=D%NKT CALL MZM_PHY(D,PDXX,ZWORK1) CALL DXM_PHY(D,PA,ZWORK2) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) -ZWORK3(IIB:IIE,IJB:IJE,1:IKT) = ZWORK2(IIB:IIE,IJB:IJE,1:IKT) / ZWORK1(IIB:IIE,IJB:IJE,1:IKT) +ZWORK3(IIB:IIE,IJB:IJE,:) = ZWORK2(IIB:IIE,IJB:IJE,:) / ZWORK1(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) ! IF (.NOT. OFLAT) THEN @@ -100,9 +100,9 @@ IF (.NOT. OFLAT) THEN ! CALL MXM_PHY(D,PDZZ,ZWORK2) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - PGX_W_UW(IIB:IIE,IJB:IJE,1:IKT)= ZWORK3(IIB:IIE,IJB:IJE,1:IKT) & - - ZWORK5(IIB:IIE,IJB:IJE,1:IKT)*PDZX(IIB:IIE,IJB:IJE,1:IKT) & - / (ZWORK1(IIB:IIE,IJB:IJE,1:IKT)*ZWORK2(IIB:IIE,IJB:IJE,1:IKT)) + PGX_W_UW(IIB:IIE,IJB:IJE,:)= ZWORK3(IIB:IIE,IJB:IJE,:) & + - ZWORK5(IIB:IIE,IJB:IJE,:)*PDZX(IIB:IIE,IJB:IJE,:) & + / (ZWORK1(IIB:IIE,IJB:IJE,:)*ZWORK2(IIB:IIE,IJB:IJE,:)) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) ELSE PGX_W_UW = ZWORK3 @@ -209,7 +209,7 @@ IKT=D%NKT CALL MZM_PHY(D,PDYY,ZWORK1) CALL DYM_PHY(D,PA,ZWORK2) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) -ZWORK3(IIB:IIE,IJB:IJE,1:IKT) = ZWORK2(IIB:IIE,IJB:IJE,1:IKT) / ZWORK1(IIB:IIE,IJB:IJE,1:IKT) +ZWORK3(IIB:IIE,IJB:IJE,:) = ZWORK2(IIB:IIE,IJB:IJE,:) / ZWORK1(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) ! IF (.NOT. OFLAT) THEN @@ -219,9 +219,9 @@ IF (.NOT. OFLAT) THEN ! CALL MYM_PHY(D,PDZZ,ZWORK2) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - PGY_W_VW(IIB:IIE,IJB:IJE,1:IKT)= ZWORK3(IIB:IIE,IJB:IJE,1:IKT) & - - ZWORK5(IIB:IIE,IJB:IJE,1:IKT)*PDZY(IIB:IIE,IJB:IJE,1:IKT) & - / (ZWORK1(IIB:IIE,IJB:IJE,1:IKT)*ZWORK2(IIB:IIE,IJB:IJE,1:IKT)) + PGY_W_VW(IIB:IIE,IJB:IJE,:)= ZWORK3(IIB:IIE,IJB:IJE,:) & + - ZWORK5(IIB:IIE,IJB:IJE,:)*PDZY(IIB:IIE,IJB:IJE,:) & + / (ZWORK1(IIB:IIE,IJB:IJE,:)*ZWORK2(IIB:IIE,IJB:IJE,:)) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) ELSE PGY_W_VW = ZWORK3 @@ -317,7 +317,7 @@ IKT=D%NKT CALL DZF_PHY(D,PA,ZWORK1) CALL MZF_PHY(D,PDZZ,ZWORK2) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) -PGZ_W_M(IIB:IIE,IJB:IJE,1:IKT)= ZWORK1(IIB:IIE,IJB:IJE,1:IKT)/ZWORK2(IIB:IIE,IJB:IJE,1:IKT) +PGZ_W_M(IIB:IIE,IJB:IJE,:)= ZWORK1(IIB:IIE,IJB:IJE,:)/ZWORK2(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) ! !---------------------------------------------------------------------------- diff --git a/src/PHYEX/micro/condensation.f90 b/src/PHYEX/micro/condensation.f90 index 31fda664b8e3671dc4eff6ccdd3b7135b40b2f7e..3504e967afd7768d4cb11218b0a31e64dee82b10 100644 --- a/src/PHYEX/micro/condensation.f90 +++ b/src/PHYEX/micro/condensation.f90 @@ -234,18 +234,7 @@ ZCLDINI = -1. ! Dummy Initialized cloud input to icecloud routine PIFR = 10. ! ratio of cloud ice water mixing ratio wet to dry ! part of a gridbox ZDZREF = ICEP%XFRMIN(25) ! Thickness for unchanged vqsigsat (only used for LHGT_QS) -! Init of the HALO (should be on HALO points only) -#ifdef REPRO55 -PRC_OUT = PRC_IN -PRV_OUT = PRV_IN -PRI_OUT = PRI_IN -IF(PRESENT(PHLC_HRC)) THEN - PHLC_HRC = 0. - PHLC_HCF = 0. - PHLI_HRI = 0. - PHLI_HCF = 0. -END IF -#endif +! IF(OCND2)ZPRIFACT = 0. ! ! @@ -277,7 +266,7 @@ ELSE DO JK=IKTB,IKTE DO JIJ=IIJB,IIJE ZCPD(JIJ,JK) = CST%XCPD + CST%XCPV*PRV_IN(JIJ,JK) + CST%XCL*PRC_IN(JIJ,JK) + CST%XCI*PRI_IN(JIJ,JK) + & -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) #else CST%XCL*PRR(JIJ,JK) + & #endif diff --git a/src/PHYEX/micro/ini_rain_ice.f90 b/src/PHYEX/micro/ini_rain_ice.f90 index 2f3b2b1c4aee01a9703c23f5351d0c27835246ec..1118b9aaf7e47dd2a7ee37fcbab2dc17f9afbda5 100644 --- a/src/PHYEX/micro/ini_rain_ice.f90 +++ b/src/PHYEX/micro/ini_rain_ice.f90 @@ -424,7 +424,7 @@ XLBR = ( XAR*XCCR*MOMG(XALPHAR,XNUR,XBR) )**(-XLBEXR) XLBEXI = 1.0/(-XBI) XLBI = ( XAI*MOMG(XALPHAI,XNUI,XBI) )**(-XLBEXI) ! -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) #else XNS = 1.0/(XAS*MOMG(XALPHAS,XNUS,XBS)) #endif @@ -443,7 +443,7 @@ XLBDAS_MAX = 100000.0 ! ZCONC_MAX = 1.E6 ! Maximal concentration for falling particules set to 1 per cc IF(XCCS>0. .AND. XCXS>0. )XLBDAS_MAX = ( ZCONC_MAX/XCCS )**(1./XCXS) -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) #else IF (LSNOW_T) XLBDAS_MAX = 1.E6 XLBDAS_MIN = 1.E-10 @@ -500,7 +500,7 @@ XEXCSEDI =-0.9324*3.0 WRITE (KLUOUT,FMT=*)' PRISTINE ICE SEDIMENTATION for columns XFSEDI =',XFSEDI ! ! -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) XEXSEDS = (XBS+XDS-XCXS)/(XBS-XCXS) XFSEDS = XCS*XAS*XCCS*MOMG(XALPHAS,XNUS,XBS+XDS)* & (XAS*XCCS*MOMG(XALPHAS,XNUS,XBS))**(-XEXSEDS)*(ZRHO00)**XCEXVT @@ -587,7 +587,7 @@ XSCFAC = (0.63**(1./3.))*SQRT((ZRHO00)**XCEXVT) ! One assumes Sc=0.63 X0DEPI = (4.0*XPI)*XC1I*XF0I*MOMG(XALPHAI,XNUI,1.) X2DEPI = (4.0*XPI)*XC1I*XF2I*XC_I*MOMG(XALPHAI,XNUI,XDI+2.0) ! -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) X0DEPS = (4.0*XPI)*XCCS*XC1S*XF0S*MOMG(XALPHAS,XNUS,1.) X1DEPS = (4.0*XPI)*XCCS*XC1S*XF1S*SQRT(XCS)*MOMG(XALPHAS,XNUS,0.5*XDS+1.5) XEX0DEPS = XCXS-1.0 @@ -647,7 +647,7 @@ END IF ! XCOLIS = 0.25 ! Collection efficiency of I+S XCOLEXIS = 0.05 ! Temperature factor of the I+S collection efficiency -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) XFIAGGS = (XPI/4.0)*XCOLIS*XCCS*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0) XEXIAGGS = XCXS-XDS-2.0 #else @@ -704,7 +704,7 @@ XEX1EVAR = -1.0-0.5*(XDR+3.0) ! XDCSLIM = 0.007 ! D_cs^lim = 7 mm as suggested by Farley et al. (1989) XCOLCS = 1.0 -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) XEXCRIMSS= XCXS-XDS-2.0 XCRIMSS = (XPI/4.0)*XCOLCS*XCCS*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0) #else @@ -713,7 +713,7 @@ XCRIMSS = XNS * (XPI/4.0)*XCOLCS*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0 #endif XEXCRIMSG= XEXCRIMSS XCRIMSG = XCRIMSS -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) XSRIMCG = XCCS*XAS*MOMG(XALPHAS,XNUS,XBS) XEXSRIMCG= XCXS-XBS XSRIMCG2 = XCCS*XAG*MOMG(XALPHAS,XNUS,XBG) @@ -755,7 +755,7 @@ XRIMINTP2 = 1.0 + XRIMINTP1*LOG( XDCSLIM/(XGAMINC_BOUND_MIN)**(1.0/XALPHAS) ) ! !* 7.2 Constants for the accretion of raindrops onto aggregates ! -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) XFRACCSS = ((XPI**2)/24.0)*XCCS*XCCR*XRHOLW*(ZRHO00**XCEXVT) #else XFRACCSS = XNS*((XPI**2)/24.0)*XCCR*XRHOLW*(ZRHO00**XCEXVT) @@ -765,7 +765,7 @@ XLBRACCS1 = MOMG(XALPHAS,XNUS,2.)*MOMG(XALPHAR,XNUR,3.) XLBRACCS2 = 2.*MOMG(XALPHAS,XNUS,1.)*MOMG(XALPHAR,XNUR,4.) XLBRACCS3 = MOMG(XALPHAR,XNUR,5.) ! -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) XFSACCRG = (XPI/4.0)*XAS*XCCS*XCCR*(ZRHO00**XCEXVT) #else XFSACCRG = XNS*(XPI/4.0)*XAS*XCCR*(ZRHO00**XCEXVT) @@ -962,7 +962,7 @@ XCOLSG = 0.01 ! Collection efficiency of S+G XCOLEXSG = 0.1 ! Temperature factor of the S+G collection efficiency WRITE (KLUOUT, FMT=*) ' NEW Constants for the aggregate collection by the graupeln' WRITE (KLUOUT, FMT=*) ' XCOLSG, XCOLEXSG = ',XCOLSG,XCOLEXSG -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) XFSDRYG = (XPI/4.0)*XCOLSG*XCCG*XCCS*XAS*(ZRHO00**XCEXVT) #else XFSDRYG = XNS*(XPI/4.0)*XCOLSG*XCCG*XAS*(ZRHO00**XCEXVT) @@ -1182,7 +1182,7 @@ XFWETH = (XPI/4.0)*XCCH*XCH*(ZRHO00**XCEXVT)*MOMG(XALPHAH,XNUH,XDH+2.0) ! XCOLSH = 0.01 ! Collection efficiency of S+H XCOLEXSH = 0.1 ! Temperature factor of the S+H collection efficiency -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) XFSWETH = (XPI/4.0)*XCCH*XCCS*XAS*(ZRHO00**XCEXVT) #else XFSWETH = XNS*(XPI/4.0)*XCCH*XAS*(ZRHO00**XCEXVT) ! Wurtz diff --git a/src/PHYEX/micro/init_aerosol_properties.f90 b/src/PHYEX/micro/init_aerosol_properties.f90 index ecd30df7f7498c011657b3af21a40a14cc675103..cf776a058728952077afcf12aa91395c8c176b76 100644 --- a/src/PHYEX/micro/init_aerosol_properties.f90 +++ b/src/PHYEX/micro/init_aerosol_properties.f90 @@ -55,6 +55,11 @@ USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, HINI_CCN, HTYPE_CCN, & CINT_MIXING, NPHILLIPS, & NIMM, NMOD_IMM, NINDICE_CCN_IMM ! +USE MODD_CH_AEROSOL +USE MODD_SALT +USE MODD_CSTS_SALT +USE MODD_DUST +USE MODD_CSTS_DUST use mode_msg ! USE MODI_GAMMA @@ -158,6 +163,40 @@ IF ( NMOD_CCN .GE. 1 ) THEN call Print_msg(NVERB_FATAL,'GEN','INIT_AEROSOL_PROPERTIES','CCN_MODES must be JUNGFRAU, COPT, CAMS, CAMS_JPP,'// & 'CAMS_ACC, CAMS_AIT, SIRTA, CPS00, MOCAGE or FREETROP') ENDSELECT + +IF (LORILAM) THEN ! for sulphates and hydrophilic aerosols + IF (.NOT.(ALLOCATED(XRHOI))) ALLOCATE(XRHOI(NSP+NSOA+NCARB)) + XRHOI(:) = 1.8e3 + XRHOI(JP_AER_H2O) = 1.0e3 ! water + XRHOI(JP_AER_DST) = XDENSITY_DUST ! water + + ! assumption: we choose to put sulfates in mode J and hydrophilics compounds in mode I + IF (CRGUNIT=="MASS") THEN + RCCN(2) = XINIRADIUSJ * EXP(-3.*(LOG(XINISIGJ))**2) * 1E-6 ! Sulfates + RCCN(3) = XINIRADIUSI * EXP(-3.*(LOG(XINISIGI))**2) * 1E-6 ! Hydrophilic + ELSE + RCCN(2) = XINIRADIUSJ * 1E-6 ! Sulfates + RCCN(3) = XINIRADIUSI * 1E-6 ! Hydrophilic + + END IF + LOGSIGCCN(2) = LOG(XINISIGJ) + LOGSIGCCN(3) = LOG(XINISIGI) + RHOCCN(2) = XRHOI(JP_AER_SO4) + RHOCCN(3) = XRHOI(JP_AER_BC) +END IF +IF (LSALT) THEN ! for sea salts + JMOD = 1 + IF (NMODE_SLT >= 5) JMOD = 5 ! choose mode 5 of Ovadnevaite 2014 (r = 0.415 µm, sigma = 1.85) + IF (NMODE_SLT == 3) JMOD = 1 ! choose mode 1 of Vig01 (r = 0.2 µm, sigma = 1.9) or Sch04 (r = 0.14 µm, sigma = 1.59) + IF (CRGUNITS=="MASS") THEN + RCCN(1) = XINIRADIUS_SLT(JMOD) * EXP(-3.*(LOG(XINISIG_SLT(JMOD)))**2) * 1E-6 + ELSE + RCCN(1) = XINIRADIUS_SLT(JMOD) * 1E-6 + END IF + LOGSIGCCN(1) = LOG(XINISIG_SLT(JMOD)) + RHOCCN(1) = XDENSITY_SALT +END IF + ! DO I=1, MIN(NMOD_CCN,3) XR_MEAN_CCN(I) = RCCN(I) @@ -170,6 +209,15 @@ IF ( NMOD_CCN .GE. 1 ) THEN XR_MEAN_CCN(4) = 1.75E-6 XLOGSIG_CCN(4) = 0.708 XRHO_CCN(4) = 2200. + IF ((LSALT).AND.(NMODE_SLT > 5)) THEN + IF (CRGUNITS=="MASS") THEN + XR_MEAN_CCN(4) = XINIRADIUS_SLT(6) * EXP(-3.*(LOG(XINISIG_SLT(6)))**2) * 1E-6 + ELSE + XR_MEAN_CCN(4) = XINIRADIUS_SLT(6) * 1E-6 + END IF + XLOGSIG_CCN(4) = LOG(XINISIG_SLT(6)) + XRHO_CCN(4) = XDENSITY_SALT + END IF END IF ! ! @@ -352,6 +400,34 @@ IF ( NMOD_IFN .GE. 1 ) THEN XRHO_IFN = (/2300., 2300., 1860., 1000./) END IF ENDSELECT + +IF (LORILAM) THEN +! assumption: only the aitken mode is considered as ifn + IF (CRGUNIT=="MASS") THEN + XMDIAM_IFN(3) = 2 * XINIRADIUSI * EXP(-3.*(LOG(XINISIGI))**2) * 1E-6 + XMDIAM_IFN(4) = 2 * XINIRADIUSI * EXP(-3.*(LOG(XINISIGI))**2) * 1E-6 + ELSE + XMDIAM_IFN(3) = 2 * XINIRADIUSI * 1E-6 + XMDIAM_IFN(4) = 2 * XINIRADIUSI * 1E-6 + END IF + LOGSIGCCN(3) = LOG(XINISIGJ) + LOGSIGCCN(4) = LOG(XINISIGJ) + XRHO_IFN(3) = XRHOI(JP_AER_BC) + XRHO_IFN(4) = XRHOI(JP_AER_OC) +END IF + +IF (LDUST) THEN +! assumption: we considered the two finest dust modes as ifn + DO JMOD = 1,2 + IF (CRGUNITD=="MASS") THEN + XMDIAM_IFN(JMOD) = 2 * XINIRADIUS(JPDUSTORDER(JMOD)) * EXP(-3.*(LOG(XINISIG(JPDUSTORDER(JMOD))))**2) * 1E-6 + ELSE + XMDIAM_IFN(JMOD) = 2 * XINIRADIUS(JPDUSTORDER(JMOD)) * 1E-6 + END IF + LOGSIGCCN(JMOD) = LOG(XINISIG(JPDUSTORDER(JMOD))) + RHOCCN(JMOD) = XDENSITY_DUST + ENDDO +END IF ! ! internal mixing ! @@ -432,22 +508,6 @@ IF ( NMOD_IFN .GE. 1 ) THEN XFRAC_REF(4)=0.06 END IF ! -! Immersion modes -! - IF (.NOT.(ALLOCATED(NIMM))) ALLOCATE(NIMM(NMOD_CCN)) - NIMM(:)=0 - IF (ALLOCATED(NINDICE_CCN_IMM)) DEALLOCATE(NINDICE_CCN_IMM) - ALLOCATE(NINDICE_CCN_IMM(MAX(1,NMOD_IMM))) - IF (NMOD_IMM .GE. 1) THEN - DO J = 0, NMOD_IMM-1 - NIMM(NMOD_CCN-J)=1 - NINDICE_CCN_IMM(NMOD_IMM-J) = NMOD_CCN-J - END DO -! ELSE IF (NMOD_IMM == 0) THEN ! PNIS existe mais vaut 0, pour l'appel à resolved_cloud -! NMOD_IMM = 1 -! NINDICE_CCN_IMM(1) = 0 - END IF -! END IF ! NMOD_IFN > 0 ! END SUBROUTINE INIT_AEROSOL_PROPERTIES diff --git a/src/PHYEX/micro/mode_ice4_budgets.f90 b/src/PHYEX/micro/mode_ice4_budgets.f90 index 03c550d31736c25e59c0ebe77506f0a9ad3c4d74..e2d91bd8c7adb3221a2fd53b3655df6f6af066a2 100644 --- a/src/PHYEX/micro/mode_ice4_budgets.f90 +++ b/src/PHYEX/micro/mode_ice4_budgets.f90 @@ -339,7 +339,7 @@ IF(KRR==7) THEN IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'WETH', (ZW1(:, :)+ZW2(:, :)+ZW3(:, :)+ & &ZW4(:, :)+ZW5(:, : )) *PRHODJ(:, :)) -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) ZW1(:,:) = 0. DO JL=1, KSIZE ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRGWETH) * ZINV_TSTEP @@ -348,10 +348,7 @@ IF(KRR==7) THEN #ifdef REPRO48 IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'HGCV', (-ZW5(:, :)-ZW1(:, :))*PRHODJ(:, :)) #endif -#ifdef REPRO55 - IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'HGCV', -ZW1(:, :)*PRHODJ(:, :)) -#endif -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'HGCV', ZW1(:, :)*PRHODJ(:, :)) #endif @@ -376,7 +373,7 @@ IF(KRR==7) THEN ZW5(K1(JL), K2(JL)) = PBU_PACK(JL, IRGDRYH) * ZINV_TSTEP END DO ZW6(:,:) = 0. -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) !ZW6 must be removed when REPRO* will be suppressed DO JL=1, KSIZE ZW6(K1(JL), K2(JL)) = PBU_PACK(JL, IRDRYHG) * ZINV_TSTEP @@ -393,10 +390,10 @@ IF(KRR==7) THEN &ZW4(:, :)+ZW5(:, :)-ZW6(:, :)) & & *PRHODJ(:, :)) -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) #else !When REPRO48 will be suppressed, ZW6 must be removed - ZW(:,:) = 0. + ZW1(:,:) = 0. DO JL=1, KSIZE ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRDRYHG) * ZINV_TSTEP END DO diff --git a/src/PHYEX/micro/mode_ice4_fast_rg.f90 b/src/PHYEX/micro/mode_ice4_fast_rg.f90 index e861b521e69116ceee0607e9998e1debd2314a0e..0b7a6ef508cdf6b5677b49a01a0b47ea731e62cc 100644 --- a/src/PHYEX/micro/mode_ice4_fast_rg.f90 +++ b/src/PHYEX/micro/mode_ice4_fast_rg.f90 @@ -191,7 +191,7 @@ IF(.NOT. LDSOFT) THEN WHERE(GDRY(1:KSIZE)) PRG_TEND(1:KSIZE, IRSWETG)=ICEP%XFSDRYG*ZZW(1:KSIZE) & ! RSDRYG / ICEP%XCOLSG & -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) *(PLBDAS(1:KSIZE)**(ICED%XCXS-ICED%XBS))*( PLBDAG(1:KSIZE)**ICED%XCXG ) & *(PRHODREF(1:KSIZE)**(-ICED%XCEXVT-1.)) & #else diff --git a/src/PHYEX/micro/mode_ice4_fast_rh.f90 b/src/PHYEX/micro/mode_ice4_fast_rh.f90 index c35275a392405ce6ac6d661d415b0f4191b5549b..8ac5a7b7e13ffb73eca7f232b86e679d2868936d 100644 --- a/src/PHYEX/micro/mode_ice4_fast_rh.f90 +++ b/src/PHYEX/micro/mode_ice4_fast_rh.f90 @@ -152,7 +152,7 @@ IF(.NOT. LDSOFT) THEN !$mnh_expand_where(JL=1:KSIZE) WHERE(GWET(1:KSIZE)) PRH_TEND(1:KSIZE, IRSWETH)=ICEP%XFSWETH*ZZW(1:KSIZE) & ! RSWETH -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) *( PLBDAS(1:KSIZE)**(ICED%XCXS-ICED%XBS) )*( PLBDAH(1:KSIZE)**ICED%XCXH ) & *( PRHODREF(1:KSIZE)**(-ICED%XCEXVT-1.) ) & #else diff --git a/src/PHYEX/micro/mode_ice4_fast_rs.f90 b/src/PHYEX/micro/mode_ice4_fast_rs.f90 index d79105d0c9f6cd0b2de3959b14a4bc558aa16288..5e4dabf6e4380049a2c98584cac5957003dc7740 100644 --- a/src/PHYEX/micro/mode_ice4_fast_rs.f90 +++ b/src/PHYEX/micro/mode_ice4_fast_rs.f90 @@ -111,7 +111,7 @@ DO JL=1, KSIZE PRS_TEND(JL, IFREEZ1)=PKA(JL)*(CST%XTT-PT(JL)) + & &(PDV(JL)*(CST%XLVTT+(CST%XCPV-CST%XCL)*(PT(JL)-CST%XTT)) & &*(CST%XESTT-PRS_TEND(JL, IFREEZ1))/(CST%XRV*PT(JL)) ) -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) PRS_TEND(JL, IFREEZ1)=PRS_TEND(JL, IFREEZ1)* (ICEP%X0DEPS* PLBDAS(JL)**ICEP%XEX0DEPS + & & ICEP%X1DEPS*PCJ(JL)*PLBDAS(JL)**ICEP%XEX1DEPS )/ & #else @@ -139,7 +139,7 @@ ENDDO ! DO JL=1, KSIZE IF (PRCT(JL)>ICED%XRTMIN(2) .AND. PRST(JL)>ICED%XRTMIN(5) .AND. LDCOMPUTE(JL)) THEN -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) ZZW(JL) = PLBDAS(JL) #else ZZW(JL) = (PLBDAS(JL)**ICED%XALPHAS + ICED%XFVELOS**ICED%XALPHAS)**(1./ICED%XALPHAS) @@ -166,7 +166,7 @@ IF(.NOT. LDSOFT) THEN !$mnh_expand_where(JL=1:KSIZE) WHERE (GRIM(1:KSIZE)) PRS_TEND(1:KSIZE, IRCRIMSS) = ICEP%XCRIMSS * ZZW1(1:KSIZE) * PRCT(1:KSIZE) & ! RCRIMSS -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) * PLBDAS(1:KSIZE)**ICEP%XEXCRIMSS & * PRHODREF(1:KSIZE)**(-ICED%XCEXVT) #else @@ -184,7 +184,7 @@ IF(.NOT. LDSOFT) THEN !$mnh_expand_where(JL=1:KSIZE) WHERE(GRIM(1:KSIZE)) PRS_TEND(1:KSIZE, IRCRIMS)=ICEP%XCRIMSG * PRCT(1:KSIZE) & ! RCRIMS -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) * PLBDAS(1:KSIZE)**ICEP%XEXCRIMSG & * PRHODREF(1:KSIZE)**(-ICED%XCEXVT) #else @@ -201,7 +201,7 @@ IF(.NOT. LDSOFT) THEN !$mnh_expand_where(JL=1:KSIZE) WHERE(GRIM(1:KSIZE)) ZZW(1:KSIZE) = PRS_TEND(1:KSIZE, IRCRIMS) - PRS_TEND(1:KSIZE, IRCRIMSS) ! RCRIMSG -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) PRS_TEND(1:KSIZE, IRSRIMCG)=ICEP%XSRIMCG * PLBDAS(1:KSIZE)**ICEP%XEXSRIMCG*(1.0-ZZW2(1:KSIZE)) #else PRS_TEND(1:KSIZE, IRSRIMCG)=ICEP%XSRIMCG * PRST(1:KSIZE)*PRHODREF(1:KSIZE) & @@ -209,7 +209,7 @@ IF(.NOT. LDSOFT) THEN #endif PRS_TEND(1:KSIZE, IRSRIMCG)=ZZW(1:KSIZE)*PRS_TEND(1:KSIZE, IRSRIMCG)/ & MAX(1.E-20, & -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) ICEP%XSRIMCG3*ICEP%XSRIMCG2*PLBDAS(1:KSIZE)**ICEP%XEXSRIMCG2*(1.-ZZW3(1:KSIZE)) - & #else ICEP%XSRIMCG3*ICEP%XSRIMCG2*PRST(1:KSIZE)*PRHODREF(1:KSIZE) & @@ -270,7 +270,7 @@ IF(.NOT. LDSOFT) THEN !$mnh_expand_where(JL=1:KSIZE) WHERE(GACC(1:KSIZE)) ZZW(1:KSIZE) = & !! coef of RRACCS -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) ICEP%XFRACCSS*( PLBDAS(1:KSIZE)**ICED%XCXS )*( PRHODREF(1:KSIZE)**(-ICED%XCEXVT-1.) ) & #else ICEP%XFRACCSS*( PRST(1:KSIZE)*PLBDAS(1:KSIZE)**ICED%XBS )*( PRHODREF(1:KSIZE)**(-ICED%XCEXVT) ) & @@ -294,7 +294,7 @@ IF(.NOT. LDSOFT) THEN !$mnh_expand_where(JL=1:KSIZE) WHERE(GACC(1:KSIZE)) PRS_TEND(1:KSIZE, IRSACCRG) = ICEP%XFSACCRG*ZZW3(1:KSIZE)* & ! RSACCRG -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) ( PLBDAS(1:KSIZE)**(ICED%XCXS-ICED%XBS) )*( PRHODREF(1:KSIZE)**(-ICED%XCEXVT-1.) ) & #else ( PRST(1:KSIZE))*( PRHODREF(1:KSIZE)**(-ICED%XCEXVT) ) & @@ -343,7 +343,7 @@ DO JL=1, KSIZE ! compute RSMLT ! PRSMLTG(JL) = ICEP%XFSCVMG*MAX(0., (-PRSMLTG(JL) * & -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) (ICEP%X0DEPS* PLBDAS(JL)**ICEP%XEX0DEPS + & ICEP%X1DEPS*PCJ(JL)*PLBDAS(JL)**ICEP%XEX1DEPS) & #else diff --git a/src/PHYEX/micro/mode_ice4_pack.f90 b/src/PHYEX/micro/mode_ice4_pack.f90 index e955a223d98f4629b532d6cdd68f71539e59fa05..3300125dcc0c1f05da394f72953ac77e6fa3bfb9 100644 --- a/src/PHYEX/micro/mode_ice4_pack.f90 +++ b/src/PHYEX/micro/mode_ice4_pack.f90 @@ -201,7 +201,7 @@ IF(PARAMI%LPACK_MICRO) THEN ! optimization by looking for locations where ! the microphysical fields are larger than a minimal value only !!! ! - IF (KSIZE /= COUNT(ODMICRO(IIJB:IIJE,IKTB:IKTE))) THEN + IF (KSIZE /= COUNT(ODMICRO(:,:))) THEN CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'ICE4_PACK', 'ICE4_PACK : KSIZE /= COUNT(ODMICRO)') ENDIF diff --git a/src/PHYEX/micro/mode_ice4_rsrimcg_old.f90 b/src/PHYEX/micro/mode_ice4_rsrimcg_old.f90 index 970f214f322bc79eec5ad895d366595959e0974e..a273dbd9441c356db8b744d40778a8a12945bd56 100644 --- a/src/PHYEX/micro/mode_ice4_rsrimcg_old.f90 +++ b/src/PHYEX/micro/mode_ice4_rsrimcg_old.f90 @@ -87,7 +87,7 @@ IF(.NOT. LDSOFT) THEN !$mnh_expand_where(JL=1:KSIZE) WHERE(GRIM(1:KSIZE)) PRSRIMCG_MR(1:KSIZE) = ICEP%XSRIMCG * PLBDAS(1:KSIZE)**ICEP%XEXSRIMCG & ! RSRIMCG -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) * (1.0 - ZZW(1:KSIZE) )/PRHODREF(1:KSIZE) #else * (1.0 - ZZW(1:KSIZE) )*PRST(1:KSIZE) diff --git a/src/PHYEX/micro/mode_ice4_sedimentation.f90 b/src/PHYEX/micro/mode_ice4_sedimentation.f90 index c110a81f1cdf5e8616d6b5d1fd52d14ab7948ddc..7b73ed5492a7c877159ea7a3524b940529161946 100644 --- a/src/PHYEX/micro/mode_ice4_sedimentation.f90 +++ b/src/PHYEX/micro/mode_ice4_sedimentation.f90 @@ -141,7 +141,7 @@ IF(PARAMI%CSEDIM=='STAT') THEN &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & &PSEA=PSEA, PTOWN=PTOWN, & &PINPRH=PINPRH, PRHT=ZRHT, PRHS=PRHS, PFPR=PFPR) - PINPRS(IIJB:IIJE) = PINPRS(IIJB:IIJE) + ZINPRI(IIJB:IIJE) + PINPRS(:) = PINPRS(:) + ZINPRI(:) !No negativity correction here as we apply sedimentation on PR.S*PTSTEP variables ELSEIF(PARAMI%CSEDIM=='SPLI') THEN CALL ICE4_SEDIMENTATION_SPLIT(D, CST, ICEP, ICED, PARAMI, & @@ -151,7 +151,7 @@ ELSEIF(PARAMI%CSEDIM=='SPLI') THEN &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & &PSEA=PSEA, PTOWN=PTOWN, & &PINPRH=PINPRH, PRHT=PRHT, PRHS=PRHS, PFPR=PFPR) - PINPRS(IIJB:IIJE) = PINPRS(IIJB:IIJE) + ZINPRI(IIJB:IIJE) + PINPRS(:) = PINPRS(:) + ZINPRI(:) !We correct negativities with conservation !SPLI algorith uses a time-splitting. Inside the loop a temporary m.r. is used. ! It is initialized with the m.r. at T and is modified by two tendencies: diff --git a/src/PHYEX/micro/mode_ice4_sedimentation_split.f90 b/src/PHYEX/micro/mode_ice4_sedimentation_split.f90 index 6534e7043ae2036c7e2d5eef53b5d0d94829f9fa..1fcaf9244b1a4981080e445f34fb113216bd8844 100644 --- a/src/PHYEX/micro/mode_ice4_sedimentation_split.f90 +++ b/src/PHYEX/micro/mode_ice4_sedimentation_split.f90 @@ -345,7 +345,7 @@ PINPRX(:) = 0. ZINVTSTEP=1./PTSTEP ZRSMIN(:) = ICED%XRTMIN(:) * ZINVTSTEP ZREMAINT(:) = 0. -ZREMAINT(IIJB:IIJE) = PTSTEP +ZREMAINT(:) = PTSTEP ! DO WHILE (ANY(ZREMAINT>0.)) ! @@ -387,7 +387,7 @@ DO WHILE (ANY(ZREMAINT>0.)) ENDIF ENDDO ENDDO -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) #else ELSEIF(KSPE==5) THEN ! ******* for snow @@ -418,7 +418,7 @@ DO WHILE (ANY(ZREMAINT>0.)) CASE(3) ZFSED=ICEP%XFSEDR ZEXSED=ICEP%XEXSEDR -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) CASE(5) ZFSED=ICEP%XFSEDS ZEXSED=ICEP%XEXSEDS diff --git a/src/PHYEX/micro/mode_ice4_sedimentation_stat.f90 b/src/PHYEX/micro/mode_ice4_sedimentation_stat.f90 index 52183c8547782f2507b58d01a61d7428a6564822..bf5a71b554dca4a76a0df8c346eb36cc865e6420 100644 --- a/src/PHYEX/micro/mode_ice4_sedimentation_stat.f90 +++ b/src/PHYEX/micro/mode_ice4_sedimentation_stat.f90 @@ -99,7 +99,7 @@ REAL :: FWSED1, FWSED2, PWSEDW, PWSEDWSUP, PINVTSTEP, PTSTEP1, PDZZ1, PRHODREF1, REAL(KIND=JPRB) :: ZHOOK_HANDLE ! -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) ! 5 multiplications + 1 division => cost = 7X FWSED1(PWSEDW,PTSTEP1,PDZZ1,PRHODREF1,PRXT1,PINVTSTEP)=MIN(1.,PWSEDW*PTSTEP1/PDZZ1 )*PRHODREF1*PDZZ1*PRXT1*PINVTSTEP #else @@ -366,7 +366,7 @@ CONTAINS ! ******* for snow DO JIJ = IIJB, IIJE ZQP=ZSED(JIJ,IKPLUS,JRR)*ZTSORHODZ(JIJ) - IF ((PRXT(JIJ) > ICED%XRTMIN(JRR)) .OR. (ZQP > ICED%XRTMIN(JRR))) THEN + IF ((PRXT(JIJ) > ICED%XRTMIN(JRR)) ) THEN !Compute lambda_snow parameter IF (PARAMI%LSNOW_T) THEN IF(PT(JIJ,JK)>CST%XTT-10.0) THEN diff --git a/src/PHYEX/micro/mode_ice4_slow.f90 b/src/PHYEX/micro/mode_ice4_slow.f90 index e81b2f529a42743008a80a5c6a494b9f9b1941d2..78aa35289b34904b586917b3c80d8428469cf587 100644 --- a/src/PHYEX/micro/mode_ice4_slow.f90 +++ b/src/PHYEX/micro/mode_ice4_slow.f90 @@ -113,7 +113,7 @@ ENDDO DO JL=1, KSIZE IF(PRVT(JL)>ICED%XRTMIN(1) .AND. PRST(JL)>ICED%XRTMIN(5) .AND. LDCOMPUTE(JL)) THEN IF(.NOT. LDSOFT) THEN -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) PRVDEPS(JL) = ( PSSI(JL)/(PRHODREF(JL)*PAI(JL)) ) * & ( ICEP%X0DEPS*PLBDAS(JL)**ICEP%XEX0DEPS + ICEP%X1DEPS*PCJ(JL)*PLBDAS(JL)**ICEP%XEX1DEPS ) #else @@ -135,7 +135,7 @@ DO JL=1, KSIZE IF(.NOT. LDSOFT) THEN PRIAGGS(JL) = ICEP%XFIAGGS * EXP( ICEP%XCOLEXIS*(PT(JL)-CST%XTT) ) & * PRIT(JL) & -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) * PLBDAS(JL)**ICEP%XEXIAGGS & * PRHODREF(JL)**(-ICED%XCEXVT) #else diff --git a/src/PHYEX/micro/mode_ice4_stepping.f90 b/src/PHYEX/micro/mode_ice4_stepping.f90 index 8a438a79968778ffb2de9d0ea91bae7f98d31a24..b4879faa523564249664c799dee5384d6bf26c9c 100644 --- a/src/PHYEX/micro/mode_ice4_stepping.f90 +++ b/src/PHYEX/micro/mode_ice4_stepping.f90 @@ -371,11 +371,7 @@ DO WHILE(ANY(ZTIME(1:KMICRO)<PTSTEP)) ! Loop to *really* compute tendencies ENDDO ENDDO DO JL=1, KMICRO -#ifdef REPRO55 - PCIT(JL)=PCIT(JL) * MAX(0., -SIGN(1., -PVART(JL,IRI))) -#else IF (PVART(JL,IRI)<=0. .AND. LDMICRO(JL)) PCIT(JL) = 0. -#endif ZTIME(JL)=ZTIME(JL)+ZMAXTIME(JL) ENDDO !------------------------------------------------------------------------------- diff --git a/src/PHYEX/micro/mode_ice4_warm.f90 b/src/PHYEX/micro/mode_ice4_warm.f90 index dddbfc42ee48700ca058f2689cf8d6797a093b77..317b57839b7f503e05bbde975eedec0c74713d54 100644 --- a/src/PHYEX/micro/mode_ice4_warm.f90 +++ b/src/PHYEX/micro/mode_ice4_warm.f90 @@ -92,13 +92,9 @@ IF (LHOOK) CALL DR_HOOK('ICE4_WARM', 0, ZHOOK_HANDLE) !* 4.2 compute the autoconversion of r_c for r_r production: RCAUTR ! DO JL=1, KSIZE -#ifdef REPRO55 - IF(PHLC_HRC(JL)>ICED%XRTMIN(2) .AND. PHLC_HCF(JL)>1.E-20 .AND. LDCOMPUTE(JL)) THEN -#else IF(PHLC_HRC(JL)>ICED%XRTMIN(2) .AND. PHLC_HCF(JL)>0. .AND. LDCOMPUTE(JL)) THEN -#endif IF(.NOT. LDSOFT) THEN -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) PRCAUTR(JL) = ICEP%XTIMAUTC*MAX(PHLC_HRC(JL)/PHLC_HCF(JL) - ICEP%XCRIAUTC/PRHODREF(JL), 0.0) PRCAUTR(JL) = PHLC_HCF(JL)*PRCAUTR(JL) #else @@ -138,11 +134,7 @@ ELSEIF (HSUBG_RC_RR_ACCR=='PRFR') THEN ! => min(PCF, PRF)-PHLC_HCF DO JL=1, KSIZE LMASK = PRCT(JL)>ICED%XRTMIN(2) .AND. PRRT(JL)>ICED%XRTMIN(3) .AND. LDCOMPUTE(JL) -#ifdef REPRO55 - LMASK1 = LMASK .AND. PHLC_HRC(JL)>ICED%XRTMIN(2) .AND. PHLC_HCF(JL)>1.E-20 -#else LMASK1 = LMASK .AND. PHLC_HRC(JL)>ICED%XRTMIN(2) .AND. PHLC_HCF(JL)>0. -#endif #ifdef REPRO48 LMASK2 = LMASK .AND. PHLC_LRC(JL)>ICED%XRTMIN(2) .AND. PHLC_LCF(JL)>0. #else @@ -152,7 +144,7 @@ ELSEIF (HSUBG_RC_RR_ACCR=='PRFR') THEN IF(.NOT. LDSOFT) THEN IF(LMASK1) THEN !Accretion due to rain falling in high cloud content -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) PRCACCR(JL) = ICEP%XFCACCR * ( PHLC_HRC(JL)/PHLC_HCF(JL) ) & &*PLBDAR_RF(JL)**ICEP%XEXCACCR & &*PRHODREF(JL)**(-ICED%XCEXVT) & diff --git a/src/PHYEX/micro/mode_lima_ccn_activation.f90 b/src/PHYEX/micro/mode_lima_ccn_activation.f90 index 1731dd8156a2f19ebaa201b3f7fad0e835e2d417..36a2d7384f87d78995a0a580a5dcc07bbb88d1be 100644 --- a/src/PHYEX/micro/mode_lima_ccn_activation.f90 +++ b/src/PHYEX/micro/mode_lima_ccn_activation.f90 @@ -403,11 +403,11 @@ IF( INUCT >= 1 ) THEN ! !* update the concentration of activated CCN = Na ! - PNAT(:,:,:,JMOD) = PNAT(:,:,:,JMOD) + PCLDFR(:,:,:) * UNPACK( ZZW1(:), MASK=GNUCT(:,:,:), FIELD=0.0 ) + PNAT(:,:,:,JMOD) = PNAT(:,:,:,JMOD) + ZCLDFR(:,:,:) * UNPACK( ZZW1(:), MASK=GNUCT(:,:,:), FIELD=0.0 ) ! !* update the concentration of free CCN = Nf ! - PNFT(:,:,:,JMOD) = PNFT(:,:,:,JMOD) - PCLDFR(:,:,:) * UNPACK( ZZW1(:), MASK=GNUCT(:,:,:), FIELD=0.0 ) + PNFT(:,:,:,JMOD) = PNFT(:,:,:,JMOD) - ZCLDFR(:,:,:) * UNPACK( ZZW1(:), MASK=GNUCT(:,:,:), FIELD=0.0 ) ! !* prepare to update the cloud water concentration ! @@ -429,12 +429,12 @@ IF( INUCT >= 1 ) THEN PRCT(:,:,:) = PRCT(:,:,:) + ZW(:,:,:) PCCT(:,:,:) = PCCT(:,:,:) + UNPACK( ZZW6(:),MASK=GNUCT(:,:,:),FIELD=0. ) ELSE - ZW(:,:,:) = MIN( PCLDFR(:,:,:) * UNPACK( ZZW1(:),MASK=GNUCT(:,:,:),FIELD=0.0 ),PRVT(:,:,:) ) - PCCT(:,:,:) = PCCT(:,:,:) + PCLDFR(:,:,:) * UNPACK( ZZW6(:),MASK=GNUCT(:,:,:),FIELD=0. ) + ZW(:,:,:) = MIN( ZCLDFR(:,:,:) * UNPACK( ZZW1(:),MASK=GNUCT(:,:,:),FIELD=0.0 ),PRVT(:,:,:) ) + PCCT(:,:,:) = PCCT(:,:,:) + ZCLDFR(:,:,:) * UNPACK( ZZW6(:),MASK=GNUCT(:,:,:),FIELD=0. ) END IF ! ZW(:,:,:) = UNPACK( 100.0*ZSMAX(:),MASK=GNUCT(:,:,:),FIELD=0.0 ) - ZW2(:,:,:) = PCLDFR(:,:,:) * UNPACK( ZZW6(:),MASK=GNUCT(:,:,:),FIELD=0.0 ) + ZW2(:,:,:) = ZCLDFR(:,:,:) * UNPACK( ZZW6(:),MASK=GNUCT(:,:,:),FIELD=0.0 ) ! ! !------------------------------------------------------------------------------- diff --git a/src/PHYEX/micro/mode_rrcolss.f90 b/src/PHYEX/micro/mode_rrcolss.f90 index abb1b3d59bd001e9ed033a9cb6db89465be5aca8..bfeaa1adb56745853e3da69cb13334c27da8e29f 100644 --- a/src/PHYEX/micro/mode_rrcolss.f90 +++ b/src/PHYEX/micro/mode_rrcolss.f90 @@ -244,7 +244,7 @@ DO JLBDAS = 1,SIZE(PRRCOLSS(:,:),1) DO JDR = 1,INR-1 ZDR = ZDDCOLLR * REAL(JDR) ZCOLLR = ZCOLLR + (ZDS+ZDR)**2 * ZDR**PEXMASSR & -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) * PESR * ABS(PFALLS*ZDS**PEXFALLS-PFALLR*ZDR**PEXFALLR) & #else * PESR * ABS(PFALLS*ZDS**PEXFALLS * EXP(-(PFALLEXPS*ZDS)**PALPHAS)-PFALLR*ZDR**PEXFALLR) & @@ -252,7 +252,7 @@ DO JLBDAS = 1,SIZE(PRRCOLSS(:,:),1) * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDR) END DO ZCOLLDRMAX = (ZDS+ZDRMAX)**2 * ZDRMAX**PEXMASSR & -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) * PESR * ABS(PFALLS*ZDS**PEXFALLS-PFALLR*ZDRMAX**PEXFALLR) & #else * PESR * ABS(PFALLS*ZDS**PEXFALLS* EXP(-(PFALLEXPS*ZDS)**PALPHAS)-PFALLR*ZDRMAX**PEXFALLR) & diff --git a/src/PHYEX/micro/mode_rscolrg.f90 b/src/PHYEX/micro/mode_rscolrg.f90 index 0ec4020b612e94141874617ef55392909a1d060c..77e00251fce73e7531074f6bf3bd382245cf8f1e 100644 --- a/src/PHYEX/micro/mode_rscolrg.f90 +++ b/src/PHYEX/micro/mode_rscolrg.f90 @@ -238,7 +238,7 @@ DO JLBDAR = 1,SIZE(PRSCOLRG(:,:),1) ZDR = ZDDCOLLR * REAL(JDR) + ZDRMIN ZCOLLR = ZCOLLR + (ZDS+ZDR)**2 & * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDR) & -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) * PESR * ABS(PFALLS*ZDS**PEXFALLS-PFALLR*ZDR**PEXFALLR) #else * PESR * ABS(PFALLS*ZDS**PEXFALLS*EXP(-(ZDS*PFALLEXPS)**PALPHAS)-PFALLR*ZDR**PEXFALLR) @@ -247,7 +247,7 @@ DO JLBDAR = 1,SIZE(PRSCOLRG(:,:),1) IF( ZDRMIN>0.0 ) THEN ZCOLLDRMIN = (ZDS+ZDRMIN)**2 & * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDRMIN) & -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) * PESR * ABS(PFALLS*ZDS**PEXFALLS-PFALLR*ZDRMIN**PEXFALLR) #else * PESR * ABS(PFALLS*ZDS**PEXFALLS*EXP(-(ZDS*PFALLEXPS)**PALPHAS)-PFALLR*ZDRMIN**PEXFALLR) diff --git a/src/PHYEX/micro/mode_rzcolx.f90 b/src/PHYEX/micro/mode_rzcolx.f90 index c765515d2c9b3dc4b39c0f8a6a8978383bd6dcb9..3370bc01fc979498af1073544a4b7efa7013c3f6 100644 --- a/src/PHYEX/micro/mode_rzcolx.f90 +++ b/src/PHYEX/micro/mode_rzcolx.f90 @@ -215,7 +215,7 @@ DO JLBDAX = 1,SIZE(PRZCOLX(:,:),1) !* 1.7 Compute the scaled fall speed difference by integration over ! the dimensional spectrum of specy Z ! -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) ZCOLLZ = ZCOLLZ + ZFUNC & * PEXZ * ABS(PFALLX*ZDX**PEXFALLX-PFALLZ*ZDZ**PEXFALLZ) #else diff --git a/src/PHYEX/micro/rain_ice.f90 b/src/PHYEX/micro/rain_ice.f90 index c17b5c3cd39bd3e426f2e41208e16ee11ec1550c..a07d16b212fae884cf74a21a71f3480afba2ed41 100644 --- a/src/PHYEX/micro/rain_ice.f90 +++ b/src/PHYEX/micro/rain_ice.f90 @@ -341,29 +341,12 @@ DO JK = IKTB,IKTE PRST(JIJ,JK)>ICED%XRTMIN(5) .OR. & PRGT(JIJ,JK)>ICED%XRTMIN(6) .OR. & PRHT(JIJ,JK)>ICED%XRTMIN(7) -#ifdef REPRO55 - LLMICRO(JIJ,JK)=LLMICRO(JIJ,JK) .OR. & - PRCS(JIJ,JK)>ZRSMIN(2) .OR. & - PRRS(JIJ,JK)>ZRSMIN(3) .OR. & - PRIS(JIJ,JK)>ZRSMIN(4) .OR. & - PRSS(JIJ,JK)>ZRSMIN(5) .OR. & - PRGS(JIJ,JK)>ZRSMIN(6) .OR. & - PRHS(JIJ,JK)>ZRSMIN(7) -#endif ELSE LLMICRO(JIJ,JK)=PRCT(JIJ,JK)>ICED%XRTMIN(2) .OR. & PRRT(JIJ,JK)>ICED%XRTMIN(3) .OR. & PRIT(JIJ,JK)>ICED%XRTMIN(4) .OR. & PRST(JIJ,JK)>ICED%XRTMIN(5) .OR. & PRGT(JIJ,JK)>ICED%XRTMIN(6) -#ifdef REPRO55 - LLMICRO(JIJ,JK)=LLMICRO(JIJ,JK) .OR. & - PRCS(JIJ,JK)>ZRSMIN(2) .OR. & - PRRS(JIJ,JK)>ZRSMIN(3) .OR. & - PRIS(JIJ,JK)>ZRSMIN(4) .OR. & - PRSS(JIJ,JK)>ZRSMIN(5) .OR. & - PRGS(JIJ,JK)>ZRSMIN(6) -#endif ENDIF ENDDO ENDDO @@ -426,11 +409,7 @@ DO JK=IKTB,IKTE IF (.NOT. LLMICRO(JIJ, JK)) THEN LLW3D(JIJ, JK)=.TRUE. ZW3D(JIJ, JK)=ZZ_LSFACT(JIJ, JK)/PEXN(JIJ, JK) -#ifdef REPRO55 -#else PCIT(JIJ,JK)=0. !ri=0 because where are in the not odmicro case -#endif - ELSE LLW3D(JIJ, JK)=.FALSE. ENDIF diff --git a/src/PHYEX/micro/rain_ice_fast_rg.f90 b/src/PHYEX/micro/rain_ice_fast_rg.f90 index 4d4c4ec292ad965e5bb42e6c1806239eea8b7b14..0799d824aa16f617ead6073703f4ba18f4229347 100644 --- a/src/PHYEX/micro/rain_ice_fast_rg.f90 +++ b/src/PHYEX/micro/rain_ice_fast_rg.f90 @@ -204,7 +204,7 @@ REAL, DIMENSION(size(PRHODREF),7) :: ZZW1 ! Work arrays JL = I1(JJ) ZZW1(JL,3) = MIN( PRSS(JL),XFSDRYG*ZVEC3(JJ) & ! RSDRYG * EXP( XCOLEXSG*(PZT(JL)-XTT) ) & -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) *( ZVECLBDAS(JJ)**(XCXS-XBS) )*( ZVECLBDAG(JJ)**XCXG ) & *( PRHODREF(JL)**(-XCEXVT-1.) ) & #else diff --git a/src/PHYEX/micro/rain_ice_fast_rh.f90 b/src/PHYEX/micro/rain_ice_fast_rh.f90 index b86db34ae9e8ebca3d6940162d5fa624fd3092c3..d41b61143d2db7ef49ab7926d371e2dc53a7b972 100644 --- a/src/PHYEX/micro/rain_ice_fast_rh.f90 +++ b/src/PHYEX/micro/rain_ice_fast_rh.f90 @@ -186,7 +186,7 @@ REAL, DIMENSION(size(PRHODREF),6) :: ZZW1 ! Work arrays DO JJ = 1, IGWET JL = I1W(JJ) ZZW1(JL,3) = MIN( PRSS(JL),XFSWETH*ZVEC3(JJ) & ! RSWETH -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) *( ZVECLBDAS(JJ)**(XCXS-XBS) )*( ZVECLBDAH(JJ)**XCXH ) & *( PRHODREF(JL)**(-XCEXVT-1.) ) & #else diff --git a/src/PHYEX/micro/rain_ice_fast_rs.f90 b/src/PHYEX/micro/rain_ice_fast_rs.f90 index 8b7dbdc3db20aeb3788386e4ef089d9aec04f1a9..682a1ba3fe3148aa37be1f6e705b789fd84542ec 100644 --- a/src/PHYEX/micro/rain_ice_fast_rs.f90 +++ b/src/PHYEX/micro/rain_ice_fast_rs.f90 @@ -136,7 +136,7 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZZW1, ZZW2, ZZW3, ZZW4 ! Work arrays DO JJ = 1, IGRIM JL = I1(JJ) ZZW1(JJ) = MIN( PRCS(JL), & -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) XCRIMSS * ZVEC1(JJ) * PRCT(JL) & ! RCRIMSS * ZVECLBDAS(JJ)**XEXCRIMSS & * PRHODREF(JL)**(-XCEXVT) ) @@ -163,7 +163,7 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZZW1, ZZW2, ZZW3, ZZW4 ! Work arrays JL = I1(JJ) IF ( PRSS(JL) > 0.0 ) THEN ZZW2(JJ) = MIN( PRCS(JL), & -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) XCRIMSG * PRCT(JL) & ! RCRIMSG * ZVECLBDAS(JJ)**XEXCRIMSG & * PRHODREF(JL)**(-XCEXVT) & @@ -275,7 +275,7 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZZW1, ZZW2, ZZW3, ZZW4 ! Work arrays DO JJ = 1, IGACC JL = I1(JJ) ZZW2(JJ) = & !! coef of RRACCS -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) XFRACCSS*( ZVECLBDAS(JJ)**XCXS )*( PRHODREF(JL)**(-XCEXVT-1.) ) & #else XFRACCSS*( PRST(JL)*ZVECLBDAS(JJ)**XBS )*( PRHODREF(JL)**(-XCEXVT) ) & @@ -325,7 +325,7 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZZW1, ZZW2, ZZW3, ZZW4 ! Work arrays ZZW2(JJ) = MAX( MIN( PRRS(JL),ZZW2(JJ)-ZZW4(JJ) ),0.0 ) ! RRACCSG IF ( ZZW2(JJ) > 0.0 ) THEN ZZW3(JJ) = MIN( PRSS(JL),XFSACCRG*ZVEC3(JJ)* & ! RSACCRG -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) ( ZVECLBDAS(JJ)**(XCXS-XBS) )*( PRHODREF(JL)**(-XCEXVT-1.) ) & #else PRST(JL)*( PRHODREF(JL)**(-XCEXVT) ) & @@ -376,7 +376,7 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZZW1, ZZW2, ZZW3, ZZW4 ! Work arrays ! ! compute RSMLT ! -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) ZZW(:) = MIN( PRSS(:), XFSCVMG*MAX( 0.0,( -ZZW(:) * & ( X0DEPS* PLBDAS(:)**XEX0DEPS + & X1DEPS*PCJ(:)*PLBDAS(:)**XEX1DEPS ) ) / & diff --git a/src/PHYEX/micro/rain_ice_old.f90 b/src/PHYEX/micro/rain_ice_old.f90 index 6645e796b47be4aee5b48ea208e72ec8f09bbfa3..d3edd8708cd5ac272febb7861a620ab9b9377c44 100644 --- a/src/PHYEX/micro/rain_ice_old.f90 +++ b/src/PHYEX/micro/rain_ice_old.f90 @@ -430,20 +430,20 @@ CALL RAIN_ICE_NUCLEATION(IIB, IIE, IJB, IJE, IKTB, IKTE,KRR,PTSTEP,& GMICRO(:,:,:) = .FALSE. IF ( KRR == 7 ) THEN - GMICRO(IIB:IIE,IJB:IJE,IKTB:IKTE) = & - PRCT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(2) .OR. & - PRRT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(3) .OR. & - PRIT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(4) .OR. & - PRST(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(5) .OR. & - PRGT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(6) .OR. & - PRHT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(7) + GMICRO(IIB:IIE,IJB:IJE,:) = & + PRCT(IIB:IIE,IJB:IJE,:)>XRTMIN(2) .OR. & + PRRT(IIB:IIE,IJB:IJE,:)>XRTMIN(3) .OR. & + PRIT(IIB:IIE,IJB:IJE,:)>XRTMIN(4) .OR. & + PRST(IIB:IIE,IJB:IJE,:)>XRTMIN(5) .OR. & + PRGT(IIB:IIE,IJB:IJE,:)>XRTMIN(6) .OR. & + PRHT(IIB:IIE,IJB:IJE,:)>XRTMIN(7) ELSE IF( KRR == 6 ) THEN - GMICRO(IIB:IIE,IJB:IJE,IKTB:IKTE) = & - PRCT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(2) .OR. & - PRRT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(3) .OR. & - PRIT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(4) .OR. & - PRST(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(5) .OR. & - PRGT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(6) + GMICRO(IIB:IIE,IJB:IJE,:) = & + PRCT(IIB:IIE,IJB:IJE,:)>XRTMIN(2) .OR. & + PRRT(IIB:IIE,IJB:IJE,:)>XRTMIN(3) .OR. & + PRIT(IIB:IIE,IJB:IJE,:)>XRTMIN(4) .OR. & + PRST(IIB:IIE,IJB:IJE,:)>XRTMIN(5) .OR. & + PRGT(IIB:IIE,IJB:IJE,:)>XRTMIN(6) END IF IMICRO = COUNTJV( GMICRO(:,:,:),I1(:),I2(:),I3(:)) diff --git a/src/PHYEX/micro/rain_ice_slow.f90 b/src/PHYEX/micro/rain_ice_slow.f90 index 10120d3cd5ecc0a3b2991c720c2c13869d5874d9..4f590c70d81c87262cfe19e85325f1d4206b6f80 100644 --- a/src/PHYEX/micro/rain_ice_slow.f90 +++ b/src/PHYEX/micro/rain_ice_slow.f90 @@ -147,7 +147,7 @@ real, dimension(size(plsfact)) :: zz_diff END WHERE ZZW(:) = 0.0 WHERE ( (PRST(:)>XRTMIN(5)) .AND. (PRSS(:)>0.0) ) -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) ZZW(:) = ( PSSI(:)/(PRHODREF(:)*PAI(:)) ) * & #else ZZW(:) = ( PRST(:) * PLBDAS(:)**XBS * PSSI(:)/PAI(:) ) * & @@ -173,7 +173,7 @@ real, dimension(size(plsfact)) :: zz_diff WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PRST(:)>XRTMIN(5)) .AND. (PRIS(:)>0.0) ) ZZW(:) = MIN( PRIS(:),XFIAGGS * EXP( XCOLEXIS*(PZT(:)-XTT) ) & * PRIT(:) & -#if defined(REPRO48) || defined(REPRO55) +#if defined(REPRO48) * PLBDAS(:)**XEXIAGGS & * PRHODREF(:)**(-XCEXVT) ) #else diff --git a/src/PHYEX/turb/mode_bl89.f90 b/src/PHYEX/turb/mode_bl89.f90 index 8291ef9a6f90dcbcfc0cb455f7a70865324c9839..6a24431aebf4772b89a9fe6fe282f2a8357c0edd 100644 --- a/src/PHYEX/turb/mode_bl89.f90 +++ b/src/PHYEX/turb/mode_bl89.f90 @@ -155,7 +155,7 @@ ELSE !Atmosphere case END IF ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZSQRT_TKE(IIJB:IIJE,1:IKT) = SQRT(PTKEM(IIJB:IIJE,1:IKT)) +ZSQRT_TKE(:,:) = SQRT(PTKEM(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! !ZBL89EXP is defined here because (and not in ini_cturb) because CSTURB%XCED is defined in read_exseg (depending on BL89/RM17) @@ -167,18 +167,18 @@ ZUSRBL89 = 1./ZBL89EXP ! ----------------------------------------------- ! IF(KRR /= 0) THEN - ZSUM(IIJB:IIJE,1:IKT) = 0. + ZSUM(:,:) = 0. DO JRR=1,KRR !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZSUM(IIJB:IIJE,1:IKT) = ZSUM(IIJB:IIJE,1:IKT)+PRM(IIJB:IIJE,1:IKT,JRR) + ZSUM(:,:) = ZSUM(:,:)+PRM(:,:,JRR) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ENDDO !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZVPT(IIJB:IIJE,1:IKT)=PTHLM(IIJB:IIJE,1:IKT) * ( 1. + ZRVORD*PRM(IIJB:IIJE,1:IKT,1) ) & - / ( 1. + ZSUM(IIJB:IIJE,1:IKT) ) + ZVPT(:,:)=PTHLM(:,:) * ( 1. + ZRVORD*PRM(:,:,1) ) & + / ( 1. + ZSUM(:,:) ) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE - ZVPT(IIJB:IIJE,1:IKT)=PTHLM(IIJB:IIJE,1:IKT) + ZVPT(:,:)=PTHLM(:,:) END IF ! !!!!!!!!!!!! @@ -225,7 +225,7 @@ DO JK=IKTB,IKTE ! !* 4. mixing length for a downwards displacement ! ------------------------------------------ - ZINTE(IIJB:IIJE)=PTKEM(IIJB:IIJE,JK) + ZINTE(:)=PTKEM(:,JK) ZLWORK=0. ZTESTM=1. DO JKK=JK,IKB,-IKL @@ -274,8 +274,8 @@ DO JK=IKTB,IKTE !* 6. mixing length for an upwards displacement ! ----------------------------------------- ! - ZINTE(IIJB:IIJE)=PTKEM(IIJB:IIJE,JK) - ZLWORK(IIJB:IIJE)=0. + ZINTE(:)=PTKEM(:,JK) + ZLWORK(:)=0. ZTESTM=1. ! DO JKK=JK+IKL,IKE,IKL @@ -340,9 +340,9 @@ END DO !* 9. boundaries ! ---------- ! -PLM(IIJB:IIJE,IKA)=PLM(IIJB:IIJE,IKB) -PLM(IIJB:IIJE,IKE)=PLM(IIJB:IIJE,IKE-IKL) -PLM(IIJB:IIJE,IKU)=PLM(IIJB:IIJE,IKE-IKL) +PLM(:,IKA)=PLM(:,IKB) +PLM(:,IKE)=PLM(:,IKE-IKL) +PLM(:,IKU)=PLM(:,IKE-IKL) ! !------------------------------------------------------------------------------- ! diff --git a/src/PHYEX/turb/mode_bl_depth_diag.f90 b/src/PHYEX/turb/mode_bl_depth_diag.f90 index 2e817e7cc1924ad6cf1032be9a0b60ef6a162b4c..a5e897a8dd12b49922dcc1c1a54c6897f4e26e8b 100644 --- a/src/PHYEX/turb/mode_bl_depth_diag.f90 +++ b/src/PHYEX/turb/mode_bl_depth_diag.f90 @@ -99,7 +99,7 @@ DO JIJ=IIJB,IIJE END DO ! !$mnh_expand_array(JIJ=IIJB:IIJE) -BL_DEPTH_DIAG3D(IIJB:IIJE) = BL_DEPTH_DIAG3D(IIJB:IIJE) / (1. - PFTOP_O_FSURF) +BL_DEPTH_DIAG3D(:) = BL_DEPTH_DIAG3D(:) / (1. - PFTOP_O_FSURF) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! IF (LHOOK) CALL DR_HOOK('BL_DEPTH_DIAG_3D',1,ZHOOK_HANDLE) @@ -133,8 +133,8 @@ IF (LHOOK) CALL DR_HOOK('BL_DEPTH_DIAG_1D',0,ZHOOK_HANDLE) IKT=D%NKT ZSURF = PSURF ZZS = PZS -ZFLUX(1,1,1:IKT) = PFLUX(1:IKT) -ZZZ (1,1,1:IKT) = PZZ (1:IKT) +ZFLUX(1,1,:) = PFLUX(:) +ZZZ (1,1,:) = PZZ (:) ! CALL BL_DEPTH_DIAG_3D(D,ZSURF,ZZS,ZFLUX,ZZZ,PFTOP_O_FSURF,ZBL_DEPTH_DIAG) ! diff --git a/src/PHYEX/turb/mode_compute_bl89_ml.f90 b/src/PHYEX/turb/mode_compute_bl89_ml.f90 index 36008959d5bba861c545aa3313ef83e96e0557f6..f59e548a91da1410966c8e8f78bf8db1b66cb56b 100644 --- a/src/PHYEX/turb/mode_compute_bl89_ml.f90 +++ b/src/PHYEX/turb/mode_compute_bl89_ml.f90 @@ -100,10 +100,10 @@ IKE=D%NKE IKL=D%NKL ! CALL DZM_MF(D, PVPT(:,:), ZDELTVPT(:,:)) -ZDELTVPT(IIJB:IIJE,IKA)=0. +ZDELTVPT(:,IKA)=0. !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) -WHERE (ABS(ZDELTVPT(IIJB:IIJE,1:IKT))<CSTURB%XLINF) - ZDELTVPT(IIJB:IIJE,1:IKT)=CSTURB%XLINF +WHERE (ABS(ZDELTVPT(:,:))<CSTURB%XLINF) + ZDELTVPT(:,:)=CSTURB%XLINF END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) ! @@ -112,8 +112,8 @@ CALL MZM_MF(D, PVPT(:,:), ZHLVPT(:,:)) !We consider that gradient between mass levels KKB and KKB+KKL is the same as !the gradient between flux level KKB and mass level KKB !$mnh_expand_array(JIJ=IIJB:IIJE) -ZDELTVPT(IIJB:IIJE,IKB)=PDZZ2D(IIJB:IIJE,IKB)*ZDELTVPT(IIJB:IIJE,IKB+IKL)/PDZZ2D(IIJB:IIJE,IKB+IKL) -ZHLVPT(IIJB:IIJE,IKB)=PVPT(IIJB:IIJE,IKB)-ZDELTVPT(IIJB:IIJE,IKB)*0.5 +ZDELTVPT(:,IKB)=PDZZ2D(:,IKB)*ZDELTVPT(:,IKB+IKL)/PDZZ2D(:,IKB+IKL) +ZHLVPT(:,IKB)=PVPT(:,IKB)-ZDELTVPT(:,IKB)*0.5 !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! ! @@ -124,13 +124,13 @@ ZHLVPT(IIJB:IIJE,IKB)=PVPT(IIJB:IIJE,IKB)-ZDELTVPT(IIJB:IIJE,IKB)*0.5 IF (OUPORDN.EQV..TRUE.) THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - ZINTE(IIJB:IIJE)=PTKEM_DEP(IIJB:IIJE) + ZINTE(:)=PTKEM_DEP(:) !$mnh_end_expand_array(JIJ=IIJB:IIJE) PLWORK=0. ZTESTM=1. IF(OFLUX)THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - ZVPT_DEP(IIJB:IIJE)=ZHLVPT(IIJB:IIJE,KK) ! departure point is on flux level + ZVPT_DEP(:)=ZHLVPT(:,KK) ! departure point is on flux level !$mnh_end_expand_array(JIJ=IIJB:IIJE) !We must compute what happens between flux level KK and mass level KK DO J1D=IIJB,IIJE @@ -162,7 +162,7 @@ IF (OUPORDN.EQV..TRUE.) THEN ENDDO ELSE !$mnh_expand_array(JIJ=IIJB:IIJE) - ZVPT_DEP(IIJB:IIJE)=PVPT(IIJB:IIJE,KK) ! departure point is on mass level + ZVPT_DEP(:)=PVPT(:,KK) ! departure point is on mass level !$mnh_end_expand_array(JIJ=IIJB:IIJE) ENDIF @@ -203,7 +203,7 @@ ENDIF IF (OUPORDN.EQV..FALSE.) THEN IF(OFLUX) CALL PRINT_MSG(NVERB_FATAL,'GEN','COMPUTE_BL89_ML','OFLUX option not coded for downward mixing length') !$mnh_expand_array(JIJ=IIJB:IIJE) - ZINTE(IIJB:IIJE)=PTKEM_DEP(IIJB:IIJE) + ZINTE(:)=PTKEM_DEP(:) !$mnh_end_expand_array(JIJ=IIJB:IIJE) PLWORK=0. ZTESTM=1. diff --git a/src/PHYEX/turb/mode_compute_function_thermo_mf.f90 b/src/PHYEX/turb/mode_compute_function_thermo_mf.f90 index fdb54d89b93374cc3fb1e4e25bd5fc3eb3c23060..2e294edf612d092d297afe27ba293a86e96a588e 100644 --- a/src/PHYEX/turb/mode_compute_function_thermo_mf.f90 +++ b/src/PHYEX/turb/mode_compute_function_thermo_mf.f90 @@ -115,19 +115,19 @@ ZCP=CST%XCPD IF (KRR > 0) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=IKTB:IKTE) - ZCP(IIJB:IIJE,IKTB:IKTE) = ZCP(IIJB:IIJE,IKTB:IKTE) + CST%XCPV * PR(IIJB:IIJE,IKTB:IKTE,1) + ZCP(:,:) = ZCP(:,:) + CST%XCPV * PR(:,:,1) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=IKTB:IKTE) ENDIF DO JRR = 2,1+KRRL ! loop on the liquid components !$mnh_expand_array(JIJ=IIJB:IIJE,JK=IKTB:IKTE) - ZCP(IIJB:IIJE,IKTB:IKTE) = ZCP(IIJB:IIJE,IKTB:IKTE) + CST%XCL * PR(IIJB:IIJE,IKTB:IKTE,JRR) + ZCP(:,:) = ZCP(:,:) + CST%XCL * PR(:,:,JRR) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=IKTB:IKTE) END DO DO JRR = 2+KRRL,1+KRRL+KRRI ! loop on the solid components !$mnh_expand_array(JIJ=IIJB:IIJE,JK=IKTB:IKTE) - ZCP(IIJB:IIJE,IKTB:IKTE) = ZCP(IIJB:IIJE,IKTB:IKTE) + CST%XCI * PR(IIJB:IIJE,IKTB:IKTE,JRR) + ZCP(:,:) = ZCP(:,:) + CST%XCI * PR(:,:,JRR) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=IKTB:IKTE) END DO @@ -135,7 +135,7 @@ END DO !* Temperature ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=IKTB:IKTE) -PT(IIJB:IIJE,IKTB:IKTE) = PTH(IIJB:IIJE,IKTB:IKTE) * PEXN(IIJB:IIJE,IKTB:IKTE) +PT(:,:) = PTH(:,:) * PEXN(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=IKTB:IKTE) ! ! @@ -146,42 +146,42 @@ IF ( KRRL >= 1 ) THEN ! !* Lv/Cph ! - ZLVOCP(IIJB:IIJE,IKTB:IKTE) = (CST%XLVTT + (CST%XCPV-CST%XCL) * (PT(IIJB:IIJE,IKTB:IKTE)-CST%XTT) ) / & - & ZCP(IIJB:IIJE,IKTB:IKTE) + ZLVOCP(:,:) = (CST%XLVTT + (CST%XCPV-CST%XCL) * (PT(:,:)-CST%XTT) ) / & + & ZCP(:,:) ! !* Saturation vapor pressure with respect to water ! - ZE(IIJB:IIJE,IKTB:IKTE) = EXP(CST%XALPW - CST%XBETAW/PT(IIJB:IIJE,IKTB:IKTE) - & - &CST%XGAMW*ALOG( PT(IIJB:IIJE,IKTB:IKTE) ) ) + ZE(:,:) = EXP(CST%XALPW - CST%XBETAW/PT(:,:) - & + &CST%XGAMW*ALOG( PT(:,:) ) ) ! !* Saturation mixing ratio with respect to water ! - ZE(IIJB:IIJE,IKTB:IKTE) = ZE(IIJB:IIJE,IKTB:IKTE) * ZEPS / & - & ( PPABS(IIJB:IIJE,IKTB:IKTE) - ZE(IIJB:IIJE,IKTB:IKTE) ) + ZE(:,:) = ZE(:,:) * ZEPS / & + & ( PPABS(:,:) - ZE(:,:) ) ! !* Compute the saturation mixing ratio derivative (rvs') ! - ZDEDT(IIJB:IIJE,IKTB:IKTE) = (CST%XBETAW/PT(IIJB:IIJE,IKTB:IKTE) - CST%XGAMW) / PT(IIJB:IIJE,IKTB:IKTE)& - * ZE(IIJB:IIJE,IKTB:IKTE) * ( 1. + ZE(IIJB:IIJE,IKTB:IKTE) / ZEPS ) + ZDEDT(:,:) = (CST%XBETAW/PT(:,:) - CST%XGAMW) / PT(:,:)& + * ZE(:,:) * ( 1. + ZE(:,:) / ZEPS ) ! !* Compute Amoist and Atheta ! IF (OSTATNW) THEN - ZAMOIST_W(IIJB:IIJE,IKTB:IKTE)= 1.0/( 1.0 + ZDEDT(IIJB:IIJE,IKTB:IKTE) * ZLVOCP(IIJB:IIJE,IKTB:IKTE)) - ZATHETA_W(IIJB:IIJE,IKTB:IKTE)= ZAMOIST_W(IIJB:IIJE,IKTB:IKTE) * PEXN(IIJB:IIJE,IKTB:IKTE) & - * ZDEDT(IIJB:IIJE,IKTB:IKTE) + ZAMOIST_W(:,:)= 1.0/( 1.0 + ZDEDT(:,:) * ZLVOCP(:,:)) + ZATHETA_W(:,:)= ZAMOIST_W(:,:) * PEXN(:,:) & + * ZDEDT(:,:) ELSE - ZAMOIST_W(IIJB:IIJE,IKTB:IKTE)= 0.5/( 1.0 + ZDEDT(IIJB:IIJE,IKTB:IKTE) * ZLVOCP(IIJB:IIJE,IKTB:IKTE) ) - ZATHETA_W(IIJB:IIJE,IKTB:IKTE)= ZAMOIST_W(IIJB:IIJE,IKTB:IKTE) * PEXN(IIJB:IIJE,IKTB:IKTE) * & - ( ( ZE(IIJB:IIJE,IKTB:IKTE) - PR(IIJB:IIJE,IKTB:IKTE,1) ) * ZLVOCP(IIJB:IIJE,IKTB:IKTE) / & - ( 1. + ZDEDT(IIJB:IIJE,IKTB:IKTE) * ZLVOCP(IIJB:IIJE,IKTB:IKTE) ) * & + ZAMOIST_W(:,:)= 0.5/( 1.0 + ZDEDT(:,:) * ZLVOCP(:,:) ) + ZATHETA_W(:,:)= ZAMOIST_W(:,:) * PEXN(:,:) * & + ( ( ZE(:,:) - PR(:,:,1) ) * ZLVOCP(:,:) / & + ( 1. + ZDEDT(:,:) * ZLVOCP(:,:) ) * & ( & - ZE(IIJB:IIJE,IKTB:IKTE) * (1. + ZE(IIJB:IIJE,IKTB:IKTE)/ZEPS) & - * ( -2.*CST%XBETAW/PT(IIJB:IIJE,IKTB:IKTE) + CST%XGAMW ) / PT(IIJB:IIJE,IKTB:IKTE)**2& - +ZDEDT(IIJB:IIJE,IKTB:IKTE) * (1. + 2. * ZE(IIJB:IIJE,IKTB:IKTE)/ZEPS) & - * ( CST%XBETAW/PT(IIJB:IIJE,IKTB:IKTE) - CST%XGAMW ) / PT(IIJB:IIJE,IKTB:IKTE) & + ZE(:,:) * (1. + ZE(:,:)/ZEPS) & + * ( -2.*CST%XBETAW/PT(:,:) + CST%XGAMW ) / PT(:,:)**2& + +ZDEDT(:,:) * (1. + 2. * ZE(:,:)/ZEPS) & + * ( CST%XBETAW/PT(:,:) - CST%XGAMW ) / PT(:,:) & ) & - - ZDEDT(IIJB:IIJE,IKTB:IKTE) & + - ZDEDT(:,:) & ) END IF !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=IKTB:IKTE) @@ -193,61 +193,61 @@ IF ( KRRL >= 1 ) THEN ! !* Ls/Cph ! - ZLSOCP(IIJB:IIJE,IKTB:IKTE) = (CST%XLSTT + (CST%XCPV-CST%XCI) * (PT(IIJB:IIJE,IKTB:IKTE)-CST%XTT) ) / & - & ZCP(IIJB:IIJE,IKTB:IKTE) + ZLSOCP(:,:) = (CST%XLSTT + (CST%XCPV-CST%XCI) * (PT(:,:)-CST%XTT) ) / & + & ZCP(:,:) ! !* Saturation vapor pressure with respect to ice ! - ZE(IIJB:IIJE,IKTB:IKTE) = EXP(CST%XALPI - CST%XBETAI/PT(IIJB:IIJE,IKTB:IKTE) - & - &CST%XGAMI*ALOG( PT(IIJB:IIJE,IKTB:IKTE) ) ) + ZE(:,:) = EXP(CST%XALPI - CST%XBETAI/PT(:,:) - & + &CST%XGAMI*ALOG( PT(:,:) ) ) ! !* Saturation mixing ratio with respect to ice ! - ZE(IIJB:IIJE,IKTB:IKTE) = ZE(IIJB:IIJE,IKTB:IKTE) * ZEPS / & - & ( PPABS(IIJB:IIJE,IKTB:IKTE) - ZE(IIJB:IIJE,IKTB:IKTE) ) + ZE(:,:) = ZE(:,:) * ZEPS / & + & ( PPABS(:,:) - ZE(:,:) ) ! !* Compute the saturation mixing ratio derivative (rvs') ! - ZDEDT(IIJB:IIJE,IKTB:IKTE) = (CST%XBETAI/PT(IIJB:IIJE,IKTB:IKTE)-CST%XGAMI) /PT(IIJB:IIJE,IKTB:IKTE)& - * ZE(IIJB:IIJE,IKTB:IKTE) * ( 1. + ZE(IIJB:IIJE,IKTB:IKTE) / ZEPS ) + ZDEDT(:,:) = (CST%XBETAI/PT(:,:)-CST%XGAMI) /PT(:,:)& + * ZE(:,:) * ( 1. + ZE(:,:) / ZEPS ) ! !* Compute Amoist and Atheta ! IF (OSTATNW) THEN - ZAMOIST_I(IIJB:IIJE,IKTB:IKTE)= 1.0/( 1.0 + ZDEDT(IIJB:IIJE,IKTB:IKTE) *ZLVOCP(IIJB:IIJE,IKTB:IKTE)) - ZATHETA_I(IIJB:IIJE,IKTB:IKTE)= ZAMOIST_I(IIJB:IIJE,IKTB:IKTE) * PEXN(IIJB:IIJE,IKTB:IKTE) & - * ZDEDT(IIJB:IIJE,IKTB:IKTE) + ZAMOIST_I(:,:)= 1.0/( 1.0 + ZDEDT(:,:) *ZLVOCP(:,:)) + ZATHETA_I(:,:)= ZAMOIST_I(:,:) * PEXN(:,:) & + * ZDEDT(:,:) ELSE - ZAMOIST_I(IIJB:IIJE,IKTB:IKTE)= 0.5/(1.0 + ZDEDT(IIJB:IIJE,IKTB:IKTE) * ZLSOCP(IIJB:IIJE,IKTB:IKTE)) - ZATHETA_I(IIJB:IIJE,IKTB:IKTE)= ZAMOIST_I(IIJB:IIJE,IKTB:IKTE) * PEXN(IIJB:IIJE,IKTB:IKTE) * & - ( ( ZE(IIJB:IIJE,IKTB:IKTE) - PR(IIJB:IIJE,IKTB:IKTE,1) ) * ZLSOCP(IIJB:IIJE,IKTB:IKTE) / & - ( 1. + ZDEDT(IIJB:IIJE,IKTB:IKTE) * ZLSOCP(IIJB:IIJE,IKTB:IKTE) ) * & + ZAMOIST_I(:,:)= 0.5/(1.0 + ZDEDT(:,:) * ZLSOCP(:,:)) + ZATHETA_I(:,:)= ZAMOIST_I(:,:) * PEXN(:,:) * & + ( ( ZE(:,:) - PR(:,:,1) ) * ZLSOCP(:,:) / & + ( 1. + ZDEDT(:,:) * ZLSOCP(:,:) ) * & ( & - ZE(IIJB:IIJE,IKTB:IKTE) * (1. + ZE(IIJB:IIJE,IKTB:IKTE)/ZEPS) & - * ( -2.*CST%XBETAI/PT(IIJB:IIJE,IKTB:IKTE) + CST%XGAMI ) / PT(IIJB:IIJE,IKTB:IKTE)**2 & - +ZDEDT(IIJB:IIJE,IKTB:IKTE) * (1. + 2. * ZE(IIJB:IIJE,IKTB:IKTE)/ZEPS) & - * ( CST%XBETAI/PT(IIJB:IIJE,IKTB:IKTE) - CST%XGAMI ) / PT(IIJB:IIJE,IKTB:IKTE) & + ZE(:,:) * (1. + ZE(:,:)/ZEPS) & + * ( -2.*CST%XBETAI/PT(:,:) + CST%XGAMI ) / PT(:,:)**2 & + +ZDEDT(:,:) * (1. + 2. * ZE(:,:)/ZEPS) & + * ( CST%XBETAI/PT(:,:) - CST%XGAMI ) / PT(:,:) & ) & - - ZDEDT(IIJB:IIJE,IKTB:IKTE) & + - ZDEDT(:,:) & ) END IF !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=IKTB:IKTE) ELSE - ZAMOIST_I(IIJB:IIJE,IKTB:IKTE)=0. - ZATHETA_I(IIJB:IIJE,IKTB:IKTE)=0. + ZAMOIST_I(:,:)=0. + ZATHETA_I(:,:)=0. ENDIF !$mnh_expand_array(JIJ=IIJB:IIJE,JK=IKTB:IKTE) - PAMOIST(IIJB:IIJE,IKTB:IKTE) = (1.0-PFRAC_ICE(IIJB:IIJE,IKTB:IKTE))*ZAMOIST_W(IIJB:IIJE,IKTB:IKTE) & - +PFRAC_ICE(IIJB:IIJE,IKTB:IKTE) *ZAMOIST_I(IIJB:IIJE,IKTB:IKTE) - PATHETA(IIJB:IIJE,IKTB:IKTE) = (1.0-PFRAC_ICE(IIJB:IIJE,IKTB:IKTE))*ZATHETA_W(IIJB:IIJE,IKTB:IKTE) & - +PFRAC_ICE(IIJB:IIJE,IKTB:IKTE) *ZATHETA_I(IIJB:IIJE,IKTB:IKTE) + PAMOIST(:,:) = (1.0-PFRAC_ICE(:,:))*ZAMOIST_W(:,:) & + +PFRAC_ICE(:,:) *ZAMOIST_I(:,:) + PATHETA(:,:) = (1.0-PFRAC_ICE(:,:))*ZATHETA_W(:,:) & + +PFRAC_ICE(:,:) *ZATHETA_I(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=IKTB:IKTE) ! ELSE - PAMOIST(IIJB:IIJE,IKTB:IKTE) = 0. - PATHETA(IIJB:IIJE,IKTB:IKTE) = 0. + PAMOIST(:,:) = 0. + PATHETA(:,:) = 0. ENDIF IF (LHOOK) CALL DR_HOOK('COMPUTE_FUNCTION_THERMO_MF',1,ZHOOK_HANDLE) END SUBROUTINE COMPUTE_FUNCTION_THERMO_MF diff --git a/src/PHYEX/turb/mode_compute_mf_cloud_bigaus.f90 b/src/PHYEX/turb/mode_compute_mf_cloud_bigaus.f90 index a34c6e46f1d6db259eda3aa9062aeac8b481be3f..a9bd850469bcbe06e7b6d74a8828e0f07c1f5480 100644 --- a/src/PHYEX/turb/mode_compute_mf_cloud_bigaus.f90 +++ b/src/PHYEX/turb/mode_compute_mf_cloud_bigaus.f90 @@ -135,44 +135,44 @@ ZOMEGA_UP_M(:)=0. DO JK=IKB,IKE-IKL,IKL !$mnh_expand_array(JIJ=IIJB:IIJE) !Vertical integration over the entire column but only buoyant points are used - !ZOMEGA_UP_M(IIJB:IIJE)=ZOMEGA_UP_M(IIJB:IIJE) + & - ! ZEMF_M(IIJB:IIJE,JK) * & - ! MAX(0.,(ZTHV_UP_M(IIJB:IIJE,JK)-PTHVM(IIJB:IIJE,JK))) * & - ! (PZZ(IIJB:IIJE,JK+KKL)-PZZ(IIJB:IIJE,JK)) / & - ! (PTHM(IIJB:IIJE,JK) * PRHODREF(IIJB:IIJE,JK)) + !ZOMEGA_UP_M(:)=ZOMEGA_UP_M(:) + & + ! ZEMF_M(:,JK) * & + ! MAX(0.,(ZTHV_UP_M(:,JK)-PTHVM(:,JK))) * & + ! (PZZ(:,JK+KKL)-PZZ(:,JK)) / & + ! (PTHM(:,JK) * PRHODREF(:,JK)) !Vertical integration over the entire column - ZOMEGA_UP_M(IIJB:IIJE)=ZOMEGA_UP_M(IIJB:IIJE) + & - ZEMF_M(IIJB:IIJE,JK) * & - (ZTHV_UP_M(IIJB:IIJE,JK)-PTHVM(IIJB:IIJE,JK)) * & - (PZZ(IIJB:IIJE,JK+IKL)-PZZ(IIJB:IIJE,JK)) / & - (PTHM(IIJB:IIJE,JK) * PRHODREF(IIJB:IIJE,JK)) + ZOMEGA_UP_M(:)=ZOMEGA_UP_M(:) + & + ZEMF_M(:,JK) * & + (ZTHV_UP_M(:,JK)-PTHVM(:,JK)) * & + (PZZ(:,JK+IKL)-PZZ(:,JK)) / & + (PTHM(:,JK) * PRHODREF(:,JK)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ENDDO !$mnh_expand_array(JIJ=IIJB:IIJE) -ZOMEGA_UP_M(IIJB:IIJE)=MAX(ZOMEGA_UP_M(IIJB:IIJE), 1.E-20) -ZOMEGA_UP_M(IIJB:IIJE)=(CST%XG*ZOMEGA_UP_M(IIJB:IIJE))**(1./3.) +ZOMEGA_UP_M(:)=MAX(ZOMEGA_UP_M(:), 1.E-20) +ZOMEGA_UP_M(:)=(CST%XG*ZOMEGA_UP_M(:))**(1./3.) !$mnh_end_expand_array(JIJ=IIJB:IIJE) !computation of alpha up DO JK=IKA,IKU,IKL !$mnh_expand_array(JIJ=IIJB:IIJE) - ZALPHA_UP_M(IIJB:IIJE,JK)=ZEMF_M(IIJB:IIJE,JK)/(PARAMMF%XALPHA_MF*PRHODREF(IIJB:IIJE,JK)*ZOMEGA_UP_M(IIJB:IIJE)) - ZALPHA_UP_M(IIJB:IIJE,JK)=MAX(0., MIN(ZALPHA_UP_M(IIJB:IIJE,JK), 1.)) + ZALPHA_UP_M(:,JK)=ZEMF_M(:,JK)/(PARAMMF%XALPHA_MF*PRHODREF(:,JK)*ZOMEGA_UP_M(:)) + ZALPHA_UP_M(:,JK)=MAX(0., MIN(ZALPHA_UP_M(:,JK), 1.)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ENDDO !computation of sigma of the distribution DO JK=IKA,IKU,IKL !$mnh_expand_array(JIJ=IIJB:IIJE) - ZSIGMF(IIJB:IIJE,JK)=ZEMF_M(IIJB:IIJE,JK) * & - (ZRT_UP_M(IIJB:IIJE,JK) - PRTM(IIJB:IIJE,JK)) * & - PDEPTH(IIJB:IIJE) * ZGRAD_Z_RT(IIJB:IIJE,JK) / & - (PARAMMF%XSIGMA_MF * ZOMEGA_UP_M(IIJB:IIJE) * PRHODREF(IIJB:IIJE,JK)) + ZSIGMF(:,JK)=ZEMF_M(:,JK) * & + (ZRT_UP_M(:,JK) - PRTM(:,JK)) * & + PDEPTH(:) * ZGRAD_Z_RT(:,JK) / & + (PARAMMF%XSIGMA_MF * ZOMEGA_UP_M(:) * PRHODREF(:,JK)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ENDDO !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZSIGMF(IIJB:IIJE,1:IKT)=SQRT(MAX(ABS(ZSIGMF(IIJB:IIJE,1:IKT)), 1.E-40)) +ZSIGMF(:,:)=SQRT(MAX(ABS(ZSIGMF(:,:)), 1.E-40)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! !* 2. PDF integration @@ -181,22 +181,22 @@ ZSIGMF(IIJB:IIJE,1:IKT)=SQRT(MAX(ABS(ZSIGMF(IIJB:IIJE,1:IKT)), 1.E-40)) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) !The mean of the distribution is ZRT_UP !Computation of ZA and ZGAM (=efrc(ZA)) coefficient -ZA(IIJB:IIJE,1:IKT)=(ZRSAT_UP_M(IIJB:IIJE,1:IKT)-ZRT_UP_M(IIJB:IIJE,1:IKT))/& - &(sqrt(2.)*ZSIGMF(IIJB:IIJE,1:IKT)) +ZA(:,:)=(ZRSAT_UP_M(:,:)-ZRT_UP_M(:,:))/& + &(sqrt(2.)*ZSIGMF(:,:)) !Approximation of erf function -ZGAM(IIJB:IIJE,1:IKT)=1-SIGN(1., ZA(IIJB:IIJE,1:IKT))*SQRT(1-EXP(-4*ZA(IIJB:IIJE,1:IKT)**2/CST%XPI)) +ZGAM(:,:)=1-SIGN(1., ZA(:,:))*SQRT(1-EXP(-4*ZA(:,:)**2/CST%XPI)) !computation of cloud fraction -PCF_MF(IIJB:IIJE,1:IKT)=MAX( 0., MIN(1.,0.5*ZGAM(IIJB:IIJE,1:IKT) * ZALPHA_UP_M(IIJB:IIJE,1:IKT))) +PCF_MF(:,:)=MAX( 0., MIN(1.,0.5*ZGAM(:,:) * ZALPHA_UP_M(:,:))) !computation of condensate, then PRC and PRI -ZCOND(IIJB:IIJE,1:IKT)=(EXP(-ZA(IIJB:IIJE,1:IKT)**2)-& - &ZA(IIJB:IIJE,1:IKT)*SQRT(CST%XPI)*ZGAM(IIJB:IIJE,1:IKT))* & - &ZSIGMF(IIJB:IIJE,1:IKT)/SQRT(2.*CST%XPI) * ZALPHA_UP_M(IIJB:IIJE,1:IKT) -ZCOND(IIJB:IIJE,1:IKT)=MAX(ZCOND(IIJB:IIJE,1:IKT), 0.) !due to approximation of ZGAM value, ZCOND could be slightly negative -PRC_MF(IIJB:IIJE,1:IKT)=(1.-ZFRAC_ICE_UP_M(IIJB:IIJE,1:IKT)) * ZCOND(IIJB:IIJE,1:IKT) -PRI_MF(IIJB:IIJE,1:IKT)=( ZFRAC_ICE_UP_M(IIJB:IIJE,1:IKT)) * ZCOND(IIJB:IIJE,1:IKT) +ZCOND(:,:)=(EXP(-ZA(:,:)**2)-& + &ZA(:,:)*SQRT(CST%XPI)*ZGAM(:,:))* & + &ZSIGMF(:,:)/SQRT(2.*CST%XPI) * ZALPHA_UP_M(:,:) +ZCOND(:,:)=MAX(ZCOND(:,:), 0.) !due to approximation of ZGAM value, ZCOND could be slightly negative +PRC_MF(:,:)=(1.-ZFRAC_ICE_UP_M(:,:)) * ZCOND(:,:) +PRI_MF(:,:)=( ZFRAC_ICE_UP_M(:,:)) * ZCOND(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! IF (LHOOK) CALL DR_HOOK('COMPUTE_MF_CLOUD_BIGAUS',1,ZHOOK_HANDLE) diff --git a/src/PHYEX/turb/mode_compute_mf_cloud_stat.f90 b/src/PHYEX/turb/mode_compute_mf_cloud_stat.f90 index 3c562015e63667859aa1862c251baf0493e0e948..027cc3c7906d9c326412da3c3f955aa347219e57 100644 --- a/src/PHYEX/turb/mode_compute_mf_cloud_stat.f90 +++ b/src/PHYEX/turb/mode_compute_mf_cloud_stat.f90 @@ -131,25 +131,25 @@ IF (KRRL > 0) THEN CALL GZ_M_W_MF(D, PTHLM(:,:), PDZZ(:,:), ZWK(:,:)) IF (OSTATNW) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ(IIJB:IIJE,1:IKT) = -2 * CSTURB%XCTV* PARAMMF%XTAUSIGMF * PEMF(IIJB:IIJE,1:IKT)* & - & (PTHL_UP(IIJB:IIJE,1:IKT)-ZFLXZ(IIJB:IIJE,1:IKT)) * ZWK(IIJB:IIJE,1:IKT) + ZFLXZ(:,:) = -2 * CSTURB%XCTV* PARAMMF%XTAUSIGMF * PEMF(:,:)* & + & (PTHL_UP(:,:)-ZFLXZ(:,:)) * ZWK(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ(IIJB:IIJE,1:IKT) = -2 * PARAMMF%XTAUSIGMF * PEMF(IIJB:IIJE,1:IKT)* & - & (PTHL_UP(IIJB:IIJE,1:IKT)-ZFLXZ(IIJB:IIJE,1:IKT)) * ZWK(IIJB:IIJE,1:IKT) + ZFLXZ(:,:) = -2 * PARAMMF%XTAUSIGMF * PEMF(:,:)* & + & (PTHL_UP(:,:)-ZFLXZ(:,:)) * ZWK(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! ! Avoid negative values !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ(IIJB:IIJE,1:IKT) = MAX(0.,ZFLXZ(IIJB:IIJE,1:IKT)) + ZFLXZ(:,:) = MAX(0.,ZFLXZ(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_MF(D, ZFLXZ(:,:), PSIGMF(:,:)) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PSIGMF(IIJB:IIJE,1:IKT) = PSIGMF(IIJB:IIJE,1:IKT) * ZATHETA(IIJB:IIJE,1:IKT)**2 + PSIGMF(:,:) = PSIGMF(:,:) * ZATHETA(:,:)**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! @@ -163,48 +163,48 @@ IF (KRRL > 0) THEN CALL GZ_M_W_MF(D, PRTM(:,:), PDZZ(:,:), ZWK2(:,:)) IF (OSTATNW) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ2(IIJB:IIJE,1:IKT) = -2 * CSTURB%XCTV * PARAMMF%XTAUSIGMF * PEMF(IIJB:IIJE,1:IKT)* & - & (PRT_UP(IIJB:IIJE,1:IKT)-ZFLXZ2(IIJB:IIJE,1:IKT)) * ZWK2(IIJB:IIJE,1:IKT) + ZFLXZ2(:,:) = -2 * CSTURB%XCTV * PARAMMF%XTAUSIGMF * PEMF(:,:)* & + & (PRT_UP(:,:)-ZFLXZ2(:,:)) * ZWK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ2(IIJB:IIJE,1:IKT) = -2 * PARAMMF%XTAUSIGMF * PEMF(IIJB:IIJE,1:IKT)* & - & (PRT_UP(IIJB:IIJE,1:IKT)-ZFLXZ2(IIJB:IIJE,1:IKT)) * ZWK2(IIJB:IIJE,1:IKT) + ZFLXZ2(:,:) = -2 * PARAMMF%XTAUSIGMF * PEMF(:,:)* & + & (PRT_UP(:,:)-ZFLXZ2(:,:)) * ZWK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! ! Avoid negative values !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ2(IIJB:IIJE,1:IKT) = MAX(0.,ZFLXZ2(IIJB:IIJE,1:IKT)) + ZFLXZ2(:,:) = MAX(0.,ZFLXZ2(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_MF(D, ZFLXZ2(:,:), ZWK2(:,:)) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PSIGMF(IIJB:IIJE,1:IKT) = PSIGMF(IIJB:IIJE,1:IKT) + ZAMOIST(IIJB:IIJE,1:IKT) **2 *ZWK2(IIJB:IIJE,1:IKT) + PSIGMF(:,:) = PSIGMF(:,:) + ZAMOIST(:,:) **2 *ZWK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) IF (OSTATNW) THEN !wc Now including convection covariance contribution in case of OSTATNW=TRUE ! ! 1.2.2 contribution from <Rnp Thl> !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ3(IIJB:IIJE,1:IKT) = - CSTURB%XCTV * PARAMMF%XTAUSIGMF * & - (PEMF(IIJB:IIJE,1:IKT)*(PRT_UP(IIJB:IIJE,1:IKT)-ZFLXZ2(IIJB:IIJE,1:IKT)) * & - ZWK(IIJB:IIJE,1:IKT) + & - PEMF(IIJB:IIJE,1:IKT)*(PTHL_UP(IIJB:IIJE,1:IKT)-ZFLXZ(IIJB:IIJE,1:IKT)) * & - ZWK2(IIJB:IIJE,1:IKT)) + ZFLXZ3(:,:) = - CSTURB%XCTV * PARAMMF%XTAUSIGMF * & + (PEMF(:,:)*(PRT_UP(:,:)-ZFLXZ2(:,:)) * & + ZWK(:,:) + & + PEMF(:,:)*(PTHL_UP(:,:)-ZFLXZ(:,:)) * & + ZWK2(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_MF(D, ZFLXZ3, ZFLXZ) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PSIGMF(IIJB:IIJE,1:IKT) = PSIGMF(IIJB:IIJE,1:IKT) - & - MIN(0.,2.*ZAMOIST(IIJB:IIJE,1:IKT)*ZATHETA(IIJB:IIJE,1:IKT)*& - &ZFLXZ(IIJB:IIJE,1:IKT)) + PSIGMF(:,:) = PSIGMF(:,:) - & + MIN(0.,2.*ZAMOIST(:,:)*ZATHETA(:,:)*& + &ZFLXZ(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ENDIF ! ! 1.3 Vertical part of Sigma_s ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PSIGMF(IIJB:IIJE,1:IKT) = SQRT( MAX (PSIGMF(IIJB:IIJE,1:IKT) , 0.) ) + PSIGMF(:,:) = SQRT( MAX (PSIGMF(:,:) , 0.) ) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE PSIGMF(:,:) = 0. diff --git a/src/PHYEX/turb/mode_compute_updraft.f90 b/src/PHYEX/turb/mode_compute_updraft.f90 index 5e9389b857af9b3b61dec13310470696b4287d21..6dc98937cf12519875bce491bd190d226658f874 100644 --- a/src/PHYEX/turb/mode_compute_updraft.f90 +++ b/src/PHYEX/turb/mode_compute_updraft.f90 @@ -287,7 +287,7 @@ IF (OENTR_DETR) THEN PFRAC_ICE_UP(:,:)=0. !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PRSAT_UP(IIJB:IIJE,1:IKT)=PRVM(IIJB:IIJE,1:IKT) ! should be initialised correctly but is (normaly) not used + PRSAT_UP(:,:)=PRVM(:,:) ! should be initialised correctly but is (normaly) not used !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) !cloud/dry air mixture cloud content @@ -311,22 +311,22 @@ END DO ! ! Initialisation of updraft characteristics !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PTHL_UP(IIJB:IIJE,1:IKT)=ZTHLM_F(IIJB:IIJE,1:IKT) -PRT_UP(IIJB:IIJE,1:IKT)=ZRTM_F(IIJB:IIJE,1:IKT) -PU_UP(IIJB:IIJE,1:IKT)=ZUM_F(IIJB:IIJE,1:IKT) -PV_UP(IIJB:IIJE,1:IKT)=ZVM_F(IIJB:IIJE,1:IKT) +PTHL_UP(:,:)=ZTHLM_F(:,:) +PRT_UP(:,:)=ZRTM_F(:,:) +PU_UP(:,:)=ZUM_F(:,:) +PV_UP(:,:)=ZVM_F(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT,JSV=1:KSV) -PSV_UP(IIJB:IIJE,1:IKT,:)=ZSVM_F(IIJB:IIJE,1:IKT,:) +PSV_UP(:,:,:)=ZSVM_F(:,:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT,JSV=1:KSV) ! Computation or initialisation of updraft characteristics at the KKB level ! thetal_up,rt_up,thetaV_up, w2,Buoyancy term and mass flux (PEMF) !$mnh_expand_array(JIJ=IIJB:IIJE) -PTHL_UP(IIJB:IIJE,IKB)= ZTHLM_F(IIJB:IIJE,IKB)+ & - & MAX(0.,MIN(ZTMAX,(PSFTH(IIJB:IIJE)/SQRT(ZTKEM_F(IIJB:IIJE,IKB)))* PARAMMF%XALP_PERT)) -PRT_UP(IIJB:IIJE,IKB) = ZRTM_F(IIJB:IIJE,IKB)+ & - & MAX(0.,MIN(ZRMAX,(PSFRV(IIJB:IIJE)/SQRT(ZTKEM_F(IIJB:IIJE,IKB)))* PARAMMF%XALP_PERT)) +PTHL_UP(:,IKB)= ZTHLM_F(:,IKB)+ & + & MAX(0.,MIN(ZTMAX,(PSFTH(:)/SQRT(ZTKEM_F(:,IKB)))* PARAMMF%XALP_PERT)) +PRT_UP(:,IKB) = ZRTM_F(:,IKB)+ & + & MAX(0.,MIN(ZRMAX,(PSFRV(:)/SQRT(ZTKEM_F(:,IKB)))* PARAMMF%XALP_PERT)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) IF (OENTR_DETR) THEN @@ -337,17 +337,17 @@ IF (OENTR_DETR) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! thetav at mass and flux levels - ZTHVM_F(IIJB:IIJE,1:IKT)=ZTHM_F(IIJB:IIJE,1:IKT)* & - &((1.+ZRVORD*ZRVM_F(IIJB:IIJE,1:IKT))/(1.+ZRTM_F(IIJB:IIJE,1:IKT))) - ZTHVM(IIJB:IIJE,1:IKT)=PTHM(IIJB:IIJE,1:IKT)* & - &((1.+ZRVORD*PRVM(IIJB:IIJE,1:IKT))/(1.+PRTM(IIJB:IIJE,1:IKT))) + ZTHVM_F(:,:)=ZTHM_F(:,:)* & + &((1.+ZRVORD*ZRVM_F(:,:))/(1.+ZRTM_F(:,:))) + ZTHVM(:,:)=PTHM(:,:)* & + &((1.+ZRVORD*PRVM(:,:))/(1.+PRTM(:,:))) - PTHV_UP(IIJB:IIJE,1:IKT)=ZTHVM_F(IIJB:IIJE,1:IKT) + PTHV_UP(:,:)=ZTHVM_F(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ZW_UP2(:,:)=0. !$mnh_expand_array(JIJ=IIJB:IIJE) - ZW_UP2(IIJB:IIJE,IKB) = MAX(0.0001,(2./3.)*ZTKEM_F(IIJB:IIJE,IKB)) + ZW_UP2(:,IKB) = MAX(0.0001,(2./3.)*ZTKEM_F(:,IKB)) ! Computation of non conservative variable for the KKB level of the updraft ! (all or nothing ajustement) @@ -361,23 +361,23 @@ IF (OENTR_DETR) THEN !$mnh_expand_array(JIJ=IIJB:IIJE) ! compute updraft thevav and buoyancy term at KKB level - PTHV_UP(IIJB:IIJE,IKB) = ZTH_UP(IIJB:IIJE,IKB)*& - & ((1+ZRVORD*PRV_UP(IIJB:IIJE,IKB))/(1+PRT_UP(IIJB:IIJE,IKB))) + PTHV_UP(:,IKB) = ZTH_UP(:,IKB)*& + & ((1+ZRVORD*PRV_UP(:,IKB))/(1+PRT_UP(:,IKB))) ! compute mean rsat in updraft - PRSAT_UP(IIJB:IIJE,IKB) = ZRSATW(IIJB:IIJE)*(1-PFRAC_ICE_UP(IIJB:IIJE,IKB)) + & - & ZRSATI(IIJB:IIJE)*PFRAC_ICE_UP(IIJB:IIJE,IKB) + PRSAT_UP(:,IKB) = ZRSATW(:)*(1-PFRAC_ICE_UP(:,IKB)) + & + & ZRSATI(:)*PFRAC_ICE_UP(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! Closure assumption for mass flux at KKB level ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZG_O_THVREF(IIJB:IIJE,1:IKT)=CST%XG/ZTHVM_F(IIJB:IIJE,1:IKT) + ZG_O_THVREF(:,:)=CST%XG/ZTHVM_F(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! compute L_up GLMIX=.TRUE. !$mnh_expand_array(JIJ=IIJB:IIJE) - ZTKEM_F(IIJB:IIJE,IKB)=0. + ZTKEM_F(:,IKB)=0. !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! IF(TURBN%CTURBLEN=='RM17') THEN @@ -386,7 +386,7 @@ IF (OENTR_DETR) THEN CALL GZ_M_W_MF(D, PVM, PDZZ, ZWK) CALL MZF_MF(D, ZWK, ZDVDZ) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZSHEAR(IIJB:IIJE,1:IKT) = SQRT(ZDUDZ(IIJB:IIJE,1:IKT)**2 + ZDVDZ(IIJB:IIJE,1:IKT)**2) + ZSHEAR(:,:) = SQRT(ZDUDZ(:,:)**2 + ZDVDZ(:,:)**2) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE ZSHEAR = 0. !no shear in bl89 mixing length @@ -400,36 +400,36 @@ IF (OENTR_DETR) THEN &ZG_O_THVREF(:,IKB),ZTHVM,IKB,GLMIX,.FALSE.,ZSHEAR,ZLUP) #endif !$mnh_expand_where(JIJ=IIJB:IIJE) - ZLUP(IIJB:IIJE)=MAX(ZLUP(IIJB:IIJE),1.E-10) + ZLUP(:)=MAX(ZLUP(:),1.E-10) ! Compute Buoyancy flux at the ground - ZWTHVSURF(IIJB:IIJE) = (ZTHVM_F(IIJB:IIJE,IKB)/ZTHM_F(IIJB:IIJE,IKB))*PSFTH(IIJB:IIJE)+ & - (0.61*ZTHM_F(IIJB:IIJE,IKB))*PSFRV(IIJB:IIJE) + ZWTHVSURF(:) = (ZTHVM_F(:,IKB)/ZTHM_F(:,IKB))*PSFTH(:)+ & + (0.61*ZTHM_F(:,IKB))*PSFRV(:) ! Mass flux at KKB level (updraft triggered if PSFTH>0.) IF (PARAMMF%LGZ) THEN IF(PDX==0. .OR. PDY==0.) THEN CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'COMPUTE_UPDRAFT', 'PDX or PDY is NULL with option LGZ!') ENDIF - ZSURF(IIJB:IIJE)=TANH(PARAMMF%XGZ*SQRT(PDX*PDY)/ZLUP(IIJB:IIJE)) + ZSURF(:)=TANH(PARAMMF%XGZ*SQRT(PDX*PDY)/ZLUP(:)) ELSE - ZSURF(IIJB:IIJE)=1. + ZSURF(:)=1. END IF - WHERE (ZWTHVSURF(IIJB:IIJE)>0.) - PEMF(IIJB:IIJE,IKB) = PARAMMF%XCMF * ZSURF(IIJB:IIJE) * ZRHO_F(IIJB:IIJE,IKB) * & - ((ZG_O_THVREF(IIJB:IIJE,IKB))*ZWTHVSURF(IIJB:IIJE)*ZLUP(IIJB:IIJE))**(1./3.) - PFRAC_UP(IIJB:IIJE,IKB)=MIN(PEMF(IIJB:IIJE,IKB)/(SQRT(ZW_UP2(IIJB:IIJE,IKB))*ZRHO_F(IIJB:IIJE,IKB)), & + WHERE (ZWTHVSURF(:)>0.) + PEMF(:,IKB) = PARAMMF%XCMF * ZSURF(:) * ZRHO_F(:,IKB) * & + ((ZG_O_THVREF(:,IKB))*ZWTHVSURF(:)*ZLUP(:))**(1./3.) + PFRAC_UP(:,IKB)=MIN(PEMF(:,IKB)/(SQRT(ZW_UP2(:,IKB))*ZRHO_F(:,IKB)), & &PARAMMF%XFRAC_UP_MAX) - ZW_UP2(IIJB:IIJE,IKB)=(PEMF(IIJB:IIJE,IKB)/(PFRAC_UP(IIJB:IIJE,IKB)*ZRHO_F(IIJB:IIJE,IKB)))**2 - GTEST(IIJB:IIJE)=.TRUE. + ZW_UP2(:,IKB)=(PEMF(:,IKB)/(PFRAC_UP(:,IKB)*ZRHO_F(:,IKB)))**2 + GTEST(:)=.TRUE. ELSEWHERE - PEMF(IIJB:IIJE,IKB) =0. - GTEST(IIJB:IIJE)=.FALSE. + PEMF(:,IKB) =0. + GTEST(:)=.FALSE. ENDWHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE) - GTEST(IIJB:IIJE)=PEMF(IIJB:IIJE,IKB+IKL)>0. + GTEST(:)=PEMF(:,IKB+IKL)>0. !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF @@ -449,7 +449,7 @@ GTESTETL(:)=.FALSE. DO JK=IKB,IKE-IKL,IKL ! IF the updraft top is reached for all column, stop the loop on levels - ITEST=COUNT(GTEST(IIJB:IIJE)) + ITEST=COUNT(GTEST(:)) IF (ITEST==0) CYCLE ! Computation of entrainment and detrainment with KF90 @@ -458,9 +458,9 @@ DO JK=IKB,IKE-IKL,IKL ! to find the LCL (check if JK is LCL or not) !$mnh_expand_where(JIJ=IIJB:IIJE) - WHERE ((PRC_UP(IIJB:IIJE,JK)+PRI_UP(IIJB:IIJE,JK)>0.).AND.(.NOT.(GTESTLCL(IIJB:IIJE)))) - KKLCL(IIJB:IIJE) = JK - GTESTLCL(IIJB:IIJE)=.TRUE. + WHERE ((PRC_UP(:,JK)+PRI_UP(:,JK)>0.).AND.(.NOT.(GTESTLCL(:)))) + KKLCL(:) = JK + GTESTLCL(:)=.TRUE. ENDWHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) @@ -468,8 +468,8 @@ DO JK=IKB,IKE-IKL,IKL IF (OENTR_DETR) THEN IF(JK/=IKB) THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - ZRC_MIX(IIJB:IIJE,JK) = ZRC_MIX(IIJB:IIJE,JK-IKL) ! guess of Rc of mixture - ZRI_MIX(IIJB:IIJE,JK) = ZRI_MIX(IIJB:IIJE,JK-IKL) ! guess of Ri of mixture + ZRC_MIX(:,JK) = ZRC_MIX(:,JK-IKL) ! guess of Rc of mixture + ZRI_MIX(:,JK) = ZRI_MIX(:,JK-IKL) ! guess of Ri of mixture !$mnh_end_expand_array(JIJ=IIJB:IIJE) ENDIF CALL COMPUTE_ENTR_DETR(D, CST, NEB, PARAMMF, JK,IKB,IKE,IKL,GTEST,GTESTLCL,HFRAC_ICE,PFRAC_ICE_UP(:,JK),& @@ -483,34 +483,34 @@ DO JK=IKB,IKE-IKL,IKL ZBUO_INTEG_DRY(:,JK), ZBUO_INTEG_CLD(:,JK), & ZPART_DRY(:) ) !$mnh_expand_where(JIJ=IIJB:IIJE) - PBUO_INTEG(IIJB:IIJE,JK)=ZBUO_INTEG_DRY(IIJB:IIJE,JK)+ZBUO_INTEG_CLD(IIJB:IIJE,JK) + PBUO_INTEG(:,JK)=ZBUO_INTEG_DRY(:,JK)+ZBUO_INTEG_CLD(:,JK) IF (JK==IKB) THEN - PDETR(IIJB:IIJE,JK)=0. - ZDETR_CLD(IIJB:IIJE,JK)=0. + PDETR(:,JK)=0. + ZDETR_CLD(:,JK)=0. ENDIF ! Computation of updraft characteristics at level JK+KKL - WHERE(GTEST(IIJB:IIJE)) - ZMIX1(IIJB:IIJE)=0.5*(PZZ(IIJB:IIJE,JK+IKL)-PZZ(IIJB:IIJE,JK))*& - &(PENTR(IIJB:IIJE,JK)-PDETR(IIJB:IIJE,JK)) - PEMF(IIJB:IIJE,JK+IKL)=PEMF(IIJB:IIJE,JK)*EXP(2*ZMIX1(IIJB:IIJE)) + WHERE(GTEST(:)) + ZMIX1(:)=0.5*(PZZ(:,JK+IKL)-PZZ(:,JK))*& + &(PENTR(:,JK)-PDETR(:,JK)) + PEMF(:,JK+IKL)=PEMF(:,JK)*EXP(2*ZMIX1(:)) ENDWHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) ELSE !OENTR_DETR !$mnh_expand_array(JIJ=IIJB:IIJE) - GTEST(IIJB:IIJE) = (PEMF(IIJB:IIJE,JK+IKL)>0.) + GTEST(:) = (PEMF(:,JK+IKL)>0.) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF !OENTR_DETR ! stop the updraft if MF becomes negative !$mnh_expand_where(JIJ=IIJB:IIJE) - WHERE (GTEST(IIJB:IIJE).AND.(PEMF(IIJB:IIJE,JK+IKL)<=0.)) - PEMF(IIJB:IIJE,JK+IKL)=0. - KKCTL(IIJB:IIJE) = JK+IKL - GTEST(IIJB:IIJE)=.FALSE. - PFRAC_ICE_UP(IIJB:IIJE,JK+IKL)=PFRAC_ICE_UP(IIJB:IIJE,JK) - PRSAT_UP(IIJB:IIJE,JK+IKL)=PRSAT_UP(IIJB:IIJE,JK) + WHERE (GTEST(:).AND.(PEMF(:,JK+IKL)<=0.)) + PEMF(:,JK+IKL)=0. + KKCTL(:) = JK+IKL + GTEST(:)=.FALSE. + PFRAC_ICE_UP(:,JK+IKL)=PFRAC_ICE_UP(:,JK) + PRSAT_UP(:,JK+IKL)=PRSAT_UP(:,JK) ENDWHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) @@ -535,34 +535,34 @@ DO JK=IKB,IKE-IKL,IKL IF(PARAMMF%LMIXUV) THEN IF(JK/=IKB) THEN !$mnh_expand_where(JIJ=IIJB:IIJE) - WHERE(GTEST(IIJB:IIJE)) - PU_UP(IIJB:IIJE,JK+IKL) = (PU_UP(IIJB:IIJE,JK)*(1-0.5*ZMIX2(IIJB:IIJE)) + & - &PUM(IIJB:IIJE,JK)*ZMIX2(IIJB:IIJE)+ & - 0.5*PARAMMF%XPRES_UV*(PZZ(IIJB:IIJE,JK+IKL)-PZZ(IIJB:IIJE,JK))*& - ((PUM(IIJB:IIJE,JK+IKL)-PUM(IIJB:IIJE,JK))/PDZZ(IIJB:IIJE,JK+IKL)+& - (PUM(IIJB:IIJE,JK)-PUM(IIJB:IIJE,JK-IKL))/PDZZ(IIJB:IIJE,JK)) ) & - /(1+0.5*ZMIX2(IIJB:IIJE)) - PV_UP(IIJB:IIJE,JK+IKL) = (PV_UP(IIJB:IIJE,JK)*(1-0.5*ZMIX2(IIJB:IIJE)) + & - &PVM(IIJB:IIJE,JK)*ZMIX2(IIJB:IIJE)+ & - 0.5*PARAMMF%XPRES_UV*(PZZ(IIJB:IIJE,JK+IKL)-PZZ(IIJB:IIJE,JK))*& - ((PVM(IIJB:IIJE,JK+IKL)-PVM(IIJB:IIJE,JK))/PDZZ(IIJB:IIJE,JK+IKL)+& - (PVM(IIJB:IIJE,JK)-PVM(IIJB:IIJE,JK-IKL))/PDZZ(IIJB:IIJE,JK)) ) & - /(1+0.5*ZMIX2(IIJB:IIJE)) + WHERE(GTEST(:)) + PU_UP(:,JK+IKL) = (PU_UP(:,JK)*(1-0.5*ZMIX2(:)) + & + &PUM(:,JK)*ZMIX2(:)+ & + 0.5*PARAMMF%XPRES_UV*(PZZ(:,JK+IKL)-PZZ(:,JK))*& + ((PUM(:,JK+IKL)-PUM(:,JK))/PDZZ(:,JK+IKL)+& + (PUM(:,JK)-PUM(:,JK-IKL))/PDZZ(:,JK)) ) & + /(1+0.5*ZMIX2(:)) + PV_UP(:,JK+IKL) = (PV_UP(:,JK)*(1-0.5*ZMIX2(:)) + & + &PVM(:,JK)*ZMIX2(:)+ & + 0.5*PARAMMF%XPRES_UV*(PZZ(:,JK+IKL)-PZZ(:,JK))*& + ((PVM(:,JK+IKL)-PVM(:,JK))/PDZZ(:,JK+IKL)+& + (PVM(:,JK)-PVM(:,JK-IKL))/PDZZ(:,JK)) ) & + /(1+0.5*ZMIX2(:)) ENDWHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) ELSE !$mnh_expand_where(JIJ=IIJB:IIJE) - WHERE(GTEST(IIJB:IIJE)) - PU_UP(IIJB:IIJE,JK+IKL) = (PU_UP(IIJB:IIJE,JK)*(1-0.5*ZMIX2(IIJB:IIJE)) + & - &PUM(IIJB:IIJE,JK)*ZMIX2(IIJB:IIJE)+ & - 0.5*PARAMMF%XPRES_UV*(PZZ(IIJB:IIJE,JK+IKL)-PZZ(IIJB:IIJE,JK))*& - ((PUM(IIJB:IIJE,JK+IKL)-PUM(IIJB:IIJE,JK))/PDZZ(IIJB:IIJE,JK+IKL)) ) & - /(1+0.5*ZMIX2(IIJB:IIJE)) - PV_UP(IIJB:IIJE,JK+IKL) = (PV_UP(IIJB:IIJE,JK)*(1-0.5*ZMIX2(IIJB:IIJE)) + & - &PVM(IIJB:IIJE,JK)*ZMIX2(IIJB:IIJE)+ & - 0.5*PARAMMF%XPRES_UV*(PZZ(IIJB:IIJE,JK+IKL)-PZZ(IIJB:IIJE,JK))*& - ((PVM(IIJB:IIJE,JK+IKL)-PVM(IIJB:IIJE,JK))/PDZZ(IIJB:IIJE,JK+IKL)) ) & - /(1+0.5*ZMIX2(IIJB:IIJE)) + WHERE(GTEST(:)) + PU_UP(:,JK+IKL) = (PU_UP(:,JK)*(1-0.5*ZMIX2(:)) + & + &PUM(:,JK)*ZMIX2(:)+ & + 0.5*PARAMMF%XPRES_UV*(PZZ(:,JK+IKL)-PZZ(:,JK))*& + ((PUM(:,JK+IKL)-PUM(:,JK))/PDZZ(:,JK+IKL)) ) & + /(1+0.5*ZMIX2(:)) + PV_UP(:,JK+IKL) = (PV_UP(:,JK)*(1-0.5*ZMIX2(:)) + & + &PVM(:,JK)*ZMIX2(:)+ & + 0.5*PARAMMF%XPRES_UV*(PZZ(:,JK+IKL)-PZZ(:,JK))*& + ((PVM(:,JK+IKL)-PVM(:,JK))/PDZZ(:,JK+IKL)) ) & + /(1+0.5*ZMIX2(:)) ENDWHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) ENDIF @@ -570,9 +570,9 @@ DO JK=IKB,IKE-IKL,IKL DO JSV=1,KSV IF (ONOMIXLG .AND. JSV >= KSV_LGBEG .AND. JSV<= KSV_LGEND) CYCLE !$mnh_expand_where(JIJ=IIJB:IIJE) - WHERE(GTEST(IIJB:IIJE)) - PSV_UP(IIJB:IIJE,JK+IKL,JSV) = (PSV_UP(IIJB:IIJE,JK,JSV)*(1-0.5*ZMIX2(IIJB:IIJE)) + & - PSVM(IIJB:IIJE,JK,JSV)*ZMIX2(IIJB:IIJE)) /(1+0.5*ZMIX2(IIJB:IIJE)) + WHERE(GTEST(:)) + PSV_UP(:,JK+IKL,JSV) = (PSV_UP(:,JK,JSV)*(1-0.5*ZMIX2(:)) + & + PSVM(:,JK,JSV)*ZMIX2(:)) /(1+0.5*ZMIX2(:)) ENDWHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) END DO @@ -581,81 +581,81 @@ DO JK=IKB,IKE-IKL,IKL ! Compute non cons. var. at level JK+KKL !$mnh_expand_array(JIJ=IIJB:IIJE) - ZRC_UP(IIJB:IIJE)=PRC_UP(IIJB:IIJE,JK) ! guess = level just below - ZRI_UP(IIJB:IIJE)=PRI_UP(IIJB:IIJE,JK) ! guess = level just below + ZRC_UP(:)=PRC_UP(:,JK) ! guess = level just below + ZRI_UP(:)=PRI_UP(:,JK) ! guess = level just below !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL TH_R_FROM_THL_RT(CST, NEB, D%NIJT, HFRAC_ICE,PFRAC_ICE_UP(:,JK+IKL),ZPRES_F(:,JK+IKL), & PTHL_UP(:,JK+IKL),PRT_UP(:,JK+IKL),ZTH_UP(:,JK+IKL), & ZRV_UP(:),ZRC_UP(:),ZRI_UP(:),ZRSATW(:),ZRSATI(:), OOCEAN=.FALSE., & PBUF=ZBUF(:,:), KB=D%NIJB, KE=D%NIJE) !$mnh_expand_where(JIJ=IIJB:IIJE) - WHERE(GTEST(IIJB:IIJE)) - PRC_UP(IIJB:IIJE,JK+IKL)=ZRC_UP(IIJB:IIJE) - PRV_UP(IIJB:IIJE,JK+IKL)=ZRV_UP(IIJB:IIJE) - PRI_UP(IIJB:IIJE,JK+IKL)=ZRI_UP(IIJB:IIJE) - PRSAT_UP(IIJB:IIJE,JK+IKL) = ZRSATW(IIJB:IIJE)*(1-PFRAC_ICE_UP(IIJB:IIJE,JK+IKL)) + & - & ZRSATI(IIJB:IIJE)*PFRAC_ICE_UP(IIJB:IIJE,JK+IKL) + WHERE(GTEST(:)) + PRC_UP(:,JK+IKL)=ZRC_UP(:) + PRV_UP(:,JK+IKL)=ZRV_UP(:) + PRI_UP(:,JK+IKL)=ZRI_UP(:) + PRSAT_UP(:,JK+IKL) = ZRSATW(:)*(1-PFRAC_ICE_UP(:,JK+IKL)) + & + & ZRSATI(:)*PFRAC_ICE_UP(:,JK+IKL) ENDWHERE ! Compute the updraft theta_v, buoyancy and w**2 for level JK+KKL - WHERE(GTEST(IIJB:IIJE)) - PTHV_UP(IIJB:IIJE,JK+IKL) = ZTH_UP(IIJB:IIJE,JK+IKL)* & - & ((1+ZRVORD*PRV_UP(IIJB:IIJE,JK+IKL))/(1+PRT_UP(IIJB:IIJE,JK+IKL))) - WHERE (ZBUO_INTEG_DRY(IIJB:IIJE,JK)>0.) - ZW_UP2(IIJB:IIJE,JK+IKL) = ZW_UP2(IIJB:IIJE,JK) + 2.*(PARAMMF%XABUO-PARAMMF%XBENTR*PARAMMF%XENTR_DRY)* & - &ZBUO_INTEG_DRY(IIJB:IIJE,JK) + WHERE(GTEST(:)) + PTHV_UP(:,JK+IKL) = ZTH_UP(:,JK+IKL)* & + & ((1+ZRVORD*PRV_UP(:,JK+IKL))/(1+PRT_UP(:,JK+IKL))) + WHERE (ZBUO_INTEG_DRY(:,JK)>0.) + ZW_UP2(:,JK+IKL) = ZW_UP2(:,JK) + 2.*(PARAMMF%XABUO-PARAMMF%XBENTR*PARAMMF%XENTR_DRY)* & + &ZBUO_INTEG_DRY(:,JK) ELSEWHERE - ZW_UP2(IIJB:IIJE,JK+IKL) = ZW_UP2(IIJB:IIJE,JK) + 2.*PARAMMF%XABUO* ZBUO_INTEG_DRY(IIJB:IIJE,JK) + ZW_UP2(:,JK+IKL) = ZW_UP2(:,JK) + 2.*PARAMMF%XABUO* ZBUO_INTEG_DRY(:,JK) ENDWHERE - ZW_UP2(IIJB:IIJE,JK+IKL) = ZW_UP2(IIJB:IIJE,JK+IKL)*(1.-(PARAMMF%XBDETR*ZMIX3_CLD(IIJB:IIJE)+ & - &PARAMMF%XBENTR*ZMIX2_CLD(IIJB:IIJE)))& - /(1.+(PARAMMF%XBDETR*ZMIX3_CLD(IIJB:IIJE)+PARAMMF%XBENTR*ZMIX2_CLD(IIJB:IIJE))) & - +2.*(PARAMMF%XABUO)*ZBUO_INTEG_CLD(IIJB:IIJE,JK)/ & - &(1.+(PARAMMF%XBDETR*ZMIX3_CLD(IIJB:IIJE)+PARAMMF%XBENTR*ZMIX2_CLD(IIJB:IIJE))) + ZW_UP2(:,JK+IKL) = ZW_UP2(:,JK+IKL)*(1.-(PARAMMF%XBDETR*ZMIX3_CLD(:)+ & + &PARAMMF%XBENTR*ZMIX2_CLD(:)))& + /(1.+(PARAMMF%XBDETR*ZMIX3_CLD(:)+PARAMMF%XBENTR*ZMIX2_CLD(:))) & + +2.*(PARAMMF%XABUO)*ZBUO_INTEG_CLD(:,JK)/ & + &(1.+(PARAMMF%XBDETR*ZMIX3_CLD(:)+PARAMMF%XBENTR*ZMIX2_CLD(:))) ENDWHERE ! Test if the updraft has reach the ETL - WHERE (GTEST(IIJB:IIJE).AND.(PBUO_INTEG(IIJB:IIJE,JK)<=0.)) - KKETL(IIJB:IIJE) = JK+IKL - GTESTETL(IIJB:IIJE)=.TRUE. + WHERE (GTEST(:).AND.(PBUO_INTEG(:,JK)<=0.)) + KKETL(:) = JK+IKL + GTESTETL(:)=.TRUE. ELSEWHERE - GTESTETL(IIJB:IIJE)=.FALSE. + GTESTETL(:)=.FALSE. ENDWHERE ! Test is we have reached the top of the updraft - WHERE (GTEST(IIJB:IIJE).AND.((ZW_UP2(IIJB:IIJE,JK+IKL)<=0.).OR.(PEMF(IIJB:IIJE,JK+IKL)<=0.))) - ZW_UP2(IIJB:IIJE,JK+IKL)=0. - PEMF(IIJB:IIJE,JK+IKL)=0. - GTEST(IIJB:IIJE)=.FALSE. - PTHL_UP(IIJB:IIJE,JK+IKL)=ZTHLM_F(IIJB:IIJE,JK+IKL) - PRT_UP(IIJB:IIJE,JK+IKL)=ZRTM_F(IIJB:IIJE,JK+IKL) - PRC_UP(IIJB:IIJE,JK+IKL)=0. - PRI_UP(IIJB:IIJE,JK+IKL)=0. - PRV_UP(IIJB:IIJE,JK+IKL)=0. - PTHV_UP(IIJB:IIJE,JK+IKL)=ZTHVM_F(IIJB:IIJE,JK+IKL) - PFRAC_UP(IIJB:IIJE,JK+IKL)=0. - KKCTL(IIJB:IIJE)=JK+IKL + WHERE (GTEST(:).AND.((ZW_UP2(:,JK+IKL)<=0.).OR.(PEMF(:,JK+IKL)<=0.))) + ZW_UP2(:,JK+IKL)=0. + PEMF(:,JK+IKL)=0. + GTEST(:)=.FALSE. + PTHL_UP(:,JK+IKL)=ZTHLM_F(:,JK+IKL) + PRT_UP(:,JK+IKL)=ZRTM_F(:,JK+IKL) + PRC_UP(:,JK+IKL)=0. + PRI_UP(:,JK+IKL)=0. + PRV_UP(:,JK+IKL)=0. + PTHV_UP(:,JK+IKL)=ZTHVM_F(:,JK+IKL) + PFRAC_UP(:,JK+IKL)=0. + KKCTL(:)=JK+IKL ENDWHERE ! compute frac_up at JK+KKL - WHERE (GTEST(IIJB:IIJE)) - PFRAC_UP(IIJB:IIJE,JK+IKL)=PEMF(IIJB:IIJE,JK+IKL)/& - &(SQRT(ZW_UP2(IIJB:IIJE,JK+IKL))*ZRHO_F(IIJB:IIJE,JK+IKL)) + WHERE (GTEST(:)) + PFRAC_UP(:,JK+IKL)=PEMF(:,JK+IKL)/& + &(SQRT(ZW_UP2(:,JK+IKL))*ZRHO_F(:,JK+IKL)) ENDWHERE ! Updraft fraction must be smaller than XFRAC_UP_MAX - WHERE (GTEST(IIJB:IIJE)) - PFRAC_UP(IIJB:IIJE,JK+IKL)=MIN(PARAMMF%XFRAC_UP_MAX,PFRAC_UP(IIJB:IIJE,JK+IKL)) + WHERE (GTEST(:)) + PFRAC_UP(:,JK+IKL)=MIN(PARAMMF%XFRAC_UP_MAX,PFRAC_UP(:,JK+IKL)) ENDWHERE ! When cloudy and non-buoyant, updraft fraction must decrease - WHERE ((GTEST(IIJB:IIJE).AND.GTESTETL(IIJB:IIJE)).AND.GTESTLCL(IIJB:IIJE)) - PFRAC_UP(IIJB:IIJE,JK+IKL)=MIN(PFRAC_UP(IIJB:IIJE,JK+IKL),PFRAC_UP(IIJB:IIJE,JK)) + WHERE ((GTEST(:).AND.GTESTETL(:)).AND.GTESTLCL(:)) + PFRAC_UP(:,JK+IKL)=MIN(PFRAC_UP(:,JK+IKL),PFRAC_UP(:,JK)) ENDWHERE ! Mass flux is updated with the new updraft fraction - IF (OENTR_DETR) PEMF(IIJB:IIJE,JK+IKL)=PFRAC_UP(IIJB:IIJE,JK+IKL)*SQRT(ZW_UP2(IIJB:IIJE,JK+IKL))* & - &ZRHO_F(IIJB:IIJE,JK+IKL) + IF (OENTR_DETR) PEMF(:,JK+IKL)=PFRAC_UP(:,JK+IKL)*SQRT(ZW_UP2(:,JK+IKL))* & + &ZRHO_F(:,JK+IKL) !$mnh_end_expand_where(JIJ=IIJB:IIJE) END IF !OENTR_DETR @@ -664,11 +664,11 @@ ENDDO IF(OENTR_DETR) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PW_UP(IIJB:IIJE,1:IKT)=SQRT(ZW_UP2(IIJB:IIJE,1:IKT)) + PW_UP(:,:)=SQRT(ZW_UP2(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) !$mnh_expand_array(JIJ=IIJB:IIJE) - PEMF(IIJB:IIJE,IKB) =0. + PEMF(:,IKB) =0. !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! Limits the shallow convection scheme when cloud heigth is higher than 3000m. @@ -682,19 +682,19 @@ IF(OENTR_DETR) THEN END DO !$mnh_expand_array(JIJ=IIJB:IIJE) - GWORK1(IIJB:IIJE)= (GTESTLCL(IIJB:IIJE) .AND. (PDEPTH(IIJB:IIJE) > ZDEPTH_MAX1) ) + GWORK1(:)= (GTESTLCL(:) .AND. (PDEPTH(:) > ZDEPTH_MAX1) ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) DO JK=1,IKT !$mnh_expand_array(JIJ=IIJB:IIJE) - GWORK2(IIJB:IIJE,JK) = GWORK1(IIJB:IIJE) - ZCOEF(IIJB:IIJE,JK) = (1.-(PDEPTH(IIJB:IIJE)-ZDEPTH_MAX1)/(ZDEPTH_MAX2-ZDEPTH_MAX1)) - ZCOEF(IIJB:IIJE,JK)=MIN(MAX(ZCOEF(IIJB:IIJE,JK),0.),1.) + GWORK2(:,JK) = GWORK1(:) + ZCOEF(:,JK) = (1.-(PDEPTH(:)-ZDEPTH_MAX1)/(ZDEPTH_MAX2-ZDEPTH_MAX1)) + ZCOEF(:,JK)=MIN(MAX(ZCOEF(:,JK),0.),1.) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ENDDO !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) - WHERE (GWORK2(IIJB:IIJE,1:IKT)) - PEMF(IIJB:IIJE,1:IKT) = PEMF(IIJB:IIJE,1:IKT) * ZCOEF(IIJB:IIJE,1:IKT) - PFRAC_UP(IIJB:IIJE,1:IKT) = PFRAC_UP(IIJB:IIJE,1:IKT) * ZCOEF(IIJB:IIJE,1:IKT) + WHERE (GWORK2(:,:)) + PEMF(:,:) = PEMF(:,:) * ZCOEF(:,:) + PFRAC_UP(:,:) = PFRAC_UP(:,:) * ZCOEF(:,:) ENDWHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) ENDIF @@ -837,11 +837,11 @@ REAL, DIMENSION(D%NIJT), INTENT(OUT) :: PPART_DRY ! ratio of dry part at t ZCOEFFMF_CLOUD=PARAMMF%XENTR_MF * CST%XG / PARAMMF%XCRAD_MF !$mnh_expand_array(JIJ=IIJB:IIJE) -ZG_O_THVREF_ED(IIJB:IIJE)=CST%XG/PTHVM(IIJB:IIJE,KK) +ZG_O_THVREF_ED(:)=CST%XG/PTHVM(:,KK) -ZFRAC_ICE(IIJB:IIJE)=PFRAC_ICE(IIJB:IIJE) ! to not modify fraction of ice +ZFRAC_ICE(:)=PFRAC_ICE(:) ! to not modify fraction of ice -ZPRE(IIJB:IIJE)=PPRE_MINUS_HALF(IIJB:IIJE) +ZPRE(:)=PPRE_MINUS_HALF(:) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! 1.4 Estimation of PPART_DRY @@ -880,16 +880,16 @@ END DO ! 1.5 Gradient and flux values of thetav !$mnh_expand_array(JIJ=IIJB:IIJE) IF(KK/=KKB)THEN - ZCOEFF_MINUS_HALF(IIJB:IIJE)=((PTHVM(IIJB:IIJE,KK)-PTHVM(IIJB:IIJE,KK-KKL))/PDZZ(IIJB:IIJE,KK)) - ZTHV_MINUS_HALF(IIJB:IIJE) = PTHVM(IIJB:IIJE,KK) - & - & ZCOEFF_MINUS_HALF(IIJB:IIJE)*0.5*(PZZ(IIJB:IIJE,KK+KKL)-PZZ(IIJB:IIJE,KK)) + ZCOEFF_MINUS_HALF(:)=((PTHVM(:,KK)-PTHVM(:,KK-KKL))/PDZZ(:,KK)) + ZTHV_MINUS_HALF(:) = PTHVM(:,KK) - & + & ZCOEFF_MINUS_HALF(:)*0.5*(PZZ(:,KK+KKL)-PZZ(:,KK)) ELSE - ZCOEFF_MINUS_HALF(IIJB:IIJE)=0. - ZTHV_MINUS_HALF(IIJB:IIJE) = PTHVM(IIJB:IIJE,KK) + ZCOEFF_MINUS_HALF(:)=0. + ZTHV_MINUS_HALF(:) = PTHVM(:,KK) ENDIF -ZCOEFF_PLUS_HALF(IIJB:IIJE) = ((PTHVM(IIJB:IIJE,KK+KKL)-PTHVM(IIJB:IIJE,KK))/PDZZ(IIJB:IIJE,KK+KKL)) -ZTHV_PLUS_HALF(IIJB:IIJE) = PTHVM(IIJB:IIJE,KK) + & - & ZCOEFF_PLUS_HALF(IIJB:IIJE)*0.5*(PZZ(IIJB:IIJE,KK+KKL)-PZZ(IIJB:IIJE,KK)) +ZCOEFF_PLUS_HALF(:) = ((PTHVM(:,KK+KKL)-PTHVM(:,KK))/PDZZ(:,KK+KKL)) +ZTHV_PLUS_HALF(:) = PTHVM(:,KK) + & + & ZCOEFF_PLUS_HALF(:)*0.5*(PZZ(:,KK+KKL)-PZZ(:,KK)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! 2 Dry part computation: @@ -946,8 +946,8 @@ ENDDO !MIX variables are used to avoid declaring new variables !but we are dealing with updraft and not mixture !$mnh_expand_array(JIJ=IIJB:IIJE) -ZRCMIX(IIJB:IIJE)=PRC_UP(IIJB:IIJE) -ZRIMIX(IIJB:IIJE)=PRI_UP(IIJB:IIJE) +ZRCMIX(:)=PRC_UP(:) +ZRIMIX(:)=PRI_UP(:) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL TH_R_FROM_THL_RT(CST,NEB,D%NIJT,HFRAC_ICE,ZFRAC_ICE,& PPRE_PLUS_HALF,PTHL_UP,PRT_UP,& @@ -955,7 +955,7 @@ CALL TH_R_FROM_THL_RT(CST,NEB,D%NIJT,HFRAC_ICE,ZFRAC_ICE,& ZRSATW_ED, ZRSATI_ED,OOCEAN=.FALSE.,& PBUF=ZBUF, KB=D%NIJB, KE=D%NIJE) !$mnh_expand_array(JIJ=IIJB:IIJE) -ZTHV_UP_F2(IIJB:IIJE) = ZTHMIX(IIJB:IIJE)*(1.+ZRVORD*ZRVMIX(IIJB:IIJE))/(1.+PRT_UP(IIJB:IIJE)) +ZTHV_UP_F2(:) = ZTHMIX(:)*(1.+ZRVORD*ZRVMIX(:))/(1.+PRT_UP(:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! Integral buoyancy for cloudy part @@ -1021,11 +1021,7 @@ DO JIJ=IIJB,IIJE (PRTM(JIJ,KK)-ZDZ*(PRTM(JIJ,KK)-PRTM(JIJ,JKLIM))/PDZZ(JIJ,KK)) + & (1. - ZKIC_INIT)*PRT_UP(JIJ) ELSE -#ifdef REPRO55 - ZMIXTHL(JIJ) = 0.1 -#else ZMIXTHL(JIJ) = 300. -#endif ZMIXRT(JIJ) = 0.1 ENDIF ENDDO @@ -1035,13 +1031,13 @@ CALL TH_R_FROM_THL_RT(CST,NEB,D%NIJT,HFRAC_ICE,ZFRAC_ICE,& ZRSATW_ED, ZRSATI_ED,OOCEAN=.FALSE.,& PBUF=ZBUF, KB=D%NIJB, KE=D%NIJE) !$mnh_expand_array(JIJ=IIJB:IIJE) -ZTHVMIX(IIJB:IIJE) = ZTHMIX(IIJB:IIJE)*(1.+ZRVORD*ZRVMIX(IIJB:IIJE))/(1.+ZMIXRT(IIJB:IIJE)) +ZTHVMIX(:) = ZTHMIX(:)*(1.+ZRVORD*ZRVMIX(:))/(1.+ZMIXRT(:)) ! Compute cons then non cons. var. of mixture at the flux level KK+KKL with initial ZKIC -ZMIXTHL(IIJB:IIJE) = ZKIC_INIT * 0.5*(PTHLM(IIJB:IIJE,KK)+PTHLM(IIJB:IIJE,KK+KKL))+& - & (1. - ZKIC_INIT)*PTHL_UP(IIJB:IIJE) -ZMIXRT(IIJB:IIJE) = ZKIC_INIT * 0.5*(PRTM(IIJB:IIJE,KK)+PRTM(IIJB:IIJE,KK+KKL))+& - & (1. - ZKIC_INIT)*PRT_UP(IIJB:IIJE) +ZMIXTHL(:) = ZKIC_INIT * 0.5*(PTHLM(:,KK)+PTHLM(:,KK+KKL))+& + & (1. - ZKIC_INIT)*PTHL_UP(:) +ZMIXRT(:) = ZKIC_INIT * 0.5*(PRTM(:,KK)+PRTM(:,KK+KKL))+& + & (1. - ZKIC_INIT)*PRT_UP(:) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL TH_R_FROM_THL_RT(CST,NEB,D%NIJT,HFRAC_ICE,ZFRAC_ICE,& PPRE_PLUS_HALF,ZMIXTHL,ZMIXRT,& @@ -1049,7 +1045,7 @@ CALL TH_R_FROM_THL_RT(CST,NEB,D%NIJT,HFRAC_ICE,ZFRAC_ICE,& ZRSATW_ED, ZRSATI_ED,OOCEAN=.FALSE.,& PBUF=ZBUF, KB=D%NIJB, KE=D%NIJE) !$mnh_expand_array(JIJ=IIJB:IIJE) -ZTHVMIX_F2(IIJB:IIJE) = ZTHMIX(IIJB:IIJE)*(1.+ZRVORD*ZRVMIX(IIJB:IIJE))/(1.+ZMIXRT(IIJB:IIJE)) +ZTHVMIX_F2(:) = ZTHMIX(:)*(1.+ZRVORD*ZRVMIX(:))/(1.+ZMIXRT(:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) !Computation of mean ZKIC over the cloudy part @@ -1093,14 +1089,14 @@ ENDDO !Calculus must be verified before activating this part, but in this state, !results on ARM case are almost identical !For this PDF, eq. (5) is also delta Me=0.5*delta Mt -!WHERE(OTEST(IIJB:IIJE)) +!WHERE(OTEST(:)) ! !Integration multiplied by 2 ! WHERE(ZKIC<0.5) -! ZEPSI(IIJB:IIJE)=8.*ZKIC(IIJB:IIJE)**3/3. -! ZDELTA(IIJB:IIJE)=1.-4.*ZKIC(IIJB:IIJE)**2+8.*ZKIC(IIJB:IIJE)**3/3. +! ZEPSI(:)=8.*ZKIC(:)**3/3. +! ZDELTA(:)=1.-4.*ZKIC(:)**2+8.*ZKIC(:)**3/3. ! ELSEWHERE -! ZEPSI(IIJB:IIJE)=5./3.-4*ZKIC(IIJB:IIJE)**2+8.*ZKIC(IIJB:IIJE)**3/3. -! ZDELTA(IIJB:IIJE)=8.*(1.-ZKIC(IIJB:IIJE))**3/3. +! ZEPSI(:)=5./3.-4*ZKIC(:)**2+8.*ZKIC(:)**3/3. +! ZDELTA(:)=8.*(1.-ZKIC(:))**3/3. ! ENDWHERE !ENDWHERE diff --git a/src/PHYEX/turb/mode_compute_updraft_raha.f90 b/src/PHYEX/turb/mode_compute_updraft_raha.f90 index 042afa8ffb717fd0f20f8cca318a6d38c9b49054..b8b4969997b0f412ee8b5c3859d419fa4893f3c0 100644 --- a/src/PHYEX/turb/mode_compute_updraft_raha.f90 +++ b/src/PHYEX/turb/mode_compute_updraft_raha.f90 @@ -245,7 +245,7 @@ ZBUO(:,:) =0. PRI_UP(:,:)=0. PFRAC_ICE_UP(:,:)=0. !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PRSAT_UP(IIJB:IIJE,1:IKT)=PRVM(IIJB:IIJE,1:IKT) ! should be initialised correctly but is (normaly) not used +PRSAT_UP(:,:)=PRVM(:,:) ! should be initialised correctly but is (normaly) not used !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! Initialisation of environment variables at t-dt @@ -259,33 +259,33 @@ CALL MZM_MF(D, PTKEM(:,:), ZTKEM_F(:,:)) !DO JSV=1,ISV ! IF (ONOMIXLG .AND. JSV >= KSV_LGBEG .AND. JSV<= KSV_LGEND) CYCLE -! ZSVM_F(IIJB:IIJE,KKB:IKU,JSV) = 0.5*(PSVM(IIJB:IIJE,KKB:IKU,JSV)+PSVM(IIJB:IIJE,1:IKU-1,JSV)) -! ZSVM_F(IIJB:IIJE,1,JSV) = ZSVM_F(IIJB:IIJE,KKB,JSV) +! ZSVM_F(:,KKB:IKU,JSV) = 0.5*(PSVM(:,KKB:IKU,JSV)+PSVM(:,1:IKU-1,JSV)) +! ZSVM_F(:,1,JSV) = ZSVM_F(:,KKB,JSV) !END DO ! Initialisation of updraft characteristics !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PTHL_UP(IIJB:IIJE,1:IKT)=ZTHLM_F(IIJB:IIJE,1:IKT) -PRT_UP(IIJB:IIJE,1:IKT)=ZRTM_F(IIJB:IIJE,1:IKT) -PU_UP(IIJB:IIJE,1:IKT)=ZUM_F(IIJB:IIJE,1:IKT) -PV_UP(IIJB:IIJE,1:IKT)=ZVM_F(IIJB:IIJE,1:IKT) +PTHL_UP(:,:)=ZTHLM_F(:,:) +PRT_UP(:,:)=ZRTM_F(:,:) +PU_UP(:,:)=ZUM_F(:,:) +PV_UP(:,:)=ZVM_F(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) PSV_UP(:,:,:)=0. !IF (ONOMIXLG .AND. JSV >= KSV_LGBEG .AND. JSV<= KSV_LGEND) then -! PSV_UP(IIJB:IIJE,:,:)=ZSVM_F(IIJB:IIJE,:,:) +! PSV_UP(:,:,:)=ZSVM_F(:,:,:) !ENDIF ! Computation or initialisation of updraft characteristics at the KKB level ! thetal_up,rt_up,thetaV_up, w�,Buoyancy term and mass flux (PEMF) !$mnh_expand_array(JIJ=IIJB:IIJE) -PTHL_UP(IIJB:IIJE,IKB)= ZTHLM_F(IIJB:IIJE,IKB)+ & - & MAX(0.,MIN(ZTMAX,(PSFTH(IIJB:IIJE)/SQRT(ZTKEM_F(IIJB:IIJE,IKB)))*PARAMMF%XALP_PERT)) -PRT_UP(IIJB:IIJE,IKB) = ZRTM_F(IIJB:IIJE,IKB)+ & - & MAX(0.,MIN(ZRMAX,(PSFRV(IIJB:IIJE)/SQRT(ZTKEM_F(IIJB:IIJE,IKB)))*PARAMMF%XALP_PERT)) +PTHL_UP(:,IKB)= ZTHLM_F(:,IKB)+ & + & MAX(0.,MIN(ZTMAX,(PSFTH(:)/SQRT(ZTKEM_F(:,IKB)))*PARAMMF%XALP_PERT)) +PRT_UP(:,IKB) = ZRTM_F(:,IKB)+ & + & MAX(0.,MIN(ZRMAX,(PSFRV(:)/SQRT(ZTKEM_F(:,IKB)))*PARAMMF%XALP_PERT)) -ZQT_UP(IIJB:IIJE) = PRT_UP(IIJB:IIJE,IKB)/(1.+PRT_UP(IIJB:IIJE,IKB)) -ZTHS_UP(IIJB:IIJE,IKB)=PTHL_UP(IIJB:IIJE,IKB)*(1.+PARAMMF%XLAMBDA_MF*ZQT_UP(IIJB:IIJE)) +ZQT_UP(:) = PRT_UP(:,IKB)/(1.+PRT_UP(:,IKB)) +ZTHS_UP(:,IKB)=PTHL_UP(:,IKB)*(1.+PARAMMF%XLAMBDA_MF*ZQT_UP(:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL MZM_MF(D, PTHM (:,:), ZTHM_F(:,:)) @@ -295,25 +295,25 @@ CALL MZM_MF(D, PRVM(:,:), ZRVM_F(:,:)) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! thetav at mass and flux levels -ZTHVM_F(IIJB:IIJE,1:IKT)=ZTHM_F(IIJB:IIJE,1:IKT)*((1.+ZRVORD*ZRVM_F(IIJB:IIJE,1:IKT))/& - &(1.+ZRTM_F(IIJB:IIJE,1:IKT))) -ZTHVM(IIJB:IIJE,1:IKT)=PTHM(IIJB:IIJE,1:IKT)*((1.+ZRVORD*PRVM(IIJB:IIJE,1:IKT))/(1.+PRTM(IIJB:IIJE,1:IKT))) +ZTHVM_F(:,:)=ZTHM_F(:,:)*((1.+ZRVORD*ZRVM_F(:,:))/& + &(1.+ZRTM_F(:,:))) +ZTHVM(:,:)=PTHM(:,:)*((1.+ZRVORD*PRVM(:,:))/(1.+PRTM(:,:))) -PTHV_UP(IIJB:IIJE,1:IKT)= ZTHVM_F(IIJB:IIJE,1:IKT) -PRV_UP(IIJB:IIJE,1:IKT) = ZRVM_F(IIJB:IIJE,1:IKT) +PTHV_UP(:,:)= ZTHVM_F(:,:) +PRV_UP(:,:) = ZRVM_F(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ZW_UP2(:,:)=ZEPS !$mnh_expand_array(JIJ=IIJB:IIJE) -ZW_UP2(IIJB:IIJE,IKB) = MAX(0.0001,(1./6.)*ZTKEM_F(IIJB:IIJE,IKB)) -GTEST(IIJB:IIJE) = (ZW_UP2(IIJB:IIJE,IKB) > ZEPS) +ZW_UP2(:,IKB) = MAX(0.0001,(1./6.)*ZTKEM_F(:,IKB)) +GTEST(:) = (ZW_UP2(:,IKB) > ZEPS) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! Computation of non conservative variable for the KKB level of the updraft ! (all or nothing ajustement) !$mnh_expand_array(JIJ=IIJB:IIJE) -PRC_UP(IIJB:IIJE,IKB)=0. -PRI_UP(IIJB:IIJE,IKB)=0. +PRC_UP(:,IKB)=0. +PRI_UP(:,IKB)=0. !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL TH_R_FROM_THL_RT(CST, NEB, D%NIJT, HFRAC_ICE,PFRAC_ICE_UP(:,IKB),ZPRES_F(:,IKB), & @@ -323,16 +323,16 @@ CALL TH_R_FROM_THL_RT(CST, NEB, D%NIJT, HFRAC_ICE,PFRAC_ICE_UP(:,IKB),ZPRES_F(:, !$mnh_expand_array(JIJ=IIJB:IIJE) ! compute updraft thevav and buoyancy term at KKB level -PTHV_UP(IIJB:IIJE,IKB) = ZTH_UP(IIJB:IIJE,IKB)*((1+ZRVORD*PRV_UP(IIJB:IIJE,IKB))/(1+PRT_UP(IIJB:IIJE,IKB))) +PTHV_UP(:,IKB) = ZTH_UP(:,IKB)*((1+ZRVORD*PRV_UP(:,IKB))/(1+PRT_UP(:,IKB))) ! compute mean rsat in updraft -PRSAT_UP(IIJB:IIJE,IKB) = ZRSATW(IIJB:IIJE)*(1-PFRAC_ICE_UP(IIJB:IIJE,IKB)) + & - & ZRSATI(IIJB:IIJE)*PFRAC_ICE_UP(IIJB:IIJE,IKB) +PRSAT_UP(:,IKB) = ZRSATW(:)*(1-PFRAC_ICE_UP(:,IKB)) + & + & ZRSATI(:)*PFRAC_ICE_UP(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) !Tout est commente pour tester dans un premier temps la s�paration en deux de la ! boucle verticale, une pour w et une pour PEMF !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZG_O_THVREF(IIJB:IIJE,1:IKT)=CST%XG/ZTHVM_F(IIJB:IIJE,1:IKT) +ZG_O_THVREF(:,:)=CST%XG/ZTHVM_F(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! Definition de l'alimentation au sens de la fermeture de Hourdin et al @@ -343,15 +343,15 @@ IALIM(:) = IKB ! <== Top level of the alimentation layer DO JK=IKB,IKE-IKL,IKL ! Vertical loop !$mnh_expand_where(JIJ=IIJB:IIJE) - ZZDZ(IIJB:IIJE,JK) = MAX(ZEPS,PZZ(IIJB:IIJE,JK+IKL)-PZZ(IIJB:IIJE,JK)) ! <== Delta Z between two flux level - ZZZ(IIJB:IIJE,JK) = MAX(0.,0.5*(PZZ(IIJB:IIJE,JK+IKL)+PZZ(IIJB:IIJE,JK)) ) ! <== Hight of mass levels - ZDTHETASDZ(IIJB:IIJE,JK) = (ZTHVM_F(IIJB:IIJE,JK)-ZTHVM_F(IIJB:IIJE,JK+IKL)) ! <== Delta theta_v + ZZDZ(:,JK) = MAX(ZEPS,PZZ(:,JK+IKL)-PZZ(:,JK)) ! <== Delta Z between two flux level + ZZZ(:,JK) = MAX(0.,0.5*(PZZ(:,JK+IKL)+PZZ(:,JK)) ) ! <== Hight of mass levels + ZDTHETASDZ(:,JK) = (ZTHVM_F(:,JK)-ZTHVM_F(:,JK+IKL)) ! <== Delta theta_v - WHERE ((ZTHVM_F(IIJB:IIJE,JK+IKL)<ZTHVM_F(IIJB:IIJE,JK)) .AND. & - &(ZTHVM_F(IIJB:IIJE,IKB)>=ZTHVM_F(IIJB:IIJE,JK))) - ZALIM_STAR(IIJB:IIJE,JK) = SQRT(ZZZ(IIJB:IIJE,JK))*ZDTHETASDZ(IIJB:IIJE,JK)/ZZDZ(IIJB:IIJE,JK) - ZALIM_STAR_TOT(IIJB:IIJE) = ZALIM_STAR_TOT(IIJB:IIJE)+ZALIM_STAR(IIJB:IIJE,JK)*ZZDZ(IIJB:IIJE,JK) - IALIM(IIJB:IIJE) = JK + WHERE ((ZTHVM_F(:,JK+IKL)<ZTHVM_F(:,JK)) .AND. & + &(ZTHVM_F(:,IKB)>=ZTHVM_F(:,JK))) + ZALIM_STAR(:,JK) = SQRT(ZZZ(:,JK))*ZDTHETASDZ(:,JK)/ZZDZ(:,JK) + ZALIM_STAR_TOT(:) = ZALIM_STAR_TOT(:)+ZALIM_STAR(:,JK)*ZZDZ(:,JK) + IALIM(:) = JK ENDWHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) ENDDO @@ -359,8 +359,8 @@ ENDDO ! Normalization of ZALIM_STAR DO JK=IKB,IKE-IKL,IKL ! Vertical loop !$mnh_expand_where(JIJ=IIJB:IIJE) - WHERE (ZALIM_STAR_TOT(IIJB:IIJE) > ZEPS) - ZALIM_STAR(IIJB:IIJE,JK) = ZALIM_STAR(IIJB:IIJE,JK)/ZALIM_STAR_TOT(IIJB:IIJE) + WHERE (ZALIM_STAR_TOT(:) > ZEPS) + ZALIM_STAR(:,JK) = ZALIM_STAR(:,JK)/ZALIM_STAR_TOT(:) ENDWHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) ENDDO @@ -392,16 +392,16 @@ DO JK=IKB,IKE-IKL,IKL !$mnh_expand_where(JIJ=IIJB:IIJE) ! IF the updraft top is reached for all column, stop the loop on levels - !ITEST=COUNT(GTEST(IIJB:IIJE)) + !ITEST=COUNT(GTEST(:)) !IF (ITEST==0) CYCLE ! Computation of entrainment and detrainment with KF90 ! parameterization in clouds and LR01 in subcloud layer ! to find the LCL (check if JK is LCL or not) - WHERE ((PRC_UP(IIJB:IIJE,JK)+PRI_UP(IIJB:IIJE,JK)>0.).AND.(.NOT.(GTESTLCL(IIJB:IIJE)))) - KKLCL(IIJB:IIJE) = JK - GTESTLCL(IIJB:IIJE)=.TRUE. + WHERE ((PRC_UP(:,JK)+PRI_UP(:,JK)>0.).AND.(.NOT.(GTESTLCL(:)))) + KKLCL(:) = JK + GTESTLCL(:)=.TRUE. ENDWHERE ! COMPUTE PENTR and PDETR at mass level JK @@ -411,155 +411,155 @@ DO JK=IKB,IKE-IKL,IKL ! Compute theta_v of updraft at flux level JK - ZRC_UP(IIJB:IIJE) = PRC_UP(IIJB:IIJE,JK) - ZRI_UP(IIJB:IIJE) = PRI_UP(IIJB:IIJE,JK) ! guess - ZRV_UP(IIJB:IIJE) = PRV_UP(IIJB:IIJE,JK) - ZBUO(IIJB:IIJE,JK) = ZG_O_THVREF(IIJB:IIJE,JK)*(PTHV_UP(IIJB:IIJE,JK) - ZTHVM_F(IIJB:IIJE,JK)) - PBUO_INTEG(IIJB:IIJE,JK) = ZBUO(IIJB:IIJE,JK)*(PZZ(IIJB:IIJE,JK+IKL)-PZZ(IIJB:IIJE,JK)) + ZRC_UP(:) = PRC_UP(:,JK) + ZRI_UP(:) = PRI_UP(:,JK) ! guess + ZRV_UP(:) = PRV_UP(:,JK) + ZBUO(:,JK) = ZG_O_THVREF(:,JK)*(PTHV_UP(:,JK) - ZTHVM_F(:,JK)) + PBUO_INTEG(:,JK) = ZBUO(:,JK)*(PZZ(:,JK+IKL)-PZZ(:,JK)) - ZDZ(IIJB:IIJE) = MAX(ZEPS,PZZ(IIJB:IIJE,JK+IKL)-PZZ(IIJB:IIJE,JK)) - ZTEST(IIJB:IIJE) = PARAMMF%XA1*ZBUO(IIJB:IIJE,JK) - PARAMMF%XB*ZW_UP2(IIJB:IIJE,JK) + ZDZ(:) = MAX(ZEPS,PZZ(:,JK+IKL)-PZZ(:,JK)) + ZTEST(:) = PARAMMF%XA1*ZBUO(:,JK) - PARAMMF%XB*ZW_UP2(:,JK) - ZCOE(IIJB:IIJE) = ZDZ(IIJB:IIJE) - WHERE (ZTEST(IIJB:IIJE)>0.) - ZCOE(IIJB:IIJE) = ZDZ(IIJB:IIJE)/(1.+ PARAMMF%XBETA1) + ZCOE(:) = ZDZ(:) + WHERE (ZTEST(:)>0.) + ZCOE(:) = ZDZ(:)/(1.+ PARAMMF%XBETA1) ENDWHERE ! Calcul de la vitesse - ZWCOE(IIJB:IIJE) = (1.-PARAMMF%XB*ZCOE(IIJB:IIJE))/(1.+PARAMMF%XB*ZCOE(IIJB:IIJE)) - ZBUCOE(IIJB:IIJE) = 2.*ZCOE(IIJB:IIJE)/(1.+PARAMMF%XB*ZCOE(IIJB:IIJE)) + ZWCOE(:) = (1.-PARAMMF%XB*ZCOE(:))/(1.+PARAMMF%XB*ZCOE(:)) + ZBUCOE(:) = 2.*ZCOE(:)/(1.+PARAMMF%XB*ZCOE(:)) - ZW_UP2(IIJB:IIJE,JK+IKL) = MAX(ZEPS,ZW_UP2(IIJB:IIJE,JK)*ZWCOE(IIJB:IIJE) + & - &PARAMMF%XA1*ZBUO(IIJB:IIJE,JK)*ZBUCOE(IIJB:IIJE)) - ZW_MAX(IIJB:IIJE) = MAX(ZW_MAX(IIJB:IIJE), SQRT(ZW_UP2(IIJB:IIJE,JK+IKL))) - ZWUP_MEAN(IIJB:IIJE) = MAX(ZEPS,0.5*(ZW_UP2(IIJB:IIJE,JK+IKL)+ZW_UP2(IIJB:IIJE,JK))) + ZW_UP2(:,JK+IKL) = MAX(ZEPS,ZW_UP2(:,JK)*ZWCOE(:) + & + &PARAMMF%XA1*ZBUO(:,JK)*ZBUCOE(:)) + ZW_MAX(:) = MAX(ZW_MAX(:), SQRT(ZW_UP2(:,JK+IKL))) + ZWUP_MEAN(:) = MAX(ZEPS,0.5*(ZW_UP2(:,JK+IKL)+ZW_UP2(:,JK))) ! Entrainement et detrainement - PENTR(IIJB:IIJE,JK) = MAX(0.,(PARAMMF%XBETA1/(1.+PARAMMF%XBETA1))* & - &(PARAMMF%XA1*ZBUO(IIJB:IIJE,JK)/ZWUP_MEAN(IIJB:IIJE)-PARAMMF%XB)) + PENTR(:,JK) = MAX(0.,(PARAMMF%XBETA1/(1.+PARAMMF%XBETA1))* & + &(PARAMMF%XA1*ZBUO(:,JK)/ZWUP_MEAN(:)-PARAMMF%XB)) - ZDETR_BUO(IIJB:IIJE) = MAX(0., -(PARAMMF%XBETA1/(1.+PARAMMF%XBETA1))*PARAMMF%XA1*ZBUO(IIJB:IIJE,JK)/ & - &ZWUP_MEAN(IIJB:IIJE)) - ZDETR_RT(IIJB:IIJE) = PARAMMF%XC*SQRT(MAX(0.,(PRT_UP(IIJB:IIJE,JK) - ZRTM_F(IIJB:IIJE,JK))) / & - &MAX(ZEPS,ZRTM_F(IIJB:IIJE,JK)) / ZWUP_MEAN(IIJB:IIJE)) - PDETR(IIJB:IIJE,JK) = ZDETR_RT(IIJB:IIJE)+ZDETR_BUO(IIJB:IIJE) + ZDETR_BUO(:) = MAX(0., -(PARAMMF%XBETA1/(1.+PARAMMF%XBETA1))*PARAMMF%XA1*ZBUO(:,JK)/ & + &ZWUP_MEAN(:)) + ZDETR_RT(:) = PARAMMF%XC*SQRT(MAX(0.,(PRT_UP(:,JK) - ZRTM_F(:,JK))) / & + &MAX(ZEPS,ZRTM_F(:,JK)) / ZWUP_MEAN(:)) + PDETR(:,JK) = ZDETR_RT(:)+ZDETR_BUO(:) ! If the updraft did not stop, compute cons updraft characteritics at jk+1 - WHERE(GTEST(IIJB:IIJE)) - ZZTOP(IIJB:IIJE) = MAX(ZZTOP(IIJB:IIJE),PZZ(IIJB:IIJE,JK+IKL)) - ZMIX2(IIJB:IIJE) = (PZZ(IIJB:IIJE,JK+IKL)-PZZ(IIJB:IIJE,JK))*PENTR(IIJB:IIJE,JK) !& - ZMIX3(IIJB:IIJE) = (PZZ(IIJB:IIJE,JK+IKL)-PZZ(IIJB:IIJE,JK))*PDETR(IIJB:IIJE,JK) !& + WHERE(GTEST(:)) + ZZTOP(:) = MAX(ZZTOP(:),PZZ(:,JK+IKL)) + ZMIX2(:) = (PZZ(:,JK+IKL)-PZZ(:,JK))*PENTR(:,JK) !& + ZMIX3(:) = (PZZ(:,JK+IKL)-PZZ(:,JK))*PDETR(:,JK) !& - ZQTM(IIJB:IIJE) = PRTM(IIJB:IIJE,JK)/(1.+PRTM(IIJB:IIJE,JK)) - ZTHSM(IIJB:IIJE,JK) = PTHLM(IIJB:IIJE,JK)*(1.+PARAMMF%XLAMBDA_MF*ZQTM(IIJB:IIJE)) - ZTHS_UP(IIJB:IIJE,JK+IKL)=(ZTHS_UP(IIJB:IIJE,JK)*(1.-0.5*ZMIX2(IIJB:IIJE)) + & - &ZTHSM(IIJB:IIJE,JK)*ZMIX2(IIJB:IIJE))& - /(1.+0.5*ZMIX2(IIJB:IIJE)) - PRT_UP(IIJB:IIJE,JK+IKL)=(PRT_UP(IIJB:IIJE,JK)*(1.-0.5*ZMIX2(IIJB:IIJE)) + & - &PRTM(IIJB:IIJE,JK)*ZMIX2(IIJB:IIJE)) & - /(1.+0.5*ZMIX2(IIJB:IIJE)) - ZQT_UP(IIJB:IIJE) = PRT_UP(IIJB:IIJE,JK+IKL)/(1.+PRT_UP(IIJB:IIJE,JK+IKL)) - PTHL_UP(IIJB:IIJE,JK+IKL)=ZTHS_UP(IIJB:IIJE,JK+IKL)/(1.+PARAMMF%XLAMBDA_MF*ZQT_UP(IIJB:IIJE)) + ZQTM(:) = PRTM(:,JK)/(1.+PRTM(:,JK)) + ZTHSM(:,JK) = PTHLM(:,JK)*(1.+PARAMMF%XLAMBDA_MF*ZQTM(:)) + ZTHS_UP(:,JK+IKL)=(ZTHS_UP(:,JK)*(1.-0.5*ZMIX2(:)) + & + &ZTHSM(:,JK)*ZMIX2(:))& + /(1.+0.5*ZMIX2(:)) + PRT_UP(:,JK+IKL)=(PRT_UP(:,JK)*(1.-0.5*ZMIX2(:)) + & + &PRTM(:,JK)*ZMIX2(:)) & + /(1.+0.5*ZMIX2(:)) + ZQT_UP(:) = PRT_UP(:,JK+IKL)/(1.+PRT_UP(:,JK+IKL)) + PTHL_UP(:,JK+IKL)=ZTHS_UP(:,JK+IKL)/(1.+PARAMMF%XLAMBDA_MF*ZQT_UP(:)) ENDWHERE IF(PARAMMF%LMIXUV) THEN IF(JK/=IKB) THEN - WHERE(GTEST(IIJB:IIJE)) - PU_UP(IIJB:IIJE,JK+IKL) = (PU_UP(IIJB:IIJE,JK)*(1-0.5*ZMIX2(IIJB:IIJE)) + & - &PUM(IIJB:IIJE,JK)*ZMIX2(IIJB:IIJE)+ & - 0.5*PARAMMF%XPRES_UV*(PZZ(IIJB:IIJE,JK+IKL)-PZZ(IIJB:IIJE,JK))*& - ((PUM(IIJB:IIJE,JK+IKL)-PUM(IIJB:IIJE,JK))/PDZZ(IIJB:IIJE,JK+IKL)+& - (PUM(IIJB:IIJE,JK)-PUM(IIJB:IIJE,JK-IKL))/PDZZ(IIJB:IIJE,JK)) ) & - /(1+0.5*ZMIX2(IIJB:IIJE)) - PV_UP(IIJB:IIJE,JK+IKL) = (PV_UP(IIJB:IIJE,JK)*(1-0.5*ZMIX2(IIJB:IIJE)) + & - &PVM(IIJB:IIJE,JK)*ZMIX2(IIJB:IIJE)+ & - 0.5*PARAMMF%XPRES_UV*(PZZ(IIJB:IIJE,JK+IKL)-PZZ(IIJB:IIJE,JK))*& - ((PVM(IIJB:IIJE,JK+IKL)-PVM(IIJB:IIJE,JK))/PDZZ(IIJB:IIJE,JK+IKL)+& - (PVM(IIJB:IIJE,JK)-PVM(IIJB:IIJE,JK-IKL))/PDZZ(IIJB:IIJE,JK)) ) & - /(1+0.5*ZMIX2(IIJB:IIJE)) + WHERE(GTEST(:)) + PU_UP(:,JK+IKL) = (PU_UP(:,JK)*(1-0.5*ZMIX2(:)) + & + &PUM(:,JK)*ZMIX2(:)+ & + 0.5*PARAMMF%XPRES_UV*(PZZ(:,JK+IKL)-PZZ(:,JK))*& + ((PUM(:,JK+IKL)-PUM(:,JK))/PDZZ(:,JK+IKL)+& + (PUM(:,JK)-PUM(:,JK-IKL))/PDZZ(:,JK)) ) & + /(1+0.5*ZMIX2(:)) + PV_UP(:,JK+IKL) = (PV_UP(:,JK)*(1-0.5*ZMIX2(:)) + & + &PVM(:,JK)*ZMIX2(:)+ & + 0.5*PARAMMF%XPRES_UV*(PZZ(:,JK+IKL)-PZZ(:,JK))*& + ((PVM(:,JK+IKL)-PVM(:,JK))/PDZZ(:,JK+IKL)+& + (PVM(:,JK)-PVM(:,JK-IKL))/PDZZ(:,JK)) ) & + /(1+0.5*ZMIX2(:)) ENDWHERE ELSE - WHERE(GTEST(IIJB:IIJE)) - PU_UP(IIJB:IIJE,JK+IKL) = (PU_UP(IIJB:IIJE,JK)*(1-0.5*ZMIX2(IIJB:IIJE)) + & - &PUM(IIJB:IIJE,JK)*ZMIX2(IIJB:IIJE)+ & - 0.5*PARAMMF%XPRES_UV*(PZZ(IIJB:IIJE,JK+IKL)-PZZ(IIJB:IIJE,JK))*& - ((PUM(IIJB:IIJE,JK+IKL)-PUM(IIJB:IIJE,JK))/PDZZ(IIJB:IIJE,JK+IKL)) ) & - /(1+0.5*ZMIX2(IIJB:IIJE)) - PV_UP(IIJB:IIJE,JK+IKL) = (PV_UP(IIJB:IIJE,JK)*(1-0.5*ZMIX2(IIJB:IIJE)) + & - &PVM(IIJB:IIJE,JK)*ZMIX2(IIJB:IIJE)+ & - 0.5*PARAMMF%XPRES_UV*(PZZ(IIJB:IIJE,JK+IKL)-PZZ(IIJB:IIJE,JK))*& - ((PVM(IIJB:IIJE,JK+IKL)-PVM(IIJB:IIJE,JK))/PDZZ(IIJB:IIJE,JK+IKL)) ) & - /(1+0.5*ZMIX2(IIJB:IIJE)) + WHERE(GTEST(:)) + PU_UP(:,JK+IKL) = (PU_UP(:,JK)*(1-0.5*ZMIX2(:)) + & + &PUM(:,JK)*ZMIX2(:)+ & + 0.5*PARAMMF%XPRES_UV*(PZZ(:,JK+IKL)-PZZ(:,JK))*& + ((PUM(:,JK+IKL)-PUM(:,JK))/PDZZ(:,JK+IKL)) ) & + /(1+0.5*ZMIX2(:)) + PV_UP(:,JK+IKL) = (PV_UP(:,JK)*(1-0.5*ZMIX2(:)) + & + &PVM(:,JK)*ZMIX2(:)+ & + 0.5*PARAMMF%XPRES_UV*(PZZ(:,JK+IKL)-PZZ(:,JK))*& + ((PVM(:,JK+IKL)-PVM(:,JK))/PDZZ(:,JK+IKL)) ) & + /(1+0.5*ZMIX2(:)) ENDWHERE ENDIF ENDIF !DO JSV=1,ISV ! IF (ONOMIXLG .AND. JSV >= KSV_LGBEG .AND. JSV<= KSV_LGEND) CYCLE - ! WHERE(GTEST(IIJB:IIJE)) - ! PSV_UP(IIJB:IIJE,JK+KKL,JSV) = (PSV_UP(IIJB:IIJE,JK,JSV)*(1-0.5*ZMIX2(IIJB:IIJE)) + & - ! PSVM(IIJB:IIJE,JK,JSV)*ZMIX2(IIJB:IIJE)) /(1+0.5*ZMIX2(IIJB:IIJE)) + ! WHERE(GTEST(:)) + ! PSV_UP(:,JK+KKL,JSV) = (PSV_UP(:,JK,JSV)*(1-0.5*ZMIX2(:)) + & + ! PSVM(:,JK,JSV)*ZMIX2(:)) /(1+0.5*ZMIX2(:)) ! ENDWHERE !ENDDO ! Compute non cons. var. at level JK+KKL - ZRC_UP(IIJB:IIJE)=PRC_UP(IIJB:IIJE,JK) ! guess = level just below - ZRI_UP(IIJB:IIJE)=PRI_UP(IIJB:IIJE,JK) ! guess = level just below - ZRV_UP(IIJB:IIJE)=PRV_UP(IIJB:IIJE,JK) + ZRC_UP(:)=PRC_UP(:,JK) ! guess = level just below + ZRI_UP(:)=PRI_UP(:,JK) ! guess = level just below + ZRV_UP(:)=PRV_UP(:,JK) !$mnh_end_expand_where(JIJ=IIJB:IIJE) CALL TH_R_FROM_THL_RT(CST,NEB, D%NIJT, HFRAC_ICE,PFRAC_ICE_UP(:,JK+IKL),ZPRES_F(:,JK+IKL), & PTHL_UP(:,JK+IKL),PRT_UP(:,JK+IKL),ZTH_UP(:,JK+IKL), & ZRV_UP(:),ZRC_UP(:),ZRI_UP(:),ZRSATW(:),ZRSATI(:),OOCEAN=.FALSE.,& PBUF=ZBUF, KB=D%NIJB, KE=D%NIJE) !$mnh_expand_where(JIJ=IIJB:IIJE) - WHERE(GTEST(IIJB:IIJE)) - ZT_UP(IIJB:IIJE) = ZTH_UP(IIJB:IIJE,JK+IKL)*PEXNM(IIJB:IIJE,JK+IKL) - ZCP(IIJB:IIJE) = CST%XCPD + CST%XCL * ZRC_UP(IIJB:IIJE) - ZLVOCPEXN(IIJB:IIJE)=(CST%XLVTT + (CST%XCPV-CST%XCL) * (ZT_UP(IIJB:IIJE)-CST%XTT) ) / & - &ZCP(IIJB:IIJE) / PEXNM(IIJB:IIJE,JK+IKL) - PRC_UP(IIJB:IIJE,JK+IKL)=MIN(0.5E-3,ZRC_UP(IIJB:IIJE)) ! On ne peut depasser 0.5 g/kg (autoconversion donc elimination !) - PTHL_UP(IIJB:IIJE,JK+IKL) = PTHL_UP(IIJB:IIJE,JK+IKL)+ & - & ZLVOCPEXN(IIJB:IIJE)*(ZRC_UP(IIJB:IIJE)-PRC_UP(IIJB:IIJE,JK+IKL)) - PRV_UP(IIJB:IIJE,JK+IKL)=ZRV_UP(IIJB:IIJE) - PRI_UP(IIJB:IIJE,JK+IKL)=ZRI_UP(IIJB:IIJE) - PRT_UP(IIJB:IIJE,JK+IKL) = PRC_UP(IIJB:IIJE,JK+IKL) + PRV_UP(IIJB:IIJE,JK+IKL) - PRSAT_UP(IIJB:IIJE,JK+IKL) = ZRSATW(IIJB:IIJE)*(1-PFRAC_ICE_UP(IIJB:IIJE,JK+IKL)) + & - & ZRSATI(IIJB:IIJE)*PFRAC_ICE_UP(IIJB:IIJE,JK+IKL) + WHERE(GTEST(:)) + ZT_UP(:) = ZTH_UP(:,JK+IKL)*PEXNM(:,JK+IKL) + ZCP(:) = CST%XCPD + CST%XCL * ZRC_UP(:) + ZLVOCPEXN(:)=(CST%XLVTT + (CST%XCPV-CST%XCL) * (ZT_UP(:)-CST%XTT) ) / & + &ZCP(:) / PEXNM(:,JK+IKL) + PRC_UP(:,JK+IKL)=MIN(0.5E-3,ZRC_UP(:)) ! On ne peut depasser 0.5 g/kg (autoconversion donc elimination !) + PTHL_UP(:,JK+IKL) = PTHL_UP(:,JK+IKL)+ & + & ZLVOCPEXN(:)*(ZRC_UP(:)-PRC_UP(:,JK+IKL)) + PRV_UP(:,JK+IKL)=ZRV_UP(:) + PRI_UP(:,JK+IKL)=ZRI_UP(:) + PRT_UP(:,JK+IKL) = PRC_UP(:,JK+IKL) + PRV_UP(:,JK+IKL) + PRSAT_UP(:,JK+IKL) = ZRSATW(:)*(1-PFRAC_ICE_UP(:,JK+IKL)) + & + & ZRSATI(:)*PFRAC_ICE_UP(:,JK+IKL) ENDWHERE ! Compute the updraft theta_v, buoyancy and w**2 for level JK+1 - WHERE(GTEST(IIJB:IIJE)) - !PTHV_UP(IIJB:IIJE,JK+KKL) = ZTH_UP(IIJB:IIJE,JK+KKL)*((1+ZRVORD*PRV_UP(IIJB:IIJE,JK+KKL))/(1+PRT_UP(IIJB:IIJE,JK+KKL))) - PTHV_UP(IIJB:IIJE,JK+IKL) = ZTH_UP(IIJB:IIJE,JK+IKL)* & - & (1.+0.608*PRV_UP(IIJB:IIJE,JK+IKL) - PRC_UP(IIJB:IIJE,JK+IKL)) + WHERE(GTEST(:)) + !PTHV_UP(:,JK+KKL) = ZTH_UP(:,JK+KKL)*((1+ZRVORD*PRV_UP(:,JK+KKL))/(1+PRT_UP(:,JK+KKL))) + PTHV_UP(:,JK+IKL) = ZTH_UP(:,JK+IKL)* & + & (1.+0.608*PRV_UP(:,JK+IKL) - PRC_UP(:,JK+IKL)) ENDWHERE ! Test if the updraft has reach the ETL - GTESTETL(IIJB:IIJE)=.FALSE. - WHERE (GTEST(IIJB:IIJE).AND.(PBUO_INTEG(IIJB:IIJE,JK)<=0.)) - KKETL(IIJB:IIJE) = JK+IKL - GTESTETL(IIJB:IIJE)=.TRUE. + GTESTETL(:)=.FALSE. + WHERE (GTEST(:).AND.(PBUO_INTEG(:,JK)<=0.)) + KKETL(:) = JK+IKL + GTESTETL(:)=.TRUE. ENDWHERE ! Test is we have reached the top of the updraft - WHERE (GTEST(IIJB:IIJE).AND.((ZW_UP2(IIJB:IIJE,JK+IKL)<=ZEPS))) - ZW_UP2(IIJB:IIJE,JK+IKL)=ZEPS - GTEST(IIJB:IIJE)=.FALSE. - PTHL_UP(IIJB:IIJE,JK+IKL)=ZTHLM_F(IIJB:IIJE,JK+IKL) - PRT_UP(IIJB:IIJE,JK+IKL)=ZRTM_F(IIJB:IIJE,JK+IKL) - PRC_UP(IIJB:IIJE,JK+IKL)=0. - PRI_UP(IIJB:IIJE,JK+IKL)=0. - PRV_UP(IIJB:IIJE,JK+IKL)=0. - PTHV_UP(IIJB:IIJE,JK+IKL)=ZTHVM_F(IIJB:IIJE,JK+IKL) - PFRAC_UP(IIJB:IIJE,JK+IKL)=0. - KKCTL(IIJB:IIJE)=JK+IKL + WHERE (GTEST(:).AND.((ZW_UP2(:,JK+IKL)<=ZEPS))) + ZW_UP2(:,JK+IKL)=ZEPS + GTEST(:)=.FALSE. + PTHL_UP(:,JK+IKL)=ZTHLM_F(:,JK+IKL) + PRT_UP(:,JK+IKL)=ZRTM_F(:,JK+IKL) + PRC_UP(:,JK+IKL)=0. + PRI_UP(:,JK+IKL)=0. + PRV_UP(:,JK+IKL)=0. + PTHV_UP(:,JK+IKL)=ZTHVM_F(:,JK+IKL) + PFRAC_UP(:,JK+IKL)=0. + KKCTL(:)=JK+IKL ENDWHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) ENDDO @@ -569,62 +569,62 @@ ENDDO !$mnh_expand_array(JIJ=IIJB:IIJE) -ZZTOP(IIJB:IIJE) = MAX(ZZTOP(IIJB:IIJE),ZEPS) +ZZTOP(:) = MAX(ZZTOP(:),ZEPS) !$mnh_end_expand_array(JIJ=IIJB:IIJE) DO JK=IKB+IKL,IKE-IKL,IKL ! Vertical loop !$mnh_expand_where(JIJ=IIJB:IIJE) - WHERE(JK<=IALIM(IIJB:IIJE)) - ZALIM_STAR_TOT(IIJB:IIJE) = ZALIM_STAR_TOT(IIJB:IIJE) + ZALIM_STAR(IIJB:IIJE,JK)**2* & - & ZZDZ(IIJB:IIJE,JK)/PRHODREF(IIJB:IIJE,JK) + WHERE(JK<=IALIM(:)) + ZALIM_STAR_TOT(:) = ZALIM_STAR_TOT(:) + ZALIM_STAR(:,JK)**2* & + & ZZDZ(:,JK)/PRHODREF(:,JK) ENDWHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) ENDDO !$mnh_expand_where(JIJ=IIJB:IIJE) -WHERE (ZALIM_STAR_TOT(IIJB:IIJE)*ZZTOP(IIJB:IIJE) > ZEPS) - ZPHI(IIJB:IIJE) = ZW_MAX(IIJB:IIJE)/(PARAMMF%XR*ZZTOP(IIJB:IIJE)*ZALIM_STAR_TOT(IIJB:IIJE)) +WHERE (ZALIM_STAR_TOT(:)*ZZTOP(:) > ZEPS) + ZPHI(:) = ZW_MAX(:)/(PARAMMF%XR*ZZTOP(:)*ZALIM_STAR_TOT(:)) ENDWHERE -GTEST(IIJB:IIJE) = .TRUE. -PEMF(IIJB:IIJE,IKB+IKL) = ZPHI(IIJB:IIJE)*ZZDZ(IIJB:IIJE,IKB)*ZALIM_STAR(IIJB:IIJE,IKB) +GTEST(:) = .TRUE. +PEMF(:,IKB+IKL) = ZPHI(:)*ZZDZ(:,IKB)*ZALIM_STAR(:,IKB) ! Updraft fraction must be smaller than XFRAC_UP_MAX -PFRAC_UP(IIJB:IIJE,IKB+IKL)=PEMF(IIJB:IIJE,IKB+IKL)/ & - &(SQRT(ZW_UP2(IIJB:IIJE,IKB+IKL))*ZRHO_F(IIJB:IIJE,IKB+IKL)) -PFRAC_UP(IIJB:IIJE,IKB+IKL)=MIN(PARAMMF%XFRAC_UP_MAX,PFRAC_UP(IIJB:IIJE,IKB+IKL)) -PEMF(IIJB:IIJE,IKB+IKL) = ZRHO_F(IIJB:IIJE,IKB+IKL)*PFRAC_UP(IIJB:IIJE,IKB+IKL)* & - & SQRT(ZW_UP2(IIJB:IIJE,IKB+IKL)) +PFRAC_UP(:,IKB+IKL)=PEMF(:,IKB+IKL)/ & + &(SQRT(ZW_UP2(:,IKB+IKL))*ZRHO_F(:,IKB+IKL)) +PFRAC_UP(:,IKB+IKL)=MIN(PARAMMF%XFRAC_UP_MAX,PFRAC_UP(:,IKB+IKL)) +PEMF(:,IKB+IKL) = ZRHO_F(:,IKB+IKL)*PFRAC_UP(:,IKB+IKL)* & + & SQRT(ZW_UP2(:,IKB+IKL)) !$mnh_end_expand_where(JIJ=IIJB:IIJE) DO JK=IKB+IKL,IKE-IKL,IKL ! Vertical loop !$mnh_expand_where(JIJ=IIJB:IIJE) - GTEST(IIJB:IIJE) = (ZW_UP2(IIJB:IIJE,JK) > ZEPS) + GTEST(:) = (ZW_UP2(:,JK) > ZEPS) - WHERE (GTEST(IIJB:IIJE)) - WHERE(JK<IALIM(IIJB:IIJE)) - PEMF(IIJB:IIJE,JK+IKL) = MAX(0.,PEMF(IIJB:IIJE,JK) + ZPHI(IIJB:IIJE)*ZZDZ(IIJB:IIJE,JK)* & - & (PENTR(IIJB:IIJE,JK) - PDETR(IIJB:IIJE,JK))) + WHERE (GTEST(:)) + WHERE(JK<IALIM(:)) + PEMF(:,JK+IKL) = MAX(0.,PEMF(:,JK) + ZPHI(:)*ZZDZ(:,JK)* & + & (PENTR(:,JK) - PDETR(:,JK))) ELSEWHERE - ZMIX1(IIJB:IIJE)=ZZDZ(IIJB:IIJE,JK)*(PENTR(IIJB:IIJE,JK)-PDETR(IIJB:IIJE,JK)) - PEMF(IIJB:IIJE,JK+IKL)=PEMF(IIJB:IIJE,JK)*EXP(ZMIX1(IIJB:IIJE)) + ZMIX1(:)=ZZDZ(:,JK)*(PENTR(:,JK)-PDETR(:,JK)) + PEMF(:,JK+IKL)=PEMF(:,JK)*EXP(ZMIX1(:)) ENDWHERE ! Updraft fraction must be smaller than XFRAC_UP_MAX - PFRAC_UP(IIJB:IIJE,JK+IKL)=PEMF(IIJB:IIJE,JK+IKL)/& - &(SQRT(ZW_UP2(IIJB:IIJE,JK+IKL))*ZRHO_F(IIJB:IIJE,JK+IKL)) - PFRAC_UP(IIJB:IIJE,JK+IKL)=MIN(PARAMMF%XFRAC_UP_MAX,PFRAC_UP(IIJB:IIJE,JK+IKL)) - PEMF(IIJB:IIJE,JK+IKL) = ZRHO_F(IIJB:IIJE,JK+IKL)*PFRAC_UP(IIJB:IIJE,JK+IKL)*& - & SQRT(ZW_UP2(IIJB:IIJE,JK+IKL)) + PFRAC_UP(:,JK+IKL)=PEMF(:,JK+IKL)/& + &(SQRT(ZW_UP2(:,JK+IKL))*ZRHO_F(:,JK+IKL)) + PFRAC_UP(:,JK+IKL)=MIN(PARAMMF%XFRAC_UP_MAX,PFRAC_UP(:,JK+IKL)) + PEMF(:,JK+IKL) = ZRHO_F(:,JK+IKL)*PFRAC_UP(:,JK+IKL)*& + & SQRT(ZW_UP2(:,JK+IKL)) ENDWHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) ENDDO !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PW_UP(IIJB:IIJE,1:IKT)=SQRT(ZW_UP2(IIJB:IIJE,1:IKT)) +PW_UP(:,:)=SQRT(ZW_UP2(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) !$mnh_expand_array(JIJ=IIJB:IIJE) -PEMF(IIJB:IIJE,IKB) =0. +PEMF(:,IKB) =0. !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! Limits the shallow convection scheme when cloud heigth is higher than 3000m. @@ -638,19 +638,19 @@ DO JIJ=IIJB,IIJE END DO !$mnh_expand_array(JIJ=IIJB:IIJE) -GWORK1(IIJB:IIJE)= (GTESTLCL(IIJB:IIJE) .AND. (PDEPTH(IIJB:IIJE) > ZDEPTH_MAX1) ) +GWORK1(:)= (GTESTLCL(:) .AND. (PDEPTH(:) > ZDEPTH_MAX1) ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) DO JK=1,D%NKT !$mnh_expand_array(JIJ=IIJB:IIJE) - GWORK2(IIJB:IIJE,JK) = GWORK1(IIJB:IIJE) - ZCOEF(IIJB:IIJE,JK) = (1.-(PDEPTH(IIJB:IIJE)-ZDEPTH_MAX1)/(ZDEPTH_MAX2-ZDEPTH_MAX1)) - ZCOEF(IIJB:IIJE,JK)=MIN(MAX(ZCOEF(IIJB:IIJE,JK),0.),1.) + GWORK2(:,JK) = GWORK1(:) + ZCOEF(:,JK) = (1.-(PDEPTH(:)-ZDEPTH_MAX1)/(ZDEPTH_MAX2-ZDEPTH_MAX1)) + ZCOEF(:,JK)=MIN(MAX(ZCOEF(:,JK),0.),1.) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ENDDO !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) -WHERE (GWORK2(IIJB:IIJE,1:IKT)) - PEMF(IIJB:IIJE,1:IKT) = PEMF(IIJB:IIJE,1:IKT) * ZCOEF(IIJB:IIJE,1:IKT) - PFRAC_UP(IIJB:IIJE,1:IKT) = PFRAC_UP(IIJB:IIJE,1:IKT) * ZCOEF(IIJB:IIJE,1:IKT) +WHERE (GWORK2(:,:)) + PEMF(:,:) = PEMF(:,:) * ZCOEF(:,:) + PFRAC_UP(:,:) = PFRAC_UP(:,:) * ZCOEF(:,:) ENDWHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) diff --git a/src/PHYEX/turb/mode_compute_updraft_rhcj10.f90 b/src/PHYEX/turb/mode_compute_updraft_rhcj10.f90 index 5a4a9cfa0a5ff4edf72b4f626614bc0498528d00..85eccf595c1bc53c0f2abbe529d838d4b0050cda 100644 --- a/src/PHYEX/turb/mode_compute_updraft_rhcj10.f90 +++ b/src/PHYEX/turb/mode_compute_updraft_rhcj10.f90 @@ -250,7 +250,7 @@ ZBUO =0. PRI_UP(:,:)=0. PFRAC_ICE_UP(:,:)=0. !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PRSAT_UP(IIJB:IIJE,1:IKT)=PRVM(IIJB:IIJE,1:IKT) ! should be initialised correctly but is (normaly) not used +PRSAT_UP(:,:)=PRVM(:,:) ! should be initialised correctly but is (normaly) not used !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! Initialisation of environment variables at t-dt @@ -266,23 +266,23 @@ CALL MZM_MF(D, PTKEM(:,:), ZTKEM_F(:,:)) !DO JSV=1,ISV ! IF (ONOMIXLG .AND. JSV >= KSV_LGBEG .AND. JSV<= KSV_LGEND) CYCLE ! *** SR merge AROME/Meso-nh: following two lines come from the AROME version -! ZSVM_F(IIJB:IIJE,KKB:IKU,JSV) = 0.5*(PSVM(IIJB:IIJE,KKB:IKU,JSV)+PSVM(IIJB:IIJE,1:IKU-1,JSV)) -! ZSVM_F(IIJB:IIJE,1,JSV) = ZSVM_F(IIJB:IIJE,KKB,JSV) +! ZSVM_F(:,KKB:IKU,JSV) = 0.5*(PSVM(:,KKB:IKU,JSV)+PSVM(:,1:IKU-1,JSV)) +! ZSVM_F(:,1,JSV) = ZSVM_F(:,KKB,JSV) ! *** the following single line comes from the Meso-NH version -! ZSVM_F(IIJB:IIJE,:,JSV) = MZM_MF(KKA,KKU,KKL,PSVM(IIJB:IIJE,:,JSV)) +! ZSVM_F(:,:,JSV) = MZM_MF(KKA,KKU,KKL,PSVM(:,:,JSV)) !END DO ! Initialisation of updraft characteristics !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PTHL_UP(IIJB:IIJE,1:IKT)=ZTHLM_F(IIJB:IIJE,1:IKT) -PRT_UP(IIJB:IIJE,1:IKT)=ZRTM_F(IIJB:IIJE,1:IKT) -PU_UP(IIJB:IIJE,1:IKT)=ZUM_F(IIJB:IIJE,1:IKT) -PV_UP(IIJB:IIJE,1:IKT)=ZVM_F(IIJB:IIJE,1:IKT) +PTHL_UP(:,:)=ZTHLM_F(:,:) +PRT_UP(:,:)=ZRTM_F(:,:) +PU_UP(:,:)=ZUM_F(:,:) +PV_UP(:,:)=ZVM_F(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PSV_UP(IIJB:IIJE,1:IKT,:)=0. +PSV_UP(:,:,:)=0. ! This updraft is not yet ready to use scalar variables !IF (ONOMIXLG .AND. JSV >= KSV_LGBEG .AND. JSV<= KSV_LGEND) then -! PSV_UP(IIJB:IIJE,:,:)=ZSVM_F(IIJB:IIJE,:,:) +! PSV_UP(:,:,:)=ZSVM_F(:,:,:) !ENDIF ! Computation or initialisation of updraft characteristics at the KKB level @@ -310,22 +310,22 @@ DO JK=1,IKT ENDDO !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PTHV_UP(IIJB:IIJE,1:IKT)= ZTHVM_F(IIJB:IIJE,1:IKT) -PRV_UP(IIJB:IIJE,1:IKT)= ZRVM_F(IIJB:IIJE,1:IKT) +PTHV_UP(:,:)= ZTHVM_F(:,:) +PRV_UP(:,:)= ZRVM_F(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ZW_UP2(:,:)=ZEPS !$mnh_expand_array(JIJ=IIJB:IIJE) -!ZW_UP2(IIJB:IIJE,KKB) = MAX(0.0001,(3./6.)*ZTKEM_F(IIJB:IIJE,KKB)) -ZW_UP2(IIJB:IIJE,IKB) = MAX(0.0001,(2./3.)*ZTKEM_F(IIJB:IIJE,IKB)) +!ZW_UP2(:,KKB) = MAX(0.0001,(3./6.)*ZTKEM_F(:,KKB)) +ZW_UP2(:,IKB) = MAX(0.0001,(2./3.)*ZTKEM_F(:,IKB)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! Computation of non conservative variable for the KKB level of the updraft ! (all or nothing ajustement) !$mnh_expand_array(JIJ=IIJB:IIJE) -PRC_UP(IIJB:IIJE,IKB)=0. -PRI_UP(IIJB:IIJE,IKB)=0. +PRC_UP(:,IKB)=0. +PRI_UP(:,IKB)=0. !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL TH_R_FROM_THL_RT(CST,NEB,D%NIJT,HFRAC_ICE,PFRAC_ICE_UP(:,IKB),ZPRES_F(:,IKB), & PTHL_UP(:,IKB),PRT_UP(:,IKB),ZTH_UP(:,IKB), & @@ -343,7 +343,7 @@ ENDDO ! boucle verticale, une pour w et une pour PEMF !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZG_O_THVREF(IIJB:IIJE,1:IKT)=CST%XG/ZTHVM_F(IIJB:IIJE,1:IKT) +ZG_O_THVREF(:,:)=CST%XG/ZTHVM_F(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! Calcul de la fermeture de Julien Pergaut comme limite max de PHY @@ -357,7 +357,7 @@ ENDDO ! compute L_up GLMIX=.TRUE. !$mnh_expand_array(JIJ=IIJB:IIJE) -ZTKEM_F(IIJB:IIJE,IKB)=0. +ZTKEM_F(:,IKB)=0. !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! IF(TURBN%CTURBLEN=='RM17') THEN @@ -366,16 +366,16 @@ IF(TURBN%CTURBLEN=='RM17') THEN CALL GZ_M_W_MF(D, PVM, PDZZ, ZWK) CALL MZF_MF(D, ZWK, ZDVDZ) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZSHEAR(IIJB:IIJE,1:IKT) = SQRT(ZDUDZ(IIJB:IIJE,1:IKT)**2 + ZDVDZ(IIJB:IIJE,1:IKT)**2) + ZSHEAR(:,:) = SQRT(ZDUDZ(:,:)**2 + ZDVDZ(:,:)**2) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE - ZSHEAR(IIJB:IIJE,:) = 0. !no shear in bl89 mixing length + ZSHEAR(:,:) = 0. !no shear in bl89 mixing length END IF ! CALL COMPUTE_BL89_ML(D, CST, CSTURB, PDZZ,ZTKEM_F(:,IKB),ZG_O_THVREF(:,IKB), & ZTHVM_F,IKB,GLMIX,.TRUE.,ZSHEAR,ZLUP) !$mnh_expand_array(JIJ=IIJB:IIJE) -ZLUP(IIJB:IIJE)=MAX(ZLUP(IIJB:IIJE),1.E-10) +ZLUP(:)=MAX(ZLUP(:),1.E-10) !$mnh_end_expand_array(JIJ=IIJB:IIJE) DO JIJ=IIJB,IIJE @@ -442,9 +442,9 @@ DO JK=IKB,IKE-IKL,IKL ! Compute theta_v of updraft at flux level JK !$mnh_expand_array(JIJ=IIJB:IIJE) - ZRC_UP(IIJB:IIJE) =PRC_UP(IIJB:IIJE,JK) ! guess - ZRI_UP(IIJB:IIJE) =PRI_UP(IIJB:IIJE,JK) ! guess - ZRV_UP(IIJB:IIJE) =PRV_UP(IIJB:IIJE,JK) + ZRC_UP(:) =PRC_UP(:,JK) ! guess + ZRI_UP(:) =PRI_UP(:,JK) ! guess + ZRV_UP(:) =PRV_UP(:,JK) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL TH_R_FROM_THL_RT(CST,NEB, D%NIJT, HFRAC_ICE,PFRAC_ICE_UP(:,JK),& PPABSM(:,JK),PTHL_UP(:,JK),PRT_UP(:,JK),& @@ -537,17 +537,17 @@ DO JK=IKB,IKE-IKL,IKL ! DO JSV=1,ISV ! IF (ONOMIXLG .AND. JSV >= KSV_LGBEG .AND. JSV<= KSV_LGEND) CYCLE ! WHERE(GTEST) -! PSV_UP(IIJB:IIJE,JK+KKL,JSV) = (PSV_UP (IIJB:IIJE,JK,JSV)*(1-0.5*ZMIX2(IIJB:IIJE)) + & -! PSVM(IIJB:IIJE,JK,JSV)*ZMIX2(IIJB:IIJE)) /(1+0.5*ZMIX2(IIJB:IIJE)) +! PSV_UP(:,JK+KKL,JSV) = (PSV_UP (:,JK,JSV)*(1-0.5*ZMIX2(:)) + & +! PSVM(:,JK,JSV)*ZMIX2(:)) /(1+0.5*ZMIX2(:)) ! ENDWHERE ! ENDDO ! Compute non cons. var. at level JK+KKL !$mnh_expand_array(JIJ=IIJB:IIJE) - ZRC_UP(IIJB:IIJE)=PRC_UP(IIJB:IIJE,JK) ! guess = level just below - ZRI_UP(IIJB:IIJE)=PRI_UP(IIJB:IIJE,JK) ! guess = level just below - ZRV_UP(IIJB:IIJE)=PRV_UP(IIJB:IIJE,JK) + ZRC_UP(:)=PRC_UP(:,JK) ! guess = level just below + ZRI_UP(:)=PRI_UP(:,JK) ! guess = level just below + ZRV_UP(:)=PRV_UP(:,JK) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL TH_R_FROM_THL_RT(CST,NEB, D%NIJT, HFRAC_ICE,PFRAC_ICE_UP(:,JK+IKL),ZPRES_F(:,JK+IKL), & PTHL_UP(:,JK+IKL),PRT_UP(:,JK+IKL),ZTH_UP(:,JK+IKL), & @@ -568,7 +568,7 @@ DO JK=IKB,IKE-IKL,IKL PRSAT_UP(JIJ,JK+IKL) = ZRSATW(JIJ)*(1-PFRAC_ICE_UP(JIJ,JK+IKL)) + ZRSATI(JIJ)*PFRAC_ICE_UP(JIJ,JK+IKL) ! Compute the updraft theta_v, buoyancy and w**2 for level JK+1 - !PTHV_UP(IIJB:IIJE,JK+KKL) = PTH_UP(IIJB:IIJE,JK+KKL)*((1+ZRVORD*PRV_UP(IIJB:IIJE,JK+KKL))/(1+PRT_UP(IIJB:IIJE,JK+KKL))) + !PTHV_UP(:,JK+KKL) = PTH_UP(:,JK+KKL)*((1+ZRVORD*PRV_UP(:,JK+KKL))/(1+PRT_UP(:,JK+KKL))) !PTHV_UP(JIJ,JK+KKL) = ZTH_UP(JIJ,JK+KKL)*(1.+0.608*PRV_UP(JIJ,JK+KKL) - PRC_UP(JIJ,JK+KKL)) !! A corriger pour utiliser q et non r !!!! !ZMIX1(JIJ)=ZZDZ(JIJ,JK)*(PENTR(JIJ,JK)-PDETR(JIJ,JK)) @@ -620,10 +620,10 @@ DO JK=IKB,IKE-IKL,IKL ENDDO ! Fin de la boucle verticale !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PW_UP(IIJB:IIJE,1:IKT)=SQRT(ZW_UP2(IIJB:IIJE,1:IKT)) +PW_UP(:,:)=SQRT(ZW_UP2(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) !$mnh_expand_array(JIJ=IIJB:IIJE) -PEMF(IIJB:IIJE,IKB) =0. +PEMF(:,IKB) =0. !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! Limits the shallow convection scheme when cloud heigth is higher than 3000m. @@ -637,13 +637,13 @@ DO JIJ=IIJB,IIJE ENDDO !$mnh_expand_array(JIJ=IIJB:IIJE) -GWORK1(IIJB:IIJE)= (GTESTLCL(IIJB:IIJE) .AND. (PDEPTH(IIJB:IIJE) > ZDEPTH_MAX1) ) +GWORK1(:)= (GTESTLCL(:) .AND. (PDEPTH(:) > ZDEPTH_MAX1) ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) DO JK=1,IKT !$mnh_expand_array(JIJ=IIJB:IIJE) - GWORK2(IIJB:IIJE,JK) = GWORK1(IIJB:IIJE) - ZCOEF(IIJB:IIJE,JK) = (1.-(PDEPTH(IIJB:IIJE)-ZDEPTH_MAX1)/(ZDEPTH_MAX2-ZDEPTH_MAX1)) - ZCOEF(IIJB:IIJE,JK)=MIN(MAX(ZCOEF(IIJB:IIJE,JK),0.),1.) + GWORK2(:,JK) = GWORK1(:) + ZCOEF(:,JK) = (1.-(PDEPTH(:)-ZDEPTH_MAX1)/(ZDEPTH_MAX2-ZDEPTH_MAX1)) + ZCOEF(:,JK)=MIN(MAX(ZCOEF(:,JK),0.),1.) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ENDDO DO JK=1,IKT diff --git a/src/PHYEX/turb/mode_emoist.f90 b/src/PHYEX/turb/mode_emoist.f90 index 477e6373791683a053476a0fe0b71dcbc3383f91..ccb80699a775ddc5be706875ef6c01e3bf5739ed 100644 --- a/src/PHYEX/turb/mode_emoist.f90 +++ b/src/PHYEX/turb/mode_emoist.f90 @@ -110,79 +110,79 @@ IKT=D%NKT IF (OOCEAN) THEN IF ( KRR == 0 ) THEN ! Unsalted !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - PEMOIST(IIB:IIE,IJB:IJE,1:IKT) = 0. + PEMOIST(IIB:IIE,IJB:IJE,:) = 0. !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) ELSE !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - PEMOIST(IIB:IIE,IJB:IJE,1:IKT) = 1. ! Salted case + PEMOIST(IIB:IIE,IJB:IJE,:) = 1. ! Salted case !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) END IF ! ELSE ! IF ( KRR == 0 ) THEN ! dry case - PEMOIST(IIB:IIE,IJB:IJE,1:IKT) = 0. + PEMOIST(IIB:IIE,IJB:IJE,:) = 0. ELSE IF ( KRR == 1 ) THEN ! only vapor ZDELTA = (CST%XRV/CST%XRD) - 1. !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - PEMOIST(IIB:IIE,IJB:IJE,1:IKT) = ZDELTA*PTHLM(IIB:IIE,IJB:IJE,1:IKT) + PEMOIST(IIB:IIE,IJB:IJE,:) = ZDELTA*PTHLM(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) ELSE ! liquid water & ice present ZDELTA = (CST%XRV/CST%XRD) - 1. - ZRW(IIB:IIE,IJB:IJE,1:IKT) = PRM(IIB:IIE,IJB:IJE,1:IKT,1) + ZRW(IIB:IIE,IJB:IJE,:) = PRM(IIB:IIE,IJB:IJE,:,1) ! IF ( KRRI>0) THEN ! rc and ri case !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - ZRW(IIB:IIE,IJB:IJE,1:IKT) = ZRW(IIB:IIE,IJB:IJE,1:IKT) + PRM(IIB:IIE,IJB:IJE,1:IKT,3) + ZRW(IIB:IIE,IJB:IJE,:) = ZRW(IIB:IIE,IJB:IJE,:) + PRM(IIB:IIE,IJB:IJE,:,3) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) DO JRR=5,KRR !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - ZRW(IIB:IIE,IJB:IJE,1:IKT) = ZRW(IIB:IIE,IJB:IJE,1:IKT) + PRM(IIB:IIE,IJB:IJE,1:IKT,JRR) + ZRW(IIB:IIE,IJB:IJE,:) = ZRW(IIB:IIE,IJB:IJE,:) + PRM(IIB:IIE,IJB:IJE,:,JRR) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) ENDDO !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - ZA(IIB:IIE,IJB:IJE,1:IKT) = 1. + ( & ! Compute A - (1.+ZDELTA) * (PRM(IIB:IIE,IJB:IJE,1:IKT,1) - PRM(IIB:IIE,IJB:IJE,1:IKT,2) - PRM(IIB:IIE,IJB:IJE,1:IKT,4)) & - -ZRW(IIB:IIE,IJB:IJE,1:IKT) & - ) / (1. + ZRW(IIB:IIE,IJB:IJE,1:IKT)) + ZA(IIB:IIE,IJB:IJE,:) = 1. + ( & ! Compute A + (1.+ZDELTA) * (PRM(IIB:IIE,IJB:IJE,:,1) - PRM(IIB:IIE,IJB:IJE,:,2) - PRM(IIB:IIE,IJB:IJE,:,4)) & + -ZRW(IIB:IIE,IJB:IJE,:) & + ) / (1. + ZRW(IIB:IIE,IJB:IJE,:)) ! ! Emoist = ZB + ZC * Amoist ! ZB is computed from line 1 to line 2 ! ZC is computed from line 3 to line 5 ! Amoist* 2 * SRC is computed at line 6 ! - PEMOIST(IIB:IIE,IJB:IJE,1:IKT) = ZDELTA * (PTHLM(IIB:IIE,IJB:IJE,1:IKT) + PLOCPEXNM(IIB:IIE,IJB:IJE,1:IKT)*( & - PRM(IIB:IIE,IJB:IJE,1:IKT,2)+PRM(IIB:IIE,IJB:IJE,1:IKT,4)))& - / (1. + ZRW(IIB:IIE,IJB:IJE,1:IKT)) & - +( PLOCPEXNM(IIB:IIE,IJB:IJE,1:IKT) * ZA(IIB:IIE,IJB:IJE,1:IKT) & - -(1.+ZDELTA) * (PTHLM(IIB:IIE,IJB:IJE,1:IKT) + PLOCPEXNM(IIB:IIE,IJB:IJE,1:IKT)*( & - PRM(IIB:IIE,IJB:IJE,1:IKT,2)+PRM(IIB:IIE,IJB:IJE,1:IKT,4)))& - / (1. + ZRW(IIB:IIE,IJB:IJE,1:IKT)) & - ) * PAMOIST(IIB:IIE,IJB:IJE,1:IKT) * 2. * PSRCM(IIB:IIE,IJB:IJE,1:IKT) + PEMOIST(IIB:IIE,IJB:IJE,:) = ZDELTA * (PTHLM(IIB:IIE,IJB:IJE,:) + PLOCPEXNM(IIB:IIE,IJB:IJE,:)*( & + PRM(IIB:IIE,IJB:IJE,:,2)+PRM(IIB:IIE,IJB:IJE,:,4)))& + / (1. + ZRW(IIB:IIE,IJB:IJE,:)) & + +( PLOCPEXNM(IIB:IIE,IJB:IJE,:) * ZA(IIB:IIE,IJB:IJE,:) & + -(1.+ZDELTA) * (PTHLM(IIB:IIE,IJB:IJE,:) + PLOCPEXNM(IIB:IIE,IJB:IJE,:)*( & + PRM(IIB:IIE,IJB:IJE,:,2)+PRM(IIB:IIE,IJB:IJE,:,4)))& + / (1. + ZRW(IIB:IIE,IJB:IJE,:)) & + ) * PAMOIST(IIB:IIE,IJB:IJE,:) * 2. * PSRCM(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) ELSE DO JRR=3,KRR !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - ZRW(IIB:IIE,IJB:IJE,1:IKT) = ZRW(IIB:IIE,IJB:IJE,1:IKT) + PRM(IIB:IIE,IJB:IJE,1:IKT,JRR) + ZRW(IIB:IIE,IJB:IJE,:) = ZRW(IIB:IIE,IJB:IJE,:) + PRM(IIB:IIE,IJB:IJE,:,JRR) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) ENDDO !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - ZA(IIB:IIE,IJB:IJE,1:IKT) = 1. + ( & ! Compute ZA - (1.+ZDELTA) * (PRM(IIB:IIE,IJB:IJE,1:IKT,1) - PRM(IIB:IIE,IJB:IJE,1:IKT,2)) & - -ZRW(IIB:IIE,IJB:IJE,1:IKT) & - ) / (1. + ZRW(IIB:IIE,IJB:IJE,1:IKT)) + ZA(IIB:IIE,IJB:IJE,:) = 1. + ( & ! Compute ZA + (1.+ZDELTA) * (PRM(IIB:IIE,IJB:IJE,:,1) - PRM(IIB:IIE,IJB:IJE,:,2)) & + -ZRW(IIB:IIE,IJB:IJE,:) & + ) / (1. + ZRW(IIB:IIE,IJB:IJE,:)) ! ! Emoist = ZB + ZC * Amoist ! ZB is computed from line 1 to line 2 ! ZC is computed from line 3 to line 5 ! Amoist* 2 * SRC is computed at line 6 ! - PEMOIST(IIB:IIE,IJB:IJE,1:IKT) = ZDELTA * (PTHLM(IIB:IIE,IJB:IJE,1:IKT) + PLOCPEXNM(IIB:IIE,IJB:IJE,1:IKT)* & - PRM(IIB:IIE,IJB:IJE,1:IKT,2)) / (1. + ZRW(IIB:IIE,IJB:IJE,1:IKT)) & - +( PLOCPEXNM(IIB:IIE,IJB:IJE,1:IKT) * ZA(IIB:IIE,IJB:IJE,1:IKT) & - -(1.+ZDELTA) * (PTHLM(IIB:IIE,IJB:IJE,1:IKT) + PLOCPEXNM(IIB:IIE,IJB:IJE,1:IKT)* & - PRM(IIB:IIE,IJB:IJE,1:IKT,2)) / (1. + ZRW(IIB:IIE,IJB:IJE,1:IKT)) & - ) * PAMOIST(IIB:IIE,IJB:IJE,1:IKT) * 2. * PSRCM(IIB:IIE,IJB:IJE,1:IKT) + PEMOIST(IIB:IIE,IJB:IJE,:) = ZDELTA * (PTHLM(IIB:IIE,IJB:IJE,:) + PLOCPEXNM(IIB:IIE,IJB:IJE,:)* & + PRM(IIB:IIE,IJB:IJE,:,2)) / (1. + ZRW(IIB:IIE,IJB:IJE,:)) & + +( PLOCPEXNM(IIB:IIE,IJB:IJE,:) * ZA(IIB:IIE,IJB:IJE,:) & + -(1.+ZDELTA) * (PTHLM(IIB:IIE,IJB:IJE,:) + PLOCPEXNM(IIB:IIE,IJB:IJE,:)* & + PRM(IIB:IIE,IJB:IJE,:,2)) / (1. + ZRW(IIB:IIE,IJB:IJE,:)) & + ) * PAMOIST(IIB:IIE,IJB:IJE,:) * 2. * PSRCM(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) END IF END IF diff --git a/src/PHYEX/turb/mode_etheta.f90 b/src/PHYEX/turb/mode_etheta.f90 index 0c03e420beea467ac2ab2fbc8d5a95a9890b87db..01297bdb7bcde7e757ab0548131cb9c821d6252c 100644 --- a/src/PHYEX/turb/mode_etheta.f90 +++ b/src/PHYEX/turb/mode_etheta.f90 @@ -114,71 +114,71 @@ IKT=D%NKT ! IF (OOCEAN) THEN ! ocean case !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - PETHETA(IIB:IIE,IJB:IJE,1:IKT) = 1. + PETHETA(IIB:IIE,IJB:IJE,:) = 1. !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) ELSE IF ( KRR == 0) THEN ! dry case !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - PETHETA(IIB:IIE,IJB:IJE,1:IKT) = 1. + PETHETA(IIB:IIE,IJB:IJE,:) = 1. !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) ELSE IF ( KRR == 1 ) THEN ! only vapor ZDELTA = (CST%XRV/CST%XRD) - 1. !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - PETHETA(IIB:IIE,IJB:IJE,1:IKT) = 1. + ZDELTA*PRM(IIB:IIE,IJB:IJE,1:IKT,1) + PETHETA(IIB:IIE,IJB:IJE,:) = 1. + ZDELTA*PRM(IIB:IIE,IJB:IJE,:,1) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) ELSE ! liquid water & ice present ZDELTA = (CST%XRV/CST%XRD) - 1. !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - ZRW(IIB:IIE,IJB:IJE,1:IKT) = PRM(IIB:IIE,IJB:IJE,1:IKT,1) + ZRW(IIB:IIE,IJB:IJE,:) = PRM(IIB:IIE,IJB:IJE,:,1) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) ! IF ( KRRI>0 ) THEN ! rc and ri case !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - ZRW(IIB:IIE,IJB:IJE,1:IKT) = ZRW(IIB:IIE,IJB:IJE,1:IKT) + PRM(IIB:IIE,IJB:IJE,1:IKT,3) + ZRW(IIB:IIE,IJB:IJE,:) = ZRW(IIB:IIE,IJB:IJE,:) + PRM(IIB:IIE,IJB:IJE,:,3) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) DO JRR=5,KRR !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - ZRW(IIB:IIE,IJB:IJE,1:IKT) = ZRW(IIB:IIE,IJB:IJE,1:IKT) + PRM(IIB:IIE,IJB:IJE,1:IKT,JRR) + ZRW(IIB:IIE,IJB:IJE,:) = ZRW(IIB:IIE,IJB:IJE,:) + PRM(IIB:IIE,IJB:IJE,:,JRR) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) ENDDO !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - ZA(IIB:IIE,IJB:IJE,1:IKT) = 1. + ( & ! Compute A - (1.+ZDELTA) * (PRM(IIB:IIE,IJB:IJE,1:IKT,1) - PRM(IIB:IIE,IJB:IJE,1:IKT,2) - PRM(IIB:IIE,IJB:IJE,1:IKT,4)) & - -ZRW(IIB:IIE,IJB:IJE,1:IKT) & - ) / (1. + ZRW(IIB:IIE,IJB:IJE,1:IKT)) + ZA(IIB:IIE,IJB:IJE,:) = 1. + ( & ! Compute A + (1.+ZDELTA) * (PRM(IIB:IIE,IJB:IJE,:,1) - PRM(IIB:IIE,IJB:IJE,:,2) - PRM(IIB:IIE,IJB:IJE,:,4)) & + -ZRW(IIB:IIE,IJB:IJE,:) & + ) / (1. + ZRW(IIB:IIE,IJB:IJE,:)) ! ! Etheta = ZA + ZC * Atheta ! ZC is computed from line 2 to line 5 ! - Atheta * 2. * SRC is computed at line 6 ! - PETHETA(IIB:IIE,IJB:IJE,1:IKT) = ZA(IIB:IIE,IJB:IJE,1:IKT) & - +( PLOCPEXNM(IIB:IIE,IJB:IJE,1:IKT) * ZA(IIB:IIE,IJB:IJE,1:IKT) & - -(1.+ZDELTA) * (PTHLM(IIB:IIE,IJB:IJE,1:IKT) + PLOCPEXNM(IIB:IIE,IJB:IJE,1:IKT)*( & - PRM(IIB:IIE,IJB:IJE,1:IKT,2)+PRM(IIB:IIE,IJB:IJE,1:IKT,4)))& - / (1. + ZRW(IIB:IIE,IJB:IJE,1:IKT)) & - ) * PATHETA(IIB:IIE,IJB:IJE,1:IKT) * 2. * PSRCM(IIB:IIE,IJB:IJE,1:IKT) + PETHETA(IIB:IIE,IJB:IJE,:) = ZA(IIB:IIE,IJB:IJE,:) & + +( PLOCPEXNM(IIB:IIE,IJB:IJE,:) * ZA(IIB:IIE,IJB:IJE,:) & + -(1.+ZDELTA) * (PTHLM(IIB:IIE,IJB:IJE,:) + PLOCPEXNM(IIB:IIE,IJB:IJE,:)*( & + PRM(IIB:IIE,IJB:IJE,:,2)+PRM(IIB:IIE,IJB:IJE,:,4)))& + / (1. + ZRW(IIB:IIE,IJB:IJE,:)) & + ) * PATHETA(IIB:IIE,IJB:IJE,:) * 2. * PSRCM(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) ELSE DO JRR=3,KRR !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - ZRW(IIB:IIE,IJB:IJE,1:IKT) = ZRW(IIB:IIE,IJB:IJE,1:IKT) + PRM(IIB:IIE,IJB:IJE,1:IKT,JRR) + ZRW(IIB:IIE,IJB:IJE,:) = ZRW(IIB:IIE,IJB:IJE,:) + PRM(IIB:IIE,IJB:IJE,:,JRR) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) ENDDO !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) - ZA(IIB:IIE,IJB:IJE,1:IKT) = 1. + ( & ! Compute A - (1.+ZDELTA) * (PRM(IIB:IIE,IJB:IJE,1:IKT,1) - PRM(IIB:IIE,IJB:IJE,1:IKT,2)) & - -ZRW(IIB:IIE,IJB:IJE,1:IKT) & - ) / (1. + ZRW(IIB:IIE,IJB:IJE,1:IKT)) + ZA(IIB:IIE,IJB:IJE,:) = 1. + ( & ! Compute A + (1.+ZDELTA) * (PRM(IIB:IIE,IJB:IJE,:,1) - PRM(IIB:IIE,IJB:IJE,:,2)) & + -ZRW(IIB:IIE,IJB:IJE,:) & + ) / (1. + ZRW(IIB:IIE,IJB:IJE,:)) ! ! Etheta = ZA + ZC * Atheta ! ZC is computed from line 2 to line 5 ! - Atheta * 2. * SRC is computed at line 6 ! - PETHETA(IIB:IIE,IJB:IJE,1:IKT) = ZA(IIB:IIE,IJB:IJE,1:IKT) & - +( PLOCPEXNM(IIB:IIE,IJB:IJE,1:IKT) * ZA(IIB:IIE,IJB:IJE,1:IKT) -(1.+ZDELTA) * (PTHLM(IIB:IIE,IJB:IJE,1:IKT) & - + PLOCPEXNM(IIB:IIE,IJB:IJE,1:IKT)*PRM(IIB:IIE,IJB:IJE,1:IKT,2)) & - / (1. + ZRW(IIB:IIE,IJB:IJE,1:IKT)) & - ) * PATHETA(IIB:IIE,IJB:IJE,1:IKT) * 2. * PSRCM(IIB:IIE,IJB:IJE,1:IKT) + PETHETA(IIB:IIE,IJB:IJE,:) = ZA(IIB:IIE,IJB:IJE,:) & + +( PLOCPEXNM(IIB:IIE,IJB:IJE,:) * ZA(IIB:IIE,IJB:IJE,:) -(1.+ZDELTA) * (PTHLM(IIB:IIE,IJB:IJE,:) & + + PLOCPEXNM(IIB:IIE,IJB:IJE,:)*PRM(IIB:IIE,IJB:IJE,:,2)) & + / (1. + ZRW(IIB:IIE,IJB:IJE,:)) & + ) * PATHETA(IIB:IIE,IJB:IJE,:) * 2. * PSRCM(IIB:IIE,IJB:IJE,:) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:IKT) END IF END IF diff --git a/src/PHYEX/turb/mode_mf_turb.f90 b/src/PHYEX/turb/mode_mf_turb.f90 index f168dfc9606cf5ea552063937da23328a00a934e..0cede49ad0e9f14b030d1d005c51ffd31f246681 100644 --- a/src/PHYEX/turb/mode_mf_turb.f90 +++ b/src/PHYEX/turb/mode_mf_turb.f90 @@ -162,17 +162,17 @@ CALL MZM_MF(D, PRTM(:,:), PFLXZRMF(:,:)) CALL MZM_MF(D, PTHVM(:,:), PFLXZTHVMF(:,:)) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PFLXZTHMF(IIJB:IIJE,1:IKT) = PEMF(IIJB:IIJE,1:IKT)*(PTHL_UP(IIJB:IIJE,1:IKT)-PFLXZTHMF(IIJB:IIJE,1:IKT)) -PFLXZRMF(IIJB:IIJE,1:IKT) = PEMF(IIJB:IIJE,1:IKT)*(PRT_UP(IIJB:IIJE,1:IKT)-PFLXZRMF(IIJB:IIJE,1:IKT)) -PFLXZTHVMF(IIJB:IIJE,1:IKT) = PEMF(IIJB:IIJE,1:IKT)*(PTHV_UP(IIJB:IIJE,1:IKT)-PFLXZTHVMF(IIJB:IIJE,1:IKT)) +PFLXZTHMF(:,:) = PEMF(:,:)*(PTHL_UP(:,:)-PFLXZTHMF(:,:)) +PFLXZRMF(:,:) = PEMF(:,:)*(PRT_UP(:,:)-PFLXZRMF(:,:)) +PFLXZTHVMF(:,:) = PEMF(:,:)*(PTHV_UP(:,:)-PFLXZTHVMF(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) IF (OMIXUV) THEN CALL MZM_MF(D, PUM(:,:), PFLXZUMF(:,:)) CALL MZM_MF(D, PVM(:,:), PFLXZVMF(:,:)) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PFLXZUMF(IIJB:IIJE,1:IKT) = PEMF(IIJB:IIJE,1:IKT)*(PU_UP(IIJB:IIJE,1:IKT)-PFLXZUMF(IIJB:IIJE,1:IKT)) - PFLXZVMF(IIJB:IIJE,1:IKT) = PEMF(IIJB:IIJE,1:IKT)*(PV_UP(IIJB:IIJE,1:IKT)-PFLXZVMF(IIJB:IIJE,1:IKT)) + PFLXZUMF(:,:) = PEMF(:,:)*(PU_UP(:,:)-PFLXZUMF(:,:)) + PFLXZVMF(:,:) = PEMF(:,:)*(PV_UP(:,:)-PFLXZVMF(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE PFLXZUMF(:,:) = 0. @@ -197,8 +197,8 @@ CALL TRIDIAG_MASSFLUX(D,PTHLM,PFLXZTHMF,-PEMF,PTSTEP,PIMPL, & ! compute new flux and THL tendency CALL MZM_MF(D, ZVARS(:,:), PFLXZTHMF(:,:)) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PFLXZTHMF(IIJB:IIJE,1:IKT) = PEMF(IIJB:IIJE,1:IKT)*(PTHL_UP(IIJB:IIJE,1:IKT)-PFLXZTHMF(IIJB:IIJE,1:IKT)) -PTHLDT(IIJB:IIJE,1:IKT)= (ZVARS(IIJB:IIJE,1:IKT)-PTHLM(IIJB:IIJE,1:IKT))/PTSTEP +PFLXZTHMF(:,:) = PEMF(:,:)*(PTHL_UP(:,:)-PFLXZTHMF(:,:)) +PTHLDT(:,:)= (ZVARS(:,:)-PTHLM(:,:))/PTSTEP !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! @@ -209,8 +209,8 @@ CALL TRIDIAG_MASSFLUX(D,PRTM(:,:),PFLXZRMF,-PEMF,PTSTEP,PIMPL, & ! compute new flux and RT tendency CALL MZM_MF(D, ZVARS(:,:), PFLXZRMF(:,:)) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PFLXZRMF(IIJB:IIJE,1:IKT) = PEMF(IIJB:IIJE,1:IKT)*(PRT_UP(IIJB:IIJE,1:IKT)-PFLXZRMF(IIJB:IIJE,1:IKT)) -PRTDT(IIJB:IIJE,1:IKT) = (ZVARS(IIJB:IIJE,1:IKT)-PRTM(IIJB:IIJE,1:IKT))/PTSTEP +PFLXZRMF(:,:) = PEMF(:,:)*(PRT_UP(:,:)-PFLXZRMF(:,:)) +PRTDT(:,:) = (ZVARS(:,:)-PRTM(:,:))/PTSTEP !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! @@ -225,8 +225,8 @@ IF (OMIXUV) THEN ! compute new flux and U tendency CALL MZM_MF(D, ZVARS(:,:), PFLXZUMF(:,:)) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PFLXZUMF(IIJB:IIJE,1:IKT) = PEMF(IIJB:IIJE,1:IKT)*(PU_UP(IIJB:IIJE,1:IKT)-PFLXZUMF(IIJB:IIJE,1:IKT)) - PUDT(IIJB:IIJE,1:IKT)= (ZVARS(IIJB:IIJE,1:IKT)-PUM(IIJB:IIJE,1:IKT))/PTSTEP + PFLXZUMF(:,:) = PEMF(:,:)*(PU_UP(:,:)-PFLXZUMF(:,:)) + PUDT(:,:)= (ZVARS(:,:)-PUM(:,:))/PTSTEP !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! ! @@ -239,8 +239,8 @@ IF (OMIXUV) THEN ! compute new flux and V tendency CALL MZM_MF(D, ZVARS(:,:), PFLXZVMF(:,:)) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PFLXZVMF(IIJB:IIJE,1:IKT) = PEMF(IIJB:IIJE,1:IKT)*(PV_UP(IIJB:IIJE,1:IKT)-PFLXZVMF(IIJB:IIJE,1:IKT)) - PVDT(IIJB:IIJE,1:IKT)= (ZVARS(IIJB:IIJE,1:IKT)-PVM(IIJB:IIJE,1:IKT))/PTSTEP + PFLXZVMF(:,:) = PEMF(:,:)*(PV_UP(:,:)-PFLXZVMF(:,:)) + PVDT(:,:)= (ZVARS(:,:)-PVM(:,:))/PTSTEP !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE PUDT(:,:)=0. @@ -256,8 +256,8 @@ DO JSV=1,KSV CALL MZM_MF(D, PSVM(:,:,JSV), PFLXZSVMF(:,:,JSV)) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PFLXZSVMF(IIJB:IIJE,1:IKT,JSV) = PEMF(IIJB:IIJE,1:IKT)*& - & (PSV_UP(IIJB:IIJE,1:IKT,JSV)-PFLXZSVMF(IIJB:IIJE,1:IKT,JSV)) + PFLXZSVMF(:,:,JSV) = PEMF(:,:)*& + & (PSV_UP(:,:,JSV)-PFLXZSVMF(:,:,JSV)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! ! 3.5 Compute the tendency for scalar variables @@ -268,9 +268,9 @@ DO JSV=1,KSV ! compute new flux and Sv tendency CALL MZM_MF(D, ZVARS, PFLXZSVMF(:,:,JSV)) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PFLXZSVMF(IIJB:IIJE,1:IKT,JSV) = PEMF(IIJB:IIJE,1:IKT)*& - & (PSV_UP(IIJB:IIJE,1:IKT,JSV)-PFLXZSVMF(IIJB:IIJE,1:IKT,JSV)) - PSVDT(IIJB:IIJE,1:IKT,JSV)= (ZVARS(IIJB:IIJE,1:IKT)-PSVM(IIJB:IIJE,1:IKT,JSV))/PTSTEP + PFLXZSVMF(:,:,JSV) = PEMF(:,:)*& + & (PSV_UP(:,:,JSV)-PFLXZSVMF(:,:,JSV)) + PSVDT(:,:,JSV)= (ZVARS(:,:)-PSVM(:,:,JSV))/PTSTEP !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ENDDO diff --git a/src/PHYEX/turb/mode_mf_turb_expl.f90 b/src/PHYEX/turb/mode_mf_turb_expl.f90 index 79fc3919e2eaa1ad73986573b672e0ef3787812c..8463dd902a9d46b751d72663cd10101cc9ddfefc 100644 --- a/src/PHYEX/turb/mode_mf_turb_expl.f90 +++ b/src/PHYEX/turb/mode_mf_turb_expl.f90 @@ -138,29 +138,29 @@ PVDT = 0. CALL MZM_MF(D, PRTM (:,:), ZRTM_F(:,:)) CALL MZM_MF(D, PTHLM(:,:), ZTHLM_F(:,:)) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZQTM(IIJB:IIJE,1:IKT) = ZRTM_F(IIJB:IIJE,1:IKT)/(1.+ZRTM_F(IIJB:IIJE,1:IKT)) -ZQT_UP(IIJB:IIJE,1:IKT) = PRT_UP(IIJB:IIJE,1:IKT)/(1.+PRT_UP(IIJB:IIJE,1:IKT)) -ZTHS_UP(IIJB:IIJE,1:IKT)= PTHL_UP(IIJB:IIJE,1:IKT)*(1.+PARAMMF%XLAMBDA_MF*ZQT_UP(IIJB:IIJE,1:IKT)) -ZTHSM(IIJB:IIJE,1:IKT) = ZTHLM_F(IIJB:IIJE,1:IKT)*(1.+PARAMMF%XLAMBDA_MF*ZQTM(IIJB:IIJE,1:IKT)) +ZQTM(:,:) = ZRTM_F(:,:)/(1.+ZRTM_F(:,:)) +ZQT_UP(:,:) = PRT_UP(:,:)/(1.+PRT_UP(:,:)) +ZTHS_UP(:,:)= PTHL_UP(:,:)*(1.+PARAMMF%XLAMBDA_MF*ZQT_UP(:,:)) +ZTHSM(:,:) = ZTHLM_F(:,:)*(1.+PARAMMF%XLAMBDA_MF*ZQTM(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_MF(D, PTHLM(:,:), PFLXZTHLMF(:,:)) CALL MZM_MF(D, PRTM(:,:), PFLXZRMF(:,:)) CALL MZM_MF(D, PTHVM(:,:), PFLXZTHVMF(:,:)) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PFLXZTHLMF(IIJB:IIJE,1:IKT) = PEMF(IIJB:IIJE,1:IKT)*(PTHL_UP(IIJB:IIJE,1:IKT)-PFLXZTHLMF(IIJB:IIJE,1:IKT)) ! ThetaL -PFLXZRMF(IIJB:IIJE,1:IKT) = PEMF(IIJB:IIJE,1:IKT)*(PRT_UP(IIJB:IIJE,1:IKT)-PFLXZRMF(IIJB:IIJE,1:IKT)) ! Rt -PFLXZTHVMF(IIJB:IIJE,1:IKT) = PEMF(IIJB:IIJE,1:IKT)*(PTHV_UP(IIJB:IIJE,1:IKT)-PFLXZTHVMF(IIJB:IIJE,1:IKT)) ! ThetaV +PFLXZTHLMF(:,:) = PEMF(:,:)*(PTHL_UP(:,:)-PFLXZTHLMF(:,:)) ! ThetaL +PFLXZRMF(:,:) = PEMF(:,:)*(PRT_UP(:,:)-PFLXZRMF(:,:)) ! Rt +PFLXZTHVMF(:,:) = PEMF(:,:)*(PTHV_UP(:,:)-PFLXZTHVMF(:,:)) ! ThetaV -ZFLXZTHSMF(IIJB:IIJE,1:IKT) = PEMF(IIJB:IIJE,1:IKT)*(ZTHS_UP(IIJB:IIJE,1:IKT)-ZTHSM(IIJB:IIJE,1:IKT)) ! Theta S flux +ZFLXZTHSMF(:,:) = PEMF(:,:)*(ZTHS_UP(:,:)-ZTHSM(:,:)) ! Theta S flux !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) IF (PARAMMF%LMIXUV) THEN CALL MZM_MF(D, PUM(:,:), PFLXZUMF(:,:)) CALL MZM_MF(D, PVM(:,:), PFLXZVMF(:,:)) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PFLXZUMF(IIJB:IIJE,1:IKT) = PEMF(IIJB:IIJE,1:IKT)*(PU_UP(IIJB:IIJE,1:IKT)-PFLXZUMF(IIJB:IIJE,1:IKT)) ! U - PFLXZVMF(IIJB:IIJE,1:IKT) = PEMF(IIJB:IIJE,1:IKT)*(PV_UP(IIJB:IIJE,1:IKT)-PFLXZVMF(IIJB:IIJE,1:IKT)) ! V + PFLXZUMF(:,:) = PEMF(:,:)*(PU_UP(:,:)-PFLXZUMF(:,:)) ! U + PFLXZVMF(:,:) = PEMF(:,:)*(PV_UP(:,:)-PFLXZVMF(:,:)) ! V !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE PFLXZUMF(:,:) = 0. diff --git a/src/PHYEX/turb/mode_prandtl.f90 b/src/PHYEX/turb/mode_prandtl.f90 index f911cba340f766ae9cb41483fdb0fbed6072bb3b..f8f63f41324260074f34c016112306acd8e4fae9 100644 --- a/src/PHYEX/turb/mode_prandtl.f90 +++ b/src/PHYEX/turb/mode_prandtl.f90 @@ -264,8 +264,8 @@ CALL EMOIST(D,CST,KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,OOCEAN,ZWORK2) CALL MZM_PHY(D,ZWORK1,PETHETA) CALL MZM_PHY(D,ZWORK2,PEMOIST) !$mnh_expand_array(JIJ=IIJB:IIJE) -PETHETA(IIJB:IIJE,IKA) = 2.*PETHETA(IIJB:IIJE,IKB) - PETHETA(IIJB:IIJE,IKB+IKL) -PEMOIST(IIJB:IIJE,IKA) = 2.*PEMOIST(IIJB:IIJE,IKB) - PEMOIST(IIJB:IIJE,IKB+IKL) +PETHETA(:,IKA) = 2.*PETHETA(:,IKB) - PETHETA(:,IKB+IKL) +PEMOIST(:,IKA) = 2.*PEMOIST(:,IKB) - PEMOIST(:,IKB+IKL) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !--------------------------------------------------------------------------- @@ -275,13 +275,13 @@ IF (.NOT. OHARAT) THEN ! IF (OOCEAN) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = CST%XG * CST%XALPHAOC * PLM(IIJB:IIJE,1:IKT) & - * PLEPS(IIJB:IIJE,1:IKT) / PTKEM(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = CST%XG * CST%XALPHAOC * PLM(:,:) & + * PLEPS(:,:) / PTKEM(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = CST%XG / PTHVREF(IIJB:IIJE,1:IKT) * PLM(IIJB:IIJE,1:IKT) & - * PLEPS(IIJB:IIJE,1:IKT) / PTKEM(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = CST%XG / PTHVREF(:,:) * PLM(:,:) & + * PLEPS(:,:) / PTKEM(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -290,22 +290,22 @@ CALL GZ_M_W_PHY(D,PTHLM,PDZZ,ZWORK1) ! IF (OOCEAN) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PREDTH1(IIJB:IIJE,1:IKT)= CSTURB%XCTV*PBLL_O_E(IIJB:IIJE,1:IKT)*ZWORK1(IIJB:IIJE,1:IKT) + PREDTH1(:,:)= CSTURB%XCTV*PBLL_O_E(:,:)*ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) PREDR1(:,:) = 0. ELSE IF (KRR /= 0) THEN ! moist case CALL GZ_M_W_PHY(D,PRM(:,:,1),PDZZ,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PREDTH1(IIJB:IIJE,1:IKT)= CSTURB%XCTV*PBLL_O_E(IIJB:IIJE,1:IKT) * PETHETA(IIJB:IIJE,1:IKT) & - * ZWORK1(IIJB:IIJE,1:IKT) - PREDR1(IIJB:IIJE,1:IKT) = CSTURB%XCTV*PBLL_O_E(IIJB:IIJE,1:IKT) * PEMOIST(IIJB:IIJE,1:IKT) & - * ZWORK2(IIJB:IIJE,1:IKT) + PREDTH1(:,:)= CSTURB%XCTV*PBLL_O_E(:,:) * PETHETA(:,:) & + * ZWORK1(:,:) + PREDR1(:,:) = CSTURB%XCTV*PBLL_O_E(:,:) * PEMOIST(:,:) & + * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE ! dry case !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PREDTH1(IIJB:IIJE,1:IKT)= CSTURB%XCTV*PBLL_O_E(IIJB:IIJE,1:IKT) * ZWORK1(IIJB:IIJE,1:IKT) - PREDR1(IIJB:IIJE,1:IKT) = 0. + PREDTH1(:,:)= CSTURB%XCTV*PBLL_O_E(:,:) * ZWORK1(:,:) + PREDR1(:,:) = 0. !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF END IF @@ -371,7 +371,7 @@ ENDDO DO JSV=1,KSV CALL GZ_M_W_PHY(D,PSVM(:,:,JSV),PDZZ,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PREDS1(IIJB:IIJE,1:IKT,JSV)=CSTURB%XCTV*PBLL_O_E(IIJB:IIJE,1:IKT)*ZWORK1(IIJB:IIJE,1:IKT) + PREDS1(:,:,JSV)=CSTURB%XCTV*PBLL_O_E(:,:)*ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END DO ! @@ -397,60 +397,60 @@ IF(HTURBDIM=='1DIM') THEN ! 1D case ! ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PRED2TH3(IIJB:IIJE,1:IKT) = PREDTH1(IIJB:IIJE,1:IKT)**2 + PRED2TH3(:,:) = PREDTH1(:,:)**2 ! - PRED2R3(IIJB:IIJE,1:IKT) = PREDR1(IIJB:IIJE,1:IKT) **2 + PRED2R3(:,:) = PREDR1(:,:) **2 ! - PRED2THR3(IIJB:IIJE,1:IKT) = PREDTH1(IIJB:IIJE,1:IKT) * PREDR1(IIJB:IIJE,1:IKT) + PRED2THR3(:,:) = PREDTH1(:,:) * PREDR1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! ELSE IF (O2D) THEN ! 3D case in a 2D model ! CALL GX_M_M_PHY(D,OFLAT,PTHLM,PDXX,PDZZ,PDZX,ZGXMM_PTH) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZGXMM_PTH(IIJB:IIJE,1:IKT)**2 + ZWORK1(:,:) = ZGXMM_PTH(:,:)**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZWORK2) ! IF (KRR /= 0) THEN ! moist 3D case CALL GX_M_M_PHY(D,OFLAT,PRM(:,:,1),PDXX,PDZZ,PDZX,ZGXMM_PRM) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZGXMM_PRM(IIJB:IIJE,1:IKT)**2 + ZWORK1(:,:) = ZGXMM_PRM(:,:)**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZWORK3) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZGXMM_PTH(IIJB:IIJE,1:IKT) * ZGXMM_PRM(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZGXMM_PTH(:,:) * ZGXMM_PRM(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZWORK4) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PRED2TH3(IIJB:IIJE,1:IKT)= PREDTH1(IIJB:IIJE,1:IKT)**2+(CSTURB%XCTV*PBLL_O_E(IIJB:IIJE,1:IKT) & - *PETHETA(IIJB:IIJE,1:IKT) )**2 * ZWORK2(IIJB:IIJE,1:IKT) + PRED2TH3(:,:)= PREDTH1(:,:)**2+(CSTURB%XCTV*PBLL_O_E(:,:) & + *PETHETA(:,:) )**2 * ZWORK2(:,:) ! - PRED2R3(IIJB:IIJE,1:IKT)= PREDR1(IIJB:IIJE,1:IKT)**2 + (CSTURB%XCTV*PBLL_O_E(IIJB:IIJE,1:IKT) & - * PEMOIST(IIJB:IIJE,1:IKT))**2 * ZWORK3(IIJB:IIJE,1:IKT) + PRED2R3(:,:)= PREDR1(:,:)**2 + (CSTURB%XCTV*PBLL_O_E(:,:) & + * PEMOIST(:,:))**2 * ZWORK3(:,:) ! - PRED2THR3(IIJB:IIJE,1:IKT)= PREDR1(IIJB:IIJE,1:IKT) * PREDTH1(IIJB:IIJE,1:IKT) + CSTURB%XCTV**2 & - * PBLL_O_E(IIJB:IIJE,1:IKT)**2 & - * PEMOIST(IIJB:IIJE,1:IKT) * PETHETA(IIJB:IIJE,1:IKT) & - * ZWORK4(IIJB:IIJE,1:IKT) + PRED2THR3(:,:)= PREDR1(:,:) * PREDTH1(:,:) + CSTURB%XCTV**2 & + * PBLL_O_E(:,:)**2 & + * PEMOIST(:,:) * PETHETA(:,:) & + * ZWORK4(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! - PRED2TH3(IIJB:IIJE,IKB)=PRED2TH3(IIJB:IIJE,IKB+IKL) - PRED2R3(IIJB:IIJE,IKB)=PRED2R3(IIJB:IIJE,IKB+IKL) - PRED2THR3(IIJB:IIJE,IKB)=PRED2THR3(IIJB:IIJE,IKB+IKL) + PRED2TH3(:,IKB)=PRED2TH3(:,IKB+IKL) + PRED2R3(:,IKB)=PRED2R3(:,IKB+IKL) + PRED2THR3(:,IKB)=PRED2THR3(:,IKB+IKL) ! ELSE ! dry 3D case in a 2D model !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PRED2TH3(IIJB:IIJE,1:IKT) = PREDTH1(IIJB:IIJE,1:IKT)**2 + CSTURB%XCTV**2 & - * PBLL_O_E(IIJB:IIJE,1:IKT)**2 * ZWORK2(IIJB:IIJE,1:IKT) + PRED2TH3(:,:) = PREDTH1(:,:)**2 + CSTURB%XCTV**2 & + * PBLL_O_E(:,:)**2 * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PRED2TH3(IIJB:IIJE,IKB)=PRED2TH3(IIJB:IIJE,IKB+IKL) + PRED2TH3(:,IKB)=PRED2TH3(:,IKB+IKL) ! - PRED2R3(IIJB:IIJE,1:IKT) = 0. + PRED2R3(:,:) = 0. ! - PRED2THR3(IIJB:IIJE,1:IKT) = 0. + PRED2THR3(:,:) = 0. ! END IF ! @@ -459,7 +459,7 @@ ELSE ! 3D case in a 3D model CALL GX_M_M_PHY(D,OFLAT,PTHLM,PDXX,PDZZ,PDZX,ZGXMM_PTH) CALL GY_M_M_PHY(D,OFLAT,PTHLM,PDYY,PDZZ,PDZY,ZGYMM_PTH) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZGXMM_PTH(IIJB:IIJE,1:IKT)**2 + ZGYMM_PTH(IIJB:IIJE,1:IKT)**2 + ZWORK1(:,:) = ZGXMM_PTH(:,:)**2 + ZGYMM_PTH(:,:)**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZWORK2) ! @@ -467,44 +467,44 @@ ELSE ! 3D case in a 3D model CALL GX_M_M_PHY(D,OFLAT,PRM(:,:,1),PDXX,PDZZ,PDZX,ZGXMM_PRM) CALL GY_M_M_PHY(D,OFLAT,PRM(:,:,1),PDYY,PDZZ,PDZY,ZGYMM_PRM) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZGXMM_PRM(IIJB:IIJE,1:IKT)**2 + ZGYMM_PRM(IIJB:IIJE,1:IKT)**2 + ZWORK1(:,:) = ZGXMM_PRM(:,:)**2 + ZGYMM_PRM(:,:)**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZWORK3) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZGXMM_PRM(IIJB:IIJE,1:IKT) * ZGXMM_PTH(IIJB:IIJE,1:IKT) & - + ZGYMM_PRM(IIJB:IIJE,1:IKT) * ZGYMM_PTH(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZGXMM_PRM(:,:) * ZGXMM_PTH(:,:) & + + ZGYMM_PRM(:,:) * ZGYMM_PTH(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZWORK4) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PRED2TH3(IIJB:IIJE,1:IKT)= PREDTH1(IIJB:IIJE,1:IKT)**2 + ( CSTURB%XCTV*PBLL_O_E(IIJB:IIJE,1:IKT) & - * PETHETA(IIJB:IIJE,1:IKT) )**2 * ZWORK2(IIJB:IIJE,1:IKT) + PRED2TH3(:,:)= PREDTH1(:,:)**2 + ( CSTURB%XCTV*PBLL_O_E(:,:) & + * PETHETA(:,:) )**2 * ZWORK2(:,:) ! - PRED2R3(IIJB:IIJE,1:IKT)= PREDR1(IIJB:IIJE,1:IKT)**2 + (CSTURB%XCTV*PBLL_O_E(IIJB:IIJE,1:IKT) & - * PEMOIST(IIJB:IIJE,1:IKT))**2 * ZWORK3(IIJB:IIJE,1:IKT) + PRED2R3(:,:)= PREDR1(:,:)**2 + (CSTURB%XCTV*PBLL_O_E(:,:) & + * PEMOIST(:,:))**2 * ZWORK3(:,:) ! - PRED2THR3(IIJB:IIJE,1:IKT)= PREDR1(IIJB:IIJE,1:IKT) * PREDTH1(IIJB:IIJE,1:IKT) + CSTURB%XCTV**2 & - * PBLL_O_E(IIJB:IIJE,1:IKT)**2 * & - PEMOIST(IIJB:IIJE,1:IKT) * PETHETA(IIJB:IIJE,1:IKT) * ZWORK4(IIJB:IIJE,1:IKT) + PRED2THR3(:,:)= PREDR1(:,:) * PREDTH1(:,:) + CSTURB%XCTV**2 & + * PBLL_O_E(:,:)**2 * & + PEMOIST(:,:) * PETHETA(:,:) * ZWORK4(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! - PRED2TH3(IIJB:IIJE,IKB)=PRED2TH3(IIJB:IIJE,IKB+IKL) - PRED2R3(IIJB:IIJE,IKB)=PRED2R3(IIJB:IIJE,IKB+IKL) - PRED2THR3(IIJB:IIJE,IKB)=PRED2THR3(IIJB:IIJE,IKB+IKL) + PRED2TH3(:,IKB)=PRED2TH3(:,IKB+IKL) + PRED2R3(:,IKB)=PRED2R3(:,IKB+IKL) + PRED2THR3(:,IKB)=PRED2THR3(:,IKB+IKL) ! ELSE ! dry 3D case in a 3D model !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PRED2TH3(IIJB:IIJE,1:IKT) = PREDTH1(IIJB:IIJE,1:IKT)**2 + CSTURB%XCTV**2 & - * PBLL_O_E(IIJB:IIJE,1:IKT)**2 * ZWORK2(IIJB:IIJE,1:IKT) + PRED2TH3(:,:) = PREDTH1(:,:)**2 + CSTURB%XCTV**2 & + * PBLL_O_E(:,:)**2 * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! - PRED2TH3(IIJB:IIJE,IKB)=PRED2TH3(IIJB:IIJE,IKB+IKL) + PRED2TH3(:,IKB)=PRED2TH3(:,IKB+IKL) ! - PRED2R3(IIJB:IIJE,1:IKT) = 0. + PRED2R3(:,:) = 0. ! - PRED2THR3(IIJB:IIJE,1:IKT) = 0. + PRED2THR3(:,:) = 0. ! END IF ! @@ -520,11 +520,11 @@ DO JSV=1,KSV IF(HTURBDIM=='1DIM') THEN ! 1D case !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PRED2THS3(IIJB:IIJE,1:IKT,JSV) = PREDS1(IIJB:IIJE,1:IKT,JSV) * PREDTH1(IIJB:IIJE,1:IKT) + PRED2THS3(:,:,JSV) = PREDS1(:,:,JSV) * PREDTH1(:,:) IF (KRR /= 0) THEN - PRED2RS3(IIJB:IIJE,1:IKT,JSV) = PREDR1(IIJB:IIJE,1:IKT) *PREDS1(IIJB:IIJE,1:IKT,JSV) + PRED2RS3(:,:,JSV) = PREDR1(:,:) *PREDS1(:,:,JSV) ELSE - PRED2RS3(IIJB:IIJE,1:IKT,JSV) = 0. + PRED2RS3(:,:,JSV) = 0. END IF !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! @@ -532,21 +532,21 @@ DO JSV=1,KSV ! IF (OOCEAN) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = (CST%XG *CST%XALPHAOC * PLM(IIJB:IIJE,1:IKT) * PLEPS(IIJB:IIJE,1:IKT) & - / PTKEM(IIJB:IIJE,1:IKT))**2 + ZWORK1(:,:) = (CST%XG *CST%XALPHAOC * PLM(:,:) * PLEPS(:,:) & + / PTKEM(:,:))**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZWORK2) IF (KRR /= 0) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZW1(IIJB:IIJE,1:IKT) = ZWORK2(IIJB:IIJE,1:IKT) * PETHETA(IIJB:IIJE,1:IKT) + ZW1(:,:) = ZWORK2(:,:) * PETHETA(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE ZW1 = ZWORK2 END IF ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = (CST%XG / PTHVREF(IIJB:IIJE,1:IKT) * PLM(IIJB:IIJE,1:IKT) & - * PLEPS(IIJB:IIJE,1:IKT) / PTKEM(IIJB:IIJE,1:IKT))**2 + ZWORK1(:,:) = (CST%XG / PTHVREF(:,:) * PLM(:,:) & + * PLEPS(:,:) / PTKEM(:,:))**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZW1) ! @@ -555,29 +555,29 @@ DO JSV=1,KSV CALL GX_M_M_PHY(D,OFLAT,PRM(:,:,1),PDXX,PDZZ,PDZX,ZGXMM_PRM) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZGXMM_PSV(IIJB:IIJE,1:IKT) * ZGXMM_PTH(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZGXMM_PSV(:,:) * ZGXMM_PTH(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZWORK2) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZGXMM_PSV(IIJB:IIJE,1:IKT) * ZGXMM_PRM(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZGXMM_PSV(:,:) * ZGXMM_PRM(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZWORK3) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) IF (KRR /= 0) THEN - ZWORK1(IIJB:IIJE,1:IKT) = ZW1(IIJB:IIJE,1:IKT)*PETHETA(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZW1(:,:)*PETHETA(:,:) ELSE - ZWORK1(IIJB:IIJE,1:IKT) = ZW1(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZW1(:,:) END IF - PRED2THS3(IIJB:IIJE,1:IKT,JSV) = PREDTH1(IIJB:IIJE,1:IKT) * PREDS1(IIJB:IIJE,1:IKT,JSV) + & - ZWORK1(IIJB:IIJE,1:IKT) * ZWORK2(IIJB:IIJE,1:IKT) + PRED2THS3(:,:,JSV) = PREDTH1(:,:) * PREDS1(:,:,JSV) + & + ZWORK1(:,:) * ZWORK2(:,:) ! IF (KRR /= 0) THEN - PRED2RS3(IIJB:IIJE,1:IKT,JSV) = PREDR1(IIJB:IIJE,1:IKT) * PREDS1(IIJB:IIJE,1:IKT,JSV) + & - ZW1(IIJB:IIJE,1:IKT) * PEMOIST(IIJB:IIJE,1:IKT) * ZWORK3(IIJB:IIJE,1:IKT) + PRED2RS3(:,:,JSV) = PREDR1(:,:) * PREDS1(:,:,JSV) + & + ZW1(:,:) * PEMOIST(:,:) * ZWORK3(:,:) ELSE - PRED2RS3(IIJB:IIJE,1:IKT,JSV) = 0. + PRED2RS3(:,:,JSV) = 0. END IF !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF @@ -586,21 +586,21 @@ DO JSV=1,KSV ! IF (OOCEAN) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = (CST%XG *CST%XALPHAOC * PLM(IIJB:IIJE,1:IKT) * PLEPS(IIJB:IIJE,1:IKT) & - / PTKEM(IIJB:IIJE,1:IKT))**2 + ZWORK1(:,:) = (CST%XG *CST%XALPHAOC * PLM(:,:) * PLEPS(:,:) & + / PTKEM(:,:))**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZWORK2) IF (KRR /= 0) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZW1(IIJB:IIJE,1:IKT) = ZWORK2(IIJB:IIJE,1:IKT) * PETHETA(IIJB:IIJE,1:IKT) + ZW1(:,:) = ZWORK2(:,:) * PETHETA(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE ZW1 = ZWORK2 END IF ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = (CST%XG / PTHVREF(IIJB:IIJE,1:IKT) * PLM(IIJB:IIJE,1:IKT) & - * PLEPS(IIJB:IIJE,1:IKT) / PTKEM(IIJB:IIJE,1:IKT))**2 + ZWORK1(:,:) = (CST%XG / PTHVREF(:,:) * PLM(:,:) & + * PLEPS(:,:) / PTKEM(:,:))**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZW1) ! @@ -612,35 +612,35 @@ DO JSV=1,KSV CALL GY_M_M_PHY(D,OFLAT,PRM(:,:,1),PDYY,PDZZ,PDZY,ZGYMM_PRM) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZGXMM_PSV(IIJB:IIJE,1:IKT) * ZGXMM_PTH(IIJB:IIJE,1:IKT) & - + ZGYMM_PSV(IIJB:IIJE,1:IKT) * ZGYMM_PTH(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZGXMM_PSV(:,:) * ZGXMM_PTH(:,:) & + + ZGYMM_PSV(:,:) * ZGYMM_PTH(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZWORK2) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZGXMM_PSV(IIJB:IIJE,1:IKT) * ZGXMM_PRM(IIJB:IIJE,1:IKT) & - + ZGYMM_PSV(IIJB:IIJE,1:IKT) * ZGYMM_PRM(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZGXMM_PSV(:,:) * ZGXMM_PRM(:,:) & + + ZGYMM_PSV(:,:) * ZGYMM_PRM(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZWORK3) ! IF (KRR /= 0) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZW1(IIJB:IIJE,1:IKT)*PETHETA(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZW1(:,:)*PETHETA(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE - ZWORK1(IIJB:IIJE,1:IKT) = ZW1(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZW1(:,:) END IF !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PRED2THS3(IIJB:IIJE,1:IKT,JSV) = PREDTH1(IIJB:IIJE,1:IKT) * PREDS1(IIJB:IIJE,1:IKT,JSV) + & - ZWORK1(IIJB:IIJE,1:IKT)*ZWORK2(IIJB:IIJE,1:IKT) + PRED2THS3(:,:,JSV) = PREDTH1(:,:) * PREDS1(:,:,JSV) + & + ZWORK1(:,:)*ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) IF (KRR /= 0) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PRED2RS3(IIJB:IIJE,1:IKT,JSV) = PREDR1(IIJB:IIJE,1:IKT) * PREDS1(IIJB:IIJE,1:IKT,JSV) + & - ZW1(IIJB:IIJE,1:IKT) * PEMOIST(IIJB:IIJE,1:IKT) * ZWORK3(IIJB:IIJE,1:IKT) + PRED2RS3(:,:,JSV) = PREDR1(:,:) * PREDS1(:,:,JSV) + & + ZW1(:,:) * PEMOIST(:,:) * ZWORK3(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE - PRED2RS3(IIJB:IIJE,1:IKT,JSV) = 0. + PRED2RS3(:,:,JSV) = 0. END IF END IF ! @@ -755,10 +755,10 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZCOEF(IIJB:IIJE,1:IKT) = MAX(MIN(( 10.*(1.-PPHI3(IIJB:IIJE,1:IKT)/CSTURB%XPHI_LIM)) ,1.), 0.) +ZCOEF(:,:) = MAX(MIN(( 10.*(1.-PPHI3(:,:)/CSTURB%XPHI_LIM)) ,1.), 0.) ! -PF(IIJB:IIJE,1:IKT) = ZCOEF(IIJB:IIJE,1:IKT) * PF(IIJB:IIJE,1:IKT) & - + (1.-ZCOEF(IIJB:IIJE,1:IKT)) * PF_LIM(IIJB:IIJE,1:IKT) +PF(:,:) = ZCOEF(:,:) * PF(:,:) & + + (1.-ZCOEF(:,:)) * PF_LIM(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! END SUBROUTINE SMOOTH_TURB_FUNCT @@ -790,48 +790,48 @@ IF (HTURBDIM=='3DIM') THEN !* 3DIM case !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) IF (OUSERV) THEN - ZW1(IIJB:IIJE,1:IKT) = 1. + 1.5* (PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT)) + & - ( 0.5 * (PREDTH1(IIJB:IIJE,1:IKT)**2+PREDR1(IIJB:IIJE,1:IKT)**2) & - + PREDTH1(IIJB:IIJE,1:IKT) * PREDR1(IIJB:IIJE,1:IKT) & + ZW1(:,:) = 1. + 1.5* (PREDTH1(:,:)+PREDR1(:,:)) + & + ( 0.5 * (PREDTH1(:,:)**2+PREDR1(:,:)**2) & + + PREDTH1(:,:) * PREDR1(:,:) & ) - ZW2(IIJB:IIJE,1:IKT) = 0.5 * (PRED2TH3(IIJB:IIJE,1:IKT)-PRED2R3(IIJB:IIJE,1:IKT)) + ZW2(:,:) = 0.5 * (PRED2TH3(:,:)-PRED2R3(:,:)) - PPHI3(IIJB:IIJE,1:IKT)= 1. - & - ( ( (1.+PREDR1(IIJB:IIJE,1:IKT)) * & - (PRED2THR3(IIJB:IIJE,1:IKT) + PRED2TH3(IIJB:IIJE,1:IKT)) / PREDTH1(IIJB:IIJE,1:IKT) & - ) + ZW2(IIJB:IIJE,1:IKT) & - ) / ZW1(IIJB:IIJE,1:IKT) + PPHI3(:,:)= 1. - & + ( ( (1.+PREDR1(:,:)) * & + (PRED2THR3(:,:) + PRED2TH3(:,:)) / PREDTH1(:,:) & + ) + ZW2(:,:) & + ) / ZW1(:,:) ELSE - ZW1(IIJB:IIJE,1:IKT) = 1. + 1.5* PREDTH1(IIJB:IIJE,1:IKT) + & - 0.5* PREDTH1(IIJB:IIJE,1:IKT)**2 + ZW1(:,:) = 1. + 1.5* PREDTH1(:,:) + & + 0.5* PREDTH1(:,:)**2 - ZW2(IIJB:IIJE,1:IKT) = 0.5* PRED2TH3(IIJB:IIJE,1:IKT) + ZW2(:,:) = 0.5* PRED2TH3(:,:) - PPHI3(IIJB:IIJE,1:IKT)= 1. - & - (PRED2TH3(IIJB:IIJE,1:IKT) / PREDTH1(IIJB:IIJE,1:IKT) + ZW2(IIJB:IIJE,1:IKT)) & - / ZW1(IIJB:IIJE,1:IKT) + PPHI3(:,:)= 1. - & + (PRED2TH3(:,:) / PREDTH1(:,:) + ZW2(:,:)) & + / ZW1(:,:) END IF !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) - WHERE( PPHI3(IIJB:IIJE,1:IKT) <= 0. .OR. PPHI3(IIJB:IIJE,1:IKT) > CSTURB%XPHI_LIM ) - PPHI3(IIJB:IIJE,1:IKT) = CSTURB%XPHI_LIM + WHERE( PPHI3(:,:) <= 0. .OR. PPHI3(:,:) > CSTURB%XPHI_LIM ) + PPHI3(:,:) = CSTURB%XPHI_LIM END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !* 1DIM case !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) IF (OUSERV) THEN - PPHI3(IIJB:IIJE,1:IKT)= 1./(1.+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT)) + PPHI3(:,:)= 1./(1.+PREDTH1(:,:)+PREDR1(:,:)) ELSE - PPHI3(IIJB:IIJE,1:IKT)= 1./(1.+PREDTH1(IIJB:IIJE,1:IKT)) + PPHI3(:,:)= 1./(1.+PREDTH1(:,:)) END IF !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! -PPHI3(IIJB:IIJE,IKB-1)=PPHI3(IIJB:IIJE,IKB) -PPHI3(IIJB:IIJE,IKE+1)=PPHI3(IIJB:IIJE,IKE) +PPHI3(:,IKB-1)=PPHI3(:,IKB) +PPHI3(:,IKE+1)=PPHI3(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:PHI3',1,ZHOOK_HANDLE) END SUBROUTINE PHI3 @@ -862,30 +862,30 @@ IKT=D%NKT ! DO JSV=1,KSV !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PPSI_SV(IIJB:IIJE,1:IKT,JSV) = ( 1. & + PPSI_SV(:,:,JSV) = ( 1. & - (CSTURB%XCPR3+CSTURB%XCPR5) * & - (PRED2THS(IIJB:IIJE,1:IKT,JSV)/PREDS1(IIJB:IIJE,1:IKT,JSV)-PREDTH1(IIJB:IIJE,1:IKT)) & + (PRED2THS(:,:,JSV)/PREDS1(:,:,JSV)-PREDTH1(:,:)) & - (CSTURB%XCPR4+CSTURB%XCPR5) * & - (PRED2RS(IIJB:IIJE,1:IKT,JSV)/PREDS1(IIJB:IIJE,1:IKT,JSV)-PREDR1(IIJB:IIJE,1:IKT)) & + (PRED2RS(:,:,JSV)/PREDS1(:,:,JSV)-PREDR1(:,:)) & - CSTURB%XCPR3 * & - PREDTH1(IIJB:IIJE,1:IKT) * PPHI3(IIJB:IIJE,1:IKT) & - - CSTURB%XCPR4 * PREDR1(IIJB:IIJE,1:IKT) * PPSI3(IIJB:IIJE,1:IKT) & - ) / ( 1. + CSTURB%XCPR5 * ( PREDTH1(IIJB:IIJE,1:IKT) + PREDR1(IIJB:IIJE,1:IKT) ) ) + PREDTH1(:,:) * PPHI3(:,:) & + - CSTURB%XCPR4 * PREDR1(:,:) * PPSI3(:,:) & + ) / ( 1. + CSTURB%XCPR5 * ( PREDTH1(:,:) + PREDR1(:,:) ) ) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! control of the PSI_SV positivity !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) - WHERE ( (PPSI_SV(IIJB:IIJE,1:IKT,JSV) <=0.).AND. (PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT))<=0.) - PPSI_SV(IIJB:IIJE,1:IKT,JSV)=CSTURB%XPHI_LIM + WHERE ( (PPSI_SV(:,:,JSV) <=0.).AND. (PREDTH1(:,:)+PREDR1(:,:))<=0.) + PPSI_SV(:,:,JSV)=CSTURB%XPHI_LIM END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PPSI_SV(IIJB:IIJE,1:IKT,JSV) = MAX( 1.E-4, MIN(CSTURB%XPHI_LIM,PPSI_SV(IIJB:IIJE,1:IKT,JSV)) ) + PPSI_SV(:,:,JSV) = MAX( 1.E-4, MIN(CSTURB%XPHI_LIM,PPSI_SV(:,:,JSV)) ) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! - PPSI_SV(IIJB:IIJE,IKB-1,JSV)=PPSI_SV(IIJB:IIJE,IKB,JSV) - PPSI_SV(IIJB:IIJE,IKE+1,JSV)=PPSI_SV(IIJB:IIJE,IKE,JSV) + PPSI_SV(:,IKB-1,JSV)=PPSI_SV(:,IKB,JSV) + PPSI_SV(:,IKE+1,JSV)=PPSI_SV(:,IKE,JSV) END DO ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:PSI_SV',1,ZHOOK_HANDLE) @@ -917,23 +917,23 @@ IF (HTURBDIM=='3DIM') THEN IF (OUSERV) THEN !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) #ifdef REPRO48 - WHERE (PPHI3(IIJB:IIJE,1:IKT)/=CSTURB%XPHI_LIM) + WHERE (PPHI3(:,:)/=CSTURB%XPHI_LIM) #else - WHERE (PPHI3(IIJB:IIJE,1:IKT)<=CSTURB%XPHI_LIM) + WHERE (PPHI3(:,:)<=CSTURB%XPHI_LIM) #endif - PD_PHI3DTDZ_O_DDTDZ(IIJB:IIJE,1:IKT) = PPHI3(IIJB:IIJE,1:IKT) & - * (1. - PREDTH1(IIJB:IIJE,1:IKT) * (3./2.+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT)) & - /((1.+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT)) & - *(1.+1./2.*(PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT))))) & - + (1.+PREDR1(IIJB:IIJE,1:IKT))*(PRED2THR3(IIJB:IIJE,1:IKT)+PRED2TH3(IIJB:IIJE,1:IKT)) & - / (PREDTH1(IIJB:IIJE,1:IKT)*(1.+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT))* & - (1.+1./2.*(PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT)))) & - - (1./2.*PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT) & - * (1.+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT))) & - / ((1.+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT))& - *(1.+1./2.*(PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT)))) + PD_PHI3DTDZ_O_DDTDZ(:,:) = PPHI3(:,:) & + * (1. - PREDTH1(:,:) * (3./2.+PREDTH1(:,:)+PREDR1(:,:)) & + /((1.+PREDTH1(:,:)+PREDR1(:,:)) & + *(1.+1./2.*(PREDTH1(:,:)+PREDR1(:,:))))) & + + (1.+PREDR1(:,:))*(PRED2THR3(:,:)+PRED2TH3(:,:)) & + / (PREDTH1(:,:)*(1.+PREDTH1(:,:)+PREDR1(:,:))* & + (1.+1./2.*(PREDTH1(:,:)+PREDR1(:,:)))) & + - (1./2.*PREDTH1(:,:)+PREDR1(:,:) & + * (1.+PREDTH1(:,:)+PREDR1(:,:))) & + / ((1.+PREDTH1(:,:)+PREDR1(:,:))& + *(1.+1./2.*(PREDTH1(:,:)+PREDR1(:,:)))) ELSEWHERE - PD_PHI3DTDZ_O_DDTDZ(IIJB:IIJE,1:IKT) = PPHI3(IIJB:IIJE,1:IKT) + PD_PHI3DTDZ_O_DDTDZ(:,:) = PPHI3(:,:) ENDWHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) @@ -941,19 +941,19 @@ IF (HTURBDIM=='3DIM') THEN ELSE !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) #ifdef REPRO48 - WHERE (PPHI3(IIJB:IIJE,1:IKT)/=CSTURB%XPHI_LIM) + WHERE (PPHI3(:,:)/=CSTURB%XPHI_LIM) #else - WHERE (PPHI3(IIJB:IIJE,1:IKT)<=CSTURB%XPHI_LIM) + WHERE (PPHI3(:,:)<=CSTURB%XPHI_LIM) #endif - PD_PHI3DTDZ_O_DDTDZ(IIJB:IIJE,1:IKT) = PPHI3(IIJB:IIJE,1:IKT) & - * (1. - PREDTH1(IIJB:IIJE,1:IKT) * (3./2.+PREDTH1(IIJB:IIJE,1:IKT)) & - /((1.+PREDTH1(IIJB:IIJE,1:IKT))*(1.+1./2.*PREDTH1(IIJB:IIJE,1:IKT)))) & - + PRED2TH3(IIJB:IIJE,1:IKT) & - / (PREDTH1(IIJB:IIJE,1:IKT)*(1.+PREDTH1(IIJB:IIJE,1:IKT))*(1.+1./2.*PREDTH1(IIJB:IIJE,1:IKT))) & - - 1./2.*PREDTH1(IIJB:IIJE,1:IKT) & - / ((1.+PREDTH1(IIJB:IIJE,1:IKT))*(1.+1./2.*PREDTH1(IIJB:IIJE,1:IKT))) + PD_PHI3DTDZ_O_DDTDZ(:,:) = PPHI3(:,:) & + * (1. - PREDTH1(:,:) * (3./2.+PREDTH1(:,:)) & + /((1.+PREDTH1(:,:))*(1.+1./2.*PREDTH1(:,:)))) & + + PRED2TH3(:,:) & + / (PREDTH1(:,:)*(1.+PREDTH1(:,:))*(1.+1./2.*PREDTH1(:,:))) & + - 1./2.*PREDTH1(:,:) & + / ((1.+PREDTH1(:,:))*(1.+1./2.*PREDTH1(:,:))) ELSEWHERE - PD_PHI3DTDZ_O_DDTDZ(IIJB:IIJE,1:IKT) = PPHI3(IIJB:IIJE,1:IKT) + PD_PHI3DTDZ_O_DDTDZ(:,:) = PPHI3(:,:) ENDWHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) ! @@ -978,8 +978,8 @@ END IF CALL SMOOTH_TURB_FUNCT(D,CSTURB,PPHI3,PPHI3,PD_PHI3DTDZ_O_DDTDZ) #endif ! -PD_PHI3DTDZ_O_DDTDZ(IIJB:IIJE,IKB-1)=PD_PHI3DTDZ_O_DDTDZ(IIJB:IIJE,IKB) -PD_PHI3DTDZ_O_DDTDZ(IIJB:IIJE,IKE+1)=PD_PHI3DTDZ_O_DDTDZ(IIJB:IIJE,IKE) +PD_PHI3DTDZ_O_DDTDZ(:,IKB-1)=PD_PHI3DTDZ_O_DDTDZ(:,IKB) +PD_PHI3DTDZ_O_DDTDZ(:,IKE+1)=PD_PHI3DTDZ_O_DDTDZ(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PHI3DTDZ_O_DDTDZ',1,ZHOOK_HANDLE) END SUBROUTINE D_PHI3DTDZ_O_DDTDZ @@ -1011,40 +1011,40 @@ IF (HTURBDIM=='3DIM') THEN IF (OUSERV) THEN !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) #ifdef REPRO48 - WHERE (PPHI3(IIJB:IIJE,1:IKT)/=CSTURB%XPHI_LIM) + WHERE (PPHI3(:,:)/=CSTURB%XPHI_LIM) #else - WHERE (PPHI3(IIJB:IIJE,1:IKT)<=CSTURB%XPHI_LIM) + WHERE (PPHI3(:,:)<=CSTURB%XPHI_LIM) #endif - PD_PHI3DRDZ_O_DDRDZ(IIJB:IIJE,1:IKT) = PPHI3(IIJB:IIJE,1:IKT) & - * (1.-PREDR1(IIJB:IIJE,1:IKT)*(3./2.+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT)) & - / ((1.+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT)) & - *(1.+1./2.*(PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT))))) & - - PREDR1(IIJB:IIJE,1:IKT) & - * (PRED2THR3(IIJB:IIJE,1:IKT)+PRED2TH3(IIJB:IIJE,1:IKT)) / (PREDTH1(IIJB:IIJE,1:IKT) & - * (1.+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT))*& - (1.+1./2.*(PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT)))) & - + PREDR1(IIJB:IIJE,1:IKT) * (1./2.+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT)) & - / ((1.+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT))& - *(1.+1./2.*(PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT)))) + PD_PHI3DRDZ_O_DDRDZ(:,:) = PPHI3(:,:) & + * (1.-PREDR1(:,:)*(3./2.+PREDTH1(:,:)+PREDR1(:,:)) & + / ((1.+PREDTH1(:,:)+PREDR1(:,:)) & + *(1.+1./2.*(PREDTH1(:,:)+PREDR1(:,:))))) & + - PREDR1(:,:) & + * (PRED2THR3(:,:)+PRED2TH3(:,:)) / (PREDTH1(:,:) & + * (1.+PREDTH1(:,:)+PREDR1(:,:))*& + (1.+1./2.*(PREDTH1(:,:)+PREDR1(:,:)))) & + + PREDR1(:,:) * (1./2.+PREDTH1(:,:)+PREDR1(:,:)) & + / ((1.+PREDTH1(:,:)+PREDR1(:,:))& + *(1.+1./2.*(PREDTH1(:,:)+PREDR1(:,:)))) ELSEWHERE - PD_PHI3DRDZ_O_DDRDZ(IIJB:IIJE,1:IKT) = PPHI3(IIJB:IIJE,1:IKT) + PD_PHI3DRDZ_O_DDRDZ(:,:) = PPHI3(:,:) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) ELSE - PD_PHI3DRDZ_O_DDRDZ(IIJB:IIJE,1:IKT) = PPHI3(IIJB:IIJE,1:IKT) + PD_PHI3DRDZ_O_DDRDZ(:,:) = PPHI3(:,:) END IF ELSE !* 1DIM case !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) #ifdef REPRO48 - WHERE (PPHI3(IIJB:IIJE,1:IKT)/=CSTURB%XPHI_LIM) + WHERE (PPHI3(:,:)/=CSTURB%XPHI_LIM) #else - WHERE (PPHI3(IIJB:IIJE,1:IKT)<=CSTURB%XPHI_LIM) + WHERE (PPHI3(:,:)<=CSTURB%XPHI_LIM) #endif - PD_PHI3DRDZ_O_DDRDZ(IIJB:IIJE,1:IKT) = PPHI3(IIJB:IIJE,1:IKT) & - * (1. - PREDR1(IIJB:IIJE,1:IKT)*PPHI3(IIJB:IIJE,1:IKT)) + PD_PHI3DRDZ_O_DDRDZ(:,:) = PPHI3(:,:) & + * (1. - PREDR1(:,:)*PPHI3(:,:)) ELSEWHERE - PD_PHI3DRDZ_O_DDRDZ(IIJB:IIJE,1:IKT) = PPHI3(IIJB:IIJE,1:IKT) + PD_PHI3DRDZ_O_DDRDZ(:,:) = PPHI3(:,:) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) END IF @@ -1055,8 +1055,8 @@ END IF CALL SMOOTH_TURB_FUNCT(D,CSTURB,PPHI3,PPHI3,PD_PHI3DRDZ_O_DDRDZ) #endif ! -PD_PHI3DRDZ_O_DDRDZ(IIJB:IIJE,IKB-1)=PD_PHI3DRDZ_O_DDRDZ(IIJB:IIJE,IKB) -PD_PHI3DRDZ_O_DDRDZ(IIJB:IIJE,IKE+1)=PD_PHI3DRDZ_O_DDRDZ(IIJB:IIJE,IKE) +PD_PHI3DRDZ_O_DDRDZ(:,IKB-1)=PD_PHI3DRDZ_O_DDRDZ(:,IKB) +PD_PHI3DRDZ_O_DDRDZ(:,IKE+1)=PD_PHI3DRDZ_O_DDRDZ(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PHI3DRDZ_O_DDRDZ',1,ZHOOK_HANDLE) END SUBROUTINE D_PHI3DRDZ_O_DDRDZ @@ -1089,21 +1089,21 @@ IF (HTURBDIM=='3DIM') THEN ! by derivation of (phi3 dtdz) * dtdz according to dtdz we obtain: CALL D_PHI3DTDZ_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,OUSERV,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PD_PHI3DTDZ2_O_DDTDZ(IIJB:IIJE,1:IKT) = PDTDZ(IIJB:IIJE,1:IKT) & - * (PPHI3(IIJB:IIJE,1:IKT) + ZWORK1(IIJB:IIJE,1:IKT)) + PD_PHI3DTDZ2_O_DDTDZ(:,:) = PDTDZ(:,:) & + * (PPHI3(:,:) + ZWORK1(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !* 1DIM case !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) #ifdef REPRO48 - WHERE (PPHI3(IIJB:IIJE,1:IKT)/=CSTURB%XPHI_LIM) + WHERE (PPHI3(:,:)/=CSTURB%XPHI_LIM) #else - WHERE (PPHI3(IIJB:IIJE,1:IKT)<=CSTURB%XPHI_LIM) + WHERE (PPHI3(:,:)<=CSTURB%XPHI_LIM) #endif - PD_PHI3DTDZ2_O_DDTDZ(IIJB:IIJE,1:IKT) = PPHI3(IIJB:IIJE,1:IKT)*PDTDZ(IIJB:IIJE,1:IKT) & - * (2. - PREDTH1(IIJB:IIJE,1:IKT)*PPHI3(IIJB:IIJE,1:IKT)) + PD_PHI3DTDZ2_O_DDTDZ(:,:) = PPHI3(:,:)*PDTDZ(:,:) & + * (2. - PREDTH1(:,:)*PPHI3(:,:)) ELSEWHERE - PD_PHI3DTDZ2_O_DDTDZ(IIJB:IIJE,1:IKT) = PPHI3(IIJB:IIJE,1:IKT) * 2. * PDTDZ(IIJB:IIJE,1:IKT) + PD_PHI3DTDZ2_O_DDTDZ(:,:) = PPHI3(:,:) * 2. * PDTDZ(:,:) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) END IF @@ -1115,8 +1115,8 @@ CALL SMOOTH_TURB_FUNCT(D,CSTURB,PPHI3,PPHI3*2.*PDTDZ,PD_PHI3DTDZ2_O_DDTDZ) #endif ! ! -PD_PHI3DTDZ2_O_DDTDZ(IIJB:IIJE,IKB-1)=PD_PHI3DTDZ2_O_DDTDZ(IIJB:IIJE,IKB) -PD_PHI3DTDZ2_O_DDTDZ(IIJB:IIJE,IKE+1)=PD_PHI3DTDZ2_O_DDTDZ(IIJB:IIJE,IKE) +PD_PHI3DTDZ2_O_DDTDZ(:,IKB-1)=PD_PHI3DTDZ2_O_DDTDZ(:,IKB) +PD_PHI3DTDZ2_O_DDTDZ(:,IKE+1)=PD_PHI3DTDZ2_O_DDTDZ(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_PHI3DTDZ2_O_DDTDZ',1,ZHOOK_HANDLE) END SUBROUTINE D_PHI3DTDZ2_O_DDTDZ @@ -1141,12 +1141,12 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PM3_WTH_WTH2(IIJB:IIJE,1:IKT) = CSTURB%XCSHF*PBLL_O_E(IIJB:IIJE,1:IKT)& - * PETHETA(IIJB:IIJE,1:IKT)*0.5/CSTURB%XCTD & - * (1.+0.5*PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT)) / PD(IIJB:IIJE,1:IKT) +PM3_WTH_WTH2(:,:) = CSTURB%XCSHF*PBLL_O_E(:,:)& + * PETHETA(:,:)*0.5/CSTURB%XCTD & + * (1.+0.5*PREDTH1(:,:)+PREDR1(:,:)) / PD(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PM3_WTH_WTH2(IIJB:IIJE,IKB-1)=PM3_WTH_WTH2(IIJB:IIJE,IKB) -PM3_WTH_WTH2(IIJB:IIJE,IKE+1)=PM3_WTH_WTH2(IIJB:IIJE,IKE) +PM3_WTH_WTH2(:,IKB-1)=PM3_WTH_WTH2(:,IKB) +PM3_WTH_WTH2(:,IKE+1)=PM3_WTH_WTH2(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WTH2',1,ZHOOK_HANDLE) END SUBROUTINE M3_WTH_WTH2 @@ -1172,15 +1172,15 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PD_M3_WTH_WTH2_O_DDTDZ(IIJB:IIJE,1:IKT) = & -(0.5*CSTURB%XCSHF*PBLL_O_E(IIJB:IIJE,1:IKT)*PETHETA(IIJB:IIJE,1:IKT)*0.5/CSTURB%XCTD/PD(IIJB:IIJE,1:IKT) & -- PM3_WTH_WTH2(IIJB:IIJE,1:IKT)/PD(IIJB:IIJE,1:IKT)& -*(1.5+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT)) )& -* PBLL_O_E(IIJB:IIJE,1:IKT) * PETHETA(IIJB:IIJE,1:IKT) * CSTURB%XCTV +PD_M3_WTH_WTH2_O_DDTDZ(:,:) = & +(0.5*CSTURB%XCSHF*PBLL_O_E(:,:)*PETHETA(:,:)*0.5/CSTURB%XCTD/PD(:,:) & +- PM3_WTH_WTH2(:,:)/PD(:,:)& +*(1.5+PREDTH1(:,:)+PREDR1(:,:)) )& +* PBLL_O_E(:,:) * PETHETA(:,:) * CSTURB%XCTV !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PD_M3_WTH_WTH2_O_DDTDZ(IIJB:IIJE,IKB-1)=PD_M3_WTH_WTH2_O_DDTDZ(IIJB:IIJE,IKB) -PD_M3_WTH_WTH2_O_DDTDZ(IIJB:IIJE,IKE+1)=PD_M3_WTH_WTH2_O_DDTDZ(IIJB:IIJE,IKE) +PD_M3_WTH_WTH2_O_DDTDZ(:,IKB-1)=PD_M3_WTH_WTH2_O_DDTDZ(:,IKB) +PD_M3_WTH_WTH2_O_DDTDZ(:,IKE+1)=PD_M3_WTH_WTH2_O_DDTDZ(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_WTH2_O_DDTDZ',1,ZHOOK_HANDLE) END SUBROUTINE D_M3_WTH_WTH2_O_DDTDZ @@ -1207,13 +1207,13 @@ IKT=D%NKT ! CALL MZM_PHY(D,PTKE,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PM3_WTH_W2TH(IIJB:IIJE,1:IKT) = CSTURB%XCSHF*PKEFF(IIJB:IIJE,1:IKT)*1.5/ZWORK1(IIJB:IIJE,1:IKT) & - * (1. - 0.5*PREDR1(IIJB:IIJE,1:IKT)*(1.+PREDR1(IIJB:IIJE,1:IKT))/PD(IIJB:IIJE,1:IKT) ) & - / (1.+PREDTH1(IIJB:IIJE,1:IKT)) +PM3_WTH_W2TH(:,:) = CSTURB%XCSHF*PKEFF(:,:)*1.5/ZWORK1(:,:) & + * (1. - 0.5*PREDR1(:,:)*(1.+PREDR1(:,:))/PD(:,:) ) & + / (1.+PREDTH1(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PM3_WTH_W2TH(IIJB:IIJE,IKB-1)=PM3_WTH_W2TH(IIJB:IIJE,IKB) -PM3_WTH_W2TH(IIJB:IIJE,IKE+1)=PM3_WTH_W2TH(IIJB:IIJE,IKE) +PM3_WTH_W2TH(:,IKB-1)=PM3_WTH_W2TH(:,IKB) +PM3_WTH_W2TH(:,IKE+1)=PM3_WTH_W2TH(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_W2TH',1,ZHOOK_HANDLE) END SUBROUTINE M3_WTH_W2TH @@ -1242,16 +1242,16 @@ IKT=D%NKT ! CALL MZM_PHY(D,PTKE,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PD_M3_WTH_W2TH_O_DDTDZ(IIJB:IIJE,1:IKT) = & - - CSTURB%XCSHF*PKEFF(IIJB:IIJE,1:IKT)*1.5/ZWORK1(IIJB:IIJE,1:IKT)/(1.+PREDTH1(IIJB:IIJE,1:IKT))**2 & - * CSTURB%XCTV*PBLL_O_E(IIJB:IIJE,1:IKT)*PETHETA(IIJB:IIJE,1:IKT) & - * (1. - 0.5*PREDR1(IIJB:IIJE,1:IKT)*(1.+PREDR1(IIJB:IIJE,1:IKT))/PD(IIJB:IIJE,1:IKT)* & - ( 1.+(1.+PREDTH1(IIJB:IIJE,1:IKT))*(1.5+PREDR1(IIJB:IIJE,1:IKT)+PREDTH1(IIJB:IIJE,1:IKT))& - /PD(IIJB:IIJE,1:IKT)) ) +PD_M3_WTH_W2TH_O_DDTDZ(:,:) = & + - CSTURB%XCSHF*PKEFF(:,:)*1.5/ZWORK1(:,:)/(1.+PREDTH1(:,:))**2 & + * CSTURB%XCTV*PBLL_O_E(:,:)*PETHETA(:,:) & + * (1. - 0.5*PREDR1(:,:)*(1.+PREDR1(:,:))/PD(:,:)* & + ( 1.+(1.+PREDTH1(:,:))*(1.5+PREDR1(:,:)+PREDTH1(:,:))& + /PD(:,:)) ) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PD_M3_WTH_W2TH_O_DDTDZ(IIJB:IIJE,IKB-1)=PD_M3_WTH_W2TH_O_DDTDZ(IIJB:IIJE,IKB) -PD_M3_WTH_W2TH_O_DDTDZ(IIJB:IIJE,IKE+1)=PD_M3_WTH_W2TH_O_DDTDZ(IIJB:IIJE,IKE) +PD_M3_WTH_W2TH_O_DDTDZ(:,IKB-1)=PD_M3_WTH_W2TH_O_DDTDZ(:,IKB) +PD_M3_WTH_W2TH_O_DDTDZ(:,IKE+1)=PD_M3_WTH_W2TH_O_DDTDZ(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_W2TH_O_DDTDZ',1,ZHOOK_HANDLE) END SUBROUTINE D_M3_WTH_W2TH_O_DDTDZ @@ -1279,13 +1279,13 @@ IKT=D%NKT ! CALL MZM_PHY(D,PTKE,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PM3_WTH_W2R(IIJB:IIJE,1:IKT) = & - - CSTURB%XCSHF*PKEFF(IIJB:IIJE,1:IKT)*0.75*CSTURB%XCTV*PBLL_O_E(IIJB:IIJE,1:IKT) & - /ZWORK1(IIJB:IIJE,1:IKT)*PEMOIST(IIJB:IIJE,1:IKT)*PDTDZ(IIJB:IIJE,1:IKT)/PD(IIJB:IIJE,1:IKT) +PM3_WTH_W2R(:,:) = & + - CSTURB%XCSHF*PKEFF(:,:)*0.75*CSTURB%XCTV*PBLL_O_E(:,:) & + /ZWORK1(:,:)*PEMOIST(:,:)*PDTDZ(:,:)/PD(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PM3_WTH_W2R(IIJB:IIJE,IKB-1)=PM3_WTH_W2R(IIJB:IIJE,IKB) -PM3_WTH_W2R(IIJB:IIJE,IKE+1)=PM3_WTH_W2R(IIJB:IIJE,IKE) +PM3_WTH_W2R(:,IKB-1)=PM3_WTH_W2R(:,IKB) +PM3_WTH_W2R(:,IKE+1)=PM3_WTH_W2R(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_W2R',1,ZHOOK_HANDLE) END SUBROUTINE M3_WTH_W2R @@ -1314,15 +1314,15 @@ IKT=D%NKT ! CALL MZM_PHY(D,PTKE,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PD_M3_WTH_W2R_O_DDTDZ(IIJB:IIJE,1:IKT) = & -- CSTURB%XCSHF*PKEFF(IIJB:IIJE,1:IKT)*0.75*CSTURB%XCTV*PBLL_O_E(IIJB:IIJE,1:IKT) & - /ZWORK1(IIJB:IIJE,1:IKT)*PEMOIST(IIJB:IIJE,1:IKT)/PD(IIJB:IIJE,1:IKT) & - * (1. - PREDTH1(IIJB:IIJE,1:IKT)*(1.5+PREDTH1(IIJB:IIJE,1:IKT)& - +PREDR1(IIJB:IIJE,1:IKT))/PD(IIJB:IIJE,1:IKT)) +PD_M3_WTH_W2R_O_DDTDZ(:,:) = & +- CSTURB%XCSHF*PKEFF(:,:)*0.75*CSTURB%XCTV*PBLL_O_E(:,:) & + /ZWORK1(:,:)*PEMOIST(:,:)/PD(:,:) & + * (1. - PREDTH1(:,:)*(1.5+PREDTH1(:,:)& + +PREDR1(:,:))/PD(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PD_M3_WTH_W2R_O_DDTDZ(IIJB:IIJE,IKB-1)=PD_M3_WTH_W2R_O_DDTDZ(IIJB:IIJE,IKB) -PD_M3_WTH_W2R_O_DDTDZ(IIJB:IIJE,IKE+1)=PD_M3_WTH_W2R_O_DDTDZ(IIJB:IIJE,IKE) +PD_M3_WTH_W2R_O_DDTDZ(:,IKB-1)=PD_M3_WTH_W2R_O_DDTDZ(:,IKB) +PD_M3_WTH_W2R_O_DDTDZ(:,IKE+1)=PD_M3_WTH_W2R_O_DDTDZ(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_W2R_O_DDTDZ',1,ZHOOK_HANDLE) END SUBROUTINE D_M3_WTH_W2R_O_DDTDZ @@ -1352,18 +1352,18 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK1(IIJB:IIJE,1:IKT) = PBETA(IIJB:IIJE,1:IKT)*PLEPS(IIJB:IIJE,1:IKT) & - /(PSQRT_TKE(IIJB:IIJE,1:IKT)*PTKE(IIJB:IIJE,1:IKT)) +ZWORK1(:,:) = PBETA(:,:)*PLEPS(:,:) & + /(PSQRT_TKE(:,:)*PTKE(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PM3_WTH_WR2(IIJB:IIJE,1:IKT) = - CSTURB%XCSHF*PKEFF(IIJB:IIJE,1:IKT)& - *0.25*PBLL_O_E(IIJB:IIJE,1:IKT)*CSTURB%XCTV*PEMOIST(IIJB:IIJE,1:IKT)**2 & - *ZWORK2(IIJB:IIJE,1:IKT)/CSTURB%XCTD*PDTDZ(IIJB:IIJE,1:IKT)/PD(IIJB:IIJE,1:IKT) +PM3_WTH_WR2(:,:) = - CSTURB%XCSHF*PKEFF(:,:)& + *0.25*PBLL_O_E(:,:)*CSTURB%XCTV*PEMOIST(:,:)**2 & + *ZWORK2(:,:)/CSTURB%XCTD*PDTDZ(:,:)/PD(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PM3_WTH_WR2(IIJB:IIJE,IKB-1)=PM3_WTH_WR2(IIJB:IIJE,IKB) -PM3_WTH_WR2(IIJB:IIJE,IKE+1)=PM3_WTH_WR2(IIJB:IIJE,IKE) +PM3_WTH_WR2(:,IKB-1)=PM3_WTH_WR2(:,IKB) +PM3_WTH_WR2(:,IKE+1)=PM3_WTH_WR2(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WR2',1,ZHOOK_HANDLE) END SUBROUTINE M3_WTH_WR2 @@ -1394,20 +1394,20 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK1(IIJB:IIJE,1:IKT) = PBETA(IIJB:IIJE,1:IKT)*PLEPS(IIJB:IIJE,1:IKT)& - /(PSQRT_TKE(IIJB:IIJE,1:IKT)*PTKE(IIJB:IIJE,1:IKT)) +ZWORK1(:,:) = PBETA(:,:)*PLEPS(:,:)& + /(PSQRT_TKE(:,:)*PTKE(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PD_M3_WTH_WR2_O_DDTDZ(IIJB:IIJE,1:IKT) = - CSTURB%XCSHF*PKEFF(IIJB:IIJE,1:IKT)& - *0.25*PBLL_O_E(IIJB:IIJE,1:IKT)*CSTURB%XCTV*PEMOIST(IIJB:IIJE,1:IKT)**2 & - *ZWORK2(IIJB:IIJE,1:IKT)/CSTURB%XCTD/PD(IIJB:IIJE,1:IKT) & - * (1. - PREDTH1(IIJB:IIJE,1:IKT)* & - (1.5+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT))/PD(IIJB:IIJE,1:IKT)) +PD_M3_WTH_WR2_O_DDTDZ(:,:) = - CSTURB%XCSHF*PKEFF(:,:)& + *0.25*PBLL_O_E(:,:)*CSTURB%XCTV*PEMOIST(:,:)**2 & + *ZWORK2(:,:)/CSTURB%XCTD/PD(:,:) & + * (1. - PREDTH1(:,:)* & + (1.5+PREDTH1(:,:)+PREDR1(:,:))/PD(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PD_M3_WTH_WR2_O_DDTDZ(IIJB:IIJE,IKB-1)=PD_M3_WTH_WR2_O_DDTDZ(IIJB:IIJE,IKB) -PD_M3_WTH_WR2_O_DDTDZ(IIJB:IIJE,IKE+1)=PD_M3_WTH_WR2_O_DDTDZ(IIJB:IIJE,IKE) +PD_M3_WTH_WR2_O_DDTDZ(:,IKB-1)=PD_M3_WTH_WR2_O_DDTDZ(:,IKB) +PD_M3_WTH_WR2_O_DDTDZ(:,IKE+1)=PD_M3_WTH_WR2_O_DDTDZ(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_WR2_O_DDTDZ',1,ZHOOK_HANDLE) END SUBROUTINE D_M3_WTH_WR2_O_DDTDZ @@ -1436,18 +1436,18 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK1(IIJB:IIJE,1:IKT) = PBETA(IIJB:IIJE,1:IKT)*PLEPS(IIJB:IIJE,1:IKT)& - /(PSQRT_TKE(IIJB:IIJE,1:IKT)*PTKE(IIJB:IIJE,1:IKT)) +ZWORK1(:,:) = PBETA(:,:)*PLEPS(:,:)& + /(PSQRT_TKE(:,:)*PTKE(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PM3_WTH_WTHR(IIJB:IIJE,1:IKT) = & - CSTURB%XCSHF*PKEFF(IIJB:IIJE,1:IKT)*PEMOIST(IIJB:IIJE,1:IKT)*ZWORK2(IIJB:IIJE,1:IKT) & - *0.5*PLEPS(IIJB:IIJE,1:IKT)/CSTURB%XCTD*(1+PREDR1(IIJB:IIJE,1:IKT))/PD(IIJB:IIJE,1:IKT) +PM3_WTH_WTHR(:,:) = & + CSTURB%XCSHF*PKEFF(:,:)*PEMOIST(:,:)*ZWORK2(:,:) & + *0.5*PLEPS(:,:)/CSTURB%XCTD*(1+PREDR1(:,:))/PD(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PM3_WTH_WTHR(IIJB:IIJE,IKB-1)=PM3_WTH_WTHR(IIJB:IIJE,IKB) -PM3_WTH_WTHR(IIJB:IIJE,IKE+1)=PM3_WTH_WTHR(IIJB:IIJE,IKE) +PM3_WTH_WTHR(:,IKB-1)=PM3_WTH_WTHR(:,IKB) +PM3_WTH_WTHR(:,IKE+1)=PM3_WTH_WTHR(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_WTH_WTHR',1,ZHOOK_HANDLE) END SUBROUTINE M3_WTH_WTHR @@ -1473,13 +1473,13 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PD_M3_WTH_WTHR_O_DDTDZ(IIJB:IIJE,1:IKT) = & - - PM3_WTH_WTHR(IIJB:IIJE,1:IKT) * (1.5+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT))& - /PD(IIJB:IIJE,1:IKT)*CSTURB%XCTV*PBLL_O_E(IIJB:IIJE,1:IKT)*PETHETA(IIJB:IIJE,1:IKT) +PD_M3_WTH_WTHR_O_DDTDZ(:,:) = & + - PM3_WTH_WTHR(:,:) * (1.5+PREDTH1(:,:)+PREDR1(:,:))& + /PD(:,:)*CSTURB%XCTV*PBLL_O_E(:,:)*PETHETA(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PD_M3_WTH_WTHR_O_DDTDZ(IIJB:IIJE,IKB-1)=PD_M3_WTH_WTHR_O_DDTDZ(IIJB:IIJE,IKB) -PD_M3_WTH_WTHR_O_DDTDZ(IIJB:IIJE,IKE+1)=PD_M3_WTH_WTHR_O_DDTDZ(IIJB:IIJE,IKE) +PD_M3_WTH_WTHR_O_DDTDZ(:,IKB-1)=PD_M3_WTH_WTHR_O_DDTDZ(:,IKB) +PD_M3_WTH_WTHR_O_DDTDZ(:,IKE+1)=PD_M3_WTH_WTHR_O_DDTDZ(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_WTH_WTHR_O_DDTDZ',1,ZHOOK_HANDLE) END SUBROUTINE D_M3_WTH_WTHR_O_DDTDZ @@ -1507,17 +1507,17 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK1(IIJB:IIJE,1:IKT) = (1.-0.5*PREDR1(IIJB:IIJE,1:IKT)*(1.+PREDR1(IIJB:IIJE,1:IKT))& - /PD(IIJB:IIJE,1:IKT))/(1.+PREDTH1(IIJB:IIJE,1:IKT))*PDTDZ(IIJB:IIJE,1:IKT) +ZWORK1(:,:) = (1.-0.5*PREDR1(:,:)*(1.+PREDR1(:,:))& + /PD(:,:))/(1.+PREDTH1(:,:))*PDTDZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PM3_TH2_W2TH(IIJB:IIJE,1:IKT) = - ZWORK2(IIJB:IIJE,1:IKT) & - * 1.5*PLM(IIJB:IIJE,1:IKT)*PLEPS(IIJB:IIJE,1:IKT)/PTKE(IIJB:IIJE,1:IKT)*CSTURB%XCTV +PM3_TH2_W2TH(:,:) = - ZWORK2(:,:) & + * 1.5*PLM(:,:)*PLEPS(:,:)/PTKE(:,:)*CSTURB%XCTV !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PM3_TH2_W2TH(IIJB:IIJE,IKB-1)=PM3_TH2_W2TH(IIJB:IIJE,IKB) -PM3_TH2_W2TH(IIJB:IIJE,IKE+1)=PM3_TH2_W2TH(IIJB:IIJE,IKE) +PM3_TH2_W2TH(:,IKB-1)=PM3_TH2_W2TH(:,IKB) +PM3_TH2_W2TH(:,IKE+1)=PM3_TH2_W2TH(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_W2TH',1,ZHOOK_HANDLE) END SUBROUTINE M3_TH2_W2TH @@ -1545,33 +1545,33 @@ IIJB=D%NIJB IKT=D%NKT ! IF (OUSERV) THEN -! D_M3_TH2_W2TH_O_DDTDZ(IIJB:IIJE,1:IKT) = - 1.5*PLM*PLEPS/PTKE*CSTURB%XCTV * MZF( & +! D_M3_TH2_W2TH_O_DDTDZ(:,:) = - 1.5*PLM*PLEPS/PTKE*CSTURB%XCTV * MZF( & ! (1.-0.5*PREDR1*(1.+PREDR1)/PD)*(1.-(1.5+PREDTH1+PREDR1)*(1.+PREDTH1)/PD ) & ! / (1.+PREDTH1)**2, IKA, IKU, IKL) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = (1.-0.5*PREDR1(IIJB:IIJE,1:IKT)*(1.+PREDR1(IIJB:IIJE,1:IKT))& - / PD(IIJB:IIJE,1:IKT))*(1.-(1.5+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT)) & - * PREDTH1(IIJB:IIJE,1:IKT)*(1.+PREDTH1(IIJB:IIJE,1:IKT))/PD(IIJB:IIJE,1:IKT) ) & - / (1.+PREDTH1(IIJB:IIJE,1:IKT))**2 + ZWORK1(:,:) = (1.-0.5*PREDR1(:,:)*(1.+PREDR1(:,:))& + / PD(:,:))*(1.-(1.5+PREDTH1(:,:)+PREDR1(:,:)) & + * PREDTH1(:,:)*(1.+PREDTH1(:,:))/PD(:,:) ) & + / (1.+PREDTH1(:,:))**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PD_M3_TH2_W2TH_O_DDTDZ(IIJB:IIJE,1:IKT) = - 1.5*PLM(IIJB:IIJE,1:IKT)*PLEPS(IIJB:IIJE,1:IKT) & - /PTKE(IIJB:IIJE,1:IKT)*CSTURB%XCTV * ZWORK2(IIJB:IIJE,1:IKT) + PD_M3_TH2_W2TH_O_DDTDZ(:,:) = - 1.5*PLM(:,:)*PLEPS(:,:) & + /PTKE(:,:)*CSTURB%XCTV * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = 1./(1.+PREDTH1(IIJB:IIJE,1:IKT))**2 + ZWORK1(:,:) = 1./(1.+PREDTH1(:,:))**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PD_M3_TH2_W2TH_O_DDTDZ(IIJB:IIJE,1:IKT) = - 1.5*PLM(IIJB:IIJE,1:IKT)*PLEPS(IIJB:IIJE,1:IKT) & - /PTKE(IIJB:IIJE,1:IKT)*CSTURB%XCTV * ZWORK2(IIJB:IIJE,1:IKT) + PD_M3_TH2_W2TH_O_DDTDZ(:,:) = - 1.5*PLM(:,:)*PLEPS(:,:) & + /PTKE(:,:)*CSTURB%XCTV * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! -PD_M3_TH2_W2TH_O_DDTDZ(IIJB:IIJE,IKB-1)=PD_M3_TH2_W2TH_O_DDTDZ(IIJB:IIJE,IKB) -PD_M3_TH2_W2TH_O_DDTDZ(IIJB:IIJE,IKE+1)=PD_M3_TH2_W2TH_O_DDTDZ(IIJB:IIJE,IKE) +PD_M3_TH2_W2TH_O_DDTDZ(:,IKB-1)=PD_M3_TH2_W2TH_O_DDTDZ(:,IKB) +PD_M3_TH2_W2TH_O_DDTDZ(:,IKE+1)=PD_M3_TH2_W2TH_O_DDTDZ(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_W2TH_O_DDTDZ',1,ZHOOK_HANDLE) END SUBROUTINE D_M3_TH2_W2TH_O_DDTDZ @@ -1597,17 +1597,17 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK1(IIJB:IIJE,1:IKT) = (1.+0.5*PREDTH1(IIJB:IIJE,1:IKT) & - +1.5*PREDR1(IIJB:IIJE,1:IKT)+0.5*PREDR1(IIJB:IIJE,1:IKT)**2)/PD(IIJB:IIJE,1:IKT) +ZWORK1(:,:) = (1.+0.5*PREDTH1(:,:) & + +1.5*PREDR1(:,:)+0.5*PREDR1(:,:)**2)/PD(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PM3_TH2_WTH2(IIJB:IIJE,1:IKT) = PLEPS(IIJB:IIJE,1:IKT)*0.5/CSTURB%XCTD/PSQRT_TKE(IIJB:IIJE,1:IKT) & - * ZWORK2(IIJB:IIJE,1:IKT) +PM3_TH2_WTH2(:,:) = PLEPS(:,:)*0.5/CSTURB%XCTD/PSQRT_TKE(:,:) & + * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PM3_TH2_WTH2(IIJB:IIJE,IKB-1)=PM3_TH2_WTH2(IIJB:IIJE,IKB) -PM3_TH2_WTH2(IIJB:IIJE,IKE+1)=PM3_TH2_WTH2(IIJB:IIJE,IKE) +PM3_TH2_WTH2(:,IKB-1)=PM3_TH2_WTH2(:,IKB) +PM3_TH2_WTH2(:,IKE+1)=PM3_TH2_WTH2(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WTH2',1,ZHOOK_HANDLE) END SUBROUTINE M3_TH2_WTH2 @@ -1635,19 +1635,19 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK1(IIJB:IIJE,1:IKT) = PBLL_O_E(IIJB:IIJE,1:IKT)*PETHETA(IIJB:IIJE,1:IKT) & - * (0.5/PD(IIJB:IIJE,1:IKT) - (1.5+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT))& - *(1.+0.5*PREDTH1(IIJB:IIJE,1:IKT)+1.5*PREDR1(IIJB:IIJE,1:IKT)& - +0.5*PREDR1(IIJB:IIJE,1:IKT)**2)/PD(IIJB:IIJE,1:IKT)**2) +ZWORK1(:,:) = PBLL_O_E(:,:)*PETHETA(:,:) & + * (0.5/PD(:,:) - (1.5+PREDTH1(:,:)+PREDR1(:,:))& + *(1.+0.5*PREDTH1(:,:)+1.5*PREDR1(:,:)& + +0.5*PREDR1(:,:)**2)/PD(:,:)**2) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PD_M3_TH2_WTH2_O_DDTDZ(IIJB:IIJE,1:IKT) = PLEPS(IIJB:IIJE,1:IKT) & - *0.5/CSTURB%XCTD/PSQRT_TKE(IIJB:IIJE,1:IKT)*CSTURB%XCTV * ZWORK2(IIJB:IIJE,1:IKT) +PD_M3_TH2_WTH2_O_DDTDZ(:,:) = PLEPS(:,:) & + *0.5/CSTURB%XCTD/PSQRT_TKE(:,:)*CSTURB%XCTV * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PD_M3_TH2_WTH2_O_DDTDZ(IIJB:IIJE,IKB-1)=PD_M3_TH2_WTH2_O_DDTDZ(IIJB:IIJE,IKB) -PD_M3_TH2_WTH2_O_DDTDZ(IIJB:IIJE,IKE+1)=PD_M3_TH2_WTH2_O_DDTDZ(IIJB:IIJE,IKE) +PD_M3_TH2_WTH2_O_DDTDZ(:,IKB-1)=PD_M3_TH2_WTH2_O_DDTDZ(:,IKB) +PD_M3_TH2_WTH2_O_DDTDZ(:,IKE+1)=PD_M3_TH2_WTH2_O_DDTDZ(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WTH2_O_DDTDZ',1,ZHOOK_HANDLE) END SUBROUTINE D_M3_TH2_WTH2_O_DDTDZ @@ -1675,17 +1675,17 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK1(IIJB:IIJE,1:IKT) = PBLL_O_E(IIJB:IIJE,1:IKT)*PEMOIST(IIJB:IIJE,1:IKT) & - /PD(IIJB:IIJE,1:IKT)*PDTDZ(IIJB:IIJE,1:IKT)**2 +ZWORK1(:,:) = PBLL_O_E(:,:)*PEMOIST(:,:) & + /PD(:,:)*PDTDZ(:,:)**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PM3_TH2_W2R(IIJB:IIJE,1:IKT) = 0.75*CSTURB%XCTV**2*ZWORK2(IIJB:IIJE,1:IKT) & - *PLM(IIJB:IIJE,1:IKT)*PLEPS(IIJB:IIJE,1:IKT)/PTKE(IIJB:IIJE,1:IKT) +PM3_TH2_W2R(:,:) = 0.75*CSTURB%XCTV**2*ZWORK2(:,:) & + *PLM(:,:)*PLEPS(:,:)/PTKE(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PM3_TH2_W2R(IIJB:IIJE,IKB-1)=PM3_TH2_W2R(IIJB:IIJE,IKB) -PM3_TH2_W2R(IIJB:IIJE,IKE+1)=PM3_TH2_W2R(IIJB:IIJE,IKE) +PM3_TH2_W2R(:,IKB-1)=PM3_TH2_W2R(:,IKB) +PM3_TH2_W2R(:,IKE+1)=PM3_TH2_W2R(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_W2R',1,ZHOOK_HANDLE) END SUBROUTINE M3_TH2_W2R @@ -1715,18 +1715,18 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK1(IIJB:IIJE,1:IKT) = PBLL_O_E(IIJB:IIJE,1:IKT)*PEMOIST(IIJB:IIJE,1:IKT)& - /PD(IIJB:IIJE,1:IKT)*PDTDZ(IIJB:IIJE,1:IKT)*(2.-PREDTH1(IIJB:IIJE,1:IKT)* & - (1.5+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT))/PD(IIJB:IIJE,1:IKT)) +ZWORK1(:,:) = PBLL_O_E(:,:)*PEMOIST(:,:)& + /PD(:,:)*PDTDZ(:,:)*(2.-PREDTH1(:,:)* & + (1.5+PREDTH1(:,:)+PREDR1(:,:))/PD(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PD_M3_TH2_W2R_O_DDTDZ(IIJB:IIJE,1:IKT) = 0.75*CSTURB%XCTV**2*PLM(IIJB:IIJE,1:IKT) *PLEPS(IIJB:IIJE,1:IKT) & - /PTKE(IIJB:IIJE,1:IKT) * ZWORK2(IIJB:IIJE,1:IKT) +PD_M3_TH2_W2R_O_DDTDZ(:,:) = 0.75*CSTURB%XCTV**2*PLM(:,:) *PLEPS(:,:) & + /PTKE(:,:) * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PD_M3_TH2_W2R_O_DDTDZ(IIJB:IIJE,IKB-1)=PD_M3_TH2_W2R_O_DDTDZ(IIJB:IIJE,IKB) -PD_M3_TH2_W2R_O_DDTDZ(IIJB:IIJE,IKE+1)=PD_M3_TH2_W2R_O_DDTDZ(IIJB:IIJE,IKE) +PD_M3_TH2_W2R_O_DDTDZ(:,IKB-1)=PD_M3_TH2_W2R_O_DDTDZ(:,IKB) +PD_M3_TH2_W2R_O_DDTDZ(:,IKE+1)=PD_M3_TH2_W2R_O_DDTDZ(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_W2R_O_DDTDZ',1,ZHOOK_HANDLE) END SUBROUTINE D_M3_TH2_W2R_O_DDTDZ @@ -1753,17 +1753,17 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK1(IIJB:IIJE,1:IKT) = (PBLL_O_E(IIJB:IIJE,1:IKT)*PEMOIST(IIJB:IIJE,1:IKT)& - *PDTDZ(IIJB:IIJE,1:IKT))**2/PD(IIJB:IIJE,1:IKT) +ZWORK1(:,:) = (PBLL_O_E(:,:)*PEMOIST(:,:)& + *PDTDZ(:,:))**2/PD(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PM3_TH2_WR2(IIJB:IIJE,1:IKT) = 0.25*CSTURB%XCTV**2*ZWORK2(IIJB:IIJE,1:IKT)& - *PLEPS(IIJB:IIJE,1:IKT)/PSQRT_TKE(IIJB:IIJE,1:IKT)/CSTURB%XCTD +PM3_TH2_WR2(:,:) = 0.25*CSTURB%XCTV**2*ZWORK2(:,:)& + *PLEPS(:,:)/PSQRT_TKE(:,:)/CSTURB%XCTD !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PM3_TH2_WR2(IIJB:IIJE,IKB-1)=PM3_TH2_WR2(IIJB:IIJE,IKB) -PM3_TH2_WR2(IIJB:IIJE,IKE+1)=PM3_TH2_WR2(IIJB:IIJE,IKE) +PM3_TH2_WR2(:,IKB-1)=PM3_TH2_WR2(:,IKB) +PM3_TH2_WR2(:,IKE+1)=PM3_TH2_WR2(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WR2',1,ZHOOK_HANDLE) END SUBROUTINE M3_TH2_WR2 @@ -1792,18 +1792,18 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK1(IIJB:IIJE,1:IKT) = (PBLL_O_E(IIJB:IIJE,1:IKT)*PEMOIST(IIJB:IIJE,1:IKT))**2 & -*PDTDZ(IIJB:IIJE,1:IKT)/PD(IIJB:IIJE,1:IKT)*(2.-PREDTH1(IIJB:IIJE,1:IKT) & -*(1.5+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT))/PD(IIJB:IIJE,1:IKT)) +ZWORK1(:,:) = (PBLL_O_E(:,:)*PEMOIST(:,:))**2 & +*PDTDZ(:,:)/PD(:,:)*(2.-PREDTH1(:,:) & +*(1.5+PREDTH1(:,:)+PREDR1(:,:))/PD(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PD_M3_TH2_WR2_O_DDTDZ(IIJB:IIJE,1:IKT) = 0.25*CSTURB%XCTV**2*PLEPS(IIJB:IIJE,1:IKT) & - / PSQRT_TKE(IIJB:IIJE,1:IKT)/CSTURB%XCTD * ZWORK2(IIJB:IIJE,1:IKT) +PD_M3_TH2_WR2_O_DDTDZ(:,:) = 0.25*CSTURB%XCTV**2*PLEPS(:,:) & + / PSQRT_TKE(:,:)/CSTURB%XCTD * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PD_M3_TH2_WR2_O_DDTDZ(IIJB:IIJE,IKB-1)=PD_M3_TH2_WR2_O_DDTDZ(IIJB:IIJE,IKB) -PD_M3_TH2_WR2_O_DDTDZ(IIJB:IIJE,IKE+1)=PD_M3_TH2_WR2_O_DDTDZ(IIJB:IIJE,IKE) +PD_M3_TH2_WR2_O_DDTDZ(:,IKB-1)=PD_M3_TH2_WR2_O_DDTDZ(:,IKB) +PD_M3_TH2_WR2_O_DDTDZ(:,IKE+1)=PD_M3_TH2_WR2_O_DDTDZ(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WR2_O_DDTDZ',1,ZHOOK_HANDLE) END SUBROUTINE D_M3_TH2_WR2_O_DDTDZ @@ -1831,17 +1831,17 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK1(IIJB:IIJE,1:IKT) = PBLL_O_E(IIJB:IIJE,1:IKT)*PEMOIST(IIJB:IIJE,1:IKT) & - * PDTDZ(IIJB:IIJE,1:IKT)*(1.+PREDR1(IIJB:IIJE,1:IKT))/PD(IIJB:IIJE,1:IKT) +ZWORK1(:,:) = PBLL_O_E(:,:)*PEMOIST(:,:) & + * PDTDZ(:,:)*(1.+PREDR1(:,:))/PD(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PM3_TH2_WTHR(IIJB:IIJE,1:IKT) = - 0.5*CSTURB%XCTV*PLEPS(IIJB:IIJE,1:IKT) & - / PSQRT_TKE(IIJB:IIJE,1:IKT)/CSTURB%XCTD * ZWORK2(IIJB:IIJE,1:IKT) +PM3_TH2_WTHR(:,:) = - 0.5*CSTURB%XCTV*PLEPS(:,:) & + / PSQRT_TKE(:,:)/CSTURB%XCTD * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PM3_TH2_WTHR(IIJB:IIJE,IKB-1)=PM3_TH2_WTHR(IIJB:IIJE,IKB) -PM3_TH2_WTHR(IIJB:IIJE,IKE+1)=PM3_TH2_WTHR(IIJB:IIJE,IKE) +PM3_TH2_WTHR(:,IKB-1)=PM3_TH2_WTHR(:,IKB) +PM3_TH2_WTHR(:,IKE+1)=PM3_TH2_WTHR(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_TH2_WTHR',1,ZHOOK_HANDLE) END SUBROUTINE M3_TH2_WTHR @@ -1870,18 +1870,18 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK1(IIJB:IIJE,1:IKT) = PBLL_O_E(IIJB:IIJE,1:IKT)*PEMOIST(IIJB:IIJE,1:IKT)* & - (1.+PREDR1(IIJB:IIJE,1:IKT))/PD(IIJB:IIJE,1:IKT) * (1. -PREDTH1(IIJB:IIJE,1:IKT)*& - (1.5+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT))/PD(IIJB:IIJE,1:IKT)) +ZWORK1(:,:) = PBLL_O_E(:,:)*PEMOIST(:,:)* & + (1.+PREDR1(:,:))/PD(:,:) * (1. -PREDTH1(:,:)*& + (1.5+PREDTH1(:,:)+PREDR1(:,:))/PD(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PD_M3_TH2_WTHR_O_DDTDZ(IIJB:IIJE,1:IKT) = - 0.5*CSTURB%XCTV*PLEPS(IIJB:IIJE,1:IKT) & - / PSQRT_TKE(IIJB:IIJE,1:IKT)/CSTURB%XCTD * ZWORK2(IIJB:IIJE,1:IKT) +PD_M3_TH2_WTHR_O_DDTDZ(:,:) = - 0.5*CSTURB%XCTV*PLEPS(:,:) & + / PSQRT_TKE(:,:)/CSTURB%XCTD * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PD_M3_TH2_WTHR_O_DDTDZ(IIJB:IIJE,IKB-1)=PD_M3_TH2_WTHR_O_DDTDZ(IIJB:IIJE,IKB) -PD_M3_TH2_WTHR_O_DDTDZ(IIJB:IIJE,IKE+1)=PD_M3_TH2_WTHR_O_DDTDZ(IIJB:IIJE,IKE) +PD_M3_TH2_WTHR_O_DDTDZ(:,IKB-1)=PD_M3_TH2_WTHR_O_DDTDZ(:,IKB) +PD_M3_TH2_WTHR_O_DDTDZ(:,IKE+1)=PD_M3_TH2_WTHR_O_DDTDZ(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_TH2_WTHR_O_DDTDZ',1,ZHOOK_HANDLE) END SUBROUTINE D_M3_TH2_WTHR_O_DDTDZ @@ -1907,17 +1907,17 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK1(IIJB:IIJE,1:IKT) = (1.+PREDTH1(IIJB:IIJE,1:IKT))* & - (1.+PREDR1(IIJB:IIJE,1:IKT))/PD(IIJB:IIJE,1:IKT) +ZWORK1(:,:) = (1.+PREDTH1(:,:))* & + (1.+PREDR1(:,:))/PD(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PM3_THR_WTHR(IIJB:IIJE,1:IKT) = 0.5*PLEPS(IIJB:IIJE,1:IKT)/PSQRT_TKE(IIJB:IIJE,1:IKT)/CSTURB%XCTD & - * ZWORK2(IIJB:IIJE,1:IKT) +PM3_THR_WTHR(:,:) = 0.5*PLEPS(:,:)/PSQRT_TKE(:,:)/CSTURB%XCTD & + * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PM3_THR_WTHR(IIJB:IIJE,IKB-1)=PM3_THR_WTHR(IIJB:IIJE,IKB) -PM3_THR_WTHR(IIJB:IIJE,IKE+1)=PM3_THR_WTHR(IIJB:IIJE,IKE) +PM3_THR_WTHR(:,IKB-1)=PM3_THR_WTHR(:,IKB) +PM3_THR_WTHR(:,IKE+1)=PM3_THR_WTHR(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WTHR',1,ZHOOK_HANDLE) END SUBROUTINE M3_THR_WTHR @@ -1945,18 +1945,18 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK1(IIJB:IIJE,1:IKT) = PETHETA(IIJB:IIJE,1:IKT)*PBLL_O_E(IIJB:IIJE,1:IKT)/PD(IIJB:IIJE,1:IKT) & - *(1.+PREDR1(IIJB:IIJE,1:IKT))*(1.-(1.+PREDTH1(IIJB:IIJE,1:IKT)) & - *(1.5+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT))/PD(IIJB:IIJE,1:IKT)) +ZWORK1(:,:) = PETHETA(:,:)*PBLL_O_E(:,:)/PD(:,:) & + *(1.+PREDR1(:,:))*(1.-(1.+PREDTH1(:,:)) & + *(1.5+PREDTH1(:,:)+PREDR1(:,:))/PD(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PD_M3_THR_WTHR_O_DDTDZ(IIJB:IIJE,1:IKT) = 0.5*PLEPS(IIJB:IIJE,1:IKT)/PSQRT_TKE(IIJB:IIJE,1:IKT) & - / CSTURB%XCTD * CSTURB%XCTV * ZWORK2(IIJB:IIJE,1:IKT) +PD_M3_THR_WTHR_O_DDTDZ(:,:) = 0.5*PLEPS(:,:)/PSQRT_TKE(:,:) & + / CSTURB%XCTD * CSTURB%XCTV * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PD_M3_THR_WTHR_O_DDTDZ(IIJB:IIJE,IKB-1)=PD_M3_THR_WTHR_O_DDTDZ(IIJB:IIJE,IKB) -PD_M3_THR_WTHR_O_DDTDZ(IIJB:IIJE,IKE+1)=PD_M3_THR_WTHR_O_DDTDZ(IIJB:IIJE,IKE) +PD_M3_THR_WTHR_O_DDTDZ(:,IKB-1)=PD_M3_THR_WTHR_O_DDTDZ(:,IKB) +PD_M3_THR_WTHR_O_DDTDZ(:,IKE+1)=PD_M3_THR_WTHR_O_DDTDZ(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTHR_O_DDTDZ',1,ZHOOK_HANDLE) END SUBROUTINE D_M3_THR_WTHR_O_DDTDZ @@ -1984,17 +1984,17 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK1(IIJB:IIJE,1:IKT) = (1.+PREDR1(IIJB:IIJE,1:IKT))*PBLL_O_E(IIJB:IIJE,1:IKT)* & - PETHETA(IIJB:IIJE,1:IKT)*PDRDZ(IIJB:IIJE,1:IKT)/PD(IIJB:IIJE,1:IKT) +ZWORK1(:,:) = (1.+PREDR1(:,:))*PBLL_O_E(:,:)* & + PETHETA(:,:)*PDRDZ(:,:)/PD(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PM3_THR_WTH2(IIJB:IIJE,1:IKT) = - 0.25*PLEPS(IIJB:IIJE,1:IKT) & - / PSQRT_TKE(IIJB:IIJE,1:IKT)/CSTURB%XCTD*CSTURB%XCTV * ZWORK2(IIJB:IIJE,1:IKT) +PM3_THR_WTH2(:,:) = - 0.25*PLEPS(:,:) & + / PSQRT_TKE(:,:)/CSTURB%XCTD*CSTURB%XCTV * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PM3_THR_WTH2(IIJB:IIJE,IKB-1)=PM3_THR_WTH2(IIJB:IIJE,IKB) -PM3_THR_WTH2(IIJB:IIJE,IKE+1)=PM3_THR_WTH2(IIJB:IIJE,IKE) +PM3_THR_WTH2(:,IKB-1)=PM3_THR_WTH2(:,IKB) +PM3_THR_WTH2(:,IKE+1)=PM3_THR_WTH2(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_WTH2',1,ZHOOK_HANDLE) END SUBROUTINE M3_THR_WTH2 @@ -2023,19 +2023,19 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK1(IIJB:IIJE,1:IKT) = -(1.+PREDR1(IIJB:IIJE,1:IKT))*(PBLL_O_E(IIJB:IIJE,1:IKT) & - *PETHETA(IIJB:IIJE,1:IKT)/PD(IIJB:IIJE,1:IKT))**2& - *PDRDZ(IIJB:IIJE,1:IKT)& - *(1.5+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT)) +ZWORK1(:,:) = -(1.+PREDR1(:,:))*(PBLL_O_E(:,:) & + *PETHETA(:,:)/PD(:,:))**2& + *PDRDZ(:,:)& + *(1.5+PREDTH1(:,:)+PREDR1(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PD_M3_THR_WTH2_O_DDTDZ(IIJB:IIJE,1:IKT) = - 0.25*PLEPS(IIJB:IIJE,1:IKT) & - /PSQRT_TKE(IIJB:IIJE,1:IKT)/CSTURB%XCTD*CSTURB%XCTV**2 * ZWORK2(IIJB:IIJE,1:IKT) +PD_M3_THR_WTH2_O_DDTDZ(:,:) = - 0.25*PLEPS(:,:) & + /PSQRT_TKE(:,:)/CSTURB%XCTD*CSTURB%XCTV**2 * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PD_M3_THR_WTH2_O_DDTDZ(IIJB:IIJE,IKB-1)=PD_M3_THR_WTH2_O_DDTDZ(IIJB:IIJE,IKB) -PD_M3_THR_WTH2_O_DDTDZ(IIJB:IIJE,IKE+1)=PD_M3_THR_WTH2_O_DDTDZ(IIJB:IIJE,IKE) +PD_M3_THR_WTH2_O_DDTDZ(:,IKB-1)=PD_M3_THR_WTH2_O_DDTDZ(:,IKB) +PD_M3_THR_WTH2_O_DDTDZ(:,IKE+1)=PD_M3_THR_WTH2_O_DDTDZ(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTH2_O_DDTDZ',1,ZHOOK_HANDLE) END SUBROUTINE D_M3_THR_WTH2_O_DDTDZ @@ -2063,18 +2063,18 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK1(IIJB:IIJE,1:IKT) = PBLL_O_E(IIJB:IIJE,1:IKT)*PETHETA(IIJB:IIJE,1:IKT)/PD(IIJB:IIJE,1:IKT)& - *(-(1.+PREDR1(IIJB:IIJE,1:IKT))*PREDR1(IIJB:IIJE,1:IKT)/PD(IIJB:IIJE,1:IKT)& - *(1.5+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT))+(1.+2.*PREDR1(IIJB:IIJE,1:IKT))) +ZWORK1(:,:) = PBLL_O_E(:,:)*PETHETA(:,:)/PD(:,:)& + *(-(1.+PREDR1(:,:))*PREDR1(:,:)/PD(:,:)& + *(1.5+PREDTH1(:,:)+PREDR1(:,:))+(1.+2.*PREDR1(:,:))) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PD_M3_THR_WTH2_O_DDRDZ(IIJB:IIJE,1:IKT) = - 0.25*PLEPS(IIJB:IIJE,1:IKT)/PSQRT_TKE(IIJB:IIJE,1:IKT)& - / CSTURB%XCTD*CSTURB%XCTV * ZWORK2(IIJB:IIJE,1:IKT) +PD_M3_THR_WTH2_O_DDRDZ(:,:) = - 0.25*PLEPS(:,:)/PSQRT_TKE(:,:)& + / CSTURB%XCTD*CSTURB%XCTV * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PD_M3_THR_WTH2_O_DDRDZ(IIJB:IIJE,IKB-1)=PD_M3_THR_WTH2_O_DDRDZ(IIJB:IIJE,IKB) -PD_M3_THR_WTH2_O_DDRDZ(IIJB:IIJE,IKE+1)=PD_M3_THR_WTH2_O_DDRDZ(IIJB:IIJE,IKE) +PD_M3_THR_WTH2_O_DDRDZ(:,IKB-1)=PD_M3_THR_WTH2_O_DDRDZ(:,IKB) +PD_M3_THR_WTH2_O_DDRDZ(:,IKE+1)=PD_M3_THR_WTH2_O_DDRDZ(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_WTH2_O_DDRDZ',1,ZHOOK_HANDLE) END SUBROUTINE D_M3_THR_WTH2_O_DDRDZ @@ -2101,16 +2101,16 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK1(IIJB:IIJE,1:IKT) = (1.+PREDR1(IIJB:IIJE,1:IKT))*PDRDZ(IIJB:IIJE,1:IKT)/PD(IIJB:IIJE,1:IKT) +ZWORK1(:,:) = (1.+PREDR1(:,:))*PDRDZ(:,:)/PD(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PM3_THR_W2TH(IIJB:IIJE,1:IKT) = - 0.75*PLM(IIJB:IIJE,1:IKT)*PLEPS(IIJB:IIJE,1:IKT)& - / PTKE(IIJB:IIJE,1:IKT) * CSTURB%XCTV * ZWORK2(IIJB:IIJE,1:IKT) +PM3_THR_W2TH(:,:) = - 0.75*PLM(:,:)*PLEPS(:,:)& + / PTKE(:,:) * CSTURB%XCTV * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PM3_THR_W2TH(IIJB:IIJE,IKB-1)=PM3_THR_W2TH(IIJB:IIJE,IKB) -PM3_THR_W2TH(IIJB:IIJE,IKE+1)=PM3_THR_W2TH(IIJB:IIJE,IKE) +PM3_THR_W2TH(:,IKB-1)=PM3_THR_W2TH(:,IKB) +PM3_THR_W2TH(:,IKE+1)=PM3_THR_W2TH(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:M3_THR_W2TH',1,ZHOOK_HANDLE) END SUBROUTINE M3_THR_W2TH @@ -2140,18 +2140,18 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK1(IIJB:IIJE,1:IKT) = -PETHETA(IIJB:IIJE,1:IKT)*PBLL_O_E(IIJB:IIJE,1:IKT)*& -(1.+PREDR1(IIJB:IIJE,1:IKT))*PDRDZ(IIJB:IIJE,1:IKT)& -*(1.5+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT))/PD(IIJB:IIJE,1:IKT)**2 +ZWORK1(:,:) = -PETHETA(:,:)*PBLL_O_E(:,:)*& +(1.+PREDR1(:,:))*PDRDZ(:,:)& +*(1.5+PREDTH1(:,:)+PREDR1(:,:))/PD(:,:)**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PD_M3_THR_W2TH_O_DDTDZ(IIJB:IIJE,1:IKT) = - 0.75*PLM(IIJB:IIJE,1:IKT)*PLEPS(IIJB:IIJE,1:IKT)& - / PTKE(IIJB:IIJE,1:IKT) * CSTURB%XCTV**2 * ZWORK1(IIJB:IIJE,1:IKT) +PD_M3_THR_W2TH_O_DDTDZ(:,:) = - 0.75*PLM(:,:)*PLEPS(:,:)& + / PTKE(:,:) * CSTURB%XCTV**2 * ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PD_M3_THR_W2TH_O_DDTDZ(IIJB:IIJE,IKB-1)=PD_M3_THR_W2TH_O_DDTDZ(IIJB:IIJE,IKB) -PD_M3_THR_W2TH_O_DDTDZ(IIJB:IIJE,IKE+1)=PD_M3_THR_W2TH_O_DDTDZ(IIJB:IIJE,IKE) +PD_M3_THR_W2TH_O_DDTDZ(:,IKB-1)=PD_M3_THR_W2TH_O_DDTDZ(:,IKB) +PD_M3_THR_W2TH_O_DDTDZ(:,IKE+1)=PD_M3_THR_W2TH_O_DDTDZ(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2TH_O_DDTDZ',1,ZHOOK_HANDLE) END SUBROUTINE D_M3_THR_W2TH_O_DDTDZ @@ -2178,18 +2178,18 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK1(IIJB:IIJE,1:IKT) = -(1.+PREDR1(IIJB:IIJE,1:IKT))*PREDR1(IIJB:IIJE,1:IKT)& -* (1.5+PREDTH1(IIJB:IIJE,1:IKT)+PREDR1(IIJB:IIJE,1:IKT))/PD(IIJB:IIJE,1:IKT)**2 & - +(1.+2.*PREDR1(IIJB:IIJE,1:IKT))/PD(IIJB:IIJE,1:IKT) +ZWORK1(:,:) = -(1.+PREDR1(:,:))*PREDR1(:,:)& +* (1.5+PREDTH1(:,:)+PREDR1(:,:))/PD(:,:)**2 & + +(1.+2.*PREDR1(:,:))/PD(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PD_M3_THR_W2TH_O_DDRDZ(IIJB:IIJE,1:IKT) = - 0.75*PLM(IIJB:IIJE,1:IKT)*PLEPS(IIJB:IIJE,1:IKT)& - / PTKE(IIJB:IIJE,1:IKT) * CSTURB%XCTV * ZWORK2(IIJB:IIJE,1:IKT) +PD_M3_THR_W2TH_O_DDRDZ(:,:) = - 0.75*PLM(:,:)*PLEPS(:,:)& + / PTKE(:,:) * CSTURB%XCTV * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PD_M3_THR_W2TH_O_DDRDZ(IIJB:IIJE,IKB-1)=PD_M3_THR_W2TH_O_DDRDZ(IIJB:IIJE,IKB) -PD_M3_THR_W2TH_O_DDRDZ(IIJB:IIJE,IKE+1)=PD_M3_THR_W2TH_O_DDRDZ(IIJB:IIJE,IKE) +PD_M3_THR_W2TH_O_DDRDZ(:,IKB-1)=PD_M3_THR_W2TH_O_DDRDZ(:,IKB) +PD_M3_THR_W2TH_O_DDRDZ(:,IKE+1)=PD_M3_THR_W2TH_O_DDRDZ(:,IKE) ! IF (LHOOK) CALL DR_HOOK('MODE_PRANDTL:D_M3_THR_W2TH_O_DDRDZ',1,ZHOOK_HANDLE) END SUBROUTINE D_M3_THR_W2TH_O_DDRDZ diff --git a/src/PHYEX/turb/mode_rmc01.f90 b/src/PHYEX/turb/mode_rmc01.f90 index 59f254a0d4af720a86f3692144d7fcad68e4d806..cdd81bc62c496ee8377ba5b7ae852b66c676dd21 100644 --- a/src/PHYEX/turb/mode_rmc01.f90 +++ b/src/PHYEX/turb/mode_rmc01.f90 @@ -121,12 +121,12 @@ CALL MZF_PHY(D,PZZ,ZZZ) ! replace by height of mass points DO JK=1,IKT !$mnh_expand_array(JIJ=IIJB:IIJE) - ZZZ(IIJB:IIJE,JK) = ZZZ(IIJB:IIJE,JK) - PZZ(IIJB:IIJE,IKB) + ZZZ(:,JK) = ZZZ(:,JK) - PZZ(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! fill upper level with physical value !$mnh_expand_array(JIJ=IIJB:IIJE) -ZZZ(IIJB:IIJE,IKU) = 2.*ZZZ(IIJB:IIJE,IKU-IKL) - ZZZ(IIJB:IIJE,IKU-2*IKL) +ZZZ(:,IKU) = 2.*ZZZ(:,IKU-IKL) - ZZZ(:,IKU-2*IKL) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !------------------------------------------------------------------------------- @@ -137,16 +137,16 @@ ZZZ(IIJB:IIJE,IKU) = 2.*ZZZ(IIJB:IIJE,IKU-IKL) - ZZZ(IIJB:IIJE,IKU-2*IKL) ! z/LMO DO JK=1,IKT !$mnh_expand_where(JIJ=IIJB:IIJE) - WHERE (PLMO(IIJB:IIJE)==XUNDEF) - ZZ_O_LMO(IIJB:IIJE,JK)=0. + WHERE (PLMO(:)==XUNDEF) + ZZ_O_LMO(:,JK)=0. ELSEWHERE - ZZ_O_LMO(IIJB:IIJE,JK)=ZZZ(IIJB:IIJE,JK)*PDIRCOSZW(IIJB:IIJE)/PLMO(IIJB:IIJE) + ZZ_O_LMO(:,JK)=ZZZ(:,JK)*PDIRCOSZW(:)/PLMO(:) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) END DO !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZZ_O_LMO(IIJB:IIJE,1:IKT) = MAX(ZZ_O_LMO(IIJB:IIJE,1:IKT),-10.) -ZZ_O_LMO(IIJB:IIJE,1:IKT) = MIN(ZZ_O_LMO(IIJB:IIJE,1:IKT), 10.) +ZZ_O_LMO(:,:) = MAX(ZZ_O_LMO(:,:),-10.) +ZZ_O_LMO(:,:) = MIN(ZZ_O_LMO(:,:), 10.) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! ! @@ -172,40 +172,40 @@ SELECT CASE (HTURBLEN) CALL MXF_PHY(D,PDXX,ZWORK1) CALL MYF_PHY(D,PDYY,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZDH(IIJB:IIJE,1:IKT) = SQRT(ZWORK1(IIJB:IIJE,1:IKT)*ZWORK2(IIJB:IIJE,1:IKT)) + ZDH(:,:) = SQRT(ZWORK1(:,:)*ZWORK2(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! CALL UPDATE_IIJU_PHY(D,ZZC) ! DO JK=1,IKT !$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. ) + ZZC(:,JK) = 2.*MIN(ZPHIM(:,JK),1.)/CST%XKARMAN & + * MAX( PDZZ(:,JK)*PDIRCOSZW(:) , & + ZDH(:,JK)/PDIRCOSZW(:)/3. ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! !* 4. factor controling the transition between SBL and free isotropic turb. (3D case) ! -------------------------------------------------------------------- ! - ZGAM(IIJB:IIJE,IKA) = 0. + ZGAM(:,IKA) = 0. DO JK=IKTB,IKTE !$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)) ) + ZGAM(:,JK) = 1. - EXP( -3.*(ZZZ(:,JK)-ZZZ(:,IKB))/(ZZC(:,JK)) ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) !$mnh_expand_where(JIJ=IIJB:IIJE) - WHERE (ZGAM(IIJB:IIJE,JK-IKL)>ZGAM(IIJB:IIJE,JK) .OR. ZGAM(IIJB:IIJE,JK-IKL)>0.99 ) - ZGAM(IIJB:IIJE,JK) = 1. + WHERE (ZGAM(:,JK-IKL)>ZGAM(:,JK) .OR. ZGAM(:,JK-IKL)>0.99 ) + ZGAM(:,JK) = 1. END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) END DO !$mnh_expand_array(JIJ=IIJB:IIJE) - ZGAM(IIJB:IIJE,IKU) = 1. - EXP( -3.*(ZZZ(IIJB:IIJE,IKU)-ZZZ(IIJB:IIJE,IKB))& - /(ZZC(IIJB:IIJE,IKU)) ) + ZGAM(:,IKU) = 1. - EXP( -3.*(ZZZ(:,IKU)-ZZZ(:,IKB))& + /(ZZC(:,IKU)) ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) !$mnh_expand_where(JIJ=IIJB:IIJE) - WHERE (ZGAM(IIJB:IIJE,IKU-IKL)>ZGAM(IIJB:IIJE,IKU) .OR. ZGAM(IIJB:IIJE,IKU-IKL)>0.99 ) - ZGAM(IIJB:IIJE,IKU) = 1. + WHERE (ZGAM(:,IKU-IKL)>ZGAM(:,IKU) .OR. ZGAM(:,IKU-IKL)>0.99 ) + ZGAM(:,IKU) = 1. END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) ! @@ -217,28 +217,28 @@ SELECT CASE (HTURBLEN) ! CASE DEFAULT !* SBL depth is used - ZGAM(IIJB:IIJE,1:IKT) = 1. - ZGAM(IIJB:IIJE,IKA) = 0. + ZGAM(:,:) = 1. + ZGAM(:,IKA) = 0. DO JK=IKTB,IKTE !$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) ) + WHERE(PSBL_DEPTH(:)>0.) + ZGAM(:,JK) = TANH( (ZZZ(:,JK)-ZZZ(:,IKB))/PSBL_DEPTH(:) ) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) !$mnh_expand_where(JIJ=IIJB:IIJE) - WHERE (ZGAM(IIJB:IIJE,JK-IKL)>0.99 ) - ZGAM(IIJB:IIJE,JK) = 1. + WHERE (ZGAM(:,JK-IKL)>0.99 ) + ZGAM(:,JK) = 1. END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) END DO !$mnh_expand_where(JIJ=IIJB:IIJE) - WHERE(PSBL_DEPTH(IIJB:IIJE)>0.) - ZGAM(IIJB:IIJE,IKU) = TANH( (ZZZ(IIJB:IIJE,IKU)-ZZZ(IIJB:IIJE,IKB))/PSBL_DEPTH(IIJB:IIJE) ) + WHERE(PSBL_DEPTH(:)>0.) + ZGAM(:,IKU) = TANH( (ZZZ(:,IKU)-ZZZ(:,IKB))/PSBL_DEPTH(:) ) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) !$mnh_expand_where(JIJ=IIJB:IIJE) - WHERE (ZGAM(IIJB:IIJE,IKU-IKL)>0.99 ) - ZGAM(IIJB:IIJE,JK) = 1. + WHERE (ZGAM(:,IKU-IKL)>0.99 ) + ZGAM(:,JK) = 1. END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) ! @@ -251,43 +251,43 @@ END SELECT ! DO JK=1,IKT !$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))) + ZL(:,JK) = CST%XKARMAN/SQRT(CSTURB%XALPSBL)/CSTURB%XCMFS & + * ZZZ(:,JK)*PDIRCOSZW(:)/(ZPHIM(:,JK)**2*SQRT(ZPHIE(:,JK))) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PLK(IIJB:IIJE,1:IKT)=(1.-ZGAM(IIJB:IIJE,1:IKT))*ZL(IIJB:IIJE,1:IKT) & - +ZGAM(IIJB:IIJE,1:IKT)*PLK(IIJB:IIJE,1:IKT) +PLK(:,:)=(1.-ZGAM(:,:))*ZL(:,:) & + +ZGAM(:,:)*PLK(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PLK(IIJB:IIJE,IKA) = PLK(IIJB:IIJE,IKB) -PLK(IIJB:IIJE,IKU) = PLK(IIJB:IIJE,IKE) +PLK(:,IKA) = PLK(:,IKB) +PLK(:,IKU) = PLK(:,IKE) !------------------------------------------------------------------------------- ! !* 7. Modification of the dissipative length ! -------------------------------------- ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZL(IIJB:IIJE,1:IKT) = ZL(IIJB:IIJE,1:IKT) * (CSTURB%XALPSBL**(3./2.)*CST%XKARMAN*CSTURB%XCED) & +ZL(:,:) = ZL(:,:) * (CSTURB%XALPSBL**(3./2.)*CST%XKARMAN*CSTURB%XCED) & / (CST%XKARMAN/SQRT(CSTURB%XALPSBL)/CSTURB%XCMFS) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) -WHERE (ZZ_O_LMO(IIJB:IIJE,1:IKT)<0.) - ZL(IIJB:IIJE,1:IKT) = ZL(IIJB:IIJE,1:IKT)/(1.-1.9*ZZ_O_LMO(IIJB:IIJE,1:IKT)) +WHERE (ZZ_O_LMO(:,:)<0.) + ZL(:,:) = ZL(:,:)/(1.-1.9*ZZ_O_LMO(:,:)) ELSEWHERE - ZL(IIJB:IIJE,1:IKT) = ZL(IIJB:IIJE,1:IKT)/(1.-0.3*SQRT(ZZ_O_LMO(IIJB:IIJE,1:IKT))) + ZL(:,:) = ZL(:,:)/(1.-0.3*SQRT(ZZ_O_LMO(:,:))) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PLEPS(IIJB:IIJE,1:IKT)=(1.-ZGAM(IIJB:IIJE,1:IKT))*ZL(IIJB:IIJE,1:IKT) & - +ZGAM(IIJB:IIJE,1:IKT)*PLEPS(IIJB:IIJE,1:IKT) +PLEPS(:,:)=(1.-ZGAM(:,:))*ZL(:,:) & + +ZGAM(:,:)*PLEPS(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! -PLEPS(IIJB:IIJE,IKA) = PLEPS(IIJB:IIJE,IKB) -PLEPS(IIJB:IIJE,IKU) = PLEPS(IIJB:IIJE,IKE) +PLEPS(:,IKA) = PLEPS(:,IKB) +PLEPS(:,IKU) = PLEPS(:,IKE) !------------------------------------------------------------------------------- ! IF (LHOOK) CALL DR_HOOK('RMC01',1,ZHOOK_HANDLE) diff --git a/src/PHYEX/turb/mode_sbl_depth.f90 b/src/PHYEX/turb/mode_sbl_depth.f90 index f9312586278142cdd23407ea05538d4d31f3b78c..351b732f54cf3d143386566806c333778ceac496 100644 --- a/src/PHYEX/turb/mode_sbl_depth.f90 +++ b/src/PHYEX/turb/mode_sbl_depth.f90 @@ -96,11 +96,11 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE) -ZWU(IIJB:IIJE) = PFLXU(IIJB:IIJE,IKB) -ZWV(IIJB:IIJE) = PFLXV(IIJB:IIJE,IKB) -ZQ0(IIJB:IIJE) = PWTHV(IIJB:IIJE,IKB) +ZWU(:) = PFLXU(:,IKB) +ZWV(:) = PFLXV(:,IKB) +ZQ0(:) = PWTHV(:,IKB) ! -ZUSTAR2(IIJB:IIJE) = SQRT(ZWU(IIJB:IIJE)**2+ZWV(IIJB:IIJE)**2) +ZUSTAR2(:) = SQRT(ZWU(:)**2+ZWV(:)**2) ! !$mnh_end_expand_array(JIJ=IIJB:IIJE) !---------------------------------------------------------------------------- @@ -108,11 +108,11 @@ ZUSTAR2(IIJB:IIJE) = SQRT(ZWU(IIJB:IIJE)**2+ZWV(IIJB:IIJE)**2) !* BL and SBL diagnosed with friction criteria ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWIND(IIJB:IIJE,1:IKT)=SQRT(PFLXU(IIJB:IIJE,1:IKT)**2+PFLXV(IIJB:IIJE,1:IKT)**2) +ZWIND(:,:)=SQRT(PFLXU(:,:)**2+PFLXV(:,:)**2) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL BL_DEPTH_DIAG(D,ZUSTAR2,PZZ(:,IKB),ZWIND,PZZ,CSTURB%XFTOP_O_FSURF,ZSBL_DYN) !$mnh_expand_array(JIJ=IIJB:IIJE) -ZSBL_DYN(IIJB:IIJE) = CSTURB%XSBL_O_BL * ZSBL_DYN(IIJB:IIJE) +ZSBL_DYN(:) = CSTURB%XSBL_O_BL * ZSBL_DYN(:) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !---------------------------------------------------------------------------- @@ -121,7 +121,7 @@ ZSBL_DYN(IIJB:IIJE) = CSTURB%XSBL_O_BL * ZSBL_DYN(IIJB:IIJE) ! CALL BL_DEPTH_DIAG(D,ZQ0,PZZ(:,IKB),PWTHV,PZZ,CSTURB%XFTOP_O_FSURF,ZSBL_THER) !$mnh_expand_array(JIJ=IIJB:IIJE) -ZSBL_THER(IIJB:IIJE)= CSTURB%XSBL_O_BL * ZSBL_THER(IIJB:IIJE) +ZSBL_THER(:)= CSTURB%XSBL_O_BL * ZSBL_THER(:) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !---------------------------------------------------------------------------- @@ -130,40 +130,40 @@ ZSBL_THER(IIJB:IIJE)= CSTURB%XSBL_O_BL * ZSBL_THER(IIJB:IIJE) ! PSBL_DEPTH(:) = 0. !$mnh_expand_where(JIJ=IIJB:IIJE) -WHERE (ZSBL_THER(IIJB:IIJE)> 0. .AND. ZSBL_DYN(IIJB:IIJE)> 0.) - PSBL_DEPTH = MIN(ZSBL_THER(IIJB:IIJE),ZSBL_DYN(IIJB:IIJE)) +WHERE (ZSBL_THER(:)> 0. .AND. ZSBL_DYN(:)> 0.) + PSBL_DEPTH = MIN(ZSBL_THER(:),ZSBL_DYN(:)) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) ! !$mnh_expand_where(JIJ=IIJB:IIJE) -WHERE (ZSBL_THER(IIJB:IIJE)> 0. .AND. ZSBL_DYN(IIJB:IIJE)==0.) - PSBL_DEPTH(IIJB:IIJE) = ZSBL_THER(IIJB:IIJE) +WHERE (ZSBL_THER(:)> 0. .AND. ZSBL_DYN(:)==0.) + PSBL_DEPTH(:) = ZSBL_THER(:) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) ! !$mnh_expand_where(JIJ=IIJB:IIJE) -WHERE (ZSBL_THER(IIJB:IIJE)==0. .AND. ZSBL_DYN(IIJB:IIJE)> 0.) - PSBL_DEPTH(IIJB:IIJE) = ZSBL_DYN(IIJB:IIJE) +WHERE (ZSBL_THER(:)==0. .AND. ZSBL_DYN(:)> 0.) + PSBL_DEPTH(:) = ZSBL_DYN(:) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) ! DO JLOOP=1,5 !$mnh_expand_where(JIJ=IIJB:IIJE) - WHERE (PLMO(IIJB:IIJE)/=XUNDEF .AND. ABS(PLMO(IIJB:IIJE))>=0.01 ) - ZA(IIJB:IIJE) = TANH(2.*PSBL_DEPTH(IIJB:IIJE)/PLMO(IIJB:IIJE))**2 - PSBL_DEPTH(IIJB:IIJE) = 0.2 * PSBL_DEPTH(IIJB:IIJE) + 0.8 * ((1.-ZA(IIJB:IIJE)) & - * ZSBL_DYN(IIJB:IIJE) + ZA(IIJB:IIJE) * ZSBL_THER(IIJB:IIJE) ) + WHERE (PLMO(:)/=XUNDEF .AND. ABS(PLMO(:))>=0.01 ) + ZA(:) = TANH(2.*PSBL_DEPTH(:)/PLMO(:))**2 + PSBL_DEPTH(:) = 0.2 * PSBL_DEPTH(:) + 0.8 * ((1.-ZA(:)) & + * ZSBL_DYN(:) + ZA(:) * ZSBL_THER(:) ) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) END DO !$mnh_expand_where(JIJ=IIJB:IIJE) -WHERE (ABS(PLMO(IIJB:IIJE))<=0.01 ) - PSBL_DEPTH(IIJB:IIJE) = ZSBL_THER(IIJB:IIJE) +WHERE (ABS(PLMO(:))<=0.01 ) + PSBL_DEPTH(:) = ZSBL_THER(:) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) !$mnh_expand_where(JIJ=IIJB:IIJE) -WHERE (PLMO(IIJB:IIJE)==XUNDEF) - PSBL_DEPTH(IIJB:IIJE) = ZSBL_DYN(IIJB:IIJE) +WHERE (PLMO(:)==XUNDEF) + PSBL_DEPTH(:) = ZSBL_DYN(:) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) ! diff --git a/src/PHYEX/turb/mode_sbl_phy.f90 b/src/PHYEX/turb/mode_sbl_phy.f90 index c3d8be4f0a876451e0267d88c4a3ee535dd5ac7c..fcf58f980249bfde88387bf499b8aedf3cab1061 100644 --- a/src/PHYEX/turb/mode_sbl_phy.f90 +++ b/src/PHYEX/turb/mode_sbl_phy.f90 @@ -67,10 +67,10 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) -WHERE ( PZ_O_LMO(IIJB:IIJE,1:IKT) < 0. ) - BUSINGERPHIM(IIJB:IIJE,1:IKT) = (1.-15.*PZ_O_LMO(IIJB:IIJE,1:IKT))**(-0.25) +WHERE ( PZ_O_LMO(:,:) < 0. ) + BUSINGERPHIM(:,:) = (1.-15.*PZ_O_LMO(:,:))**(-0.25) ELSEWHERE - BUSINGERPHIM(IIJB:IIJE,1:IKT) = 1. + 4.7 * PZ_O_LMO(IIJB:IIJE,1:IKT) + BUSINGERPHIM(:,:) = 1. + 4.7 * PZ_O_LMO(:,:) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIM',1,ZHOOK_HANDLE) @@ -98,10 +98,10 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) -WHERE ( PZ_O_LMO(IIJB:IIJE,1:IKT) < 0. ) - BUSINGERPHIH(IIJB:IIJE,1:IKT) = 0.74 * (1.-9.*PZ_O_LMO(IIJB:IIJE,1:IKT))**(-0.5) +WHERE ( PZ_O_LMO(:,:) < 0. ) + BUSINGERPHIH(:,:) = 0.74 * (1.-9.*PZ_O_LMO(:,:))**(-0.5) ELSEWHERE - BUSINGERPHIH(IIJB:IIJE,1:IKT) = 0.74 + 4.7 * PZ_O_LMO(IIJB:IIJE,1:IKT) + BUSINGERPHIH(:,:) = 0.74 + 4.7 * PZ_O_LMO(:,:) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIH',1,ZHOOK_HANDLE) @@ -130,11 +130,11 @@ IIJB=D%NIJB IKT=D%NKT ! !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) -WHERE ( PZ_O_LMO(IIJB:IIJE,1:IKT) < 0. ) - BUSINGERPHIE(IIJB:IIJE,1:IKT)=(1.+(-PZ_O_LMO(IIJB:IIJE,1:IKT))**(2./3.)/CSTURB%XALPSBL)& - * (1.-15.*PZ_O_LMO(IIJB:IIJE,1:IKT))**(0.5) +WHERE ( PZ_O_LMO(:,:) < 0. ) + BUSINGERPHIE(:,:)=(1.+(-PZ_O_LMO(:,:))**(2./3.)/CSTURB%XALPSBL)& + * (1.-15.*PZ_O_LMO(:,:))**(0.5) ELSEWHERE - BUSINGERPHIE(IIJB:IIJE,1:IKT) = 1./(1. + 4.7 * PZ_O_LMO(IIJB:IIJE,1:IKT))**2 + BUSINGERPHIE(:,:) = 1./(1. + 4.7 * PZ_O_LMO(:,:))**2 END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) IF (LHOOK) CALL DR_HOOK('MODE_SBL:BUSINGER_PHIE',1,ZHOOK_HANDLE) @@ -167,15 +167,15 @@ SUBROUTINE LMO(D,CST,PUSTAR,PTHETA,PRV,PSFTH,PSFRV,PLMO) ZEPS=(CST%XRV-CST%XRD)/CST%XRD ! !$mnh_expand_array(JIJ=IIJB:IIJE) - ZTHETAV(IIJB:IIJE) = PTHETA(IIJB:IIJE) * ( 1. +ZEPS * PRV(IIJB:IIJE)) - ZQ0(IIJB:IIJE) = PSFTH(IIJB:IIJE) + ZTHETAV(IIJB:IIJE) * ZEPS * PSFRV(IIJB:IIJE) + ZTHETAV(:) = PTHETA(:) * ( 1. +ZEPS * PRV(:)) + ZQ0(:) = PSFTH(:) + ZTHETAV(:) * ZEPS * PSFRV(:) ! - PLMO(IIJB:IIJE) = XUNDEF + PLMO(:) = XUNDEF !$mnh_end_expand_array(JIJ=IIJB:IIJE) !$mnh_expand_where(JIJ=IIJB:IIJE) - WHERE ( ZQ0(IIJB:IIJE)/=0. ) - PLMO(IIJB:IIJE) = - MAX(PUSTAR(IIJB:IIJE),1.E-6)**3 & - / ( CST%XKARMAN * CST%XG / ZTHETAV(IIJB:IIJE) *ZQ0(IIJB:IIJE) ) + WHERE ( ZQ0(:)/=0. ) + PLMO(:) = - MAX(PUSTAR(:),1.E-6)**3 & + / ( CST%XKARMAN * CST%XG / ZTHETAV(:) *ZQ0(:) ) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) IF (LHOOK) CALL DR_HOOK('MODE_SBL:LMO',1,ZHOOK_HANDLE) diff --git a/src/PHYEX/turb/mode_thl_rt_from_th_r_mf.f90 b/src/PHYEX/turb/mode_thl_rt_from_th_r_mf.f90 index 6c8aa463a23ef4eae31ab6ad909ca8ae77a90b49..59c68a39727156ea751af1d1e622f02d24ca0ab0 100644 --- a/src/PHYEX/turb/mode_thl_rt_from_th_r_mf.f90 +++ b/src/PHYEX/turb/mode_thl_rt_from_th_r_mf.f90 @@ -93,20 +93,20 @@ IKT=D%NKT ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) !temperature -ZT(IIJB:IIJE,:) = PTH(IIJB:IIJE,:) * PEXN(IIJB:IIJE,:) +ZT(:,:) = PTH(:,:) * PEXN(:,:) !Cp -ZCP(IIJB:IIJE,:)=CST%XCPD -IF (KRR > 0) ZCP(IIJB:IIJE,:) = ZCP(IIJB:IIJE,:) + CST%XCPV * PR(IIJB:IIJE,:,1) +ZCP(:,:)=CST%XCPD +IF (KRR > 0) ZCP(:,:) = ZCP(:,:) + CST%XCPV * PR(:,:,1) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) DO JRR = 2,1+KRRL ! loop on the liquid components !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZCP(IIJB:IIJE,:) = ZCP(IIJB:IIJE,:) + CST%XCL * PR(IIJB:IIJE,:,JRR) + ZCP(:,:) = ZCP(:,:) + CST%XCL * PR(:,:,JRR) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END DO DO JRR = 2+KRRL,1+KRRL+KRRI ! loop on the solid components !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZCP(IIJB:IIJE,:) = ZCP(IIJB:IIJE,:) + CST%XCI * PR(IIJB:IIJE,:,JRR) + ZCP(:,:) = ZCP(:,:) + CST%XCI * PR(:,:,JRR) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END DO @@ -114,33 +114,33 @@ IF ( KRRL >= 1 ) THEN IF ( KRRI >= 1 ) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) !ZLVOCPEXN and ZLSOCPEXN - ZLVOCPEXN(IIJB:IIJE,:)=(CST%XLVTT + (CST%XCPV-CST%XCL) * (ZT(IIJB:IIJE,:)-CST%XTT) ) & - &/ ZCP(IIJB:IIJE,:) / PEXN(IIJB:IIJE,:) - ZLSOCPEXN(IIJB:IIJE,:)=(CST%XLSTT + (CST%XCPV-CST%XCI) * (ZT(IIJB:IIJE,:)-CST%XTT) ) & - &/ ZCP(IIJB:IIJE,:) / PEXN(IIJB:IIJE,:) + ZLVOCPEXN(:,:)=(CST%XLVTT + (CST%XCPV-CST%XCL) * (ZT(:,:)-CST%XTT) ) & + &/ ZCP(:,:) / PEXN(:,:) + ZLSOCPEXN(:,:)=(CST%XLSTT + (CST%XCPV-CST%XCI) * (ZT(:,:)-CST%XTT) ) & + &/ ZCP(:,:) / PEXN(:,:) ! Rnp - PRT(IIJB:IIJE,:) = PR(IIJB:IIJE,:,1) + PR(IIJB:IIJE,:,2) + PR(IIJB:IIJE,:,4) + PRT(:,:) = PR(:,:,1) + PR(:,:,2) + PR(:,:,4) ! Theta_l - PTHL(IIJB:IIJE,:) = PTH(IIJB:IIJE,:) - ZLVOCPEXN(IIJB:IIJE,:) * PR(IIJB:IIJE,:,2) & - - ZLSOCPEXN(IIJB:IIJE,:) * PR(IIJB:IIJE,:,4) + PTHL(:,:) = PTH(:,:) - ZLVOCPEXN(:,:) * PR(:,:,2) & + - ZLSOCPEXN(:,:) * PR(:,:,4) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) !ZLVOCPEXN - ZLVOCPEXN(IIJB:IIJE,:)=(CST%XLVTT + (CST%XCPV-CST%XCL) * (ZT(IIJB:IIJE,:)-CST%XTT) ) & - &/ ZCP(IIJB:IIJE,:) / PEXN(IIJB:IIJE,:) + ZLVOCPEXN(:,:)=(CST%XLVTT + (CST%XCPV-CST%XCL) * (ZT(:,:)-CST%XTT) ) & + &/ ZCP(:,:) / PEXN(:,:) ! Rnp - PRT(IIJB:IIJE,:) = PR(IIJB:IIJE,:,1) + PR(IIJB:IIJE,:,2) + PRT(:,:) = PR(:,:,1) + PR(:,:,2) ! Theta_l - PTHL(IIJB:IIJE,:) = PTH(IIJB:IIJE,:) - ZLVOCPEXN(IIJB:IIJE,:) * PR(IIJB:IIJE,:,2) + PTHL(:,:) = PTH(:,:) - ZLVOCPEXN(:,:) * PR(:,:,2) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! Rnp = rv - PRT(IIJB:IIJE,:) = PR(IIJB:IIJE,:,1) + PRT(:,:) = PR(:,:,1) ! Theta_l = Theta - PTHL(IIJB:IIJE,:) = PTH(IIJB:IIJE,:) + PTHL(:,:) = PTH(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF IF (LHOOK) CALL DR_HOOK('THL_RT_FRM_TH_R_MF',1,ZHOOK_HANDLE) diff --git a/src/PHYEX/turb/mode_tke_eps_sources.f90 b/src/PHYEX/turb/mode_tke_eps_sources.f90 index 1ca962693ed6b5b15547b841bf664cc0328871a9..aef4003ca11c629af10bfa8336bd7f91821fc6ff 100644 --- a/src/PHYEX/turb/mode_tke_eps_sources.f90 +++ b/src/PHYEX/turb/mode_tke_eps_sources.f90 @@ -239,7 +239,7 @@ IKL=D%NKL ! ! compute the effective diffusion coefficient at the mass point !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZKEFF(IIJB:IIJE,1:IKT) = PLM(IIJB:IIJE,1:IKT) * SQRT(PTKEM(IIJB:IIJE,1:IKT)) +ZKEFF(:,:) = PLM(:,:) * SQRT(PTKEM(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! !---------------------------------------------------------------------------- @@ -253,9 +253,9 @@ ZKEFF(IIJB:IIJE,1:IKT) = PLM(IIJB:IIJE,1:IKT) * SQRT(PTKEM(IIJB:IIJE,1:IKT)) ! Complete the sources of TKE with the horizontal turbulent explicit transport ! IF (TURBN%CTURBDIM=='3DIM') THEN - ZTR(IIJB:IIJE,1:IKT)=PTRH(IIJB:IIJE,1:IKT) + ZTR(:,:)=PTRH(:,:) ELSE - ZTR(IIJB:IIJE,1:IKT)=0. + ZTR(:,:)=0. END IF ! ! @@ -265,12 +265,12 @@ END IF IF (OOCEAN) THEN ! W(IKE) value stored in PDP(IKE) to the mass localization of tke(IKE) !$mnh_expand_array(JIJ=IIJB:IIJE) - PDP(IIJB:IIJE,IKE) = PDP(IIJB:IIJE,IKE) * (1. + PDZZ(IIJB:IIJE,IKE)/PDZZ(IIJB:IIJE,IKE+1)) + PDP(:,IKE) = PDP(:,IKE) * (1. + PDZZ(:,IKE)/PDZZ(:,IKE+1)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ELSE ! W(IKB+1) value stored in PDP(IKB) to the mass localization tke(IKB) !$mnh_expand_array(JIJ=IIJB:IIJE) - PDP(IIJB:IIJE,IKB) = PDP(IIJB:IIJE,IKB) * (1. + PDZZ(IIJB:IIJE,IKB+IKL)/PDZZ(IIJB:IIJE,IKB)) + PDP(:,IKB) = PDP(:,IKB) * (1. + PDZZ(:,IKB+IKL)/PDZZ(:,IKB)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF ! @@ -281,11 +281,11 @@ CALL MZM_PHY(D,ZKEFF,ZMWORK1) CALL MZM_PHY(D,PRHODJ,ZMWORK2) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZFLX(IIJB:IIJE,1:IKT) = CSTURB%XCED * SQRT(PTKEM(IIJB:IIJE,1:IKT)) / PLEPS(IIJB:IIJE,1:IKT) -ZSOURCE(IIJB:IIJE,1:IKT) = ( PRTKES(IIJB:IIJE,1:IKT) + PRTKEMS(IIJB:IIJE,1:IKT) ) & - / PRHODJ(IIJB:IIJE,1:IKT) - PTKEM(IIJB:IIJE,1:IKT) / PTSTEP & - + PDP(IIJB:IIJE,1:IKT) + PTP(IIJB:IIJE,1:IKT) + ZTR(IIJB:IIJE,1:IKT) & - - PEXPL * ZFLX(IIJB:IIJE,1:IKT) * PTKEM(IIJB:IIJE,1:IKT) +ZFLX(:,:) = CSTURB%XCED * SQRT(PTKEM(:,:)) / PLEPS(:,:) +ZSOURCE(:,:) = ( PRTKES(:,:) + PRTKEMS(:,:) ) & + / PRHODJ(:,:) - PTKEM(:,:) / PTSTEP & + + PDP(:,:) + PTP(:,:) + ZTR(:,:) & + - PEXPL * ZFLX(:,:) * PTKEM(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! !* 2.2 implicit vertical TKE transport @@ -296,15 +296,15 @@ ZSOURCE(IIJB:IIJE,1:IKT) = ( PRTKES(IIJB:IIJE,1:IKT) + PRTKEMS(IIJB:IIJE,1:IKT) IF (OOCEAN) THEN !for ocean:wave breaking simple/very rough param wE = 100 Ustar**3 where ustar is the Tau_atmi/rhocea !$mnh_expand_array(JIJ=IIJB:IIJE) - ZSOURCE(IIJB:IIJE,IKE)=ZSOURCE(IIJB:IIJE,IKE)-1.E2*((PSFUM(IIJB:IIJE)**2 + PSFVM(IIJB:IIJE)**2)**1.5) /PDZZ(IIJB:IIJE,IKE) + ZSOURCE(:,IKE)=ZSOURCE(:,IKE)-1.E2*((PSFUM(:)**2 + PSFVM(:)**2)**1.5) /PDZZ(:,IKE) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF ! Compute the vector giving the elements just under the diagonal for the ! matrix inverted in TRIDIAG ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZA(IIJB:IIJE,1:IKT) = - PTSTEP * CSTURB%XCET * ZMWORK1(IIJB:IIJE,1:IKT) & - * ZMWORK2(IIJB:IIJE,1:IKT) / PDZZ(IIJB:IIJE,1:IKT)**2 +ZA(:,:) = - PTSTEP * CSTURB%XCET * ZMWORK1(:,:) & + * ZMWORK2(:,:) / PDZZ(:,:)**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! ! Compute TKE at time t+deltat: ( stored in ZRES ) @@ -316,8 +316,8 @@ CALL GET_HALO_PHY(D,ZRES) ! IF (ODIAG_IN_RUN) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PCURRENT_TKE_DISS(IIJB:IIJE,1:IKT) = ZFLX(IIJB:IIJE,1:IKT) * PTKEM(IIJB:IIJE,1:IKT) & - *(PEXPL*PTKEM(IIJB:IIJE,1:IKT) + TURBN%XIMPL*ZRES(IIJB:IIJE,1:IKT)) + PCURRENT_TKE_DISS(:,:) = ZFLX(:,:) * PTKEM(:,:) & + *(PEXPL*PTKEM(:,:) + TURBN%XIMPL*ZRES(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! CALL ADD2DFIELD_ll(TZFIELDDISS_ll, PCURRENT_TKE_DISS, 'TKE_EPS_SOURCES::PCURRENT_TKE_DISS' ) @@ -329,16 +329,16 @@ ENDIF ! CL : Now done at the end of the time step in ADVECTION_METSV for MesoNH IF(HPROGRAM/='MESONH') THEN !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) - GTKENEG(IIJB:IIJE,1:IKT) = ZRES(IIJB:IIJE,1:IKT) <= CSTURB%XTKEMIN - WHERE ( GTKENEG(IIJB:IIJE,1:IKT) ) - ZRES(IIJB:IIJE,1:IKT) = CSTURB%XTKEMIN + GTKENEG(:,:) = ZRES(:,:) <= CSTURB%XTKEMIN + WHERE ( GTKENEG(:,:) ) + ZRES(:,:) = CSTURB%XTKEMIN END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PTDISS(IIJB:IIJE,1:IKT) = - ZFLX(IIJB:IIJE,1:IKT)*(PEXPL*PTKEM(IIJB:IIJE,1:IKT) & - + TURBN%XIMPL*ZRES(IIJB:IIJE,1:IKT)) +PTDISS(:,:) = - ZFLX(:,:)*(PEXPL*PTKEM(:,:) & + + TURBN%XIMPL*ZRES(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! IF ( TLES%LLES_CALL .OR. & @@ -348,28 +348,28 @@ IF ( TLES%LLES_CALL .OR. & ! CALL MZM_PHY(D,ZKEFF,ZMWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZDWORK1(IIJB:IIJE,1:IKT) = TURBN%XIMPL * ZRES(IIJB:IIJE,1:IKT) + PEXPL * PTKEM(IIJB:IIJE,1:IKT) + ZDWORK1(:,:) = TURBN%XIMPL * ZRES(:,:) + PEXPL * PTKEM(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL DZM_PHY(D,ZDWORK1,ZDWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLX(IIJB:IIJE,1:IKT) = - CSTURB%XCET * ZMWORK1(IIJB:IIJE,1:IKT) & - * ZDWORK2(IIJB:IIJE,1:IKT) / PDZZ(IIJB:IIJE,1:IKT) + ZFLX(:,:) = - CSTURB%XCET * ZMWORK1(:,:) & + * ZDWORK2(:,:) / PDZZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! - ZFLX(IIJB:IIJE,IKB) = 0. - ZFLX(IIJB:IIJE,IKA) = 0. + ZFLX(:,IKB) = 0. + ZFLX(:,IKA) = 0. ! ! Compute the whole turbulent TRansport of TKE: ! CALL MZM_PHY(D,PRHODJ,ZMWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZMWORK2(IIJB:IIJE,1:IKT) = ZMWORK1(IIJB:IIJE,1:IKT) * ZFLX(IIJB:IIJE,1:IKT) & - / PDZZ(IIJB:IIJE,1:IKT) + ZMWORK2(:,:) = ZMWORK1(:,:) * ZFLX(:,:) & + / PDZZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL DZF_PHY(D,ZMWORK2,ZDWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZTR(IIJB:IIJE,1:IKT)= ZTR(IIJB:IIJE,1:IKT) - ZDWORK1(IIJB:IIJE,1:IKT) & - /PRHODJ(IIJB:IIJE,1:IKT) + ZTR(:,:)= ZTR(:,:) - ZDWORK1(:,:) & + /PRHODJ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! ! Storage in the LES configuration @@ -387,20 +387,20 @@ END IF IF (BUCONF%LBUDGET_TKE) THEN ! Dynamical production !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZMWORK1(IIJB:IIJE,1:IKT) = PDP(IIJB:IIJE,1:IKT) * PRHODJ(IIJB:IIJE,1:IKT) + ZMWORK1(:,:) = PDP(:,:) * PRHODJ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TKE), 'DP', ZMWORK1) ! ! Thermal production !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZMWORK1(IIJB:IIJE,1:IKT) = PTP(IIJB:IIJE,1:IKT) * PRHODJ(IIJB:IIJE,1:IKT) + ZMWORK1(:,:) = PTP(:,:) * PRHODJ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TKE), 'TP', ZMWORK1) ! ! Dissipation !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZMWORK1(IIJB:IIJE,1:IKT) = -CSTURB%XCED * SQRT(PTKEM(IIJB:IIJE,1:IKT))/PLEPS(IIJB:IIJE,1:IKT) * & - (PEXPL*PTKEM(IIJB:IIJE,1:IKT) + TURBN%XIMPL*ZRES(IIJB:IIJE,1:IKT))*PRHODJ(IIJB:IIJE,1:IKT) + ZMWORK1(:,:) = -CSTURB%XCED * SQRT(PTKEM(:,:))/PLEPS(:,:) * & + (PEXPL*PTKEM(:,:) + TURBN%XIMPL*ZRES(:,:))*PRHODJ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TKE), 'DISS',ZMWORK1) END IF @@ -412,28 +412,28 @@ END IF !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) #ifdef REPRO48 IF (BUCONF%LBUDGET_TKE) THEN -PRTKES(IIJB:IIJE,1:IKT) = PRTKES(IIJB:IIJE,1:IKT) + PDP(IIJB:IIJE,1:IKT) * PRHODJ(IIJB:IIJE,1:IKT) -PRTKES(IIJB:IIJE,1:IKT) = PRTKES(IIJB:IIJE,1:IKT) + PTP(IIJB:IIJE,1:IKT) * PRHODJ(IIJB:IIJE,1:IKT) -PRTKES(IIJB:IIJE,1:IKT) = PRTKES(IIJB:IIJE,1:IKT) - CSTURB%XCED * SQRT(PTKEM(IIJB:IIJE,1:IKT)) / PLEPS(IIJB:IIJE,1:IKT) * & - (PEXPL*PTKEM(IIJB:IIJE,1:IKT) + TURBN%XIMPL*ZRES(IIJB:IIJE,1:IKT)) * PRHODJ(IIJB:IIJE,1:IKT) +PRTKES(:,:) = PRTKES(:,:) + PDP(:,:) * PRHODJ(:,:) +PRTKES(:,:) = PRTKES(:,:) + PTP(:,:) * PRHODJ(:,:) +PRTKES(:,:) = PRTKES(:,:) - CSTURB%XCED * SQRT(PTKEM(:,:)) / PLEPS(:,:) * & + (PEXPL*PTKEM(:,:) + TURBN%XIMPL*ZRES(:,:)) * PRHODJ(:,:) END IF #else -PRTKES(IIJB:IIJE,1:IKT) = PRTKES(IIJB:IIJE,1:IKT) + PRHODJ(IIJB:IIJE,1:IKT) * & - ( PDP(IIJB:IIJE,1:IKT) + PTP(IIJB:IIJE,1:IKT) & - - CSTURB%XCED * SQRT(PTKEM(IIJB:IIJE,1:IKT)) / PLEPS(IIJB:IIJE,1:IKT) & - * ( PEXPL*PTKEM(IIJB:IIJE,1:IKT) + TURBN%XIMPL*ZRES(IIJB:IIJE,1:IKT) ) ) +PRTKES(:,:) = PRTKES(:,:) + PRHODJ(:,:) * & + ( PDP(:,:) + PTP(:,:) & + - CSTURB%XCED * SQRT(PTKEM(:,:)) / PLEPS(:,:) & + * ( PEXPL*PTKEM(:,:) + TURBN%XIMPL*ZRES(:,:) ) ) #endif ! -PTDIFF(IIJB:IIJE,1:IKT) = ZRES(IIJB:IIJE,1:IKT) / PTSTEP - PRTKES(IIJB:IIJE,1:IKT)& - /PRHODJ(IIJB:IIJE,1:IKT) & - & - PDP(IIJB:IIJE,1:IKT)- PTP(IIJB:IIJE,1:IKT) - PTDISS(IIJB:IIJE,1:IKT) +PTDIFF(:,:) = ZRES(:,:) / PTSTEP - PRTKES(:,:)& + /PRHODJ(:,:) & + & - PDP(:,:)- PTP(:,:) - PTDISS(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! IF (BUCONF%LBUDGET_TKE) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_TKE), 'TR', PRTKES) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PRTKES(IIJB:IIJE,1:IKT) = ZRES(IIJB:IIJE,1:IKT) * PRHODJ(IIJB:IIJE,1:IKT) / PTSTEP & - - PRTKEMS(IIJB:IIJE,1:IKT) +PRTKES(:,:) = ZRES(:,:) * PRHODJ(:,:) / PTSTEP & + - PRTKEMS(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! ! stores the whole turbulent transport @@ -446,10 +446,10 @@ IF (BUCONF%LBUDGET_TKE) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_TKE), 'TR' ! ------------------------------- ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PRTHLS(IIJB:IIJE,1:IKT) = PRTHLS(IIJB:IIJE,1:IKT) + & - CSTURB%XCED * SQRT(PTKEM(IIJB:IIJE,1:IKT)) / PLEPS(IIJB:IIJE,1:IKT) * & - (PEXPL*PTKEM(IIJB:IIJE,1:IKT) + TURBN%XIMPL*ZRES(IIJB:IIJE,1:IKT)) & - * PRHODJ(IIJB:IIJE,1:IKT) * PCOEF_DISS(IIJB:IIJE,1:IKT) +PRTHLS(:,:) = PRTHLS(:,:) + & + CSTURB%XCED * SQRT(PTKEM(:,:)) / PLEPS(:,:) * & + (PEXPL*PTKEM(:,:) + TURBN%XIMPL*ZRES(:,:)) & + * PRHODJ(:,:) * PCOEF_DISS(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) !---------------------------------------------------------------------------- ! @@ -459,13 +459,13 @@ PRTHLS(IIJB:IIJE,1:IKT) = PRTHLS(IIJB:IIJE,1:IKT) + & IF(PRESENT(PTR)) PTR=ZTR IF(PRESENT(PDISS)) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PDISS(IIJB:IIJE,1:IKT) = -CSTURB%XCED * (PTKEM(IIJB:IIJE,1:IKT)**1.5) / PLEPS(IIJB:IIJE,1:IKT) + PDISS(:,:) = -CSTURB%XCED * (PTKEM(:,:)**1.5) / PLEPS(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! IF(PRESENT(PEDR)) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PEDR(IIJB:IIJE,1:IKT) = CSTURB%XCED * (PTKEM(IIJB:IIJE,1:IKT)**1.5) / PLEPS(IIJB:IIJE,1:IKT) + PEDR(:,:) = CSTURB%XCED * (PTKEM(:,:)**1.5) / PLEPS(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! diff --git a/src/PHYEX/turb/mode_tm06.f90 b/src/PHYEX/turb/mode_tm06.f90 index d5f9ea2de34a14418c499634b7f78224ac6be80d..1da05315c07f0d7ee905b59894d3368f51ff5b5c 100644 --- a/src/PHYEX/turb/mode_tm06.f90 +++ b/src/PHYEX/turb/mode_tm06.f90 @@ -92,12 +92,12 @@ IKU=D%NKU !* w* and T* ! !$mnh_expand_where(JIJ=IIJB:IIJE) -WHERE(PSFTH(IIJB:IIJE)>0.) - ZWSTAR(IIJB:IIJE) = ((CST%XG/PTHVREF(IIJB:IIJE,IKB))*PSFTH(IIJB:IIJE)*PBL_DEPTH(IIJB:IIJE))**(1./3.) - ZTSTAR(IIJB:IIJE) = PSFTH(IIJB:IIJE) / ZWSTAR(IIJB:IIJE) +WHERE(PSFTH(:)>0.) + ZWSTAR(:) = ((CST%XG/PTHVREF(:,IKB))*PSFTH(:)*PBL_DEPTH(:))**(1./3.) + ZTSTAR(:) = PSFTH(:) / ZWSTAR(:) ELSEWHERE - ZWSTAR(IIJB:IIJE) = 0. - ZTSTAR(IIJB:IIJE) = 0. + ZWSTAR(:) = 0. + ZTSTAR(:) = 0. END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) ! @@ -105,53 +105,53 @@ END WHERE !* normalized height ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZZ_O_H(IIJB:IIJE,1:IKT) = XUNDEF +ZZ_O_H(:,:) = XUNDEF !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) DO JK=1,IKT !$mnh_expand_where(JIJ=IIJB:IIJE) - WHERE (PBL_DEPTH(IIJB:IIJE)/=XUNDEF) - ZZ_O_H(IIJB:IIJE,JK) = (PZZ(IIJB:IIJE,JK)-PZZ(IIJB:IIJE,IKB)) / PBL_DEPTH(IIJB:IIJE) + WHERE (PBL_DEPTH(:)/=XUNDEF) + ZZ_O_H(:,JK) = (PZZ(:,JK)-PZZ(:,IKB)) / PBL_DEPTH(:) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) END DO ! !* w'th'2 ! -PMTH2(IIJB:IIJE,1:IKT) = 0. +PMTH2(:,:) = 0. !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) -WHERE(ZZ_O_H(IIJB:IIJE,1:IKT) < 0.95 .AND. ZZ_O_H(IIJB:IIJE,1:IKT)/=XUNDEF) - PMTH2(IIJB:IIJE,1:IKT) = 4.*(MAX(ZZ_O_H(IIJB:IIJE,1:IKT),0.))**0.4*(ZZ_O_H(IIJB:IIJE,1:IKT)-0.95)**2 +WHERE(ZZ_O_H(:,:) < 0.95 .AND. ZZ_O_H(:,:)/=XUNDEF) + PMTH2(:,:) = 4.*(MAX(ZZ_O_H(:,:),0.))**0.4*(ZZ_O_H(:,:)-0.95)**2 END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) DO JK=IKTB+1,IKTE-1 !$mnh_expand_array(JIJ=IIJB:IIJE) - PMTH2(IIJB:IIJE,JK) = PMTH2(IIJB:IIJE,JK) * ZTSTAR(IIJB:IIJE)**2*ZWSTAR(IIJB:IIJE) + PMTH2(:,JK) = PMTH2(:,JK) * ZTSTAR(:)**2*ZWSTAR(:) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO !$mnh_expand_array(JIJ=IIJB:IIJE) -PMTH2(IIJB:IIJE,IKE)=PMTH2(IIJB:IIJE,IKE) * ZTSTAR(IIJB:IIJE)**2*ZWSTAR(IIJB:IIJE) -PMTH2(IIJB:IIJE,IKU)=PMTH2(IIJB:IIJE,IKU) * ZTSTAR(IIJB:IIJE)**2*ZWSTAR(IIJB:IIJE) +PMTH2(:,IKE)=PMTH2(:,IKE) * ZTSTAR(:)**2*ZWSTAR(:) +PMTH2(:,IKU)=PMTH2(:,IKU) * ZTSTAR(:)**2*ZWSTAR(:) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! ! !* w'2th' ! -PMWTH(IIJB:IIJE,1:IKT) = 0. +PMWTH(:,:) = 0. !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) -WHERE(ZZ_O_H(IIJB:IIJE,1:IKT) <0.9 .AND. ZZ_O_H(IIJB:IIJE,1:IKT)/=XUNDEF) - PMWTH(IIJB:IIJE,1:IKT) = MAX(-7.9*(ABS(ZZ_O_H(IIJB:IIJE,1:IKT)-0.35))**2.9 & - * (ABS(ZZ_O_H(IIJB:IIJE,1:IKT)-1.))**0.58 + 0.37, 0.) +WHERE(ZZ_O_H(:,:) <0.9 .AND. ZZ_O_H(:,:)/=XUNDEF) + PMWTH(:,:) = MAX(-7.9*(ABS(ZZ_O_H(:,:)-0.35))**2.9 & + * (ABS(ZZ_O_H(:,:)-1.))**0.58 + 0.37, 0.) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) DO JK=IKTB+1,IKTE-1 !$mnh_expand_array(JIJ=IIJB:IIJE) - PMWTH(IIJB:IIJE,JK) = PMWTH(IIJB:IIJE,JK) * ZWSTAR(IIJB:IIJE)**2*ZTSTAR(IIJB:IIJE) + PMWTH(:,JK) = PMWTH(:,JK) * ZWSTAR(:)**2*ZTSTAR(:) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO !$mnh_expand_array(JIJ=IIJB:IIJE) -PMWTH(IIJB:IIJE,IKE) = PMWTH(IIJB:IIJE,IKE) * ZWSTAR(IIJB:IIJE)**2*ZTSTAR(IIJB:IIJE) -PMWTH(IIJB:IIJE,IKU) = PMWTH(IIJB:IIJE,IKU) * ZWSTAR(IIJB:IIJE)**2*ZTSTAR(IIJB:IIJE) +PMWTH(:,IKE) = PMWTH(:,IKE) * ZWSTAR(:)**2*ZTSTAR(:) +PMWTH(:,IKU) = PMWTH(:,IKU) * ZWSTAR(:)**2*ZTSTAR(:) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !---------------------------------------------------------------------------- diff --git a/src/PHYEX/turb/mode_tm06_h.f90 b/src/PHYEX/turb/mode_tm06_h.f90 index 02af4cf442f27a9bb99da0945c6e337af767200c..f250ee3af27b1ba1e0b048caed4a3df84b93b495 100644 --- a/src/PHYEX/turb/mode_tm06_h.f90 +++ b/src/PHYEX/turb/mode_tm06_h.f90 @@ -86,31 +86,31 @@ IIJE=D%NIJE IIJB=D%NIJB ! -ZBL_DEPTH(IIJB:IIJE) = PBL_DEPTH(IIJB:IIJE) +ZBL_DEPTH(:) = PBL_DEPTH(:) ! !$mnh_expand_where(JIJ=IIJB:IIJE) -WHERE(ZBL_DEPTH(IIJB:IIJE)==XUNDEF) - ZBL_DEPTH(IIJB:IIJE)=0. +WHERE(ZBL_DEPTH(:)==XUNDEF) + ZBL_DEPTH(:)=0. END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) ! !$mnh_expand_array(JIJ=IIJB:IIJE) -PBL_DEPTH(IIJB:IIJE) = XUNDEF -ZFLXZMIN(IIJB:IIJE) = PFLXZ(IIJB:IIJE,IKB) +PBL_DEPTH(:) = XUNDEF +ZFLXZMIN(:) = PFLXZ(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! DO JK=IKTB,IKTE !$mnh_expand_where(JIJ=IIJB:IIJE) - WHERE(PFLXZ(IIJB:IIJE,IKB)>0. .AND. PFLXZ(IIJB:IIJE,JK)<ZFLXZMIN(IIJB:IIJE)) - PBL_DEPTH(IIJB:IIJE) = PZZ(IIJB:IIJE,JK) - PZZ(IIJB:IIJE,IKB) - ZFLXZMIN(IIJB:IIJE) = PFLXZ(IIJB:IIJE,JK) + WHERE(PFLXZ(:,IKB)>0. .AND. PFLXZ(:,JK)<ZFLXZMIN(:)) + PBL_DEPTH(:) = PZZ(:,JK) - PZZ(:,IKB) + ZFLXZMIN(:) = PFLXZ(:,JK) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) END DO ! !$mnh_expand_where(JIJ=IIJB:IIJE) -WHERE(PBL_DEPTH(IIJB:IIJE)/=XUNDEF) - PBL_DEPTH(IIJB:IIJE)=MIN(PBL_DEPTH(IIJB:IIJE),ZBL_DEPTH(IIJB:IIJE)+ZGROWTH*PTSTEP) +WHERE(PBL_DEPTH(:)/=XUNDEF) + PBL_DEPTH(:)=MIN(PBL_DEPTH(:),ZBL_DEPTH(:)+ZGROWTH*PTSTEP) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) ! diff --git a/src/PHYEX/turb/mode_tridiag.f90 b/src/PHYEX/turb/mode_tridiag.f90 index 6c15c7dc20122a834aa5487c98a185bacdaa1bcd..6b6b6bfae0c4fa504bfa7d64913db5332775d6de 100644 --- a/src/PHYEX/turb/mode_tridiag.f90 +++ b/src/PHYEX/turb/mode_tridiag.f90 @@ -165,25 +165,25 @@ IIJB=D%NIJB IIJE=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+IKL) * & - (PVARM(IIJB:IIJE,IKB+IKL) - PVARM(IIJB:IIJE,IKB)) +ZY(:,IKB) = PVARM(:,IKB) + PTSTEP*PSOURCE(:,IKB) - & + PEXPL / PRHODJ(:,IKB) * PA(:,IKB+IKL) * & + (PVARM(:,IKB+IKL) - PVARM(:,IKB)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! DO JK=IKTB+1,IKTE-1 !$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-IKL)*PA(IIJB:IIJE,JK) & - -PVARM(IIJB:IIJE,JK)*(PA(IIJB:IIJE,JK)+PA(IIJB:IIJE,JK+IKL)) & - +PVARM(IIJB:IIJE,JK+IKL)*PA(IIJB:IIJE,JK+IKL) & + ZY(:,JK)= PVARM(:,JK) + PTSTEP*PSOURCE(:,JK) - & + PEXPL / PRHODJ(:,JK) * & + ( PVARM(:,JK-IKL)*PA(:,JK) & + -PVARM(:,JK)*(PA(:,JK)+PA(:,JK+IKL)) & + +PVARM(:,JK+IKL)*PA(:,JK+IKL) & ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! !$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-IKL)) +ZY(:,IKE)= PVARM(:,IKE) + PTSTEP*PSOURCE(:,IKE) + & + PEXPL / PRHODJ(:,IKE) * PA(:,IKE) * (PVARM(:,IKE)-PVARM(:,IKE-IKL)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! ! @@ -196,34 +196,34 @@ IF ( PIMPL > 1.E-10 ) THEN ! going up ! !$mnh_expand_array(JIJ=IIJB:IIJE) - ZBET(IIJB:IIJE) = 1. - PIMPL * PA(IIJB:IIJE,IKB+IKL) / PRHODJ(IIJB:IIJE,IKB) ! bet = b(ikb) - PVARP(IIJB:IIJE,IKB) = ZY(IIJB:IIJE,IKB) / ZBET(IIJB:IIJE) + ZBET(:) = 1. - PIMPL * PA(:,IKB+IKL) / PRHODJ(:,IKB) ! bet = b(ikb) + PVARP(:,IKB) = ZY(:,IKB) / ZBET(:) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! DO JK = IKB+IKL,IKE-IKL,IKL !$mnh_expand_array(JIJ=IIJB:IIJE) - ZGAM(IIJB:IIJE,JK) = PIMPL * PA(IIJB:IIJE,JK) / PRHODJ(IIJB:IIJE,JK-IKL) / ZBET(IIJB:IIJE) + ZGAM(:,JK) = PIMPL * PA(:,JK) / PRHODJ(:,JK-IKL) / ZBET(:) ! gam(k) = c(k-1) / bet - ZBET(IIJB:IIJE) = 1. - PIMPL * ( PA(IIJB:IIJE,JK) * (1. + ZGAM(IIJB:IIJE,JK)) & - + PA(IIJB:IIJE,JK+IKL) & - ) / PRHODJ(IIJB:IIJE,JK) + ZBET(:) = 1. - PIMPL * ( PA(:,JK) * (1. + ZGAM(:,JK)) & + + PA(:,JK+IKL) & + ) / PRHODJ(:,JK) ! bet = b(k) - a(k)* gam(k) - PVARP(IIJB:IIJE,JK)= ( ZY(IIJB:IIJE,JK) - PIMPL * PA(IIJB:IIJE,JK) / PRHODJ(IIJB:IIJE,JK) & - * PVARP(IIJB:IIJE,JK-IKL) & - ) / ZBET(IIJB:IIJE) + PVARP(:,JK)= ( ZY(:,JK) - PIMPL * PA(:,JK) / PRHODJ(:,JK) & + * PVARP(:,JK-IKL) & + ) / ZBET(:) ! res(k) = (y(k) -a(k)*res(k-1))/ bet !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO !$mnh_expand_array(JIJ=IIJB:IIJE) ! special treatment for the last level - ZGAM(IIJB:IIJE,IKE) = PIMPL * PA(IIJB:IIJE,IKE) / PRHODJ(IIJB:IIJE,IKE-IKL) / ZBET(IIJB:IIJE) + ZGAM(:,IKE) = PIMPL * PA(:,IKE) / PRHODJ(:,IKE-IKL) / ZBET(:) ! gam(k) = c(k-1) / bet - ZBET(IIJB:IIJE) = 1. - PIMPL * ( PA(IIJB:IIJE,IKE) * (1. + ZGAM(IIJB:IIJE,IKE)) & - ) / PRHODJ(IIJB:IIJE,IKE) + ZBET(:) = 1. - PIMPL * ( PA(:,IKE) * (1. + ZGAM(:,IKE)) & + ) / PRHODJ(:,IKE) ! bet = b(k) - a(k)* gam(k) - PVARP(IIJB:IIJE,IKE)= ( ZY(IIJB:IIJE,IKE) - PIMPL * PA(IIJB:IIJE,IKE) / PRHODJ(IIJB:IIJE,IKE) & - * PVARP(IIJB:IIJE,IKE-IKL) & - ) / ZBET(IIJB:IIJE) + PVARP(:,IKE)= ( ZY(:,IKE) - PIMPL * PA(:,IKE) / PRHODJ(:,IKE) & + * PVARP(:,IKE-IKL) & + ) / ZBET(:) ! res(k) = (y(k) -a(k)*res(k-1))/ bet ! ! going down @@ -231,7 +231,7 @@ IF ( PIMPL > 1.E-10 ) THEN !$mnh_end_expand_array(JIJ=IIJB:IIJE) DO JK = IKE-IKL,IKB,-1*IKL !$mnh_expand_array(JIJ=IIJB:IIJE) - PVARP(IIJB:IIJE,JK) = PVARP(IIJB:IIJE,JK) - ZGAM(IIJB:IIJE,JK+IKL) * PVARP(IIJB:IIJE,JK+IKL) + PVARP(:,JK) = PVARP(:,JK) - ZGAM(:,JK+IKL) * PVARP(:,JK+IKL) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! @@ -239,7 +239,7 @@ ELSE ! DO JK=IKTB,IKTE !$mnh_expand_array(JIJ=IIJB:IIJE) - PVARP(IIJB:IIJE,JK) = ZY(IIJB:IIJE,JK) + PVARP(:,JK) = ZY(:,JK) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! @@ -250,8 +250,8 @@ END IF ! ---------------------------------------- ! !$mnh_expand_array(JIJ=IIJB:IIJE) -PVARP(IIJB:IIJE,IKA)=PVARP(IIJB:IIJE,IKB) -PVARP(IIJB:IIJE,IKU)=PVARP(IIJB:IIJE,IKE) +PVARP(:,IKA)=PVARP(:,IKB) +PVARP(:,IKU)=PVARP(:,IKE) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !------------------------------------------------------------------------------- diff --git a/src/PHYEX/turb/mode_tridiag_massflux.f90 b/src/PHYEX/turb/mode_tridiag_massflux.f90 index e58c9a3d0c258c888f280eeef7b14f65b797e634..871eaa033524cb38cba360ca18c4c649cf5b0fc1 100644 --- a/src/PHYEX/turb/mode_tridiag_massflux.f90 +++ b/src/PHYEX/turb/mode_tridiag_massflux.f90 @@ -178,7 +178,7 @@ IKTE=D%NKTE ! CALL MZM_MF(D, PRHODJ, ZMZM_RHODJ) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZRHODJ_DFDT_O_DZ(IIJB:IIJE,1:IKT) = ZMZM_RHODJ(IIJB:IIJE,1:IKT)*PDFDT(IIJB:IIJE,1:IKT)/PDZZ(IIJB:IIJE,1:IKT) +ZRHODJ_DFDT_O_DZ(:,:) = ZMZM_RHODJ(:,:)*PDFDT(:,:)/PDZZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! ZA=0. @@ -191,36 +191,36 @@ ZY=0. ! --------------------------- ! !$mnh_expand_array(JIJ=IIJB:IIJE) -ZY(IIJB:IIJE,IKB) = PRHODJ(IIJB:IIJE,IKB)*PVARM(IIJB:IIJE,IKB)/PTSTEP & - - ZMZM_RHODJ(IIJB:IIJE,IKB+IKL) * PF(IIJB:IIJE,IKB+IKL)/PDZZ(IIJB:IIJE,IKB+IKL) & - + ZMZM_RHODJ(IIJB:IIJE,IKB ) * PF(IIJB:IIJE,IKB )/PDZZ(IIJB:IIJE,IKB ) & - + ZRHODJ_DFDT_O_DZ(IIJB:IIJE,IKB+IKL) * 0.5*PIMPL * PVARM(IIJB:IIJE,IKB+IKL) & - + ZRHODJ_DFDT_O_DZ(IIJB:IIJE,IKB+IKL) * 0.5*PIMPL * PVARM(IIJB:IIJE,IKB ) +ZY(:,IKB) = PRHODJ(:,IKB)*PVARM(:,IKB)/PTSTEP & + - ZMZM_RHODJ(:,IKB+IKL) * PF(:,IKB+IKL)/PDZZ(:,IKB+IKL) & + + ZMZM_RHODJ(:,IKB ) * PF(:,IKB )/PDZZ(:,IKB ) & + + ZRHODJ_DFDT_O_DZ(:,IKB+IKL) * 0.5*PIMPL * PVARM(:,IKB+IKL) & + + ZRHODJ_DFDT_O_DZ(:,IKB+IKL) * 0.5*PIMPL * PVARM(:,IKB ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! DO JK=1+IKTB,IKTE-1 !$mnh_expand_array(JIJ=IIJB:IIJE) - ZY(IIJB:IIJE,JK) = PRHODJ(IIJB:IIJE,JK)*PVARM(IIJB:IIJE,JK)/PTSTEP & - - ZMZM_RHODJ(IIJB:IIJE,JK+IKL) * PF(IIJB:IIJE,JK+IKL)/PDZZ(IIJB:IIJE,JK+IKL) & - + ZMZM_RHODJ(IIJB:IIJE,JK ) * PF(IIJB:IIJE,JK )/PDZZ(IIJB:IIJE,JK ) & - + ZRHODJ_DFDT_O_DZ(IIJB:IIJE,JK+IKL) * 0.5*PIMPL * PVARM(IIJB:IIJE,JK+IKL) & - + ZRHODJ_DFDT_O_DZ(IIJB:IIJE,JK+IKL) * 0.5*PIMPL * PVARM(IIJB:IIJE,JK ) & - - ZRHODJ_DFDT_O_DZ(IIJB:IIJE,JK ) * 0.5*PIMPL * PVARM(IIJB:IIJE,JK ) & - - ZRHODJ_DFDT_O_DZ(IIJB:IIJE,JK ) * 0.5*PIMPL * PVARM(IIJB:IIJE,JK-IKL) + ZY(:,JK) = PRHODJ(:,JK)*PVARM(:,JK)/PTSTEP & + - ZMZM_RHODJ(:,JK+IKL) * PF(:,JK+IKL)/PDZZ(:,JK+IKL) & + + ZMZM_RHODJ(:,JK ) * PF(:,JK )/PDZZ(:,JK ) & + + ZRHODJ_DFDT_O_DZ(:,JK+IKL) * 0.5*PIMPL * PVARM(:,JK+IKL) & + + ZRHODJ_DFDT_O_DZ(:,JK+IKL) * 0.5*PIMPL * PVARM(:,JK ) & + - ZRHODJ_DFDT_O_DZ(:,JK ) * 0.5*PIMPL * PVARM(:,JK ) & + - ZRHODJ_DFDT_O_DZ(:,JK ) * 0.5*PIMPL * PVARM(:,JK-IKL) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! IF (IKE==IKU) THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - ZY(IIJB:IIJE,IKE) = PRHODJ(IIJB:IIJE,IKE)*PVARM(IIJB:IIJE,IKE)/PTSTEP + ZY(:,IKE) = PRHODJ(:,IKE)*PVARM(:,IKE)/PTSTEP !$mnh_end_expand_array(JIJ=IIJB:IIJE) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE) - ZY(IIJB:IIJE,IKE) = PRHODJ(IIJB:IIJE,IKE)*PVARM(IIJB:IIJE,IKE)/PTSTEP & - - ZMZM_RHODJ(IIJB:IIJE,IKE+IKL) * PF(IIJB:IIJE,IKE+IKL)/PDZZ(IIJB:IIJE,IKE+IKL) & - + ZMZM_RHODJ(IIJB:IIJE,IKE ) * PF(IIJB:IIJE,IKE )/PDZZ(IIJB:IIJE,IKE ) & - - ZRHODJ_DFDT_O_DZ(IIJB:IIJE,IKE ) * 0.5*PIMPL * PVARM(IIJB:IIJE,IKE ) & - - ZRHODJ_DFDT_O_DZ(IIJB:IIJE,IKE ) * 0.5*PIMPL * PVARM(IIJB:IIJE,IKE-IKL) + ZY(:,IKE) = PRHODJ(:,IKE)*PVARM(:,IKE)/PTSTEP & + - ZMZM_RHODJ(:,IKE+IKL) * PF(:,IKE+IKL)/PDZZ(:,IKE+IKL) & + + ZMZM_RHODJ(:,IKE ) * PF(:,IKE )/PDZZ(:,IKE ) & + - ZRHODJ_DFDT_O_DZ(:,IKE ) * 0.5*PIMPL * PVARM(:,IKE ) & + - ZRHODJ_DFDT_O_DZ(:,IKE ) * 0.5*PIMPL * PVARM(:,IKE-IKL) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ENDIF ! @@ -234,53 +234,53 @@ IF ( PIMPL > 1.E-10 ) THEN ! -------------- ! !$mnh_expand_array(JIJ=IIJB:IIJE) - ZB(IIJB:IIJE,IKB) = PRHODJ(IIJB:IIJE,IKB)/PTSTEP & - + ZRHODJ_DFDT_O_DZ(IIJB:IIJE,IKB+IKL) * 0.5*PIMPL - ZC(IIJB:IIJE,IKB) = ZRHODJ_DFDT_O_DZ(IIJB:IIJE,IKB+IKL) * 0.5*PIMPL + ZB(:,IKB) = PRHODJ(:,IKB)/PTSTEP & + + ZRHODJ_DFDT_O_DZ(:,IKB+IKL) * 0.5*PIMPL + ZC(:,IKB) = ZRHODJ_DFDT_O_DZ(:,IKB+IKL) * 0.5*PIMPL !$mnh_end_expand_array(JIJ=IIJB:IIJE) DO JK=1+IKTB,IKTE-1 !$mnh_expand_array(JIJ=IIJB:IIJE) - ZA(IIJB:IIJE,JK) = - ZRHODJ_DFDT_O_DZ(IIJB:IIJE,JK ) * 0.5*PIMPL - ZB(IIJB:IIJE,JK) = PRHODJ(IIJB:IIJE,JK)/PTSTEP & - + ZRHODJ_DFDT_O_DZ(IIJB:IIJE,JK+IKL) * 0.5*PIMPL & - - ZRHODJ_DFDT_O_DZ(IIJB:IIJE,JK ) * 0.5*PIMPL - ZC(IIJB:IIJE,JK) = ZRHODJ_DFDT_O_DZ(IIJB:IIJE,JK+IKL) * 0.5*PIMPL + ZA(:,JK) = - ZRHODJ_DFDT_O_DZ(:,JK ) * 0.5*PIMPL + ZB(:,JK) = PRHODJ(:,JK)/PTSTEP & + + ZRHODJ_DFDT_O_DZ(:,JK+IKL) * 0.5*PIMPL & + - ZRHODJ_DFDT_O_DZ(:,JK ) * 0.5*PIMPL + ZC(:,JK) = ZRHODJ_DFDT_O_DZ(:,JK+IKL) * 0.5*PIMPL !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO !$mnh_expand_array(JIJ=IIJB:IIJE) - ZA(IIJB:IIJE,IKE) = - ZRHODJ_DFDT_O_DZ(IIJB:IIJE,IKE ) * 0.5*PIMPL - ZB(IIJB:IIJE,IKE) = PRHODJ(IIJB:IIJE,IKE)/PTSTEP & - - ZRHODJ_DFDT_O_DZ(IIJB:IIJE,IKE ) * 0.5*PIMPL + ZA(:,IKE) = - ZRHODJ_DFDT_O_DZ(:,IKE ) * 0.5*PIMPL + ZB(:,IKE) = PRHODJ(:,IKE)/PTSTEP & + - ZRHODJ_DFDT_O_DZ(:,IKE ) * 0.5*PIMPL !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !* 3.2 going up ! -------- ! !$mnh_expand_array(JIJ=IIJB:IIJE) - ZBET(IIJB:IIJE) = ZB(IIJB:IIJE,IKB) ! bet = b(IKB) - PVARP(IIJB:IIJE,IKB) = ZY(IIJB:IIJE,IKB) / ZBET(IIJB:IIJE) + ZBET(:) = ZB(:,IKB) ! bet = b(IKB) + PVARP(:,IKB) = ZY(:,IKB) / ZBET(:) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! DO JK = IKB+IKL,IKE-IKL,IKL !$mnh_expand_array(JIJ=IIJB:IIJE) - ZGAM(IIJB:IIJE,JK) = ZC(IIJB:IIJE,JK-IKL) / ZBET(IIJB:IIJE) + ZGAM(:,JK) = ZC(:,JK-IKL) / ZBET(:) ! gam(k) = c(k-1) / bet - ZBET(IIJB:IIJE) = ZB(IIJB:IIJE,JK) - ZA(IIJB:IIJE,JK) * ZGAM(IIJB:IIJE,JK) + ZBET(:) = ZB(:,JK) - ZA(:,JK) * ZGAM(:,JK) ! bet = b(k) - a(k)* gam(k) - PVARP(IIJB:IIJE,JK)= ( ZY(IIJB:IIJE,JK) - ZA(IIJB:IIJE,JK) * PVARP(IIJB:IIJE,JK-IKL) ) / ZBET(IIJB:IIJE) + PVARP(:,JK)= ( ZY(:,JK) - ZA(:,JK) * PVARP(:,JK-IKL) ) / ZBET(:) ! res(k) = (y(k) -a(k)*res(k-1))/ bet !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO !$mnh_expand_array(JIJ=IIJB:IIJE) ! special treatment for the last level - ZGAM(IIJB:IIJE,IKE) = ZC(IIJB:IIJE,IKE-IKL) / ZBET(IIJB:IIJE) + ZGAM(:,IKE) = ZC(:,IKE-IKL) / ZBET(:) ! gam(k) = c(k-1) / bet - ZBET(IIJB:IIJE) = ZB(IIJB:IIJE,IKE) - ZA(IIJB:IIJE,IKE) * ZGAM(IIJB:IIJE,IKE) + ZBET(:) = ZB(:,IKE) - ZA(:,IKE) * ZGAM(:,IKE) ! bet = b(k) - a(k)* gam(k) - PVARP(IIJB:IIJE,IKE)= ( ZY(IIJB:IIJE,IKE) - ZA(IIJB:IIJE,IKE) * PVARP(IIJB:IIJE,IKE-IKL) ) / & - &ZBET(IIJB:IIJE) + PVARP(:,IKE)= ( ZY(:,IKE) - ZA(:,IKE) * PVARP(:,IKE-IKL) ) / & + &ZBET(:) ! res(k) = (y(k) -a(k)*res(k-1))/ bet !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! @@ -289,7 +289,7 @@ IF ( PIMPL > 1.E-10 ) THEN ! DO JK = IKE-IKL,IKB,-IKL !$mnh_expand_array(JIJ=IIJB:IIJE) - PVARP(IIJB:IIJE,JK) = PVARP(IIJB:IIJE,JK) - ZGAM(IIJB:IIJE,JK+IKL) * PVARP(IIJB:IIJE,JK+IKL) + PVARP(:,JK) = PVARP(:,JK) - ZGAM(:,JK+IKL) * PVARP(:,JK+IKL) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! @@ -299,7 +299,7 @@ ELSE ! DO JK=IKTB,IKTE !$mnh_expand_array(JIJ=IIJB:IIJE) - PVARP(IIJB:IIJE,JK) = ZY(IIJB:IIJE,JK) * PTSTEP / PRHODJ(IIJB:IIJE,JK) + PVARP(:,JK) = ZY(:,JK) * PTSTEP / PRHODJ(:,JK) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ENDDO ! @@ -310,8 +310,8 @@ END IF ! ---------------------------------------- ! !$mnh_expand_array(JIJ=IIJB:IIJE) -PVARP(IIJB:IIJE,IKA)=PVARP(IIJB:IIJE,IKB) -PVARP(IIJB:IIJE,IKU)=PVARP(IIJB:IIJE,IKE) +PVARP(:,IKA)=PVARP(:,IKB) +PVARP(:,IKU)=PVARP(:,IKE) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !------------------------------------------------------------------------------- diff --git a/src/PHYEX/turb/mode_tridiag_thermo.f90 b/src/PHYEX/turb/mode_tridiag_thermo.f90 index 23d959b9bdb5714bdc06ecfe4592456c2a0a5751..a4070154427e7a7082d1c1e47fd576bed641b3a5 100644 --- a/src/PHYEX/turb/mode_tridiag_thermo.f90 +++ b/src/PHYEX/turb/mode_tridiag_thermo.f90 @@ -177,8 +177,8 @@ IIJE=D%NIJE ! CALL MZM_PHY(D,PRHODJ,ZMZM_RHODJ) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,1:IKT) = ZMZM_RHODJ(IIJB:IIJE,1:IKT)*PDFDDTDZ(IIJB:IIJE,1:IKT) & - /PDZZ(IIJB:IIJE,1:IKT)**2 +ZRHODJ_DFDDTDZ_O_DZ2(:,:) = ZMZM_RHODJ(:,:)*PDFDDTDZ(:,:) & + /PDZZ(:,:)**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! ZA=0. @@ -191,31 +191,31 @@ ZY=0. ! --------------------------- ! !$mnh_expand_array(JIJ=IIJB:IIJE) -ZY(IIJB:IIJE,IKB) = PRHODJ(IIJB:IIJE,IKB)*PVARM(IIJB:IIJE,IKB)/PTSTEP & - - ZMZM_RHODJ(IIJB:IIJE,IKB+IKL) * PF(IIJB:IIJE,IKB+IKL)/PDZZ(IIJB:IIJE,IKB+IKL) & - + ZMZM_RHODJ(IIJB:IIJE,IKB ) * PF(IIJB:IIJE,IKB )/PDZZ(IIJB:IIJE,IKB ) & - + ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,IKB+IKL) * PIMPL * PVARM(IIJB:IIJE,IKB+IKL) & - - ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,IKB+IKL) * PIMPL * PVARM(IIJB:IIJE,IKB ) +ZY(:,IKB) = PRHODJ(:,IKB)*PVARM(:,IKB)/PTSTEP & + - ZMZM_RHODJ(:,IKB+IKL) * PF(:,IKB+IKL)/PDZZ(:,IKB+IKL) & + + ZMZM_RHODJ(:,IKB ) * PF(:,IKB )/PDZZ(:,IKB ) & + + ZRHODJ_DFDDTDZ_O_DZ2(:,IKB+IKL) * PIMPL * PVARM(:,IKB+IKL) & + - ZRHODJ_DFDDTDZ_O_DZ2(:,IKB+IKL) * PIMPL * PVARM(:,IKB ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! DO JK=IKTB+1,IKTE-1 !$mnh_expand_array(JIJ=IIJB:IIJE) - ZY(IIJB:IIJE,JK) = PRHODJ(IIJB:IIJE,JK)*PVARM(IIJB:IIJE,JK)/PTSTEP & - - ZMZM_RHODJ(IIJB:IIJE,JK+IKL) * PF(IIJB:IIJE,JK+IKL)/PDZZ(IIJB:IIJE,JK+IKL) & - + ZMZM_RHODJ(IIJB:IIJE,JK ) * PF(IIJB:IIJE,JK )/PDZZ(IIJB:IIJE,JK ) & - + ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,JK+IKL) * PIMPL * PVARM(IIJB:IIJE,JK+IKL) & - - ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,JK+IKL) * 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-IKL) + ZY(:,JK) = PRHODJ(:,JK)*PVARM(:,JK)/PTSTEP & + - ZMZM_RHODJ(:,JK+IKL) * PF(:,JK+IKL)/PDZZ(:,JK+IKL) & + + ZMZM_RHODJ(:,JK ) * PF(:,JK )/PDZZ(:,JK ) & + + ZRHODJ_DFDDTDZ_O_DZ2(:,JK+IKL) * PIMPL * PVARM(:,JK+IKL) & + - ZRHODJ_DFDDTDZ_O_DZ2(:,JK+IKL) * PIMPL * PVARM(:,JK ) & + - ZRHODJ_DFDDTDZ_O_DZ2(:,JK ) * PIMPL * PVARM(:,JK ) & + + ZRHODJ_DFDDTDZ_O_DZ2(:,JK ) * PIMPL * PVARM(:,JK-IKL) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! !$mnh_expand_array(JIJ=IIJB:IIJE) -ZY(IIJB:IIJE,IKE) = PRHODJ(IIJB:IIJE,IKE)*PVARM(IIJB:IIJE,IKE)/PTSTEP & - - ZMZM_RHODJ(IIJB:IIJE,IKE+IKL) * PF(IIJB:IIJE,IKE+IKL)/PDZZ(IIJB:IIJE,IKE+IKL) & - + 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-IKL) +ZY(:,IKE) = PRHODJ(:,IKE)*PVARM(:,IKE)/PTSTEP & + - ZMZM_RHODJ(:,IKE+IKL) * PF(:,IKE+IKL)/PDZZ(:,IKE+IKL) & + + ZMZM_RHODJ(:,IKE ) * PF(:,IKE )/PDZZ(:,IKE ) & + - ZRHODJ_DFDDTDZ_O_DZ2(:,IKE ) * PIMPL * PVARM(:,IKE ) & + + ZRHODJ_DFDDTDZ_O_DZ2(:,IKE ) * PIMPL * PVARM(:,IKE-IKL) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! ! @@ -228,53 +228,53 @@ IF ( PIMPL > 1.E-10 ) THEN ! -------------- ! !$mnh_expand_array(JIJ=IIJB:IIJE) - ZB(IIJB:IIJE,IKB) = PRHODJ(IIJB:IIJE,IKB)/PTSTEP & - - ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,IKB+IKL) * PIMPL - ZC(IIJB:IIJE,IKB) = ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,IKB+IKL) * PIMPL + ZB(:,IKB) = PRHODJ(:,IKB)/PTSTEP & + - ZRHODJ_DFDDTDZ_O_DZ2(:,IKB+IKL) * PIMPL + ZC(:,IKB) = ZRHODJ_DFDDTDZ_O_DZ2(:,IKB+IKL) * PIMPL !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! DO JK=IKTB+1,IKTE-1 !$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+IKL) * PIMPL & - - ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,JK) * PIMPL - ZC(IIJB:IIJE,JK) = ZRHODJ_DFDDTDZ_O_DZ2(IIJB:IIJE,JK+IKL) * PIMPL + ZA(:,JK) = ZRHODJ_DFDDTDZ_O_DZ2(:,JK) * PIMPL + ZB(:,JK) = PRHODJ(:,JK)/PTSTEP & + - ZRHODJ_DFDDTDZ_O_DZ2(:,JK+IKL) * PIMPL & + - ZRHODJ_DFDDTDZ_O_DZ2(:,JK) * PIMPL + ZC(:,JK) = ZRHODJ_DFDDTDZ_O_DZ2(:,JK+IKL) * PIMPL !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! !$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 + ZA(:,IKE) = ZRHODJ_DFDDTDZ_O_DZ2(:,IKE ) * PIMPL + ZB(:,IKE) = PRHODJ(:,IKE)/PTSTEP & + - ZRHODJ_DFDDTDZ_O_DZ2(:,IKE ) * PIMPL ! !* 3.2 going up ! -------- ! - ZBET(IIJB:IIJE) = ZB(IIJB:IIJE,IKB) ! bet = b(ikb) - PVARP(IIJB:IIJE,IKB) = ZY(IIJB:IIJE,IKB) / ZBET(IIJB:IIJE) + ZBET(:) = ZB(:,IKB) ! bet = b(ikb) + PVARP(:,IKB) = ZY(:,IKB) / ZBET(:) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! DO JK = IKB+IKL,IKE-IKL,IKL !$mnh_expand_array(JIJ=IIJB:IIJE) - ZGAM(IIJB:IIJE,JK) = ZC(IIJB:IIJE,JK-IKL) / ZBET(IIJB:IIJE) + ZGAM(:,JK) = ZC(:,JK-IKL) / ZBET(:) ! gam(k) = c(k-1) / bet - ZBET(IIJB:IIJE) = ZB(IIJB:IIJE,JK) - ZA(IIJB:IIJE,JK) * ZGAM(IIJB:IIJE,JK) + ZBET(:) = ZB(:,JK) - ZA(:,JK) * ZGAM(:,JK) ! bet = b(k) - a(k)* gam(k) - PVARP(IIJB:IIJE,JK)= ( ZY(IIJB:IIJE,JK) - ZA(IIJB:IIJE,JK) * PVARP(IIJB:IIJE,JK-IKL) ) & - / ZBET(IIJB:IIJE) + PVARP(:,JK)= ( ZY(:,JK) - ZA(:,JK) * PVARP(:,JK-IKL) ) & + / ZBET(:) ! res(k) = (y(k) -a(k)*res(k-1))/ bet !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! special treatment for the last level !$mnh_expand_array(JIJ=IIJB:IIJE) - ZGAM(IIJB:IIJE,IKE) = ZC(IIJB:IIJE,IKE-IKL) / ZBET(IIJB:IIJE) + ZGAM(:,IKE) = ZC(:,IKE-IKL) / ZBET(:) ! gam(k) = c(k-1) / bet - ZBET(IIJB:IIJE) = ZB(IIJB:IIJE,IKE) - ZA(IIJB:IIJE,IKE) * ZGAM(IIJB:IIJE,IKE) + ZBET(:) = ZB(:,IKE) - ZA(:,IKE) * ZGAM(:,IKE) ! bet = b(k) - a(k)* gam(k) - PVARP(IIJB:IIJE,IKE)= ( ZY(IIJB:IIJE,IKE) - ZA(IIJB:IIJE,IKE) * PVARP(IIJB:IIJE,IKE-IKL) ) & - / ZBET(IIJB:IIJE) + PVARP(:,IKE)= ( ZY(:,IKE) - ZA(:,IKE) * PVARP(:,IKE-IKL) ) & + / ZBET(:) ! res(k) = (y(k) -a(k)*res(k-1))/ bet !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! @@ -283,7 +283,7 @@ IF ( PIMPL > 1.E-10 ) THEN ! DO JK = IKE-IKL,IKB,-1*IKL !$mnh_expand_array(JIJ=IIJB:IIJE) - PVARP(IIJB:IIJE,JK) = PVARP(IIJB:IIJE,JK) - ZGAM(IIJB:IIJE,JK+IKL) * PVARP(IIJB:IIJE,JK+IKL) + PVARP(:,JK) = PVARP(:,JK) - ZGAM(:,JK+IKL) * PVARP(:,JK+IKL) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! @@ -291,7 +291,7 @@ ELSE ! DO JK=IKTB,IKTE !$mnh_expand_array(JIJ=IIJB:IIJE) - PVARP(IIJB:IIJE,JK) = ZY(IIJB:IIJE,JK) * PTSTEP / PRHODJ(IIJB:IIJE,JK) + PVARP(:,JK) = ZY(:,JK) * PTSTEP / PRHODJ(:,JK) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! @@ -302,8 +302,8 @@ END IF ! ---------------------------------------- ! !$mnh_expand_array(JIJ=IIJB:IIJE) -PVARP(IIJB:IIJE,IKA)=PVARP(IIJB:IIJE,IKB) -PVARP(IIJB:IIJE,IKU)=PVARP(IIJB:IIJE,IKE) +PVARP(:,IKA)=PVARP(:,IKB) +PVARP(:,IKU)=PVARP(:,IKE) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !------------------------------------------------------------------------------- diff --git a/src/PHYEX/turb/mode_tridiag_tke.f90 b/src/PHYEX/turb/mode_tridiag_tke.f90 index cc761d7ad6692eee4041148e7f4c3f12a7e4f6e8..1c11a85689bc57b2155d185fc47d02cee5031c8d 100644 --- a/src/PHYEX/turb/mode_tridiag_tke.f90 +++ b/src/PHYEX/turb/mode_tridiag_tke.f90 @@ -165,25 +165,25 @@ IIJB=D%NIJB IIJE=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+IKL) * & - (PVARM(IIJB:IIJE,IKB+IKL) - PVARM(IIJB:IIJE,IKB)) +ZY(:,IKB) = PVARM(:,IKB) + PTSTEP*PSOURCE(:,IKB) - & + PEXPL / PRHODJ(:,IKB) * PA(:,IKB+IKL) * & + (PVARM(:,IKB+IKL) - PVARM(:,IKB)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! DO JK=IKTB+1,IKTE-1 !$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-IKL)*PA(IIJB:IIJE,JK) & - -PVARM(IIJB:IIJE,JK)*(PA(IIJB:IIJE,JK)+PA(IIJB:IIJE,JK+IKL)) & - +PVARM(IIJB:IIJE,JK+IKL)*PA(IIJB:IIJE,JK+IKL) & + ZY(:,JK)= PVARM(:,JK) + PTSTEP*PSOURCE(:,JK) - & + PEXPL / PRHODJ(:,JK) * & + ( PVARM(:,JK-IKL)*PA(:,JK) & + -PVARM(:,JK)*(PA(:,JK)+PA(:,JK+IKL)) & + +PVARM(:,JK+IKL)*PA(:,JK+IKL) & ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! !$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-IKL)) +ZY(:,IKE)= PVARM(:,IKE) + PTSTEP*PSOURCE(:,IKE) + & + PEXPL / PRHODJ(:,IKE) * PA(:,IKE) * (PVARM(:,IKE)-PVARM(:,IKE-IKL)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! ! @@ -196,37 +196,37 @@ IF ( PIMPL > 1.E-10 ) THEN ! going up ! !$mnh_expand_array(JIJ=IIJB:IIJE) - ZBET(IIJB:IIJE) = 1. + PIMPL * (PDIAG(IIJB:IIJE,IKB)-PA(IIJB:IIJE,IKB+IKL) / PRHODJ(IIJB:IIJE,IKB)) + ZBET(:) = 1. + PIMPL * (PDIAG(:,IKB)-PA(:,IKB+IKL) / PRHODJ(:,IKB)) ! bet = b(ikb) - PVARP(IIJB:IIJE,IKB) = ZY(IIJB:IIJE,IKB) / ZBET(IIJB:IIJE) + PVARP(:,IKB) = ZY(:,IKB) / ZBET(:) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! DO JK = IKB+IKL,IKE-IKL,IKL !$mnh_expand_array(JIJ=IIJB:IIJE) - ZGAM(IIJB:IIJE,JK) = PIMPL * PA(IIJB:IIJE,JK) / PRHODJ(IIJB:IIJE,JK-IKL) / ZBET(IIJB:IIJE) + ZGAM(:,JK) = PIMPL * PA(:,JK) / PRHODJ(:,JK-IKL) / ZBET(:) ! gam(k) = c(k-1) / bet - ZBET(IIJB:IIJE) = 1. + PIMPL * ( PDIAG(IIJB:IIJE,JK) - & - ( PA(IIJB:IIJE,JK) * (1. + ZGAM(IIJB:IIJE,JK)) & - + PA(IIJB:IIJE,JK+IKL) & - ) / PRHODJ(IIJB:IIJE,JK) & + ZBET(:) = 1. + PIMPL * ( PDIAG(:,JK) - & + ( PA(:,JK) * (1. + ZGAM(:,JK)) & + + PA(:,JK+IKL) & + ) / PRHODJ(:,JK) & ) ! bet = b(k) - a(k)* gam(k) - PVARP(IIJB:IIJE,JK)= ( ZY(IIJB:IIJE,JK) - PIMPL * PA(IIJB:IIJE,JK) / PRHODJ(IIJB:IIJE,JK) & - * PVARP(IIJB:IIJE,JK-IKL) & - ) / ZBET(IIJB:IIJE) + PVARP(:,JK)= ( ZY(:,JK) - PIMPL * PA(:,JK) / PRHODJ(:,JK) & + * PVARP(:,JK-IKL) & + ) / ZBET(:) ! res(k) = (y(k) -a(k)*res(k-1))/ bet !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO !$mnh_expand_array(JIJ=IIJB:IIJE) ! special treatment for the last level - ZGAM(IIJB:IIJE,IKE) = PIMPL * PA(IIJB:IIJE,IKE) / PRHODJ(IIJB:IIJE,IKE-IKL) / ZBET(IIJB:IIJE) + ZGAM(:,IKE) = PIMPL * PA(:,IKE) / PRHODJ(:,IKE-IKL) / ZBET(:) ! gam(k) = c(k-1) / bet - ZBET(IIJB:IIJE) = 1. + PIMPL * ( PDIAG(IIJB:IIJE,IKE) - & - ( PA(IIJB:IIJE,IKE) * (1. + ZGAM(IIJB:IIJE,IKE)) ) / PRHODJ(IIJB:IIJE,IKE) & + ZBET(:) = 1. + PIMPL * ( PDIAG(:,IKE) - & + ( PA(:,IKE) * (1. + ZGAM(:,IKE)) ) / PRHODJ(:,IKE) & ) ! bet = b(k) - a(k)* gam(k) - PVARP(IIJB:IIJE,IKE)= ( ZY(IIJB:IIJE,IKE) - PIMPL * PA(IIJB:IIJE,IKE) / PRHODJ(IIJB:IIJE,IKE) & - * PVARP(IIJB:IIJE,IKE-IKL) & - ) / ZBET(IIJB:IIJE) + PVARP(:,IKE)= ( ZY(:,IKE) - PIMPL * PA(:,IKE) / PRHODJ(:,IKE) & + * PVARP(:,IKE-IKL) & + ) / ZBET(:) ! res(k) = (y(k) -a(k)*res(k-1))/ bet ! ! going down @@ -234,7 +234,7 @@ IF ( PIMPL > 1.E-10 ) THEN !$mnh_end_expand_array(JIJ=IIJB:IIJE) DO JK = IKE-IKL,IKB,-1*IKL !$mnh_expand_array(JIJ=IIJB:IIJE) - PVARP(IIJB:IIJE,JK) = PVARP(IIJB:IIJE,JK) - ZGAM(IIJB:IIJE,JK+IKL) * PVARP(IIJB:IIJE,JK+IKL) + PVARP(:,JK) = PVARP(:,JK) - ZGAM(:,JK+IKL) * PVARP(:,JK+IKL) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! @@ -242,7 +242,7 @@ ELSE ! DO JK=IKTB,IKTE !$mnh_expand_array(JIJ=IIJB:IIJE) - PVARP(IIJB:IIJE,JK) = ZY(IIJB:IIJE,JK) + PVARP(:,JK) = ZY(:,JK) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! @@ -253,8 +253,8 @@ END IF ! ---------------------------------------- ! !$mnh_expand_array(JIJ=IIJB:IIJE) -PVARP(IIJB:IIJE,IKA)=PVARP(IIJB:IIJE,IKB) -PVARP(IIJB:IIJE,IKU)=PVARP(IIJB:IIJE,IKE) +PVARP(:,IKA)=PVARP(:,IKB) +PVARP(:,IKU)=PVARP(:,IKE) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !------------------------------------------------------------------------------- diff --git a/src/PHYEX/turb/mode_tridiag_wind.f90 b/src/PHYEX/turb/mode_tridiag_wind.f90 index 0c57fc93e758dc8fd1cda909ab53842ba688765f..b19d6dd2174956d997bab38744a52065d4b22de9 100644 --- a/src/PHYEX/turb/mode_tridiag_wind.f90 +++ b/src/PHYEX/turb/mode_tridiag_wind.f90 @@ -170,25 +170,25 @@ IIJB=D%NIJB IIJE=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+IKL) * & - (PVARM(IIJB:IIJE,IKB+IKL) - PVARM(IIJB:IIJE,IKB)) +ZY(:,IKB) = PVARM(:,IKB) + PTSTEP*PSOURCE(:,IKB) - & + PEXPL / PRHODJA(:,IKB) * PA(:,IKB+IKL) * & + (PVARM(:,IKB+IKL) - PVARM(:,IKB)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! DO JK=IKTB+1,IKTE-1 !$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-IKL)*PA(IIJB:IIJE,JK) & - -PVARM(IIJB:IIJE,JK)*(PA(IIJB:IIJE,JK)+PA(IIJB:IIJE,JK+IKL)) & - +PVARM(IIJB:IIJE,JK+IKL)*PA(IIJB:IIJE,JK+IKL) & + ZY(:,JK)= PVARM(:,JK) + PTSTEP*PSOURCE(:,JK) - & + PEXPL / PRHODJA(:,JK) * & + ( PVARM(:,JK-IKL)*PA(:,JK) & + -PVARM(:,JK)*(PA(:,JK)+PA(:,JK+IKL)) & + +PVARM(:,JK+IKL)*PA(:,JK+IKL) & ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! !$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-IKL)) +ZY(:,IKE)= PVARM(:,IKE) + PTSTEP*PSOURCE(:,IKE) + & + PEXPL / PRHODJA(:,IKE) * PA(:,IKE) * (PVARM(:,IKE)-PVARM(:,IKE-IKL)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! ! @@ -201,35 +201,35 @@ IF ( PIMPL > 1.E-10 ) THEN ! going up ! !$mnh_expand_array(JIJ=IIJB:IIJE) - ZBET(IIJB:IIJE) = 1. - PIMPL * ( PA(IIJB:IIJE,IKB+IKL) / PRHODJA(IIJB:IIJE,IKB) & - + PCOEFS(IIJB:IIJE) * PTSTEP ) ! bet = b(ikb) - PVARP(IIJB:IIJE,IKB) = ZY(IIJB:IIJE,IKB) / ZBET(IIJB:IIJE) + ZBET(:) = 1. - PIMPL * ( PA(:,IKB+IKL) / PRHODJA(:,IKB) & + + PCOEFS(:) * PTSTEP ) ! bet = b(ikb) + PVARP(:,IKB) = ZY(:,IKB) / ZBET(:) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! DO JK = IKB+IKL,IKE-IKL,IKL !$mnh_expand_array(JIJ=IIJB:IIJE) - ZGAM(IIJB:IIJE,JK) = PIMPL * PA(IIJB:IIJE,JK) / PRHODJA(IIJB:IIJE,JK-IKL) / ZBET(IIJB:IIJE) + ZGAM(:,JK) = PIMPL * PA(:,JK) / PRHODJA(:,JK-IKL) / ZBET(:) ! gam(k) = c(k-1) / bet - ZBET(IIJB:IIJE) = 1. - PIMPL * ( PA(IIJB:IIJE,JK) * (1. + ZGAM(IIJB:IIJE,JK)) & - + PA(IIJB:IIJE,JK+IKL) & - ) / PRHODJA(IIJB:IIJE,JK) + ZBET(:) = 1. - PIMPL * ( PA(:,JK) * (1. + ZGAM(:,JK)) & + + PA(:,JK+IKL) & + ) / PRHODJA(:,JK) ! bet = b(k) - a(k)* gam(k) - PVARP(IIJB:IIJE,JK)= ( ZY(IIJB:IIJE,JK) - PIMPL * PA(IIJB:IIJE,JK) / PRHODJA(IIJB:IIJE,JK) & - * PVARP(IIJB:IIJE,JK-IKL) & - ) / ZBET(IIJB:IIJE) + PVARP(:,JK)= ( ZY(:,JK) - PIMPL * PA(:,JK) / PRHODJA(:,JK) & + * PVARP(:,JK-IKL) & + ) / ZBET(:) ! res(k) = (y(k) -a(k)*res(k-1))/ bet !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO !$mnh_expand_array(JIJ=IIJB:IIJE) ! special treatment for the last level - ZGAM(IIJB:IIJE,IKE) = PIMPL * PA(IIJB:IIJE,IKE) / PRHODJA(IIJB:IIJE,IKE-IKL) / ZBET(IIJB:IIJE) + ZGAM(:,IKE) = PIMPL * PA(:,IKE) / PRHODJA(:,IKE-IKL) / ZBET(:) ! gam(k) = c(k-1) / bet - ZBET(IIJB:IIJE) = 1. - PIMPL * ( PA(IIJB:IIJE,IKE) * (1. + ZGAM(IIJB:IIJE,IKE)) & - ) / PRHODJA(IIJB:IIJE,IKE) + ZBET(:) = 1. - PIMPL * ( PA(:,IKE) * (1. + ZGAM(:,IKE)) & + ) / PRHODJA(:,IKE) ! bet = b(k) - a(k)* gam(k) - PVARP(IIJB:IIJE,IKE)= ( ZY(IIJB:IIJE,IKE) - PIMPL * PA(IIJB:IIJE,IKE) / PRHODJA(IIJB:IIJE,IKE) & - * PVARP(IIJB:IIJE,IKE-IKL) & - ) / ZBET(IIJB:IIJE) + PVARP(:,IKE)= ( ZY(:,IKE) - PIMPL * PA(:,IKE) / PRHODJA(:,IKE) & + * PVARP(:,IKE-IKL) & + ) / ZBET(:) ! res(k) = (y(k) -a(k)*res(k-1))/ bet ! ! going down @@ -237,7 +237,7 @@ IF ( PIMPL > 1.E-10 ) THEN !$mnh_end_expand_array(JIJ=IIJB:IIJE) DO JK = IKE-IKL,IKB,-1*IKL !$mnh_expand_array(JIJ=IIJB:IIJE) - PVARP(IIJB:IIJE,JK) = PVARP(IIJB:IIJE,JK) - ZGAM(IIJB:IIJE,JK+IKL) * PVARP(IIJB:IIJE,JK+IKL) + PVARP(:,JK) = PVARP(:,JK) - ZGAM(:,JK+IKL) * PVARP(:,JK+IKL) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! @@ -245,7 +245,7 @@ ELSE ! DO JK=IKTB,IKTE !$mnh_expand_array(JIJ=IIJB:IIJE) - PVARP(IIJB:IIJE,JK) = ZY(IIJB:IIJE,JK) + PVARP(:,JK) = ZY(:,JK) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! @@ -256,8 +256,8 @@ END IF ! ---------------------------------------- ! !$mnh_expand_array(JIJ=IIJB:IIJE) -PVARP(IIJB:IIJE,IKA)=PVARP(IIJB:IIJE,IKB) -PVARP(IIJB:IIJE,IKU)=PVARP(IIJB:IIJE,IKE) +PVARP(:,IKA)=PVARP(:,IKB) +PVARP(:,IKU)=PVARP(:,IKE) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !------------------------------------------------------------------------------- diff --git a/src/PHYEX/turb/mode_turb_ver.f90 b/src/PHYEX/turb/mode_turb_ver.f90 index 6847c703e900270816207ad37a90eec4e25386e7..848abf83551f9c3d2650604e58cb71fbf54a0de0 100644 --- a/src/PHYEX/turb/mode_turb_ver.f90 +++ b/src/PHYEX/turb/mode_turb_ver.f90 @@ -424,18 +424,18 @@ CALL PRANDTL(D,CST,CSTURB,KRR,KSV,KRRI,TURBN%LTURB_FLX, & ! IF (OOCEAN) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZBETA(IIJB:IIJE,1:IKT) = CST%XG*CST%XALPHAOC + ZBETA(:,:) = CST%XG*CST%XALPHAOC !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZBETA(IIJB:IIJE,1:IKT) = CST%XG/PTHVREF(IIJB:IIJE,1:IKT) + ZBETA(:,:) = CST%XG/PTHVREF(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! ! Square root of Tke ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZSQRT_TKE(IIJB:IIJE,1:IKT) = SQRT(PTKEM(IIJB:IIJE,1:IKT)) +ZSQRT_TKE(:,:) = SQRT(PTKEM(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! ! gradients of mean quantities at previous time-step @@ -449,12 +449,12 @@ IF (KRR>0) CALL GZ_M_W_PHY(D,PRM(:,:,1),PDZZ,ZDR_DZ) ! IF (.NOT. TURBN%LHARAT) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZD(IIJB:IIJE,1:IKT) = (1.+ZREDTH1(IIJB:IIJE,1:IKT)+ZREDR1(IIJB:IIJE,1:IKT)) * & - &(1.+0.5*(ZREDTH1(IIJB:IIJE,1:IKT)+ZREDR1(IIJB:IIJE,1:IKT))) + ZD(:,:) = (1.+ZREDTH1(:,:)+ZREDR1(:,:)) * & + &(1.+0.5*(ZREDTH1(:,:)+ZREDR1(:,:))) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZD(IIJB:IIJE,1:IKT) = 1. + ZD(:,:) = 1. !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ENDIF ! diff --git a/src/PHYEX/turb/mode_turb_ver_dyn_flux.f90 b/src/PHYEX/turb/mode_turb_ver_dyn_flux.f90 index acda739bf432db377a546504ce3cb145282f4738..e500f4e5dbde508a36f94d8c68b4bee391d82b47 100644 --- a/src/PHYEX/turb/mode_turb_ver_dyn_flux.f90 +++ b/src/PHYEX/turb/mode_turb_ver_dyn_flux.f90 @@ -360,7 +360,7 @@ ZCMFS = CSTURB%XCMFS IF (TURBN%LHARAT) ZCMFS=1. ! !$mnh_expand_array(JIJ=IIJB:IIJE) -ZDIRSINZW(IIJB:IIJE) = SQRT(1.-PDIRCOSZW(IIJB:IIJE)**2) +ZDIRSINZW(:) = SQRT(1.-PDIRCOSZW(:)**2) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! compute the coefficients for the uncentred gradient computation near the ! ground @@ -369,19 +369,19 @@ ZDIRSINZW(IIJB:IIJE) = SQRT(1.-PDIRCOSZW(IIJB:IIJE)**2) ! IF (TURBN%LHARAT) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZKEFF(IIJB:IIJE,1:IKT) = PLM(IIJB:IIJE,1:IKT) * SQRT(PTKEM(IIJB:IIJE,1:IKT)) + ZKEFF(:,:) = PLM(:,:) * SQRT(PTKEM(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = PLM(IIJB:IIJE,1:IKT) * SQRT(PTKEM(IIJB:IIJE,1:IKT)) + ZWORK1(:,:) = PLM(:,:) * SQRT(PTKEM(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZKEFF) ENDIF ! -ZUSLOPEM(IIJB:IIJE)=PUSLOPEM(IIJB:IIJE) -ZVSLOPEM(IIJB:IIJE)=PVSLOPEM(IIJB:IIJE) -ZFLUXSFCU(IIJB:IIJE)=PSFUM(IIJB:IIJE) -ZFLUXSFCV(IIJB:IIJE)=PSFVM(IIJB:IIJE) +ZUSLOPEM(:)=PUSLOPEM(:) +ZVSLOPEM(:)=PVSLOPEM(:) +ZFLUXSFCU(:)=PSFUM(:) +ZFLUXSFCV(:)=PSFVM(:) ! !---------------------------------------------------------------------------- ! @@ -398,8 +398,8 @@ CALL MXM_PHY(D,PDZZ,ZWORK2) CALL MZM_PHY(D,PRHODJ,ZWORK3) CALL MXM_PHY(D,ZWORK3,ZWORK4) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZA(IIJB:IIJE,1:IKT) = -PTSTEP * ZCMFS * ZWORK1(IIJB:IIJE,1:IKT)* ZWORK4(IIJB:IIJE,1:IKT) & - / ZWORK2(IIJB:IIJE,1:IKT)**2 +ZA(:,:) = -PTSTEP * ZCMFS * ZWORK1(:,:)* ZWORK4(:,:) & + / ZWORK2(:,:)**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! ! @@ -408,66 +408,66 @@ ZA(IIJB:IIJE,1:IKT) = -PTSTEP * ZCMFS * ZWORK1(IIJB:IIJE,1:IKT)* ZWORK4(IIJB:IIJ ! compute the coefficient between the vertical flux and the 2 components of the ! wind following the slope !$mnh_expand_array(JIJ=IIJB:IIJE) -ZCOEFFLXU(IIJB:IIJE) = PCDUEFF(IIJB:IIJE) * (PDIRCOSZW(IIJB:IIJE)**2 - ZDIRSINZW(IIJB:IIJE)**2) & - * PCOSSLOPE(IIJB:IIJE) -ZCOEFFLXV(IIJB:IIJE) = PCDUEFF(IIJB:IIJE) * PDIRCOSZW(IIJB:IIJE) * PSINSLOPE(IIJB:IIJE) +ZCOEFFLXU(:) = PCDUEFF(:) * (PDIRCOSZW(:)**2 - ZDIRSINZW(:)**2) & + * PCOSSLOPE(:) +ZCOEFFLXV(:) = PCDUEFF(:) * PDIRCOSZW(:) * PSINSLOPE(:) ! ! prepare the implicit scheme coefficients for the surface flux -ZCOEFS(IIJB:IIJE)= ZCOEFFLXU(IIJB:IIJE) * PCOSSLOPE(IIJB:IIJE) * PDIRCOSZW(IIJB:IIJE) & - +ZCOEFFLXV(IIJB:IIJE) * PSINSLOPE(IIJB:IIJE) +ZCOEFS(:)= ZCOEFFLXU(:) * PCOSSLOPE(:) * PDIRCOSZW(:) & + +ZCOEFFLXV(:) * PSINSLOPE(:) ! ! average this flux to be located at the U,W vorticity point !$mnh_end_expand_array(JIJ=IIJB:IIJE) -ZWORK11D(IIJB:IIJE)=ZCOEFS(IIJB:IIJE) / PDZZ(IIJB:IIJE,IKB) +ZWORK11D(:)=ZCOEFS(:) / PDZZ(:,IKB) CALL MXM2D_PHY(D,ZWORK11D,ZCOEFS) ! ! -ZSOURCE(IIJB:IIJE,IKTB+1:IKTE-1) = 0. +ZSOURCE(:,IKTB+1:IKTE-1) = 0. ! ZSOURCE= sfc FLUX /DZ ! Sfx flux assumed to be in SI & at vorticity point CALL MXM_PHY(D,PRHODJ,ZWORK1) ! IF (OOCEAN) THEN ! Ocean model !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK21D(IIJB:IIJE) = ZFLUXSFCU(IIJB:IIJE)/PDZZ(IIJB:IIJE,IKE) + ZWORK21D(:) = ZFLUXSFCU(:)/PDZZ(:,IKE) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL MXM2D_PHY(D,ZWORK21D,ZWORK31D) ! !$mnh_expand_array(JIJ=IIJB:IIJE) - ZSOURCE(IIJB:IIJE,IKE) = ZWORK31D(IIJB:IIJE) & - *0.5 * ( 1. + ZWORK1(IIJB:IIJE,IKU) / ZWORK1(IIJB:IIJE,IKE)) + ZSOURCE(:,IKE) = ZWORK31D(:) & + *0.5 * ( 1. + ZWORK1(:,IKU) / ZWORK1(:,IKE)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! ! Zero flux at the ocean domain bottom - ZSOURCE(IIJB:IIJE,IKB) = 0. + ZSOURCE(:,IKB) = 0. ! ELSE ! Atmosphere ! Compute the explicit tangential flux at the W point !$mnh_expand_array(JIJ=IIJB:IIJE) - ZSOURCE(IIJB:IIJE,IKB) = & - PTAU11M(IIJB:IIJE) * PCOSSLOPE(IIJB:IIJE) * PDIRCOSZW(IIJB:IIJE) * ZDIRSINZW(IIJB:IIJE) & - -PTAU12M(IIJB:IIJE) * PSINSLOPE(IIJB:IIJE) * ZDIRSINZW(IIJB:IIJE) & - -PTAU33M(IIJB:IIJE) * PCOSSLOPE(IIJB:IIJE) * ZDIRSINZW(IIJB:IIJE) * PDIRCOSZW(IIJB:IIJE) + ZSOURCE(:,IKB) = & + PTAU11M(:) * PCOSSLOPE(:) * PDIRCOSZW(:) * ZDIRSINZW(:) & + -PTAU12M(:) * PSINSLOPE(:) * ZDIRSINZW(:) & + -PTAU33M(:) * PCOSSLOPE(:) * ZDIRSINZW(:) * PDIRCOSZW(:) ! ! add the vertical part or the surface flux at the U,W vorticity point ! - ZWORK31D(IIJB:IIJE) = ZSOURCE(IIJB:IIJE,IKB)/PDZZ(IIJB:IIJE,IKB) + ZWORK31D(:) = ZSOURCE(:,IKB)/PDZZ(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL MXM2D_PHY(D,ZWORK31D,ZWORK41D) - ZWORK51D(IIJB:IIJE)= ZCOEFFLXU(IIJB:IIJE) / PDZZ(IIJB:IIJE,IKB) & - *ZUSLOPEM(IIJB:IIJE) & - -ZCOEFFLXV(IIJB:IIJE) / PDZZ(IIJB:IIJE,IKB) & - *ZVSLOPEM(IIJB:IIJE) + ZWORK51D(:)= ZCOEFFLXU(:) / PDZZ(:,IKB) & + *ZUSLOPEM(:) & + -ZCOEFFLXV(:) / PDZZ(:,IKB) & + *ZVSLOPEM(:) CALL MXM2D_PHY(D,ZWORK51D,ZWORK61D) !$mnh_expand_array(JIJ=IIJB:IIJE) - ZSOURCE(IIJB:IIJE,IKB) = & - ( ZWORK41D(IIJB:IIJE) & - + ZWORK61D(IIJB:IIJE) & - - ZCOEFS(IIJB:IIJE) * PUM(IIJB:IIJE,IKB) * TURBN%XIMPL & - ) * 0.5 * ( 1. + ZWORK1(IIJB:IIJE,IKA) / ZWORK1(IIJB:IIJE,IKB) ) + ZSOURCE(:,IKB) = & + ( ZWORK41D(:) & + + ZWORK61D(:) & + - ZCOEFS(:) * PUM(:,IKB) * TURBN%XIMPL & + ) * 0.5 * ( 1. + ZWORK1(:,IKA) / ZWORK1(:,IKB) ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! - ZSOURCE(IIJB:IIJE,IKE) = 0. + ZSOURCE(:,IKE) = 0. ENDIF ! ! Obtention of the split U at t+ deltat @@ -480,35 +480,35 @@ CALL TRIDIAG_WIND(D,PUM,ZA,ZCOEFS,PTSTEP,PEXPL,TURBN%XIMPL, & CALL MXM_PHY(D,PRHODJ,ZWORK1) CALL MXM_PHY(D,ZKEFF,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK3(IIJB:IIJE,1:IKT)=TURBN%XIMPL*ZRES(IIJB:IIJE,1:IKT) + PEXPL*PUM(IIJB:IIJE,1:IKT) +ZWORK3(:,:)=TURBN%XIMPL*ZRES(:,:) + PEXPL*PUM(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL DZM_PHY(D,ZWORK3,ZWORK4) CALL MXM_PHY(D,PDZZ,ZWORK5) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PRUS(IIJB:IIJE,1:IKT)= PRUS(IIJB:IIJE,1:IKT)+ZWORK1(IIJB:IIJE,1:IKT)*(ZRES(IIJB:IIJE,1:IKT) & - - PUM(IIJB:IIJE,1:IKT))/PTSTEP +PRUS(:,:)= PRUS(:,:)+ZWORK1(:,:)*(ZRES(:,:) & + - PUM(:,:))/PTSTEP ! !* 5.2 Partial TKE Dynamic Production ! ! vertical flux of the U wind component ! -ZFLXZ(IIJB:IIJE,1:IKT) = -ZCMFS * ZWORK2(IIJB:IIJE,1:IKT) * ZWORK4(IIJB:IIJE,1:IKT) & - / ZWORK5(IIJB:IIJE,1:IKT) +ZFLXZ(:,:) = -ZCMFS * ZWORK2(:,:) * ZWORK4(:,:) & + / ZWORK5(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! IF (OOCEAN) THEN - ZFLXZ(IIJB:IIJE,IKE+1) = ZFLUXSFCU(IIJB:IIJE) + ZFLXZ(:,IKE+1) = ZFLUXSFCU(:) ELSE ! surface flux CALL MXM_PHY(D,PDZZ,ZWORK1) CALL MXM_PHY(D,PRHODJ,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKB) = ZWORK1(IIJB:IIJE,IKB) * & - ( ZSOURCE(IIJB:IIJE,IKB) & - +ZCOEFS(IIJB:IIJE) * ZRES(IIJB:IIJE,IKB) * TURBN%XIMPL & - ) / 0.5 / ( 1. + ZWORK2(IIJB:IIJE,IKA)/ ZWORK2(IIJB:IIJE,IKB) ) + ZFLXZ(:,IKB) = ZWORK1(:,IKB) * & + ( ZSOURCE(:,IKB) & + +ZCOEFS(:) * ZRES(:,IKB) * TURBN%XIMPL & + ) / 0.5 / ( 1. + ZWORK2(:,IKA)/ ZWORK2(:,IKB) ) ! - ZFLXZ(IIJB:IIJE,IKA) = ZFLXZ(IIJB:IIJE,IKB) + ZFLXZ(:,IKA) = ZFLXZ(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF ! @@ -530,19 +530,19 @@ END IF ! ! first part of total momentum flux ! -PWU(IIJB:IIJE,1:IKT) = ZFLXZ(IIJB:IIJE,1:IKT) +PWU(:,:) = ZFLXZ(:,:) ! ! Contribution to the TKE dynamic production of TKE ! (computed at mass point) ! CALL GZ_U_UW_PHY(D,PUM,PDZZ,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK2(IIJB:IIJE,1:IKT) = ZFLXZ(IIJB:IIJE,1:IKT) * ZWORK1(IIJB:IIJE,1:IKT) +ZWORK2(:,:) = ZFLXZ(:,:) * ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MXF_PHY(D,ZWORK2,ZWORK3) CALL MZF_PHY(D,ZWORK3,ZWORK4) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PDP(IIJB:IIJE,1:IKT) = -ZWORK4(IIJB:IIJE,1:IKT) +PDP(:,:) = -ZWORK4(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! ! Special cases near surface @@ -551,22 +551,22 @@ IF (OOCEAN) THEN ! evaluate the dynamic production at w(IKE) and store in PDP(IKE) ! before to be extrapolated in tke_eps routine !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK2(IIJB:IIJE,IKE) = ZFLXZ(IIJB:IIJE,IKE) * (PUM(IIJB:IIJE,IKE)-PUM(IIJB:IIJE,IKE-IKL)) & - / ZWORK1(IIJB:IIJE,IKE-IKL) + ZWORK2(:,IKE) = ZFLXZ(:,IKE) * (PUM(:,IKE)-PUM(:,IKE-IKL)) & + / ZWORK1(:,IKE-IKL) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL MXF_PHY(D,ZWORK2,ZWORK3) !$mnh_expand_array(JIJ=IIJB:IIJE) - PDP(IIJB:IIJE,IKE) = -ZWORK3(IIJB:IIJE,IKE) + PDP(:,IKE) = -ZWORK3(:,IKE) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ELSE ! Atmosphere ! evaluate the dynamic production at w(IKB+KKL) in PDP(IKB) !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK2(IIJB:IIJE,IKB) = ZFLXZ(IIJB:IIJE,IKB+IKL) * (PUM(IIJB:IIJE,IKB+IKL)-PUM(IIJB:IIJE,IKB)) & - / ZWORK1(IIJB:IIJE,IKB+IKL) + ZWORK2(:,IKB) = ZFLXZ(:,IKB+IKL) * (PUM(:,IKB+IKL)-PUM(:,IKB)) & + / ZWORK1(:,IKB+IKL) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL MXF_PHY(D,ZWORK2,ZWORK3) !$mnh_expand_array(JIJ=IIJB:IIJE) - PDP(IIJB:IIJE,IKB) = -ZWORK3(IIJB:IIJE,IKB) + PDP(:,IKB) = -ZWORK3(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! END IF @@ -582,14 +582,14 @@ IF (TLES%LLES_CALL) THEN ! CALL GZ_U_UW_PHY(D,PUM,PDZZ,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZWORK1(IIJB:IIJE,1:IKT) * ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZWORK1(:,:) * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MXF_PHY(D,ZWORK1,ZWORK2) CALL MZF_PHY(D,ZWORK2,ZWORK3) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK3, TLES%X_LES_RES_ddxa_U_SBG_UaU ) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZCMFS * ZKEFF(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZCMFS * ZKEFF(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES, ZWORK1, TLES%X_LES_SUBGRID_Km ) ! @@ -604,47 +604,47 @@ IF(TURBN%CTURBDIM=='3DIM') THEN ! Compute the source for the W wind component ! used to compute the W source at the ground !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKA) = 2 * ZFLXZ(IIJB:IIJE,IKB) - ZFLXZ(IIJB:IIJE,IKB+IKL) ! extrapolation + ZFLXZ(:,IKA) = 2 * ZFLXZ(:,IKB) - ZFLXZ(:,IKB+IKL) ! extrapolation !$mnh_end_expand_array(JIJ=IIJB:IIJE) IF (OOCEAN) THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKU) = 2 * ZFLXZ(IIJB:IIJE,IKE) - ZFLXZ(IIJB:IIJE,IKE-IKL) ! extrapolation + ZFLXZ(:,IKU) = 2 * ZFLXZ(:,IKE) - ZFLXZ(:,IKE-IKL) ! extrapolation !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF ! CALL MXM_PHY(D,PRHODJ,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZWORK1(IIJB:IIJE,1:IKT) / PDXX(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZWORK1(:,:) / PDXX(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = ZWORK2(IIJB:IIJE,1:IKT) * ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = ZWORK2(:,:) * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL DXF_PHY(D,ZWORK2,ZWORK1) ! IF (.NOT. OFLAT) THEN ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = ZFLXZ(IIJB:IIJE,1:IKT)*PDZX(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = ZFLXZ(:,:)*PDZX(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK2,ZWORK3) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK3(IIJB:IIJE,1:IKT) = ZWORK3(IIJB:IIJE,1:IKT) / PDXX(IIJB:IIJE,1:IKT) + ZWORK3(:,:) = ZWORK3(:,:) / PDXX(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MXF_PHY(D,ZWORK3,ZWORK2) CALL MZF_PHY(D,PDZZ,ZWORK3) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK3(IIJB:IIJE,1:IKT) = PRHODJ(IIJB:IIJE,1:IKT) & - / ZWORK3(IIJB:IIJE,1:IKT) * ZWORK2(IIJB:IIJE,1:IKT) + ZWORK3(:,:) = PRHODJ(:,:) & + / ZWORK3(:,:) * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL DZM_PHY(D,ZWORK3,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PRWS(IIJB:IIJE,1:IKT) = PRWS(IIJB:IIJE,1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) & - + ZWORK2(IIJB:IIJE,1:IKT) + PRWS(:,:) = PRWS(:,:) - ZWORK1(:,:) & + + ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PRWS(IIJB:IIJE,1:IKT)= PRWS(IIJB:IIJE,1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) + PRWS(:,:)= PRWS(:,:) - ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -652,12 +652,12 @@ IF(TURBN%CTURBDIM=='3DIM') THEN ! CALL GX_W_UW_PHY(D,OFLAT,PWM,PDXX,PDZZ,PDZX, ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZWORK1(IIJB:IIJE,1:IKT) * ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZWORK1(:,:) * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MXF_PHY(D,ZWORK1,ZWORK2) CALL MZF_PHY(D,ZWORK2,ZWORK3) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZA(IIJB:IIJE,1:IKT) = -ZWORK3(IIJB:IIJE,1:IKT) + ZA(:,:) = -ZWORK3(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! ! Special cases near surface @@ -666,36 +666,36 @@ IF(TURBN%CTURBDIM=='3DIM') THEN ! evaluate the dynamic production at w(IKE) in PDP(IKE) ! !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK31D(IIJB:IIJE) = - ZFLXZ(IIJB:IIJE,IKE) * ZWORK1(IIJB:IIJE,IKE) & - / (0.5*(PDXX(IIJB:IIJE,IKE-IKL)+PDXX(IIJB:IIJE,IKE))) + ZWORK31D(:) = - ZFLXZ(:,IKE) * ZWORK1(:,IKE) & + / (0.5*(PDXX(:,IKE-IKL)+PDXX(:,IKE))) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL MXF2D_PHY(D,ZWORK31D,ZWORK41D) - ZA(IIJB:IIJE,IKE) = ZWORK41D(IIJB:IIJE) + ZA(:,IKE) = ZWORK41D(:) ! ELSE !Atmosphere ! evaluate the dynamic production at w(IKB+IKL) in PDP(IKB) ! !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK21D(IIJB:IIJE) = (PWM(IIJB:IIJE,IKB+2*IKL)-PWM(IIJB:IIJE,IKB+IKL)) & - / (PDZZ(IIJB:IIJE,IKB+2*IKL)+PDZZ(IIJB:IIJE,IKB+IKL)) & - + (PWM(IIJB:IIJE,IKB+IKL)-PWM(IIJB:IIJE,IKB)) & - / (PDZZ(IIJB:IIJE,IKB+IKL)+PDZZ(IIJB:IIJE,IKB)) + ZWORK21D(:) = (PWM(:,IKB+2*IKL)-PWM(:,IKB+IKL)) & + / (PDZZ(:,IKB+2*IKL)+PDZZ(:,IKB+IKL)) & + + (PWM(:,IKB+IKL)-PWM(:,IKB)) & + / (PDZZ(:,IKB+IKL)+PDZZ(:,IKB)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! CALL MXM2D_PHY(D,ZWORK21D,ZWORK51D) !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK31D(IIJB:IIJE) = - ZFLXZ(IIJB:IIJE,IKB+IKL) & - * ( ZWORK1(IIJB:IIJE,IKB+IKL) - ZWORK51D(IIJB:IIJE) & - * PDZX(IIJB:IIJE,IKB+IKL) ) & - / (0.5*(PDXX(IIJB:IIJE,IKB+IKL)+PDXX(IIJB:IIJE,IKB))) + ZWORK31D(:) = - ZFLXZ(:,IKB+IKL) & + * ( ZWORK1(:,IKB+IKL) - ZWORK51D(:) & + * PDZX(:,IKB+IKL) ) & + / (0.5*(PDXX(:,IKB+IKL)+PDXX(:,IKB))) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL MXF2D_PHY(D,ZWORK31D,ZWORK41D) - ZA(IIJB:IIJE,IKB) = ZWORK41D(IIJB:IIJE) + ZA(:,IKB) = ZWORK41D(:) ! END IF ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PDP(IIJB:IIJE,1:IKT)=PDP(IIJB:IIJE,1:IKT)+ZA(IIJB:IIJE,1:IKT) + PDP(:,:)=PDP(:,:)+ZA(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! ! Storage in the LES configuration @@ -705,7 +705,7 @@ IF(TURBN%CTURBDIM=='3DIM') THEN ! CALL GX_W_UW_PHY(D,OFLAT,PWM,PDXX,PDZZ,PDZX,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZWORK1(IIJB:IIJE,1:IKT)*ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZWORK1(:,:)*ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MXF_PHY(D,ZWORK1,ZWORK2) CALL MZF_PHY(D,ZWORK2,ZWORK1) @@ -714,7 +714,7 @@ IF(TURBN%CTURBDIM=='3DIM') THEN CALL GX_M_U_PHY(D,OFLAT,PTHLM,PDXX,PDZZ,PDZX,ZWORK1) CALL MZF_PHY(D,ZFLXZ,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = ZWORK2(IIJB:IIJE,1:IKT) * ZWORK1(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = ZWORK2(:,:) * ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MXF_PHY(D,ZWORK2,ZWORK1) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_RES_ddxa_Thl_SBG_UaW ) @@ -723,7 +723,7 @@ IF(TURBN%CTURBDIM=='3DIM') THEN CALL GX_U_M_PHY(D,OFLAT,PRM(:,:,1),PDXX,PDZZ,PDZX,ZWORK1) CALL MZF_PHY(D,ZFLXZ,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZWORK1(IIJB:IIJE,1:IKT) * ZWORK2(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZWORK1(:,:) * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MXF_PHY(D,ZWORK1,ZWORK2) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2,TLES%X_LES_RES_ddxa_Rt_SBG_UaW ) @@ -732,7 +732,7 @@ IF(TURBN%CTURBDIM=='3DIM') THEN CALL GX_U_M_PHY(D,OFLAT,PSVM(:,:,JSV),PDXX,PDZZ,PDZX,ZWORK1) CALL MZF_PHY(D,ZFLXZ,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZWORK1(IIJB:IIJE,1:IKT) * ZWORK2(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZWORK1(:,:) * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MXF_PHY(D,ZWORK1,ZWORK2) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2,TLES%X_LES_RES_ddxa_Sv_SBG_UaW(:,:,:,JSV) ) @@ -757,8 +757,8 @@ CALL MYM_PHY(D,PDZZ,ZWORK2) CALL MZM_PHY(D,PRHODJ,ZWORK3) CALL MYM_PHY(D,ZWORK3,ZWORK4) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZA(IIJB:IIJE,1:IKT) = -PTSTEP * ZCMFS * ZWORK1(IIJB:IIJE,1:IKT)* ZWORK4(IIJB:IIJE,1:IKT) & - / ZWORK2(IIJB:IIJE,1:IKT)**2 +ZA(:,:) = -PTSTEP * ZCMFS * ZWORK1(:,:)* ZWORK4(:,:) & + / ZWORK2(:,:)**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! ! @@ -767,77 +767,77 @@ ZA(IIJB:IIJE,1:IKT) = -PTSTEP * ZCMFS * ZWORK1(IIJB:IIJE,1:IKT)* ZWORK4(IIJB:IIJ ! compute the coefficient between the vertical flux and the 2 components of the ! wind following the slope !$mnh_expand_array(JIJ=IIJB:IIJE) -ZCOEFFLXU(IIJB:IIJE) = PCDUEFF(IIJB:IIJE) * (PDIRCOSZW(IIJB:IIJE)**2 - ZDIRSINZW(IIJB:IIJE)**2) & - * PSINSLOPE(IIJB:IIJE) -ZCOEFFLXV(IIJB:IIJE) = PCDUEFF(IIJB:IIJE) * PDIRCOSZW(IIJB:IIJE) * PCOSSLOPE(IIJB:IIJE) +ZCOEFFLXU(:) = PCDUEFF(:) * (PDIRCOSZW(:)**2 - ZDIRSINZW(:)**2) & + * PSINSLOPE(:) +ZCOEFFLXV(:) = PCDUEFF(:) * PDIRCOSZW(:) * PCOSSLOPE(:) ! prepare the implicit scheme coefficients for the surface flux -ZCOEFS(IIJB:IIJE)= ZCOEFFLXU(IIJB:IIJE) * PSINSLOPE(IIJB:IIJE) * PDIRCOSZW(IIJB:IIJE) & - +ZCOEFFLXV(IIJB:IIJE) * PCOSSLOPE(IIJB:IIJE) +ZCOEFS(:)= ZCOEFFLXU(:) * PSINSLOPE(:) * PDIRCOSZW(:) & + +ZCOEFFLXV(:) * PCOSSLOPE(:) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! ! average this flux to be located at the V,W vorticity point !$mnh_expand_array(JIJ=IIJB:IIJE) -ZWORK11D(IIJB:IIJE)=ZCOEFS(IIJB:IIJE) / PDZZ(IIJB:IIJE,IKB) +ZWORK11D(:)=ZCOEFS(:) / PDZZ(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL MYM2D_PHY(D,ZWORK11D,ZCOEFS) ! ! No flux in SOURCE TERM NULL OUTSIDE BC -ZSOURCE(IIJB:IIJE,IKB+1:IKE-1) = 0. +ZSOURCE(:,IKB+1:IKE-1) = 0. ! Surface case CALL MYM_PHY(D,PRHODJ,ZWORK1) IF (OOCEAN) THEN ! Ocean case - ZCOEFFLXU(IIJB:IIJE) = PCDUEFF(IIJB:IIJE) - ZCOEFFLXV(IIJB:IIJE) = PCDUEFF(IIJB:IIJE) - ZCOEFS(IIJB:IIJE)=ZCOEFFLXU(IIJB:IIJE) + ZCOEFFLXU(:) = PCDUEFF(:) + ZCOEFFLXV(:) = PCDUEFF(:) + ZCOEFS(:)=ZCOEFFLXU(:) ! average this flux to be located at the U,W vorticity point !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK11D(IIJB:IIJE) = ZCOEFS(IIJB:IIJE) / PDZZ(IIJB:IIJE,IKE) + ZWORK11D(:) = ZCOEFS(:) / PDZZ(:,IKE) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL MYM2D_PHY(D,ZWORK11D,ZCOEFS) ! - ZWORK11D(IIJB:IIJE) = ZFLUXSFCV(IIJB:IIJE) / PDZZ(IIJB:IIJE,IKE) + ZWORK11D(:) = ZFLUXSFCV(:) / PDZZ(:,IKE) CALL MYM2D_PHY(D,ZWORK11D,ZWORK21D) ! !$mnh_expand_array(JIJ=IIJB:IIJE) - ZSOURCE(IIJB:IIJE,IKE) = ZWORK21D(IIJB:IIJE) & - *0.5 * ( 1. + ZWORK1(IIJB:IIJE,IKU) / ZWORK1(IIJB:IIJE,IKE)) + ZSOURCE(:,IKE) = ZWORK21D(:) & + *0.5 * ( 1. + ZWORK1(:,IKU) / ZWORK1(:,IKE)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) !No flux at the ocean domain bottom - ZSOURCE(IIJB:IIJE,IKB) = 0. + ZSOURCE(:,IKB) = 0. ! ELSE ! Atmos case ! !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK31D(IIJB:IIJE) = ZCOEFFLXU(IIJB:IIJE) / PDZZ(IIJB:IIJE,IKB) & - *ZUSLOPEM(IIJB:IIJE) & - +ZCOEFFLXV(IIJB:IIJE) / PDZZ(IIJB:IIJE,IKB) & - *ZVSLOPEM(IIJB:IIJE) + ZWORK31D(:) = ZCOEFFLXU(:) / PDZZ(:,IKB) & + *ZUSLOPEM(:) & + +ZCOEFFLXV(:) / PDZZ(:,IKB) & + *ZVSLOPEM(:) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL MYM2D_PHY(D,ZWORK31D,ZWORK61D) ! ! compute the explicit tangential flux at the W point !$mnh_expand_array(JIJ=IIJB:IIJE) - ZSOURCE(IIJB:IIJE,IKB) = & - PTAU11M(IIJB:IIJE) * PSINSLOPE(IIJB:IIJE) * PDIRCOSZW(IIJB:IIJE) * ZDIRSINZW(IIJB:IIJE) & - +PTAU12M(IIJB:IIJE) * PCOSSLOPE(IIJB:IIJE) * ZDIRSINZW(IIJB:IIJE) & - -PTAU33M(IIJB:IIJE) * PSINSLOPE(IIJB:IIJE) * ZDIRSINZW(IIJB:IIJE) * PDIRCOSZW(IIJB:IIJE) + ZSOURCE(:,IKB) = & + PTAU11M(:) * PSINSLOPE(:) * PDIRCOSZW(:) * ZDIRSINZW(:) & + +PTAU12M(:) * PCOSSLOPE(:) * ZDIRSINZW(:) & + -PTAU33M(:) * PSINSLOPE(:) * ZDIRSINZW(:) * PDIRCOSZW(:) ! - ZWORK31D(IIJB:IIJE) = ZSOURCE(IIJB:IIJE,IKB)/PDZZ(IIJB:IIJE,IKB) + ZWORK31D(:) = ZSOURCE(:,IKB)/PDZZ(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL MYM2D_PHY(D,ZWORK31D,ZWORK51D) ! ! add the vertical part or the surface flux at the V,W vorticity point !$mnh_expand_array(JIJ=IIJB:IIJE) - ZSOURCE(IIJB:IIJE,IKB) = & - ( ZWORK51D(IIJB:IIJE) & - + ZWORK61D(IIJB:IIJE) & - - ZCOEFS(IIJB:IIJE) * PVM(IIJB:IIJE,IKB) * TURBN%XIMPL & - ) * 0.5 * ( 1. + ZWORK1(IIJB:IIJE,IKA) / ZWORK1(IIJB:IIJE,IKB) ) + ZSOURCE(:,IKB) = & + ( ZWORK51D(:) & + + ZWORK61D(:) & + - ZCOEFS(:) * PVM(:,IKB) * TURBN%XIMPL & + ) * 0.5 * ( 1. + ZWORK1(:,IKA) / ZWORK1(:,IKB) ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !No flux at the atmosphere top - ZSOURCE(IIJB:IIJE,IKE) = 0. + ZSOURCE(:,IKE) = 0. ENDIF ! End of Ocean or Atmospher Cases ! ! Obtention of the split V at t+ deltat @@ -849,33 +849,33 @@ CALL TRIDIAG_WIND(D,PVM,ZA,ZCOEFS,PTSTEP,PEXPL,TURBN%XIMPL, & CALL MYM_PHY(D,PRHODJ,ZWORK1) CALL MYM_PHY(D,ZKEFF,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK3(IIJB:IIJE,1:IKT)=TURBN%XIMPL*ZRES(IIJB:IIJE,1:IKT) + PEXPL*PVM(IIJB:IIJE,1:IKT) +ZWORK3(:,:)=TURBN%XIMPL*ZRES(:,:) + PEXPL*PVM(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL DZM_PHY(D,ZWORK3,ZWORK4) CALL MYM_PHY(D,PDZZ,ZWORK5) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PRVS(IIJB:IIJE,1:IKT) = PRVS(IIJB:IIJE,1:IKT)+ZWORK1(IIJB:IIJE,1:IKT)*(ZRES(IIJB:IIJE,1:IKT)& - - PVM(IIJB:IIJE,1:IKT))/PTSTEP +PRVS(:,:) = PRVS(:,:)+ZWORK1(:,:)*(ZRES(:,:)& + - PVM(:,:))/PTSTEP ! ! !* 6.2 Complete 1D dynamic Production ! ! vertical flux of the V wind component ! -ZFLXZ(IIJB:IIJE,1:IKT) = -ZCMFS * ZWORK2(IIJB:IIJE,1:IKT) * ZWORK4(IIJB:IIJE,1:IKT) & - / ZWORK5(IIJB:IIJE,1:IKT) +ZFLXZ(:,:) = -ZCMFS * ZWORK2(:,:) * ZWORK4(:,:) & + / ZWORK5(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! IF (OOCEAN) THEN - ZFLXZ(IIJB:IIJE,IKE+1) = ZFLUXSFCV(IIJB:IIJE) + ZFLXZ(:,IKE+1) = ZFLUXSFCV(:) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKB) = ZWORK5(IIJB:IIJE,IKB) * & - ( ZSOURCE(IIJB:IIJE,IKB) & - +ZCOEFS(IIJB:IIJE) * ZRES(IIJB:IIJE,IKB) * TURBN%XIMPL & - ) / 0.5 / ( 1. + ZWORK1(IIJB:IIJE,IKA) / ZWORK1(IIJB:IIJE,IKB) ) + ZFLXZ(:,IKB) = ZWORK5(:,IKB) * & + ( ZSOURCE(:,IKB) & + +ZCOEFS(:) * ZRES(:,IKB) * TURBN%XIMPL & + ) / 0.5 / ( 1. + ZWORK1(:,IKA) / ZWORK1(:,IKB) ) ! - ZFLXZ(IIJB:IIJE,IKA) = ZFLXZ(IIJB:IIJE,IKB) + ZFLXZ(:,IKA) = ZFLXZ(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF ! @@ -897,19 +897,19 @@ END IF ! ! second part of total momentum flux ! -PWV(IIJB:IIJE,1:IKT) = ZFLXZ(IIJB:IIJE,1:IKT) +PWV(:,:) = ZFLXZ(:,:) ! ! Contribution to the TKE dynamical production ! computed at mass point ! CALL GZ_V_VW_PHY(D,PVM,PDZZ,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK2(IIJB:IIJE,1:IKT) = ZFLXZ(IIJB:IIJE,1:IKT) * ZWORK1(IIJB:IIJE,1:IKT) +ZWORK2(:,:) = ZFLXZ(:,:) * ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MYF_PHY(D,ZWORK2,ZWORK3) CALL MZF_PHY(D,ZWORK3,ZWORK4) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZA(IIJB:IIJE,1:IKT) = -ZWORK4(IIJB:IIJE,1:IKT) +ZA(:,:) = -ZWORK4(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! ! Special cases at surface @@ -918,28 +918,28 @@ IF (OOCEAN) THEN ! evaluate the dynamic production at w(IKE) in PDP(IKE) ! before extrapolation done in routine tke_eps_source !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK2(IIJB:IIJE,IKE) = ZFLXZ(IIJB:IIJE,IKE) * (PVM(IIJB:IIJE,IKE)-PVM(IIJB:IIJE,IKE-IKL)) & - / ZWORK1(IIJB:IIJE,IKE-IKL) + ZWORK2(:,IKE) = ZFLXZ(:,IKE) * (PVM(:,IKE)-PVM(:,IKE-IKL)) & + / ZWORK1(:,IKE-IKL) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL MYF_PHY(D,ZWORK2,ZWORK3) !$mnh_expand_array(JIJ=IIJB:IIJE) - ZA(IIJB:IIJE,IKE) = -ZWORK3(IIJB:IIJE,IKE) + ZA(:,IKE) = -ZWORK3(:,IKE) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! ELSE ! Atmosphere ! evaluate the dynamic production at w(IKB+IKL) in PDP(IKB) !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK2(IIJB:IIJE,IKB) = ZFLXZ(IIJB:IIJE,IKB+IKL) * (PVM(IIJB:IIJE,IKB+IKL)-PVM(IIJB:IIJE,IKB)) & - / ZWORK1(IIJB:IIJE,IKB+IKL) + ZWORK2(:,IKB) = ZFLXZ(:,IKB+IKL) * (PVM(:,IKB+IKL)-PVM(:,IKB)) & + / ZWORK1(:,IKB+IKL) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL MYF_PHY(D,ZWORK2,ZWORK3) !$mnh_expand_array(JIJ=IIJB:IIJE) - ZA(IIJB:IIJE,IKB) = -ZWORK3(IIJB:IIJE,IKB) + ZA(:,IKB) = -ZWORK3(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PDP(IIJB:IIJE,1:IKT)=PDP(IIJB:IIJE,1:IKT)+ZA(IIJB:IIJE,1:IKT) +PDP(:,:)=PDP(:,:)+ZA(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! ! Storage in the LES configuration @@ -953,7 +953,7 @@ IF (TLES%LLES_CALL) THEN ! CALL GZ_V_VW_PHY(D,PVM,PDZZ,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZWORK1(IIJB:IIJE,1:IKT) * ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZWORK1(:,:) * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MYF_PHY(D,ZWORK1,ZWORK2) CALL MZF_PHY(D,ZWORK2,ZWORK1) @@ -970,22 +970,22 @@ IF(TURBN%CTURBDIM=='3DIM') THEN ! Compute the source for the W wind component IF (OOCEAN) THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKE+IKL) = 2 * ZFLXZ(IIJB:IIJE,IKE) - ZFLXZ(IIJB:IIJE,IKE-IKL) ! extrapolation + ZFLXZ(:,IKE+IKL) = 2 * ZFLXZ(:,IKE) - ZFLXZ(:,IKE-IKL) ! extrapolation !$mnh_end_expand_array(JIJ=IIJB:IIJE) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKA) = 2 * ZFLXZ(IIJB:IIJE,IKB) - ZFLXZ(IIJB:IIJE,IKB+IKL) ! extrapolation + ZFLXZ(:,IKA) = 2 * ZFLXZ(:,IKB) - ZFLXZ(:,IKB+IKL) ! extrapolation !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF ! IF (.NOT. O2D) THEN CALL MYM_PHY(D,PRHODJ,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZWORK1(IIJB:IIJE,1:IKT) / PDYY(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZWORK1(:,:) / PDYY(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = ZWORK2(IIJB:IIJE,1:IKT) * ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = ZWORK2(:,:) * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL DYF_PHY(D,ZWORK2,ZWORK1) ! @@ -993,27 +993,27 @@ IF(TURBN%CTURBDIM=='3DIM') THEN IF (.NOT. OFLAT) THEN CALL MZF_PHY(D,PDZZ,ZWORK3) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = ZFLXZ(IIJB:IIJE,1:IKT) * PDZY(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = ZFLXZ(:,:) * PDZY(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK2,ZWORK4) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK4(IIJB:IIJE,1:IKT) = ZWORK4(IIJB:IIJE,1:IKT) / PDYY(IIJB:IIJE,1:IKT) + ZWORK4(:,:) = ZWORK4(:,:) / PDYY(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MYF_PHY(D,ZWORK4,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK3(IIJB:IIJE,1:IKT) = PRHODJ(IIJB:IIJE,1:IKT) / ZWORK3(IIJB:IIJE,1:IKT) & - * ZWORK2(IIJB:IIJE,1:IKT) + ZWORK3(:,:) = PRHODJ(:,:) / ZWORK3(:,:) & + * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL DZM_PHY(D,ZWORK3,ZWORK2) !ZWORK2 = DZM(PRHODJ / MZF(PDZZ) * MYF(MZF(ZFLXZ*PDZY) / PDYY ) ) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PRWS(IIJB:IIJE,1:IKT) = PRWS(IIJB:IIJE,1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) & - + ZWORK2(IIJB:IIJE,1:IKT) + PRWS(:,:) = PRWS(:,:) - ZWORK1(:,:) & + + ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PRWS(IIJB:IIJE,1:IKT)= PRWS(IIJB:IIJE,1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) + PRWS(:,:)= PRWS(:,:) - ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF END IF @@ -1022,12 +1022,12 @@ IF(TURBN%CTURBDIM=='3DIM') THEN IF (.NOT. O2D) THEN CALL GY_W_VW_PHY(D,OFLAT,PWM,PDYY,PDZZ,PDZY, ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZWORK1(IIJB:IIJE,1:IKT) * ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZWORK1(:,:) * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MYF_PHY(D,ZWORK1,ZWORK2) CALL MZF_PHY(D,ZWORK2,ZWORK3) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZA(IIJB:IIJE,1:IKT) = -ZWORK3(IIJB:IIJE,1:IKT) + ZA(:,:) = -ZWORK3(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! CALL DYM_PHY(D,PWM,ZWORK1) @@ -1035,34 +1035,34 @@ IF(TURBN%CTURBDIM=='3DIM') THEN IF (OOCEAN) THEN ! evaluate the dynamic production at w(IKE) and stored in PDP(IKE) !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK31D(IIJB:IIJE) = - ZFLXZ(IIJB:IIJE,IKE) * ZWORK1(IIJB:IIJE,IKE) & - / (0.5*(PDYY(IIJB:IIJE,IKE-IKL)+PDYY(IIJB:IIJE,IKE))) + ZWORK31D(:) = - ZFLXZ(:,IKE) * ZWORK1(:,IKE) & + / (0.5*(PDYY(:,IKE-IKL)+PDYY(:,IKE))) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL MYF2D_PHY(D,ZWORK31D,ZWORK41D) - ZA(IIJB:IIJE,IKE) = ZWORK41D(IIJB:IIJE) + ZA(:,IKE) = ZWORK41D(:) ELSE ! Atmosphere ! evaluate the dynamic production at w(IKB+KKL) and stored in PDP(IKB) !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK21D(IIJB:IIJE) = (PWM(IIJB:IIJE,IKB+2*IKL )-PWM(IIJB:IIJE,IKB+IKL)) & - / (PDZZ(IIJB:IIJE,IKB+2*IKL)+PDZZ(IIJB:IIJE,IKB+IKL)) & - + (PWM(IIJB:IIJE,IKB+IKL)-PWM(IIJB:IIJE,IKB)) & - / (PDZZ(IIJB:IIJE,IKB+IKL)+PDZZ(IIJB:IIJE,IKB)) + ZWORK21D(:) = (PWM(:,IKB+2*IKL )-PWM(:,IKB+IKL)) & + / (PDZZ(:,IKB+2*IKL)+PDZZ(:,IKB+IKL)) & + + (PWM(:,IKB+IKL)-PWM(:,IKB)) & + / (PDZZ(:,IKB+IKL)+PDZZ(:,IKB)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! CALL MYM2D_PHY(D,ZWORK21D,ZWORK51D) !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK31D(IIJB:IIJE ) = - ZFLXZ(IIJB:IIJE,IKB+IKL) & - * ( ZWORK1(IIJB:IIJE,IKB+IKL) - ZWORK51D(IIJB:IIJE ) & - * PDZY(IIJB:IIJE,IKB+IKL) ) & - / (0.5*(PDYY(IIJB:IIJE,IKB+IKL)+PDYY(IIJB:IIJE,IKB))) + ZWORK31D(: ) = - ZFLXZ(:,IKB+IKL) & + * ( ZWORK1(:,IKB+IKL) - ZWORK51D(: ) & + * PDZY(:,IKB+IKL) ) & + / (0.5*(PDYY(:,IKB+IKL)+PDYY(:,IKB))) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL MYF2D_PHY(D,ZWORK31D,ZWORK41D) - ZA(IIJB:IIJE,IKB) = ZWORK41D(IIJB:IIJE) + ZA(:,IKB) = ZWORK41D(:) ! END IF ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PDP(IIJB:IIJE,1:IKT)=PDP(IIJB:IIJE,1:IKT)+ZA(IIJB:IIJE,1:IKT) + PDP(:,:)=PDP(:,:)+ZA(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! END IF @@ -1074,7 +1074,7 @@ IF(TURBN%CTURBDIM=='3DIM') THEN ! CALL GY_W_VW_PHY(D,OFLAT,PWM,PDYY,PDZZ,PDZY,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZWORK1(IIJB:IIJE,1:IKT)*ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZWORK1(:,:)*ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MYF_PHY(D,ZWORK1,ZWORK2) CALL MZF_PHY(D,ZWORK2,ZWORK1) @@ -1083,7 +1083,7 @@ IF(TURBN%CTURBDIM=='3DIM') THEN CALL GY_M_V_PHY(D,OFLAT,PTHLM,PDYY,PDZZ,PDZY,ZWORK1) CALL MZF_PHY(D,ZFLXZ,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = ZWORK2(IIJB:IIJE,1:IKT) * ZWORK1(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = ZWORK2(:,:) * ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MYF_PHY(D,ZWORK2,ZWORK1) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1,TLES%X_LES_RES_ddxa_Thl_SBG_UaW , .TRUE. ) @@ -1092,7 +1092,7 @@ IF(TURBN%CTURBDIM=='3DIM') THEN CALL GY_V_M_PHY(D,OFLAT,PRM(:,:,1),PDYY,PDZZ,PDZY,ZWORK1) CALL MZF_PHY(D,ZFLXZ,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZWORK1(IIJB:IIJE,1:IKT) * ZWORK2(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZWORK1(:,:) * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MYF_PHY(D,ZWORK1,ZWORK2) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2,TLES%X_LES_RES_ddxa_Rt_SBG_UaW , .TRUE. ) @@ -1113,8 +1113,8 @@ END IF IF ( TURBN%LTURB_FLX .AND. TPFILE%LOPENED .AND. TURBN%CTURBDIM == '1DIM') THEN CALL GZ_W_M_PHY(D,PWM,PDZZ,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ(IIJB:IIJE,1:IKT)= (2./3.) * PTKEM(IIJB:IIJE,1:IKT) & - -ZCMFS*PLM(IIJB:IIJE,1:IKT)*SQRT(PTKEM(IIJB:IIJE,1:IKT))*ZWORK1(IIJB:IIJE,1:IKT) + ZFLXZ(:,:)= (2./3.) * PTKEM(:,:) & + -ZCMFS*PLM(:,:)*SQRT(PTKEM(:,:))*ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! to be tested & ! +XCMFB*(4./3.)*PLM(:,:,:)/SQRT(PTKEM(:,:,:))*PTP(:,:,:) diff --git a/src/PHYEX/turb/mode_turb_ver_sv_corr.f90 b/src/PHYEX/turb/mode_turb_ver_sv_corr.f90 index 64acbc7f83418a05b71b816b7d6cf9cb86b452fa..2f1dc8d9ac32d9ac2c56c338a897b55ee1426501 100644 --- a/src/PHYEX/turb/mode_turb_ver_sv_corr.f90 +++ b/src/PHYEX/turb/mode_turb_ver_sv_corr.f90 @@ -159,10 +159,10 @@ DO JSV=1,KSV CALL MZF_PHY(D,ZFLXZ,ZWORK2) CALL MZF_PHY(D,PWM,ZWORK3) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ(IIJB:IIJE,1:IKT) = PPSI_SV(IIJB:IIJE,1:IKT,JSV)*ZWORK1(IIJB:IIJE,1:IKT)**2 - ZFLXZ(IIJB:IIJE,1:IKT) = ZCSV / ZCSVD * PLM(IIJB:IIJE,1:IKT) * PLEPS(IIJB:IIJE,1:IKT) * ZWORK2(IIJB:IIJE,1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = -2.*ZCSVD*SQRT(PTKEM(IIJB:IIJE,1:IKT))*ZFLXZ(IIJB:IIJE,1:IKT)/PLEPS(IIJB:IIJE,1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = ZWORK3(IIJB:IIJE,1:IKT)*ZFLXZ(IIJB:IIJE,1:IKT) + ZFLXZ(:,:) = PPSI_SV(:,:,JSV)*ZWORK1(:,:)**2 + ZFLXZ(:,:) = ZCSV / ZCSVD * PLM(:,:) * PLEPS(:,:) * ZWORK2(:,:) + ZWORK1(:,:) = -2.*ZCSVD*SQRT(PTKEM(:,:))*ZFLXZ(:,:)/PLEPS(:,:) + ZWORK2(:,:) = ZWORK3(:,:)*ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_DISS_Sv2(:,:,:,JSV) ) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2, TLES%X_LES_RES_W_SBG_Sv2(:,:,:,JSV) ) @@ -178,15 +178,15 @@ DO JSV=1,KSV CALL GZ_M_W_PHY(D,PSVM(:,:,JSV),PDZZ,ZWORK2) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ(IIJB:IIJE,1:IKT)= ( CSTURB%XCSHF * PPHI3(IIJB:IIJE,1:IKT) + ZCSV * PPSI_SV(IIJB:IIJE,1:IKT,JSV) ) & - * ZWORK1(IIJB:IIJE,1:IKT) * ZWORK2(IIJB:IIJE,1:IKT) + ZFLXZ(:,:)= ( CSTURB%XCSHF * PPHI3(:,:) + ZCSV * PPSI_SV(:,:,JSV) ) & + * ZWORK1(:,:) * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! CALL MZF_PHY(D,ZFLXZ,ZWORK3) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ(IIJB:IIJE,1:IKT)= PLM(IIJB:IIJE,1:IKT) * PLEPS(IIJB:IIJE,1:IKT) / (2.*ZCTSVD) * ZWORK3(IIJB:IIJE,1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZA(IIJB:IIJE,1:IKT)*ZFLXZ(IIJB:IIJE,1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = -CST%XG/PTHVREF(IIJB:IIJE,1:IKT)/3.*ZA(IIJB:IIJE,1:IKT)*ZFLXZ(IIJB:IIJE,1:IKT) + ZFLXZ(:,:)= PLM(:,:) * PLEPS(:,:) / (2.*ZCTSVD) * ZWORK3(:,:) + ZWORK1(:,:) = ZA(:,:)*ZFLXZ(:,:) + ZWORK2(:,:) = -CST%XG/PTHVREF(:,:)/3.*ZA(:,:)*ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! CALL LES_MEAN_SUBGRID_PHY(D,TLES, ZWORK1, TLES%X_LES_SUBGRID_SvThv(:,:,:,JSV) ) @@ -197,14 +197,14 @@ DO JSV=1,KSV ! CALL GZ_M_W_PHY(D,PRM(:,:,1),PDZZ,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ(IIJB:IIJE,1:IKT)= ( ZCSV * PPSI3(IIJB:IIJE,1:IKT) + ZCSV * PPSI_SV(IIJB:IIJE,1:IKT,JSV) ) & - * ZWORK1(IIJB:IIJE,1:IKT) * ZWORK2(IIJB:IIJE,1:IKT) + ZFLXZ(:,:)= ( ZCSV * PPSI3(:,:) + ZCSV * PPSI_SV(:,:,JSV) ) & + * ZWORK1(:,:) * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZFLXZ,ZWORK3) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ(IIJB:IIJE,1:IKT)= PLM(IIJB:IIJE,1:IKT) * PLEPS(IIJB:IIJE,1:IKT) / (2.*ZCQSVD) * ZWORK3(IIJB:IIJE,1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZA(IIJB:IIJE,1:IKT)*ZFLXZ(IIJB:IIJE,1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = -CST%XG/PTHVREF(IIJB:IIJE,1:IKT)/3.*ZA(IIJB:IIJE,1:IKT)*ZFLXZ(IIJB:IIJE,1:IKT) + ZFLXZ(:,:)= PLM(:,:) * PLEPS(:,:) / (2.*ZCQSVD) * ZWORK3(:,:) + ZWORK1(:,:) = ZA(:,:)*ZFLXZ(:,:) + ZWORK2(:,:) = -CST%XG/PTHVREF(:,:)/3.*ZA(:,:)*ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES, ZWORK1, TLES%X_LES_SUBGRID_SvThv(:,:,:,JSV) , .TRUE.) CALL LES_MEAN_SUBGRID_PHY(D,TLES, ZWORK2, TLES%X_LES_SUBGRID_SvPz(:,:,:,JSV), .TRUE.) diff --git a/src/PHYEX/turb/mode_turb_ver_sv_flux.f90 b/src/PHYEX/turb/mode_turb_ver_sv_flux.f90 index 40a52e4ce77ea68335688a57bdc43324495a7207..1817fbb86c949a49ce427384ef054b4b04357786 100644 --- a/src/PHYEX/turb/mode_turb_ver_sv_flux.f90 +++ b/src/PHYEX/turb/mode_turb_ver_sv_flux.f90 @@ -326,11 +326,11 @@ IIJB=D%NIJB ! IF (TURBN%LHARAT) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZKEFF(IIJB:IIJE,1:IKT) = PLM(IIJB:IIJE,1:IKT) * SQRT(PTKEM(IIJB:IIJE,1:IKT)) + ZKEFF(:,:) = PLM(:,:) * SQRT(PTKEM(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = PLM(IIJB:IIJE,1:IKT)*SQRT(PTKEM(IIJB:IIJE,1:IKT)) + ZWORK1(:,:) = PLM(:,:)*SQRT(PTKEM(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZKEFF) ENDIF @@ -354,16 +354,16 @@ DO JSV=1,KSV ! Preparation of the arguments for TRIDIAG IF (TURBN%LHARAT) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZA(IIJB:IIJE,1:IKT) = -PTSTEP * ZKEFF(IIJB:IIJE,1:IKT) * ZMZMRHODJ(IIJB:IIJE,1:IKT) & - / PDZZ(IIJB:IIJE,1:IKT)**2 + ZA(:,:) = -PTSTEP * ZKEFF(:,:) * ZMZMRHODJ(:,:) & + / PDZZ(:,:)**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZA(IIJB:IIJE,1:IKT) = -PTSTEP*ZCSV*PPSI_SV(IIJB:IIJE,1:IKT,JSV) * & - ZKEFF(IIJB:IIJE,1:IKT) * ZMZMRHODJ(IIJB:IIJE,1:IKT) / PDZZ(IIJB:IIJE,1:IKT)**2 + ZA(:,:) = -PTSTEP*ZCSV*PPSI_SV(:,:,JSV) * & + ZKEFF(:,:) * ZMZMRHODJ(:,:) / PDZZ(:,:)**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ENDIF - ZSOURCE(IIJB:IIJE,1:IKT) = 0. + ZSOURCE(:,:) = 0. ! ! Compute the sources for the JSVth scalar variable @@ -373,42 +373,42 @@ DO JSV=1,KSV ! is taken into account in the vertical part IF (TURBN%CTURBDIM=='3DIM') THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - ZSOURCE(IIJB:IIJE,IKB) = (TURBN%XIMPL*PSFSVP(IIJB:IIJE,JSV) + PEXPL*PSFSVM(IIJB:IIJE,JSV)) / & - PDZZ(IIJB:IIJE,IKB) * PDIRCOSZW(IIJB:IIJE) & - * 0.5 * (1. + PRHODJ(IIJB:IIJE,IKA) / PRHODJ(IIJB:IIJE,IKB)) + ZSOURCE(:,IKB) = (TURBN%XIMPL*PSFSVP(:,JSV) + PEXPL*PSFSVM(:,JSV)) / & + PDZZ(:,IKB) * PDIRCOSZW(:) & + * 0.5 * (1. + PRHODJ(:,IKA) / PRHODJ(:,IKB)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE) - ZSOURCE(IIJB:IIJE,IKB) = (TURBN%XIMPL*PSFSVP(IIJB:IIJE,JSV) + PEXPL*PSFSVM(IIJB:IIJE,JSV)) / & - PDZZ(IIJB:IIJE,IKB) / PDIRCOSZW(IIJB:IIJE) & - * 0.5 * (1. + PRHODJ(IIJB:IIJE,IKA) / PRHODJ(IIJB:IIJE,IKB)) + ZSOURCE(:,IKB) = (TURBN%XIMPL*PSFSVP(:,JSV) + PEXPL*PSFSVM(:,JSV)) / & + PDZZ(:,IKB) / PDIRCOSZW(:) & + * 0.5 * (1. + PRHODJ(:,IKA) / PRHODJ(:,IKB)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF - ZSOURCE(IIJB:IIJE,IKTB+1:IKTE-1) = 0. - ZSOURCE(IIJB:IIJE,IKE) = 0. + ZSOURCE(:,IKTB+1:IKTE-1) = 0. + ZSOURCE(:,IKE) = 0. ! ! Obtention of the split JSV scalar variable at t+ deltat CALL TRIDIAG(D,PSVM(:,:,JSV),ZA,PTSTEP,PEXPL,TURBN%XIMPL,PRHODJ,ZSOURCE,ZRES) ! ! Compute the equivalent tendency for the JSV scalar variable !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PRSVS(IIJB:IIJE,1:IKT,JSV)= PRSVS(IIJB:IIJE,1:IKT,JSV)+ & - PRHODJ(IIJB:IIJE,1:IKT)*(ZRES(IIJB:IIJE,1:IKT)-PSVM(IIJB:IIJE,1:IKT,JSV))/PTSTEP + PRSVS(:,:,JSV)= PRSVS(:,:,JSV)+ & + PRHODJ(:,:)*(ZRES(:,:)-PSVM(:,:,JSV))/PTSTEP !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! IF ( (TURBN%LTURB_FLX .AND. TPFILE%LOPENED) .OR. TLES%LLES_CALL ) THEN ! Diagnostic of the cartesian vertical flux ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = PLM(IIJB:IIJE,1:IKT)*SQRT(PTKEM(IIJB:IIJE,1:IKT)) - ZWORK2(IIJB:IIJE,1:IKT) = TURBN%XIMPL*ZRES(IIJB:IIJE,1:IKT) + PEXPL*PSVM(IIJB:IIJE,1:IKT,JSV) + ZWORK1(:,:) = PLM(:,:)*SQRT(PTKEM(:,:)) + ZWORK2(:,:) = TURBN%XIMPL*ZRES(:,:) + PEXPL*PSVM(:,:,JSV) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZWORK3) CALL DZM_PHY(D,ZWORK2,ZWORK4) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ(IIJB:IIJE,1:IKT) = -ZCSV * PPSI_SV(IIJB:IIJE,1:IKT,JSV) * ZWORK3(IIJB:IIJE,1:IKT) & - / PDZZ(IIJB:IIJE,1:IKT) * & - ZWORK4(IIJB:IIJE,1:IKT) + ZFLXZ(:,:) = -ZCSV * PPSI_SV(:,:,JSV) * ZWORK3(:,:) & + / PDZZ(:,:) * & + ZWORK4(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! surface flux !* in 3DIM case, a part of the flux goes vertically, and another goes horizontally @@ -417,31 +417,31 @@ DO JSV=1,KSV ! is taken into account in the vertical part IF (TURBN%CTURBDIM=='3DIM') THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKB) = (TURBN%XIMPL*PSFSVP(IIJB:IIJE,JSV) + PEXPL*PSFSVM(IIJB:IIJE,JSV)) & - * PDIRCOSZW(IIJB:IIJE) + ZFLXZ(:,IKB) = (TURBN%XIMPL*PSFSVP(:,JSV) + PEXPL*PSFSVM(:,JSV)) & + * PDIRCOSZW(:) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKB) = (TURBN%XIMPL*PSFSVP(IIJB:IIJE,JSV) + PEXPL*PSFSVM(IIJB:IIJE,JSV)) & - / PDIRCOSZW(IIJB:IIJE) + ZFLXZ(:,IKB) = (TURBN%XIMPL*PSFSVP(:,JSV) + PEXPL*PSFSVM(:,JSV)) & + / PDIRCOSZW(:) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF ! extrapolates the flux under the ground so that the vertical average with ! the IKB flux gives the ground value ! !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKA) = ZFLXZ(IIJB:IIJE,IKB) + ZFLXZ(:,IKA) = ZFLXZ(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) IF ( OFLYER ) THEN DO JK=IKTB+1,IKTE-1 !$mnh_expand_array(JIJ=IIJB:IIJE) - PWSV(IIJB:IIJE,JK,JSV)=0.5*(ZFLXZ(IIJB:IIJE,JK)+ZFLXZ(IIJB:IIJE,JK+IKL)) + PWSV(:,JK,JSV)=0.5*(ZFLXZ(:,JK)+ZFLXZ(:,JK+IKL)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO !$mnh_expand_array(JIJ=IIJB:IIJE) - PWSV(IIJB:IIJE,IKB,JSV)=0.5*(ZFLXZ(IIJB:IIJE,IKB)+ZFLXZ(IIJB:IIJE,IKB+IKL)) - PWSV(IIJB:IIJE,IKE,JSV)=PWSV(IIJB:IIJE,IKE-IKL,JSV) + PWSV(:,IKB,JSV)=0.5*(ZFLXZ(:,IKB)+ZFLXZ(:,IKB+IKL)) + PWSV(:,IKE,JSV)=PWSV(:,IKE-IKL,JSV) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF END IF @@ -475,25 +475,25 @@ DO JSV=1,KSV ! CALL GZ_W_M_PHY(D,PWM,PDZZ,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK3(IIJB:IIJE,1:IKT) = ZWORK2(IIJB:IIJE,1:IKT) * ZWORK1(IIJB:IIJE,1:IKT) + ZWORK3(:,:) = ZWORK2(:,:) * ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK3, TLES%X_LES_RES_ddxa_W_SBG_UaSv(:,:,:,JSV) ) ! CALL GZ_M_W_PHY(D,PSVM(:,:,JSV),PDZZ,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = ZWORK1(IIJB:IIJE,1:IKT) * ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = ZWORK1(:,:) * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK2,ZWORK3) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK3, TLES%X_LES_RES_ddxa_Sv_SBG_UaSv(:,:,:,JSV) ) ! CALL MZF_PHY(D,ZFLXZ,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = -ZCSVP*SQRT(PTKEM(IIJB:IIJE,1:IKT))/PLM(IIJB:IIJE,1:IKT)*ZWORK1(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = -ZCSVP*SQRT(PTKEM(:,:))/PLM(:,:)*ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2, TLES%X_LES_SUBGRID_SvPz(:,:,:,JSV) ) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = PWM(IIJB:IIJE,1:IKT)*ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = PWM(:,:)*ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2, TLES%X_LES_RES_W_SBG_WSv(:,:,:,JSV) ) diff --git a/src/PHYEX/turb/mode_turb_ver_thermo_corr.f90 b/src/PHYEX/turb/mode_turb_ver_thermo_corr.f90 index 8a53e4917a552ea1eda3b790e8ee7dcc90a5887a..2ee5d5de45e9fe302c8fd4af1c058719b03aafcc 100644 --- a/src/PHYEX/turb/mode_turb_ver_thermo_corr.f90 +++ b/src/PHYEX/turb/mode_turb_ver_thermo_corr.f90 @@ -370,12 +370,12 @@ GUSERV = (KRR/=0) ! compute the coefficients for the uncentred gradient computation near the ! ground !$mnh_expand_array(JIJ=IIJB:IIJE) -ZCOEFF(IIJB:IIJE,IKB+2*IKL)= - PDZZ(IIJB:IIJE,IKB+IKL) / & - ( (PDZZ(IIJB:IIJE,IKB+2*IKL)+PDZZ(IIJB:IIJE,IKB+IKL)) * PDZZ(IIJB:IIJE,IKB+2*IKL) ) -ZCOEFF(IIJB:IIJE,IKB+IKL)= (PDZZ(IIJB:IIJE,IKB+2*IKL)+PDZZ(IIJB:IIJE,IKB+IKL)) / & - ( PDZZ(IIJB:IIJE,IKB+IKL) * PDZZ(IIJB:IIJE,IKB+2*IKL) ) -ZCOEFF(IIJB:IIJE,IKB)= - (PDZZ(IIJB:IIJE,IKB+2*IKL)+2.*PDZZ(IIJB:IIJE,IKB+IKL)) / & - ( (PDZZ(IIJB:IIJE,IKB+2*IKL)+PDZZ(IIJB:IIJE,IKB+IKL)) * PDZZ(IIJB:IIJE,IKB+IKL) ) +ZCOEFF(:,IKB+2*IKL)= - PDZZ(:,IKB+IKL) / & + ( (PDZZ(:,IKB+2*IKL)+PDZZ(:,IKB+IKL)) * PDZZ(:,IKB+2*IKL) ) +ZCOEFF(:,IKB+IKL)= (PDZZ(:,IKB+2*IKL)+PDZZ(:,IKB+IKL)) / & + ( PDZZ(:,IKB+IKL) * PDZZ(:,IKB+2*IKL) ) +ZCOEFF(:,IKB)= - (PDZZ(:,IKB+2*IKL)+2.*PDZZ(:,IKB+IKL)) / & + ( (PDZZ(:,IKB+2*IKL)+PDZZ(:,IKB+IKL)) * PDZZ(:,IKB+IKL) ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! ! @@ -390,16 +390,16 @@ IF (TURBN%LHARAT) THEN ! function MZF produces -999 for level IKU (82 for 80 levels) ! so put these to normal value as this level (82) is indeed calculated !$mnh_expand_array(JIJ=IIJB:IIJE) - PLMF(IIJB:IIJE,IKT)=0.001 - PLEPSF(IIJB:IIJE,IKT)=0.001 + PLMF(:,IKT)=0.001 + PLEPSF(:,IKT)=0.001 !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! with energy cascade contribution 50MF term can be omitted !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZKEFF(IIJB:IIJE,1:IKT) = PLM(IIJB:IIJE,1:IKT) * SQRT(PTKEM(IIJB:IIJE,1:IKT)) + ZKEFF(:,:) = PLM(:,:) * SQRT(PTKEM(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = PLM(IIJB:IIJE,1:IKT) * SQRT(PTKEM(IIJB:IIJE,1:IKT)) + ZWORK1(:,:) = PLM(:,:) * SQRT(PTKEM(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZKEFF) ENDIF @@ -432,27 +432,27 @@ END IF ! IF (TURBN%LHARAT) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT)=PDTH_DZ(IIJB:IIJE,1:IKT)**2 + ZWORK1(:,:)=PDTH_DZ(:,:)**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) IF (TURBN%LSTATNW) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = CSTURB%XCTV * & - PLMF(IIJB:IIJE,1:IKT)*PLEPSF(IIJB:IIJE,1:IKT)*ZWORK2(IIJB:IIJE,1:IKT) + ZF(:,:) = CSTURB%XCTV * & + PLMF(:,:)*PLEPSF(:,:)*ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = PLMF(IIJB:IIJE,1:IKT)*PLEPSF(IIJB:IIJE,1:IKT)*ZWORK2(IIJB:IIJE,1:IKT) + ZF(:,:) = PLMF(:,:)*PLEPSF(:,:)*ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT)=PPHI3(IIJB:IIJE,1:IKT)*PDTH_DZ(IIJB:IIJE,1:IKT)**2 + ZWORK1(:,:)=PPHI3(:,:)*PDTH_DZ(:,:)**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = CSTURB%XCTV*PLM(IIJB:IIJE,1:IKT)*PLEPS(IIJB:IIJE,1:IKT)& - * ZWORK2(IIJB:IIJE,1:IKT) + ZF(:,:) = CSTURB%XCTV*PLM(:,:)*PLEPS(:,:)& + * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ENDIF ZDFDDTDZ(:,:) = 0. ! this term, because of discretization, is treated separately @@ -466,10 +466,10 @@ END IF & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,ZWORK2) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + ZWORK1(IIJB:IIJE,1:IKT) & - * PFTH2(IIJB:IIJE,1:IKT) - ZDFDDTDZ(IIJB:IIJE,1:IKT) = ZDFDDTDZ(IIJB:IIJE,1:IKT) + ZWORK2(IIJB:IIJE,1:IKT) & - * PFTH2(IIJB:IIJE,1:IKT) + ZF(:,:) = ZF(:,:) + ZWORK1(:,:) & + * PFTH2(:,:) + ZDFDDTDZ(:,:) = ZDFDDTDZ(:,:) + ZWORK2(:,:) & + * PFTH2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -482,10 +482,10 @@ END IF & PLM,PLEPS,PTKEM,GUSERV,ZWORK3) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + ZWORK1(IIJB:IIJE,1:IKT) & - * ZWORK2(IIJB:IIJE,1:IKT) - ZDFDDTDZ(IIJB:IIJE,1:IKT) = ZDFDDTDZ(IIJB:IIJE,1:IKT) + ZWORK3(IIJB:IIJE,1:IKT) & - * ZWORK2(IIJB:IIJE,1:IKT) + ZF(:,:) = ZF(:,:) + ZWORK1(:,:) & + * ZWORK2(:,:) + ZDFDDTDZ(:,:) = ZDFDDTDZ(:,:) + ZWORK3(:,:) & + * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -498,10 +498,10 @@ END IF & PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTH_DZ,ZWORK2) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + ZWORK1(IIJB:IIJE,1:IKT) & - * PFR2(IIJB:IIJE,1:IKT) - ZDFDDTDZ(IIJB:IIJE,1:IKT) = ZDFDDTDZ(IIJB:IIJE,1:IKT) + ZWORK2(IIJB:IIJE,1:IKT) & - * PFR2(IIJB:IIJE,1:IKT) + ZF(:,:) = ZF(:,:) + ZWORK1(:,:) & + * PFR2(:,:) + ZDFDDTDZ(:,:) = ZDFDDTDZ(:,:) + ZWORK2(:,:) & + * PFR2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -514,10 +514,10 @@ END IF & PLM,PLEPS,PTKEM,PBLL_O_E,PEMOIST,PDTH_DZ,ZWORK3) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + ZWORK1(IIJB:IIJE,1:IKT) & - * ZWORK2(IIJB:IIJE,1:IKT) - ZDFDDTDZ(IIJB:IIJE,1:IKT) = ZDFDDTDZ(IIJB:IIJE,1:IKT) + ZWORK3(IIJB:IIJE,1:IKT) & - * ZWORK1(IIJB:IIJE,1:IKT) + ZF(:,:) = ZF(:,:) + ZWORK1(:,:) & + * ZWORK2(:,:) + ZDFDDTDZ(:,:) = ZDFDDTDZ(:,:) + ZWORK3(:,:) & + * ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -529,84 +529,84 @@ END IF & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTH_DZ,ZWORK2) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + ZWORK1(IIJB:IIJE,1:IKT) & - * PFTHR(IIJB:IIJE,1:IKT) - ZDFDDTDZ(IIJB:IIJE,1:IKT) = ZDFDDTDZ(IIJB:IIJE,1:IKT) + ZWORK2(IIJB:IIJE,1:IKT) & - * PFTHR(IIJB:IIJE,1:IKT) + ZF(:,:) = ZF(:,:) + ZWORK1(:,:) & + * PFTHR(:,:) + ZDFDDTDZ(:,:) = ZDFDDTDZ(:,:) + ZWORK2(:,:) & + * PFTHR(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF END IF ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = PTHLP(IIJB:IIJE,1:IKT) - PTHLM(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = PTHLP(:,:) - PTHLM(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL DZM_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK3(IIJB:IIJE,1:IKT) = ZWORK2(IIJB:IIJE,1:IKT) / PDZZ(IIJB:IIJE,1:IKT) + ZWORK3(:,:) = ZWORK2(:,:) / PDZZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK3,ZWORK4) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + TURBN%XIMPL * ZDFDDTDZ(IIJB:IIJE,1:IKT) & - * ZWORK4(IIJB:IIJE,1:IKT) + ZFLXZ(:,:) = ZF(:,:) + TURBN%XIMPL * ZDFDDTDZ(:,:) & + * ZWORK4(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! ! special case near the ground ( uncentred gradient ) IF (TURBN%LHARAT) THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKB) = PLMF(IIJB:IIJE,IKB) & - * PLEPSF(IIJB:IIJE,IKB) & + ZFLXZ(:,IKB) = PLMF(:,IKB) & + * PLEPSF(:,IKB) & *( PEXPL * & - ( ZCOEFF(IIJB:IIJE,IKB+2*IKL)*PTHLM(IIJB:IIJE,IKB+2*IKL) & - +ZCOEFF(IIJB:IIJE,IKB+IKL )*PTHLM(IIJB:IIJE,IKB+IKL ) & - +ZCOEFF(IIJB:IIJE,IKB )*PTHLM(IIJB:IIJE,IKB ) )**2 & + ( ZCOEFF(:,IKB+2*IKL)*PTHLM(:,IKB+2*IKL) & + +ZCOEFF(:,IKB+IKL )*PTHLM(:,IKB+IKL ) & + +ZCOEFF(:,IKB )*PTHLM(:,IKB ) )**2 & +TURBN%XIMPL * & - ( ZCOEFF(IIJB:IIJE,IKB+2*IKL)*PTHLP(IIJB:IIJE,IKB+2*IKL) & - +ZCOEFF(IIJB:IIJE,IKB+IKL )*PTHLP(IIJB:IIJE,IKB+IKL ) & - +ZCOEFF(IIJB:IIJE,IKB )*PTHLP(IIJB:IIJE,IKB ) )**2 & + ( ZCOEFF(:,IKB+2*IKL)*PTHLP(:,IKB+2*IKL) & + +ZCOEFF(:,IKB+IKL )*PTHLP(:,IKB+IKL ) & + +ZCOEFF(:,IKB )*PTHLP(:,IKB ) )**2 & ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) IF (TURBN%LSTATNW) THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKB) = CSTURB%XCTV * ZFLXZ(IIJB:IIJE,IKB) + ZFLXZ(:,IKB) = CSTURB%XCTV * ZFLXZ(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF ELSE !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKB) = CSTURB%XCTV * PPHI3(IIJB:IIJE,IKB+IKL) * PLM(IIJB:IIJE,IKB) & - * PLEPS(IIJB:IIJE,IKB) & + ZFLXZ(:,IKB) = CSTURB%XCTV * PPHI3(:,IKB+IKL) * PLM(:,IKB) & + * PLEPS(:,IKB) & *( PEXPL * & - ( ZCOEFF(IIJB:IIJE,IKB+2*IKL)*PTHLM(IIJB:IIJE,IKB+2*IKL) & - +ZCOEFF(IIJB:IIJE,IKB+IKL )*PTHLM(IIJB:IIJE,IKB+IKL ) & - +ZCOEFF(IIJB:IIJE,IKB )*PTHLM(IIJB:IIJE,IKB ) )**2 & + ( ZCOEFF(:,IKB+2*IKL)*PTHLM(:,IKB+2*IKL) & + +ZCOEFF(:,IKB+IKL )*PTHLM(:,IKB+IKL ) & + +ZCOEFF(:,IKB )*PTHLM(:,IKB ) )**2 & +TURBN%XIMPL * & - ( ZCOEFF(IIJB:IIJE,IKB+2*IKL)*PTHLP(IIJB:IIJE,IKB+2*IKL) & - +ZCOEFF(IIJB:IIJE,IKB+IKL )*PTHLP(IIJB:IIJE,IKB+IKL ) & - +ZCOEFF(IIJB:IIJE,IKB )*PTHLP(IIJB:IIJE,IKB ) )**2 & + ( ZCOEFF(:,IKB+2*IKL)*PTHLP(:,IKB+2*IKL) & + +ZCOEFF(:,IKB+IKL )*PTHLP(:,IKB+IKL ) & + +ZCOEFF(:,IKB )*PTHLP(:,IKB ) )**2 & ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ENDIF ! !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKA) = ZFLXZ(IIJB:IIJE,IKB) + ZFLXZ(:,IKA) = ZFLXZ(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! IF (TURBN%LSTATNW) THEN !wc The variance from the budget eq should be multiplied by 2 here ! thl'2=2*L*LEPS*(dthl/dz**2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ(IIJB:IIJE,1:IKT) = MAX(0., 2.*ZFLXZ(IIJB:IIJE,1:IKT)) + ZFLXZ(:,:) = MAX(0., 2.*ZFLXZ(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ(IIJB:IIJE,1:IKT) = MAX(0., ZFLXZ(IIJB:IIJE,1:IKT)) + ZFLXZ(:,:) = MAX(0., ZFLXZ(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! IF (KRRL > 0) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PSIGS(IIJB:IIJE,1:IKT) = ZFLXZ(IIJB:IIJE,1:IKT) * PATHETA(IIJB:IIJE,1:IKT)**2 + PSIGS(:,:) = ZFLXZ(:,:) * PATHETA(:,:)**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE PSIGS(:,:) = 0. @@ -638,24 +638,24 @@ END IF ! CALL MZF_PHY(D,PWM,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = ZWORK1(IIJB:IIJE,1:IKT) * ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = ZWORK1(:,:) * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2, TLES%X_LES_RES_W_SBG_Thl2 ) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = -2.*CSTURB%XCTD*PSQRT_TKE(IIJB:IIJE,1:IKT)*ZFLXZ(IIJB:IIJE,1:IKT) & - / PLEPS(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = -2.*CSTURB%XCTD*PSQRT_TKE(:,:)*ZFLXZ(:,:) & + / PLEPS(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_DISS_Thl2 ) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = PETHETA(IIJB:IIJE,1:IKT)*ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = PETHETA(:,:)*ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_ThlThv ) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = -CSTURB%XA3*PBETA(IIJB:IIJE,1:IKT)*PETHETA(IIJB:IIJE,1:IKT) & - * ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = -CSTURB%XA3*PBETA(:,:)*PETHETA(:,:) & + * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_ThlPz, .TRUE. ) ! @@ -671,28 +671,28 @@ END IF ! Compute the turbulent variance F and F' at time t-dt. IF (TURBN%LHARAT) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = PDTH_DZ(IIJB:IIJE,1:IKT)*PDR_DZ(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = PDTH_DZ(:,:)*PDR_DZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) IF (TURBN%LSTATNW) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = CSTURB%XCTV * & - PLMF(IIJB:IIJE,1:IKT)*PLEPSF(IIJB:IIJE,1:IKT)*ZWORK2(IIJB:IIJE,1:IKT) + ZF(:,:) = CSTURB%XCTV * & + PLMF(:,:)*PLEPSF(:,:)*ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = PLMF(IIJB:IIJE,1:IKT)*PLEPSF(IIJB:IIJE,1:IKT)*ZWORK2(IIJB:IIJE,1:IKT) + ZF(:,:) = PLMF(:,:)*PLEPSF(:,:)*ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = 0.5*(PPHI3(IIJB:IIJE,1:IKT)+PPSI3(IIJB:IIJE,1:IKT))& - *PDTH_DZ(IIJB:IIJE,1:IKT)*PDR_DZ(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = 0.5*(PPHI3(:,:)+PPSI3(:,:))& + *PDTH_DZ(:,:)*PDR_DZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = CSTURB%XCTV*PLM(IIJB:IIJE,1:IKT)*PLEPS(IIJB:IIJE,1:IKT)& - * ZWORK2(IIJB:IIJE,1:IKT) + ZF(:,:) = CSTURB%XCTV*PLM(:,:)*PLEPS(:,:)& + * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ENDIF ZDFDDTDZ(:,:) = 0. ! this term, because of discretization, is treated separately @@ -710,11 +710,11 @@ END IF & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,ZWORK3) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + ZWORK1(IIJB:IIJE,1:IKT) * PFTH2(IIJB:IIJE,1:IKT) - ZDFDDTDZ(IIJB:IIJE,1:IKT) = ZDFDDTDZ(IIJB:IIJE,1:IKT) + ZWORK2(IIJB:IIJE,1:IKT) & - * PFTH2(IIJB:IIJE,1:IKT) - ZDFDDRDZ(IIJB:IIJE,1:IKT) = ZDFDDRDZ(IIJB:IIJE,1:IKT) + ZWORK3(IIJB:IIJE,1:IKT) & - * PFTH2(IIJB:IIJE,1:IKT) + ZF(:,:) = ZF(:,:) + ZWORK1(:,:) * PFTH2(:,:) + ZDFDDTDZ(:,:) = ZDFDDTDZ(:,:) + ZWORK2(:,:) & + * PFTH2(:,:) + ZDFDDRDZ(:,:) = ZDFDDRDZ(:,:) + ZWORK3(:,:) & + * PFTH2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -729,12 +729,12 @@ END IF & PD,PLM,PLEPS,PTKEM,ZWORK4) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + ZWORK2(IIJB:IIJE,1:IKT) & - * ZWORK1(IIJB:IIJE,1:IKT) - ZDFDDTDZ(IIJB:IIJE,1:IKT) = ZDFDDTDZ(IIJB:IIJE,1:IKT) + ZWORK3(IIJB:IIJE,1:IKT) & - * ZWORK1(IIJB:IIJE,1:IKT) - ZDFDDRDZ(IIJB:IIJE,1:IKT) = ZDFDDRDZ(IIJB:IIJE,1:IKT) + ZWORK4(IIJB:IIJE,1:IKT) & - * ZWORK1(IIJB:IIJE,1:IKT) + ZF(:,:) = ZF(:,:) + ZWORK2(:,:) & + * ZWORK1(:,:) + ZDFDDTDZ(:,:) = ZDFDDTDZ(:,:) + ZWORK3(:,:) & + * ZWORK1(:,:) + ZDFDDRDZ(:,:) = ZDFDDRDZ(:,:) + ZWORK4(:,:) & + * ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -748,11 +748,11 @@ END IF & PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,PDTH_DZ,ZWORK3) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + ZWORK1(IIJB:IIJE,1:IKT) * PFR2(IIJB:IIJE,1:IKT) - ZDFDDTDZ(IIJB:IIJE,1:IKT) = ZDFDDTDZ(IIJB:IIJE,1:IKT) + ZWORK2(IIJB:IIJE,1:IKT) & - * PFR2(IIJB:IIJE,1:IKT) - ZDFDDRDZ(IIJB:IIJE,1:IKT) = ZDFDDRDZ(IIJB:IIJE,1:IKT) + ZWORK3(IIJB:IIJE,1:IKT) & - * PFR2(IIJB:IIJE,1:IKT) + ZF(:,:) = ZF(:,:) + ZWORK1(:,:) * PFR2(:,:) + ZDFDDTDZ(:,:) = ZDFDDTDZ(:,:) + ZWORK2(:,:) & + * PFR2(:,:) + ZDFDDRDZ(:,:) = ZDFDDRDZ(:,:) + ZWORK3(:,:) & + * PFR2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -767,11 +767,11 @@ END IF & PLM,PLEPS,PTKEM,PBLL_O_E,PDTH_DZ,PEMOIST,ZWORK4) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + ZWORK2(IIJB:IIJE,1:IKT)*ZWORK1(IIJB:IIJE,1:IKT) - ZDFDDTDZ(IIJB:IIJE,1:IKT) = ZDFDDTDZ(IIJB:IIJE,1:IKT) + ZWORK3(IIJB:IIJE,1:IKT) & - * ZWORK1(IIJB:IIJE,1:IKT) - ZDFDDRDZ(IIJB:IIJE,1:IKT) = ZDFDDRDZ(IIJB:IIJE,1:IKT) + ZWORK4(IIJB:IIJE,1:IKT) & - * ZWORK1(IIJB:IIJE,1:IKT) + ZF(:,:) = ZF(:,:) + ZWORK2(:,:)*ZWORK1(:,:) + ZDFDDTDZ(:,:) = ZDFDDTDZ(:,:) + ZWORK3(:,:) & + * ZWORK1(:,:) + ZDFDDRDZ(:,:) = ZDFDDRDZ(:,:) + ZWORK4(:,:) & + * ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -785,45 +785,45 @@ END IF & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,ZWORK3) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + ZWORK1(IIJB:IIJE,1:IKT) * PFTHR(IIJB:IIJE,1:IKT) - ZDFDDTDZ(IIJB:IIJE,1:IKT) = ZDFDDTDZ(IIJB:IIJE,1:IKT) + ZWORK2(IIJB:IIJE,1:IKT) & - * PFTHR(IIJB:IIJE,1:IKT) - ZDFDDRDZ(IIJB:IIJE,1:IKT) = ZDFDDRDZ(IIJB:IIJE,1:IKT) + ZWORK3(IIJB:IIJE,1:IKT) & - * PFTHR(IIJB:IIJE,1:IKT) + ZF(:,:) = ZF(:,:) + ZWORK1(:,:) * PFTHR(:,:) + ZDFDDTDZ(:,:) = ZDFDDTDZ(:,:) + ZWORK2(:,:) & + * PFTHR(:,:) + ZDFDDRDZ(:,:) = ZDFDDRDZ(:,:) + ZWORK3(:,:) & + * PFTHR(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = PTHLP(IIJB:IIJE,1:IKT) - PTHLM(IIJB:IIJE,1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = PRP(IIJB:IIJE,1:IKT) - PRM(IIJB:IIJE,1:IKT,1) + ZWORK1(:,:) = PTHLP(:,:) - PTHLM(:,:) + ZWORK2(:,:) = PRP(:,:) - PRM(:,:,1) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL DZM_PHY(D,ZWORK1,ZWORK3) CALL DZM_PHY(D,ZWORK2,ZWORK4) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZWORK3(IIJB:IIJE,1:IKT) / PDZZ(IIJB:IIJE,1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = ZWORK4(IIJB:IIJE,1:IKT) / PDZZ(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZWORK3(:,:) / PDZZ(:,:) + ZWORK2(:,:) = ZWORK4(:,:) / PDZZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK7) CALL MZF_PHY(D,ZWORK2,ZWORK8) ! IF (TURBN%LHARAT) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK5(IIJB:IIJE,1:IKT) = 2. *PDR_DZ(IIJB:IIJE,1:IKT) *ZWORK3(IIJB:IIJE,1:IKT) & - / PDZZ(IIJB:IIJE,1:IKT) & - + 2. *PDTH_DZ(IIJB:IIJE,1:IKT) *ZWORK4(IIJB:IIJE,1:IKT) / PDZZ(IIJB:IIJE,1:IKT) + ZWORK5(:,:) = 2. *PDR_DZ(:,:) *ZWORK3(:,:) & + / PDZZ(:,:) & + + 2. *PDTH_DZ(:,:) *ZWORK4(:,:) / PDZZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! CALL MZF_PHY(D,ZWORK5,ZWORK6) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) & - + TURBN%XIMPL * PLMF(IIJB:IIJE,1:IKT)*PLEPSF(IIJB:IIJE,1:IKT)*0.5 & - * ZWORK5(IIJB:IIJE,1:IKT) & - + TURBN%XIMPL * ZDFDDTDZ(IIJB:IIJE,1:IKT) * ZWORK7(IIJB:IIJE,1:IKT) & - + TURBN%XIMPL * ZDFDDRDZ(IIJB:IIJE,1:IKT) * ZWORK8(IIJB:IIJE,1:IKT) + ZFLXZ(:,:) = ZF(:,:) & + + TURBN%XIMPL * PLMF(:,:)*PLEPSF(:,:)*0.5 & + * ZWORK5(:,:) & + + TURBN%XIMPL * ZDFDDTDZ(:,:) * ZWORK7(:,:) & + + TURBN%XIMPL * ZDFDDRDZ(:,:) * ZWORK8(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) IF (TURBN%LSTATNW) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ(IIJB:IIJE,1:IKT) = CSTURB%XCTV * ZFLXZ(IIJB:IIJE,1:IKT) + ZFLXZ(:,:) = CSTURB%XCTV * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ELSE @@ -837,93 +837,93 @@ END IF ! d(psi3*drdz )/ddrdz term !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK5(IIJB:IIJE,1:IKT) = (ZWKPHIPSI1(IIJB:IIJE,1:IKT)+ZWKPHIPSI2(IIJB:IIJE,1:IKT))& - *PDR_DZ(IIJB:IIJE,1:IKT)*ZWORK3(IIJB:IIJE,1:IKT)/PDZZ(IIJB:IIJE,1:IKT) & - + (ZWKPHIPSI3(IIJB:IIJE,1:IKT) + ZWKPHIPSI4(IIJB:IIJE,1:IKT)) & - *PDTH_DZ(IIJB:IIJE,1:IKT)*ZWORK4(IIJB:IIJE,1:IKT)/PDZZ(IIJB:IIJE,1:IKT) + ZWORK5(:,:) = (ZWKPHIPSI1(:,:)+ZWKPHIPSI2(:,:))& + *PDR_DZ(:,:)*ZWORK3(:,:)/PDZZ(:,:) & + + (ZWKPHIPSI3(:,:) + ZWKPHIPSI4(:,:)) & + *PDTH_DZ(:,:)*ZWORK4(:,:)/PDZZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK5,ZWORK6) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) & - + TURBN%XIMPL * CSTURB%XCTV*PLM(IIJB:IIJE,1:IKT)*PLEPS(IIJB:IIJE,1:IKT)*0.5 & - * ZWORK6(IIJB:IIJE,1:IKT) & - + TURBN%XIMPL * ZDFDDTDZ(IIJB:IIJE,1:IKT) * ZWORK7(IIJB:IIJE,1:IKT) & - + TURBN%XIMPL * ZDFDDRDZ(IIJB:IIJE,1:IKT) * ZWORK8(IIJB:IIJE,1:IKT) + ZFLXZ(:,:) = ZF(:,:) & + + TURBN%XIMPL * CSTURB%XCTV*PLM(:,:)*PLEPS(:,:)*0.5 & + * ZWORK6(:,:) & + + TURBN%XIMPL * ZDFDDTDZ(:,:) * ZWORK7(:,:) & + + TURBN%XIMPL * ZDFDDRDZ(:,:) * ZWORK8(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ENDIF ! ! special case near the ground ( uncentred gradient ) IF (TURBN%LHARAT) THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKB) = & + ZFLXZ(:,IKB) = & (1. ) & *( PEXPL * & - ( ZCOEFF(IIJB:IIJE,IKB+2*IKL)*PTHLM(IIJB:IIJE,IKB+2*IKL) & - +ZCOEFF(IIJB:IIJE,IKB+IKL )*PTHLM(IIJB:IIJE,IKB+IKL ) & - +ZCOEFF(IIJB:IIJE,IKB )*PTHLM(IIJB:IIJE,IKB )) & - *( ZCOEFF(IIJB:IIJE,IKB+2*IKL)*PRM(IIJB:IIJE,IKB+2*IKL,1) & - +ZCOEFF(IIJB:IIJE,IKB+IKL )*PRM(IIJB:IIJE,IKB+IKL,1 ) & - +ZCOEFF(IIJB:IIJE,IKB )*PRM(IIJB:IIJE,IKB ,1 )) & + ( ZCOEFF(:,IKB+2*IKL)*PTHLM(:,IKB+2*IKL) & + +ZCOEFF(:,IKB+IKL )*PTHLM(:,IKB+IKL ) & + +ZCOEFF(:,IKB )*PTHLM(:,IKB )) & + *( ZCOEFF(:,IKB+2*IKL)*PRM(:,IKB+2*IKL,1) & + +ZCOEFF(:,IKB+IKL )*PRM(:,IKB+IKL,1 ) & + +ZCOEFF(:,IKB )*PRM(:,IKB ,1 )) & +TURBN%XIMPL * & - ( ZCOEFF(IIJB:IIJE,IKB+2*IKL)*PTHLP(IIJB:IIJE,IKB+2*IKL) & - +ZCOEFF(IIJB:IIJE,IKB+IKL )*PTHLP(IIJB:IIJE,IKB+IKL ) & - +ZCOEFF(IIJB:IIJE,IKB )*PTHLP(IIJB:IIJE,IKB )) & - *( ZCOEFF(IIJB:IIJE,IKB+2*IKL)*PRP(IIJB:IIJE,IKB+2*IKL ) & - +ZCOEFF(IIJB:IIJE,IKB+IKL )*PRP(IIJB:IIJE,IKB+IKL ) & - +ZCOEFF(IIJB:IIJE,IKB )*PRP(IIJB:IIJE,IKB )) & + ( ZCOEFF(:,IKB+2*IKL)*PTHLP(:,IKB+2*IKL) & + +ZCOEFF(:,IKB+IKL )*PTHLP(:,IKB+IKL ) & + +ZCOEFF(:,IKB )*PTHLP(:,IKB )) & + *( ZCOEFF(:,IKB+2*IKL)*PRP(:,IKB+2*IKL ) & + +ZCOEFF(:,IKB+IKL )*PRP(:,IKB+IKL ) & + +ZCOEFF(:,IKB )*PRP(:,IKB )) & ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) IF (TURBN%LSTATNW) THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKB) = (CSTURB%XCHT1 + CSTURB%XCHT2) * ZFLXZ(IIJB:IIJE,IKB) + ZFLXZ(:,IKB) = (CSTURB%XCHT1 + CSTURB%XCHT2) * ZFLXZ(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF ELSE !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKB) = & - (CSTURB%XCHT1 * PPHI3(IIJB:IIJE,IKB+IKL) + CSTURB%XCHT2 * PPSI3(IIJB:IIJE,IKB+IKL)) & + ZFLXZ(:,IKB) = & + (CSTURB%XCHT1 * PPHI3(:,IKB+IKL) + CSTURB%XCHT2 * PPSI3(:,IKB+IKL)) & *( PEXPL * & - ( ZCOEFF(IIJB:IIJE,IKB+2*IKL)*PTHLM(IIJB:IIJE,IKB+2*IKL) & - +ZCOEFF(IIJB:IIJE,IKB+IKL )*PTHLM(IIJB:IIJE,IKB+IKL ) & - +ZCOEFF(IIJB:IIJE,IKB )*PTHLM(IIJB:IIJE,IKB )) & - *( ZCOEFF(IIJB:IIJE,IKB+2*IKL)*PRM(IIJB:IIJE,IKB+2*IKL,1) & - +ZCOEFF(IIJB:IIJE,IKB+IKL )*PRM(IIJB:IIJE,IKB+IKL,1 ) & - +ZCOEFF(IIJB:IIJE,IKB )*PRM(IIJB:IIJE,IKB ,1 )) & + ( ZCOEFF(:,IKB+2*IKL)*PTHLM(:,IKB+2*IKL) & + +ZCOEFF(:,IKB+IKL )*PTHLM(:,IKB+IKL ) & + +ZCOEFF(:,IKB )*PTHLM(:,IKB )) & + *( ZCOEFF(:,IKB+2*IKL)*PRM(:,IKB+2*IKL,1) & + +ZCOEFF(:,IKB+IKL )*PRM(:,IKB+IKL,1 ) & + +ZCOEFF(:,IKB )*PRM(:,IKB ,1 )) & +TURBN%XIMPL * & - ( ZCOEFF(IIJB:IIJE,IKB+2*IKL)*PTHLP(IIJB:IIJE,IKB+2*IKL) & - +ZCOEFF(IIJB:IIJE,IKB+IKL )*PTHLP(IIJB:IIJE,IKB+IKL ) & - +ZCOEFF(IIJB:IIJE,IKB )*PTHLP(IIJB:IIJE,IKB )) & - *( ZCOEFF(IIJB:IIJE,IKB+2*IKL)*PRP(IIJB:IIJE,IKB+2*IKL ) & - +ZCOEFF(IIJB:IIJE,IKB+IKL )*PRP(IIJB:IIJE,IKB+IKL ) & - +ZCOEFF(IIJB:IIJE,IKB )*PRP(IIJB:IIJE,IKB )) & + ( ZCOEFF(:,IKB+2*IKL)*PTHLP(:,IKB+2*IKL) & + +ZCOEFF(:,IKB+IKL )*PTHLP(:,IKB+IKL ) & + +ZCOEFF(:,IKB )*PTHLP(:,IKB )) & + *( ZCOEFF(:,IKB+2*IKL)*PRP(:,IKB+2*IKL ) & + +ZCOEFF(:,IKB+IKL )*PRP(:,IKB+IKL ) & + +ZCOEFF(:,IKB )*PRP(:,IKB )) & ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ENDIF ! !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKA) = ZFLXZ(IIJB:IIJE,IKB) + ZFLXZ(:,IKA) = ZFLXZ(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! IF (TURBN%LSTATNW) THEN !wc The variance from the budget eq should be multiplied by 2 here ! e.g. thl'2=2*L*LEPS*(cab)^-1 *(dthl/dz**2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ(IIJB:IIJE,1:IKT) = MIN(0., 2.*ZFLXZ(IIJB:IIJE,1:IKT)) + ZFLXZ(:,:) = MIN(0., 2.*ZFLXZ(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ENDIF IF ( KRRL > 0 ) THEN IF (TURBN%LSTATNW) THEN !wc Part of the new statistical cloud scheme set up. Normal notation so - sign !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PSIGS(IIJB:IIJE,1:IKT) = PSIGS(IIJB:IIJE,1:IKT) - & - 2. * PATHETA(IIJB:IIJE,1:IKT) * PAMOIST(IIJB:IIJE,1:IKT) * ZFLXZ(IIJB:IIJE,1:IKT) + PSIGS(:,:) = PSIGS(:,:) - & + 2. * PATHETA(:,:) * PAMOIST(:,:) * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE ! NB PATHETA is -b in Chaboureau Bechtold 2002 which explains the + sign here !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PSIGS(IIJB:IIJE,1:IKT) = PSIGS(IIJB:IIJE,1:IKT) + & - 2. * PATHETA(IIJB:IIJE,1:IKT) * PAMOIST(IIJB:IIJE,1:IKT) * ZFLXZ(IIJB:IIJE,1:IKT) + PSIGS(:,:) = PSIGS(:,:) + & + 2. * PATHETA(:,:) * PAMOIST(:,:) * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ENDIF END IF @@ -952,35 +952,35 @@ IF (TLES%LLES_CALL) THEN ! CALL MZF_PHY(D,PWM,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = ZWORK1(IIJB:IIJE,1:IKT) * ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = ZWORK1(:,:) * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2, TLES%X_LES_RES_W_SBG_ThlRt ) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = -2.*CSTURB%XCTD*PSQRT_TKE(IIJB:IIJE,1:IKT)*ZFLXZ(IIJB:IIJE,1:IKT) & - / PLEPS(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = -2.*CSTURB%XCTD*PSQRT_TKE(:,:)*ZFLXZ(:,:) & + / PLEPS(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_DISS_ThlRt ) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = PETHETA(IIJB:IIJE,1:IKT)*ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = PETHETA(:,:)*ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_RtThv ) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = -CSTURB%XA3*PBETA(IIJB:IIJE,1:IKT)*PETHETA(IIJB:IIJE,1:IKT) & - * ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = -CSTURB%XA3*PBETA(:,:)*PETHETA(:,:) & + * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_RtPz, .TRUE. ) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = PEMOIST(IIJB:IIJE,1:IKT)*ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = PEMOIST(:,:)*ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_ThlThv , .TRUE. ) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = -CSTURB%XA3*PBETA(IIJB:IIJE,1:IKT)*PEMOIST(IIJB:IIJE,1:IKT) & - * ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = -CSTURB%XA3*PBETA(:,:)*PEMOIST(:,:) & + * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_ThlPz, .TRUE. ) ! @@ -995,25 +995,25 @@ END IF ! Compute the turbulent variance F and F' at time t-dt. IF (TURBN%LHARAT) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = PDR_DZ(IIJB:IIJE,1:IKT)**2 + ZWORK1(:,:) = PDR_DZ(:,:)**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = PLMF(IIJB:IIJE,1:IKT)*PLEPSF(IIJB:IIJE,1:IKT)*ZWORK2(IIJB:IIJE,1:IKT) + ZF(:,:) = PLMF(:,:)*PLEPSF(:,:)*ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) IF (TURBN%LSTATNW) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = CSTURB%XCTV * ZF(IIJB:IIJE,1:IKT) + ZF(:,:) = CSTURB%XCTV * ZF(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = PPSI3(IIJB:IIJE,1:IKT)*PDR_DZ(IIJB:IIJE,1:IKT)**2 + ZWORK1(:,:) = PPSI3(:,:)*PDR_DZ(:,:)**2 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = CSTURB%XCTV*PLM(IIJB:IIJE,1:IKT)*PLEPS(IIJB:IIJE,1:IKT)& - *ZWORK2(IIJB:IIJE,1:IKT) + ZF(:,:) = CSTURB%XCTV*PLM(:,:)*PLEPS(:,:)& + *ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ENDIF ZDFDDRDZ(:,:) = 0. ! this term, because of discretization, is treated separately @@ -1028,9 +1028,9 @@ ENDIF & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PEMOIST,ZWORK2) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + ZWORK1(IIJB:IIJE,1:IKT) * PFR2(IIJB:IIJE,1:IKT) - ZDFDDRDZ(IIJB:IIJE,1:IKT) = ZDFDDRDZ(IIJB:IIJE,1:IKT) + ZWORK2(IIJB:IIJE,1:IKT) & - * PFR2(IIJB:IIJE,1:IKT) + ZF(:,:) = ZF(:,:) + ZWORK1(:,:) * PFR2(:,:) + ZDFDDRDZ(:,:) = ZDFDDRDZ(:,:) + ZWORK2(:,:) & + * PFR2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -1043,9 +1043,9 @@ ENDIF & PD,PLM,PLEPS,PTKEM,GUSERV,ZWORK3) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + ZWORK2(IIJB:IIJE,1:IKT)*ZWORK1(IIJB:IIJE,1:IKT) - ZDFDDRDZ(IIJB:IIJE,1:IKT) = ZDFDDRDZ(IIJB:IIJE,1:IKT) + ZWORK3(IIJB:IIJE,1:IKT) & - * ZWORK1(IIJB:IIJE,1:IKT) + ZF(:,:) = ZF(:,:) + ZWORK2(:,:)*ZWORK1(:,:) + ZDFDDRDZ(:,:) = ZDFDDRDZ(:,:) + ZWORK3(:,:) & + * ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -1058,9 +1058,9 @@ ENDIF & PREDTH1,PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDR_DZ,ZWORK2) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + ZWORK1(IIJB:IIJE,1:IKT)*PFTH2(IIJB:IIJE,1:IKT) - ZDFDDRDZ(IIJB:IIJE,1:IKT) = ZDFDDRDZ(IIJB:IIJE,1:IKT) + ZWORK2(IIJB:IIJE,1:IKT) & - * PFTH2(IIJB:IIJE,1:IKT) + ZF(:,:) = ZF(:,:) + ZWORK1(:,:)*PFTH2(:,:) + ZDFDDRDZ(:,:) = ZDFDDRDZ(:,:) + ZWORK2(:,:) & + * PFTH2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -1073,9 +1073,9 @@ ENDIF & PD,PLM,PLEPS,PTKEM,PBLL_O_E,PETHETA,PDR_DZ,ZWORK3) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT)+ZWORK2(IIJB:IIJE,1:IKT)*ZWORK1(IIJB:IIJE,1:IKT) - ZDFDDRDZ(IIJB:IIJE,1:IKT) = ZDFDDRDZ(IIJB:IIJE,1:IKT) + ZWORK3(IIJB:IIJE,1:IKT) & - * ZWORK1(IIJB:IIJE,1:IKT) + ZF(:,:) = ZF(:,:)+ZWORK2(:,:)*ZWORK1(:,:) + ZDFDDRDZ(:,:) = ZDFDDRDZ(:,:) + ZWORK3(:,:) & + * ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -1087,110 +1087,110 @@ ENDIF & PD,PLEPS,PSQRT_TKE,PBLL_O_E,PETHETA,PDR_DZ,ZWORK2) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + ZWORK1(IIJB:IIJE,1:IKT) & - * PFTHR(IIJB:IIJE,1:IKT) - ZDFDDRDZ(IIJB:IIJE,1:IKT) = ZDFDDRDZ(IIJB:IIJE,1:IKT) + ZWORK2(IIJB:IIJE,1:IKT) & - * PFTHR(IIJB:IIJE,1:IKT) + ZF(:,:) = ZF(:,:) + ZWORK1(:,:) & + * PFTHR(:,:) + ZDFDDRDZ(:,:) = ZDFDDRDZ(:,:) + ZWORK2(:,:) & + * PFTHR(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF END IF ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = PRP(IIJB:IIJE,1:IKT) - PRM(IIJB:IIJE,1:IKT,1) + ZWORK1(:,:) = PRP(:,:) - PRM(:,:,1) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL DZM_PHY(D,ZWORK1,ZWORK2) IF (TURBN%LHARAT) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK5(IIJB:IIJE,1:IKT) = ZWORK2(IIJB:IIJE,1:IKT) / PDZZ(IIJB:IIJE,1:IKT) - ZWORK3(IIJB:IIJE,1:IKT) = 2.*PDR_DZ(IIJB:IIJE,1:IKT)* ZWORK5(IIJB:IIJE,1:IKT) + ZWORK5(:,:) = ZWORK2(:,:) / PDZZ(:,:) + ZWORK3(:,:) = 2.*PDR_DZ(:,:)* ZWORK5(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK3,ZWORK4) CALL MZF_PHY(D,ZWORK5,ZWORK6) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) & - + TURBN%XIMPL * PLMF(IIJB:IIJE,1:IKT) *PLEPSF(IIJB:IIJE,1:IKT) & - * ZWORK4(IIJB:IIJE,1:IKT) & - + TURBN%XIMPL * ZDFDDRDZ(IIJB:IIJE,1:IKT) * ZWORK6(IIJB:IIJE,1:IKT) + ZFLXZ(:,:) = ZF(:,:) & + + TURBN%XIMPL * PLMF(:,:) *PLEPSF(:,:) & + * ZWORK4(:,:) & + + TURBN%XIMPL * ZDFDDRDZ(:,:) * ZWORK6(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) IF (TURBN%LSTATNW) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ(IIJB:IIJE,1:IKT) = CSTURB%XCTV * ZFLXZ(IIJB:IIJE,1:IKT) + ZFLXZ(:,:) = CSTURB%XCTV * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ELSE CALL D_PSI3DRDZ2_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,PDR_DZ,TURBN%CTURBDIM,GUSERV,ZWKPHIPSI1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZWKPHIPSI1(IIJB:IIJE,1:IKT)*ZWORK2(IIJB:IIJE,1:IKT) & - / PDZZ(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZWKPHIPSI1(:,:)*ZWORK2(:,:) & + / PDZZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK3) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK4(IIJB:IIJE,1:IKT) = ZWORK2(IIJB:IIJE,1:IKT) / PDZZ(IIJB:IIJE,1:IKT) + ZWORK4(:,:) = ZWORK2(:,:) / PDZZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK4,ZWORK5) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) & - + TURBN%XIMPL * CSTURB%XCTV*PLM(IIJB:IIJE,1:IKT) *PLEPS(IIJB:IIJE,1:IKT) & - * ZWORK3(IIJB:IIJE,1:IKT) & - + TURBN%XIMPL * ZDFDDRDZ(IIJB:IIJE,1:IKT) * ZWORK5(IIJB:IIJE,1:IKT) + ZFLXZ(:,:) = ZF(:,:) & + + TURBN%XIMPL * CSTURB%XCTV*PLM(:,:) *PLEPS(:,:) & + * ZWORK3(:,:) & + + TURBN%XIMPL * ZDFDDRDZ(:,:) * ZWORK5(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ENDIF ! ! special case near the ground ( uncentred gradient ) IF (TURBN%LHARAT) THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKB) = PLMF(IIJB:IIJE,IKB) & - * PLEPSF(IIJB:IIJE,IKB) & + ZFLXZ(:,IKB) = PLMF(:,IKB) & + * PLEPSF(:,IKB) & *( PEXPL * & - ( ZCOEFF(IIJB:IIJE,IKB+2*IKL)*PRM(IIJB:IIJE,IKB+2*IKL,1) & - +ZCOEFF(IIJB:IIJE,IKB+IKL )*PRM(IIJB:IIJE,IKB+IKL,1 ) & - +ZCOEFF(IIJB:IIJE,IKB )*PRM(IIJB:IIJE,IKB ,1 ))**2 & + ( ZCOEFF(:,IKB+2*IKL)*PRM(:,IKB+2*IKL,1) & + +ZCOEFF(:,IKB+IKL )*PRM(:,IKB+IKL,1 ) & + +ZCOEFF(:,IKB )*PRM(:,IKB ,1 ))**2 & +TURBN%XIMPL * & - ( ZCOEFF(IIJB:IIJE,IKB+2*IKL)*PRP(IIJB:IIJE,IKB+2*IKL) & - +ZCOEFF(IIJB:IIJE,IKB+IKL )*PRP(IIJB:IIJE,IKB+IKL ) & - +ZCOEFF(IIJB:IIJE,IKB )*PRP(IIJB:IIJE,IKB ))**2 & + ( ZCOEFF(:,IKB+2*IKL)*PRP(:,IKB+2*IKL) & + +ZCOEFF(:,IKB+IKL )*PRP(:,IKB+IKL ) & + +ZCOEFF(:,IKB )*PRP(:,IKB ))**2 & ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) IF (TURBN%LSTATNW) THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKB) = CSTURB%XCHV * ZFLXZ(IIJB:IIJE,IKB) + ZFLXZ(:,IKB) = CSTURB%XCHV * ZFLXZ(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF ELSE !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKB) = CSTURB%XCHV * PPSI3(IIJB:IIJE,IKB+IKL) * PLM(IIJB:IIJE,IKB) & - * PLEPS(IIJB:IIJE,IKB) & + ZFLXZ(:,IKB) = CSTURB%XCHV * PPSI3(:,IKB+IKL) * PLM(:,IKB) & + * PLEPS(:,IKB) & *( PEXPL * & - ( ZCOEFF(IIJB:IIJE,IKB+2*IKL)*PRM(IIJB:IIJE,IKB+2*IKL,1) & - +ZCOEFF(IIJB:IIJE,IKB+IKL )*PRM(IIJB:IIJE,IKB+IKL,1 ) & - +ZCOEFF(IIJB:IIJE,IKB )*PRM(IIJB:IIJE,IKB ,1 ))**2 & + ( ZCOEFF(:,IKB+2*IKL)*PRM(:,IKB+2*IKL,1) & + +ZCOEFF(:,IKB+IKL )*PRM(:,IKB+IKL,1 ) & + +ZCOEFF(:,IKB )*PRM(:,IKB ,1 ))**2 & +TURBN%XIMPL * & - ( ZCOEFF(IIJB:IIJE,IKB+2*IKL)*PRP(IIJB:IIJE,IKB+2*IKL) & - +ZCOEFF(IIJB:IIJE,IKB+IKL )*PRP(IIJB:IIJE,IKB+IKL ) & - +ZCOEFF(IIJB:IIJE,IKB )*PRP(IIJB:IIJE,IKB ))**2 & + ( ZCOEFF(:,IKB+2*IKL)*PRP(:,IKB+2*IKL) & + +ZCOEFF(:,IKB+IKL )*PRP(:,IKB+IKL ) & + +ZCOEFF(:,IKB )*PRP(:,IKB ))**2 & ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ENDIF ! !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKA) = ZFLXZ(IIJB:IIJE,IKB) + ZFLXZ(:,IKA) = ZFLXZ(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) IF (TURBN%LSTATNW) THEN !wc The variance from the budget eq should be multiplied by 2 here ! thl'2=2*L*LEPS*(dthl/dz**2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ(IIJB:IIJE,1:IKT) = MAX(0., 2.*ZFLXZ(IIJB:IIJE,1:IKT)) + ZFLXZ(:,:) = MAX(0., 2.*ZFLXZ(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ENDIF ! IF ( KRRL > 0 ) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PSIGS(IIJB:IIJE,1:IKT) = PSIGS(IIJB:IIJE,1:IKT) + PAMOIST(IIJB:IIJE,1:IKT) **2 & - * ZFLXZ(IIJB:IIJE,1:IKT) + PSIGS(:,:) = PSIGS(:,:) + PAMOIST(:,:) **2 & + * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! stores <Rnp Rnp> @@ -1218,24 +1218,24 @@ ENDIF ! CALL MZF_PHY(D,PWM,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = ZWORK1(IIJB:IIJE,1:IKT) * ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = ZWORK1(:,:) * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2, TLES%X_LES_RES_W_SBG_Rt2 ) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = PEMOIST(IIJB:IIJE,1:IKT)*ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = PEMOIST(:,:)*ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_RtThv , .TRUE. ) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = -CSTURB%XA3*PBETA(IIJB:IIJE,1:IKT)*PEMOIST(IIJB:IIJE,1:IKT) & - * ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = -CSTURB%XA3*PBETA(:,:)*PEMOIST(:,:) & + * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_RtPz, .TRUE. ) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = -2.*CSTURB%XCTD*PSQRT_TKE(IIJB:IIJE,1:IKT)*ZFLXZ(IIJB:IIJE,1:IKT) & - / PLEPS(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = -2.*CSTURB%XCTD*PSQRT_TKE(:,:)*ZFLXZ(:,:) & + / PLEPS(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_DISS_Rt2 ) ! @@ -1251,15 +1251,15 @@ ENDIF IF ( KRRL > 0 ) THEN ! Extrapolate PSIGS at the ground and at the top !$mnh_expand_array(JIJ=IIJB:IIJE) - PSIGS(IIJB:IIJE,IKA) = PSIGS(IIJB:IIJE,IKB) - PSIGS(IIJB:IIJE,IKU) = PSIGS(IIJB:IIJE,IKE) + PSIGS(:,IKA) = PSIGS(:,IKB) + PSIGS(:,IKU) = PSIGS(:,IKE) !$mnh_end_expand_array(JIJ=IIJB:IIJE) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) #ifdef REPRO48 - PSIGS(IIJB:IIJE,1:IKT) = MAX (PSIGS(IIJB:IIJE,1:IKT) , 0.) - PSIGS(IIJB:IIJE,1:IKT) = SQRT(PSIGS(IIJB:IIJE,1:IKT)) + PSIGS(:,:) = MAX (PSIGS(:,:) , 0.) + PSIGS(:,:) = SQRT(PSIGS(:,:)) #else - PSIGS(IIJB:IIJE,1:IKT) = SQRT( MAX (PSIGS(IIJB:IIJE,1:IKT) , 1.E-12) ) + PSIGS(:,:) = SQRT( MAX (PSIGS(:,:) , 1.E-12) ) #endif !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF diff --git a/src/PHYEX/turb/mode_turb_ver_thermo_flux.f90 b/src/PHYEX/turb/mode_turb_ver_thermo_flux.f90 index b537219ac83a63aa4ce0eb5a3cc0f8d7e95bade1..470a474cce203d400740c9a1c9086f5a6e363ed4 100644 --- a/src/PHYEX/turb/mode_turb_ver_thermo_flux.f90 +++ b/src/PHYEX/turb/mode_turb_ver_thermo_flux.f90 @@ -418,11 +418,11 @@ IF (TURBN%LHARAT) THEN ! LHARAT so TKE and length scales at half levels! !wc 50MF can be omitted with energy cascade included !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZKEFF(IIJB:IIJE,1:IKT) = PLM(IIJB:IIJE,1:IKT) * SQRT(PTKEM(IIJB:IIJE,1:IKT)) + ZKEFF(:,:) = PLM(:,:) * SQRT(PTKEM(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = PLM(IIJB:IIJE,1:IKT) * SQRT(PTKEM(IIJB:IIJE,1:IKT)) + ZWORK1(:,:) = PLM(:,:) * SQRT(PTKEM(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZKEFF) ENDIF @@ -433,11 +433,11 @@ IF(TURBN%LLEONARD) THEN IF ( KRRL >= 1 ) THEN IF ( KRRI >= 1 ) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZCLD_THOLD(IIJB:IIJE,1:IKT) = PRM(IIJB:IIJE,1:IKT,2) + PRM(IIJB:IIJE,1:IKT,4) + ZCLD_THOLD(:,:) = PRM(:,:,2) + PRM(:,:,4) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZCLD_THOLD(IIJB:IIJE,1:IKT) = PRM(IIJB:IIJE,1:IKT,2) + ZCLD_THOLD(:,:) = PRM(:,:,2) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF END IF @@ -472,14 +472,14 @@ CALL DZM_PHY(D,PTHLM,ZWORK1) CALL D_PHI3DTDZ_O_DDTDZ(D,CSTURB,PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,TURBN%CTURBDIM,GUSERV,ZWORK2) IF (TURBN%LHARAT) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = -ZKEFF(IIJB:IIJE,1:IKT)*ZWORK1(IIJB:IIJE,1:IKT)/PDZZ(IIJB:IIJE,1:IKT) - ZDFDDTDZ(IIJB:IIJE,1:IKT) = -ZKEFF(IIJB:IIJE,1:IKT) + ZF(:,:) = -ZKEFF(:,:)*ZWORK1(:,:)/PDZZ(:,:) + ZDFDDTDZ(:,:) = -ZKEFF(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = -CSTURB%XCSHF*PPHI3(IIJB:IIJE,1:IKT)*ZKEFF(IIJB:IIJE,1:IKT)& - *ZWORK1(IIJB:IIJE,1:IKT)/PDZZ(IIJB:IIJE,1:IKT) - ZDFDDTDZ(IIJB:IIJE,1:IKT) = -CSTURB%XCSHF*ZKEFF(IIJB:IIJE,1:IKT)*ZWORK2(IIJB:IIJE,1:IKT) + ZF(:,:) = -CSTURB%XCSHF*PPHI3(:,:)*ZKEFF(:,:)& + *ZWORK1(:,:)/PDZZ(:,:) + ZDFDDTDZ(:,:) = -CSTURB%XCSHF*ZKEFF(:,:)*ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -490,9 +490,9 @@ IF (TURBN%LLEONARD) THEN CALL MYF_PHY(D,PHGRAD(:,:,2),ZWORK3) ! GY_W_VW(PWM) CALL MZM_PHY(D,PHGRAD(:,:,4),ZWORK4) ! GY_M_M(PTHLM) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF_LEONARD(IIJB:IIJE,1:IKT)= TURBN%XCOEFHGRADTHL*PDXX(IIJB:IIJE,1:IKT)*PDYY(IIJB:IIJE,1:IKT)/12.0*( & - ZWORK1(IIJB:IIJE,1:IKT)*ZWORK2(IIJB:IIJE,1:IKT) & - + ZWORK3(IIJB:IIJE,1:IKT)*ZWORK4(IIJB:IIJE,1:IKT)) + ZF_LEONARD(:,:)= TURBN%XCOEFHGRADTHL*PDXX(:,:)*PDYY(:,:)/12.0*( & + ZWORK1(:,:)*ZWORK2(:,:) & + + ZWORK3(:,:)*ZWORK4(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -505,9 +505,9 @@ IF (GFWTH) THEN & PD,PBLL_O_E,PETHETA,ZKEFF,PTKEM,ZWORK1) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT)= ZF(IIJB:IIJE,1:IKT) + Z3RDMOMENT(IIJB:IIJE,1:IKT) * PFWTH(IIJB:IIJE,1:IKT) - ZDFDDTDZ(IIJB:IIJE,1:IKT) = ZDFDDTDZ(IIJB:IIJE,1:IKT) + ZWORK1(IIJB:IIJE,1:IKT) & - * PFWTH(IIJB:IIJE,1:IKT) + ZF(:,:)= ZF(:,:) + Z3RDMOMENT(:,:) * PFWTH(:,:) + ZDFDDTDZ(:,:) = ZDFDDTDZ(:,:) + ZWORK1(:,:) & + * PFWTH(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -519,10 +519,10 @@ IF (GFTH2) THEN CALL MZM_PHY(D,PFTH2,ZWORK2) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + Z3RDMOMENT(IIJB:IIJE,1:IKT) & - * ZWORK2(IIJB:IIJE,1:IKT) - ZDFDDTDZ(IIJB:IIJE,1:IKT) = ZDFDDTDZ(IIJB:IIJE,1:IKT) + ZWORK1(IIJB:IIJE,1:IKT) & - * ZWORK2(IIJB:IIJE,1:IKT) + ZF(:,:) = ZF(:,:) + Z3RDMOMENT(:,:) & + * ZWORK2(:,:) + ZDFDDTDZ(:,:) = ZDFDDTDZ(:,:) + ZWORK1(:,:) & + * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -532,9 +532,9 @@ IF (GFWR) THEN CALL D_M3_WTH_W2R_O_DDTDZ(D,CSTURB,PREDTH1,PREDR1,PD,ZKEFF,PTKEM,PBLL_O_E,PEMOIST,ZWORK2) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + ZWORK1(IIJB:IIJE,1:IKT) * PFWR(IIJB:IIJE,1:IKT) - ZDFDDTDZ(IIJB:IIJE,1:IKT) = ZDFDDTDZ(IIJB:IIJE,1:IKT) + ZWORK2(IIJB:IIJE,1:IKT) & - * PFWR(IIJB:IIJE,1:IKT) + ZF(:,:) = ZF(:,:) + ZWORK1(:,:) * PFWR(:,:) + ZDFDDTDZ(:,:) = ZDFDDTDZ(:,:) + ZWORK2(:,:) & + * PFWR(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -546,9 +546,9 @@ IF (GFR2) THEN & ZKEFF,PTKEM,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PEMOIST,ZWORK3) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + ZWORK1(IIJB:IIJE,1:IKT) * ZWORK2(IIJB:IIJE,1:IKT) - ZDFDDTDZ(IIJB:IIJE,1:IKT) = ZDFDDTDZ(IIJB:IIJE,1:IKT) + ZWORK3(IIJB:IIJE,1:IKT) & - * ZWORK2(IIJB:IIJE,1:IKT) + ZF(:,:) = ZF(:,:) + ZWORK1(:,:) * ZWORK2(:,:) + ZDFDDTDZ(:,:) = ZDFDDTDZ(:,:) + ZWORK3(:,:) & + * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -560,17 +560,17 @@ IF (GFTHR) THEN CALL MZM_PHY(D,PFTHR, ZWORK2) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + Z3RDMOMENT(IIJB:IIJE,1:IKT) & - * ZWORK2(IIJB:IIJE,1:IKT) - ZDFDDTDZ(IIJB:IIJE,1:IKT) = ZDFDDTDZ(IIJB:IIJE,1:IKT) + ZWORK1(IIJB:IIJE,1:IKT) & - * ZWORK2(IIJB:IIJE,1:IKT) + ZF(:,:) = ZF(:,:) + Z3RDMOMENT(:,:) & + * ZWORK2(:,:) + ZDFDDTDZ(:,:) = ZDFDDTDZ(:,:) + ZWORK1(:,:) & + * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! specialcase for surface IF (OOCEAN) THEN ! ocean model in coupled case !$mnh_expand_array(JIJ=IIJB:IIJE) - ZF(IIJB:IIJE,IKE+1) = PSFTHM(IIJB:IIJE) & - *0.5* ( 1. + PRHODJ(IIJB:IIJE,IKU)/PRHODJ(IIJB:IIJE,IKE) ) + ZF(:,IKE+1) = PSFTHM(:) & + *0.5* ( 1. + PRHODJ(:,IKU)/PRHODJ(:,IKE) ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ELSE ! atmosp bottom !*In 3D, a part of the flux goes vertically, @@ -578,22 +578,22 @@ ELSE ! atmosp bottom !*In 1D, part of energy released in horizontal flux is taken into account in the vertical part IF (TURBN%CTURBDIM=='3DIM') THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - ZF(IIJB:IIJE,IKB) = ( TURBN%XIMPL*PSFTHP(IIJB:IIJE) + PEXPL*PSFTHM(IIJB:IIJE) ) & - * PDIRCOSZW(IIJB:IIJE) & - * 0.5 * (1. + PRHODJ(IIJB:IIJE,IKA) / PRHODJ(IIJB:IIJE,IKB)) + ZF(:,IKB) = ( TURBN%XIMPL*PSFTHP(:) + PEXPL*PSFTHM(:) ) & + * PDIRCOSZW(:) & + * 0.5 * (1. + PRHODJ(:,IKA) / PRHODJ(:,IKB)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE) - ZF(IIJB:IIJE,IKB) = ( TURBN%XIMPL*PSFTHP(IIJB:IIJE) + PEXPL*PSFTHM(IIJB:IIJE) ) & - / PDIRCOSZW(IIJB:IIJE) & - * 0.5 * (1. + PRHODJ(IIJB:IIJE,IKA) / PRHODJ(IIJB:IIJE,IKB)) + ZF(:,IKB) = ( TURBN%XIMPL*PSFTHP(:) + PEXPL*PSFTHM(:) ) & + / PDIRCOSZW(:) & + * 0.5 * (1. + PRHODJ(:,IKA) / PRHODJ(:,IKB)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF ! ! atmos top #ifdef REPRO48 #else - ZF(IIJB:IIJE,IKE+1)=0. + ZF(:,IKE+1)=0. #endif END IF ! @@ -604,62 +604,62 @@ CALL TRIDIAG_THERMO(D,PTHLM,ZF,ZDFDDTDZ,PTSTEP,TURBN%XIMPL,PDZZ,& ! Compute the equivalent tendency for the conservative potential temperature ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZRWTHL(IIJB:IIJE,1:IKT)= PRHODJ(IIJB:IIJE,1:IKT)*(PTHLP(IIJB:IIJE,1:IKT)-PTHLM(IIJB:IIJE,1:IKT))& +ZRWTHL(:,:)= PRHODJ(:,:)*(PTHLP(:,:)-PTHLM(:,:))& /PTSTEP !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! replace the flux by the Leonard terms above ZALT and ZCLD_THOLD IF (TURBN%LLEONARD) THEN DO JK=1,IKT !$mnh_expand_array(JIJ=IIJB:IIJE) - ZALT(IIJB:IIJE,JK) = PZZ(IIJB:IIJE,JK)-PZS(IIJB:IIJE) + ZALT(:,JK) = PZZ(:,JK)-PZS(:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END DO CALL MZM_PHY(D,PRHODJ,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = ZWORK1(IIJB:IIJE,1:IKT)*ZF_LEONARD(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = ZWORK1(:,:)*ZF_LEONARD(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL GZ_W_M_PHY(D,ZWORK2,PDZZ,ZWORK3) !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) - WHERE ( (ZCLD_THOLD(IIJB:IIJE,1:IKT) >= TURBN%XCLDTHOLD) .AND. ( ZALT(IIJB:IIJE,1:IKT) >= TURBN%XALTHGRAD) ) - ZRWTHL(IIJB:IIJE,1:IKT) = -ZWORK3(IIJB:IIJE,1:IKT) - PTHLP(IIJB:IIJE,1:IKT)=PTHLM(IIJB:IIJE,1:IKT)+PTSTEP*ZRWTHL(IIJB:IIJE,1:IKT)/PRHODJ(IIJB:IIJE,1:IKT) + WHERE ( (ZCLD_THOLD(:,:) >= TURBN%XCLDTHOLD) .AND. ( ZALT(:,:) >= TURBN%XALTHGRAD) ) + ZRWTHL(:,:) = -ZWORK3(:,:) + PTHLP(:,:)=PTHLM(:,:)+PTSTEP*ZRWTHL(:,:)/PRHODJ(:,:) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWORK1(IIJB:IIJE,1:IKT) = PTHLP(IIJB:IIJE,1:IKT) - PTHLM(IIJB:IIJE,1:IKT) +ZWORK1(:,:) = PTHLP(:,:) - PTHLM(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL DZM_PHY(D,ZWORK1,ZWORK2) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PRTHLS(IIJB:IIJE,1:IKT)= PRTHLS(IIJB:IIJE,1:IKT) + ZRWTHL(IIJB:IIJE,1:IKT) +PRTHLS(:,:)= PRTHLS(:,:) + ZRWTHL(:,:) ! !* 2.2 Partial Thermal Production ! ! Conservative potential temperature flux : ! ! -ZFLXZ(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + TURBN%XIMPL * ZDFDDTDZ(IIJB:IIJE,1:IKT) * & - ZWORK2(IIJB:IIJE,1:IKT)/ PDZZ(IIJB:IIJE,1:IKT) +ZFLXZ(:,:) = ZF(:,:) + TURBN%XIMPL * ZDFDDTDZ(:,:) * & + ZWORK2(:,:)/ PDZZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! ! replace the flux by the Leonard terms IF (TURBN%LLEONARD) THEN !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) - WHERE ( (ZCLD_THOLD(IIJB:IIJE,1:IKT) >= TURBN%XCLDTHOLD) .AND. ( ZALT(IIJB:IIJE,1:IKT) >= TURBN%XALTHGRAD) ) - ZFLXZ(IIJB:IIJE,1:IKT) = ZF_LEONARD(IIJB:IIJE,1:IKT) + WHERE ( (ZCLD_THOLD(:,:) >= TURBN%XCLDTHOLD) .AND. ( ZALT(:,:) >= TURBN%XALTHGRAD) ) + ZFLXZ(:,:) = ZF_LEONARD(:,:) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! IF (OOCEAN) THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKE+1) = ZFLXZ(IIJB:IIJE,IKE) + ZFLXZ(:,IKE+1) = ZFLXZ(:,IKE) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKA) = ZFLXZ(IIJB:IIJE,IKB) + ZFLXZ(:,IKA) = ZFLXZ(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF ! @@ -669,25 +669,25 @@ IF ( OFLYER ) THEN ! DO JK = IKTB + 1, IKTE - 1 !$mnh_expand_array(JIJ=IIJB:IIJE) - PWTH(IIJB:IIJE,JK)=0.5*(ZFLXZ(IIJB:IIJE,JK)+ZFLXZ(IIJB:IIJE,JK+IKL)) + PWTH(:,JK)=0.5*(ZFLXZ(:,JK)+ZFLXZ(:,JK+IKL)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! !$mnh_expand_array(JIJ=IIJB:IIJE) - PWTH(IIJB:IIJE,IKB)=0.5*(ZFLXZ(IIJB:IIJE,IKB)+ZFLXZ(IIJB:IIJE,IKB+IKL)) + PWTH(:,IKB)=0.5*(ZFLXZ(:,IKB)+ZFLXZ(:,IKB+IKL)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! IF (OOCEAN) THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - PWTH(IIJB:IIJE,IKE)=0.5*(ZFLXZ(IIJB:IIJE,IKE)+ZFLXZ(IIJB:IIJE,IKE+IKL)) - PWTH(IIJB:IIJE,IKA)=0. - PWTH(IIJB:IIJE,IKU)=PWTH(IIJB:IIJE,IKE)! not used + PWTH(:,IKE)=0.5*(ZFLXZ(:,IKE)+ZFLXZ(:,IKE+IKL)) + PWTH(:,IKA)=0. + PWTH(:,IKU)=PWTH(:,IKE)! not used !$mnh_end_expand_array(JIJ=IIJB:IIJE) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE) - PWTH(IIJB:IIJE,IKA)=0.5*(ZFLXZ(IIJB:IIJE,IKA)+ZFLXZ(IIJB:IIJE,IKA+IKL)) - PWTH(IIJB:IIJE,IKE)=PWTH(IIJB:IIJE,IKE-IKL) - PWTH(IIJB:IIJE,IKU)=0. + PWTH(:,IKA)=0.5*(ZFLXZ(:,IKA)+ZFLXZ(:,IKA+IKL)) + PWTH(:,IKE)=PWTH(:,IKE-IKL) + PWTH(:,IKU)=0. !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF END IF @@ -712,25 +712,25 @@ END IF IF (OOCEAN) THEN CALL MZF_PHY(D,ZFLXZ,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PTP(IIJB:IIJE,1:IKT)= CST%XG*CST%XALPHAOC * ZWORK1(IIJB:IIJE,1:IKT) + PTP(:,:)= CST%XG*CST%XALPHAOC * ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE IF (KRR /= 0) THEN CALL MZM_PHY(D,PETHETA,ZWORK1) - ZWORK1(IIJB:IIJE,1:IKT) = ZWORK1(IIJB:IIJE,1:IKT) * ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZWORK1(:,:) * ZFLXZ(:,:) CALL MZF_PHY(D,ZWORK1,ZWORK2) !ZWORK1 = MZF( MZM(PETHETA,IKA, IKU, IKL) * ZFLXZ,IKA, IKU, IKL ) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PTP(IIJB:IIJE,1:IKT) = PBETA(IIJB:IIJE,1:IKT) * ZWORK2(IIJB:IIJE,1:IKT) + PTP(:,:) = PBETA(:,:) * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) !$mnh_expand_array(JIJ=IIJB:IIJE) - PTP(IIJB:IIJE,IKB)= PBETA(IIJB:IIJE,IKB) * PETHETA(IIJB:IIJE,IKB) * & - 0.5 * ( ZFLXZ(IIJB:IIJE,IKB) + ZFLXZ(IIJB:IIJE,IKB+IKL) ) + PTP(:,IKB)= PBETA(:,IKB) * PETHETA(:,IKB) * & + 0.5 * ( ZFLXZ(:,IKB) + ZFLXZ(:,IKB+IKL) ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ELSE CALL MZF_PHY(D,ZFLXZ,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PTP(IIJB:IIJE,1:IKT)= PBETA(IIJB:IIJE,1:IKT) * ZWORK1(IIJB:IIJE,1:IKT) + PTP(:,:)= PBETA(:,:) * ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF END IF @@ -739,16 +739,16 @@ END IF ! CALL MZM_PHY(D,PETHETA,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PWTHV(IIJB:IIJE,1:IKT) = ZWORK1(IIJB:IIJE,1:IKT) * ZFLXZ(IIJB:IIJE,1:IKT) +PWTHV(:,:) = ZWORK1(:,:) * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) !$mnh_expand_array(JIJ=IIJB:IIJE) -PWTHV(IIJB:IIJE,IKB) = PETHETA(IIJB:IIJE,IKB) * ZFLXZ(IIJB:IIJE,IKB) +PWTHV(:,IKB) = PETHETA(:,IKB) * ZFLXZ(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! IF (OOCEAN) THEN ! temperature contribution to Buy flux !$mnh_expand_array(JIJ=IIJB:IIJE) - PWTHV(IIJB:IIJE,IKE) = PETHETA(IIJB:IIJE,IKE) * ZFLXZ(IIJB:IIJE,IKE) + PWTHV(:,IKE) = PETHETA(:,IKE) * ZFLXZ(:,IKE) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF !* 2.3 Partial vertical divergence of the < Rc w > flux @@ -756,23 +756,23 @@ END IF IF(HPROGRAM/='AROME ') THEN IF ( KRRL >= 1 ) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZFLXZ(IIJB:IIJE,1:IKT)/PDZZ(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZFLXZ(:,:)/PDZZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL DZF_PHY(D,ZWORK1,ZWORK2) IF ( KRRI >= 1 ) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PRRS(IIJB:IIJE,1:IKT,2) = PRRS(IIJB:IIJE,1:IKT,2) - & - PRHODJ(IIJB:IIJE,1:IKT)*PATHETA(IIJB:IIJE,1:IKT)*2.*PSRCM(IIJB:IIJE,1:IKT)& - *ZWORK2(IIJB:IIJE,1:IKT) *(1.0-PFRAC_ICE(IIJB:IIJE,1:IKT)) - PRRS(IIJB:IIJE,1:IKT,4) = PRRS(IIJB:IIJE,1:IKT,4) - & - PRHODJ(IIJB:IIJE,1:IKT)*PATHETA(IIJB:IIJE,1:IKT)*2.*PSRCM(IIJB:IIJE,1:IKT)& - * ZWORK2(IIJB:IIJE,1:IKT)*PFRAC_ICE(IIJB:IIJE,1:IKT) + PRRS(:,:,2) = PRRS(:,:,2) - & + PRHODJ(:,:)*PATHETA(:,:)*2.*PSRCM(:,:)& + *ZWORK2(:,:) *(1.0-PFRAC_ICE(:,:)) + PRRS(:,:,4) = PRRS(:,:,4) - & + PRHODJ(:,:)*PATHETA(:,:)*2.*PSRCM(:,:)& + * ZWORK2(:,:)*PFRAC_ICE(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PRRS(IIJB:IIJE,1:IKT,2) = PRRS(IIJB:IIJE,1:IKT,2) - & - PRHODJ(IIJB:IIJE,1:IKT)*PATHETA(IIJB:IIJE,1:IKT)*2.*PSRCM(IIJB:IIJE,1:IKT)& - *ZWORK2(IIJB:IIJE,1:IKT) + PRRS(:,:,2) = PRRS(:,:,2) - & + PRHODJ(:,:)*PATHETA(:,:)*2.*PSRCM(:,:)& + *ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF END IF @@ -788,39 +788,39 @@ IF (TLES%LLES_CALL) THEN CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_WThl ) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = PWM(IIJB:IIJE,1:IKT)*ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = PWM(:,:)*ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK2,ZWORK3) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK3, TLES%X_LES_RES_W_SBG_WThl ) ! CALL GZ_W_M_PHY(D,PWM,PDZZ,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK3(IIJB:IIJE,1:IKT) = ZWORK2(IIJB:IIJE,1:IKT) * ZWORK1(IIJB:IIJE,1:IKT) + ZWORK3(:,:) = ZWORK2(:,:) * ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK3, TLES%X_LES_RES_ddxa_W_SBG_UaThl ) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = PDTH_DZ(IIJB:IIJE,1:IKT)*ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = PDTH_DZ(:,:)*ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK2,ZWORK3) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK3, TLES%X_LES_RES_ddxa_Thl_SBG_UaThl ) ! CALL MZM_PHY(D,PETHETA,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK3(IIJB:IIJE,1:IKT) = ZWORK2(IIJB:IIJE,1:IKT) * ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK3(:,:) = ZWORK2(:,:) * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK3,ZWORK4) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK4, TLES%X_LES_SUBGRID_WThv , .TRUE. ) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = -CSTURB%XCTP*PSQRT_TKE(IIJB:IIJE,1:IKT)/PLM(IIJB:IIJE,1:IKT) & - *ZWORK1(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = -CSTURB%XCTP*PSQRT_TKE(:,:)/PLM(:,:) & + *ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2, TLES%X_LES_SUBGRID_ThlPz ) ! IF (KRR>=1) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = PDR_DZ(IIJB:IIJE,1:IKT)*ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = PDR_DZ(:,:)*ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK2,ZWORK3) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK3, TLES%X_LES_RES_ddxa_Rt_SBG_UaThl ) @@ -829,19 +829,19 @@ IF (TLES%LLES_CALL) THEN !* diagnostic of mixing coefficient for heat CALL DZM_PHY(D,PTHLP,ZA) !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) - WHERE (ZA(IIJB:IIJE,1:IKT)==0.) - ZA(IIJB:IIJE,1:IKT)=1.E-6 + WHERE (ZA(:,:)==0.) + ZA(:,:)=1.E-6 END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZA(IIJB:IIJE,1:IKT) = - ZFLXZ(IIJB:IIJE,1:IKT) / ZA(IIJB:IIJE,1:IKT) * PDZZ(IIJB:IIJE,1:IKT) + ZA(:,:) = - ZFLXZ(:,:) / ZA(:,:) * PDZZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) !$mnh_expand_array(JIJ=IIJB:IIJE) - ZA(IIJB:IIJE,IKB) = CSTURB%XCSHF*PPHI3(IIJB:IIJE,IKB)*ZKEFF(IIJB:IIJE,IKB) + ZA(:,IKB) = CSTURB%XCSHF*PPHI3(:,IKB)*ZKEFF(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL MZF_PHY(D,ZA,ZA) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZA(IIJB:IIJE,1:IKT) = MIN(MAX(ZA(IIJB:IIJE,1:IKT),-1000.),1000.) + ZA(:,:) = MIN(MAX(ZA(:,:),-1000.),1000.) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZA, TLES%X_LES_SUBGRID_Kh ) ! @@ -869,15 +869,15 @@ IF (KRR /= 0) THEN CALL DZM_PHY(D,PRM(:,:,1),ZWORK1) IF (TURBN%LHARAT) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = -ZKEFF(IIJB:IIJE,1:IKT)*ZWORK1(IIJB:IIJE,1:IKT)/PDZZ(IIJB:IIJE,1:IKT) - ZDFDDRDZ(IIJB:IIJE,1:IKT) = -ZKEFF(IIJB:IIJE,1:IKT) + ZF(:,:) = -ZKEFF(:,:)*ZWORK1(:,:)/PDZZ(:,:) + ZDFDDRDZ(:,:) = -ZKEFF(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE CALL D_PSI3DRDZ_O_DDRDZ(D,CSTURB,PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,TURBN%CTURBDIM,GUSERV,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = -CSTURB%XCSHF*PPSI3(IIJB:IIJE,1:IKT)*ZKEFF(IIJB:IIJE,1:IKT)& - *ZWORK1(IIJB:IIJE,1:IKT)/PDZZ(IIJB:IIJE,1:IKT) - ZDFDDRDZ(IIJB:IIJE,1:IKT) = -CSTURB%XCSHF*ZKEFF(IIJB:IIJE,1:IKT)*ZWORK2(IIJB:IIJE,1:IKT) + ZF(:,:) = -CSTURB%XCSHF*PPSI3(:,:)*ZKEFF(:,:)& + *ZWORK1(:,:)/PDZZ(:,:) + ZDFDDRDZ(:,:) = -CSTURB%XCSHF*ZKEFF(:,:)*ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ENDIF ! @@ -888,9 +888,9 @@ IF (KRR /= 0) THEN CALL MYF_PHY(D,PHGRAD(:,:,2),ZWORK3) ! GY_W_VW(PWM) CALL MZM_PHY(D,PHGRAD(:,:,6),ZWORK4) ! GY_M_M(PRM) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF_LEONARD(IIJB:IIJE,1:IKT)= TURBN%XCOEFHGRADTHL*PDXX(IIJB:IIJE,1:IKT)*PDYY(IIJB:IIJE,1:IKT)/12.0*( & - ZWORK1(IIJB:IIJE,1:IKT)*ZWORK2(IIJB:IIJE,1:IKT) & - + ZWORK3(IIJB:IIJE,1:IKT)*ZWORK4(IIJB:IIJE,1:IKT)) + ZF_LEONARD(:,:)= TURBN%XCOEFHGRADTHL*PDXX(:,:)*PDYY(:,:)/12.0*( & + ZWORK1(:,:)*ZWORK2(:,:) & + + ZWORK3(:,:)*ZWORK4(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -903,9 +903,9 @@ IF (KRR /= 0) THEN & PBLL_O_E,PEMOIST,ZKEFF,PTKEM,ZWORK1) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT)= ZF(IIJB:IIJE,1:IKT) + Z3RDMOMENT(IIJB:IIJE,1:IKT) * PFWR(IIJB:IIJE,1:IKT) - ZDFDDRDZ(IIJB:IIJE,1:IKT) = ZDFDDRDZ(IIJB:IIJE,1:IKT) + ZWORK1(IIJB:IIJE,1:IKT) & - * PFWR(IIJB:IIJE,1:IKT) + ZF(:,:)= ZF(:,:) + Z3RDMOMENT(:,:) * PFWR(:,:) + ZDFDDRDZ(:,:) = ZDFDDRDZ(:,:) + ZWORK1(:,:) & + * PFWR(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -917,10 +917,10 @@ IF (KRR /= 0) THEN & PREDTH1,PD,PBLL_O_E,PEMOIST,ZWORK2) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + Z3RDMOMENT(IIJB:IIJE,1:IKT) & - * ZWORK1(IIJB:IIJE,1:IKT) - ZDFDDRDZ(IIJB:IIJE,1:IKT) = ZDFDDRDZ(IIJB:IIJE,1:IKT) + ZWORK2(IIJB:IIJE,1:IKT) & - * ZWORK1(IIJB:IIJE,1:IKT) + ZF(:,:) = ZF(:,:) + Z3RDMOMENT(:,:) & + * ZWORK1(:,:) + ZDFDDRDZ(:,:) = ZDFDDRDZ(:,:) + ZWORK2(:,:) & + * ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -932,9 +932,9 @@ IF (KRR /= 0) THEN & PD,ZKEFF,PTKEM,PBLL_O_E,PETHETA,ZWORK2) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + ZWORK1(IIJB:IIJE,1:IKT) * PFWTH(IIJB:IIJE,1:IKT) - ZDFDDRDZ(IIJB:IIJE,1:IKT) = ZDFDDRDZ(IIJB:IIJE,1:IKT) + ZWORK2(IIJB:IIJE,1:IKT) & - * PFWTH(IIJB:IIJE,1:IKT) + ZF(:,:) = ZF(:,:) + ZWORK1(:,:) * PFWTH(:,:) + ZDFDDRDZ(:,:) = ZDFDDRDZ(:,:) + ZWORK2(:,:) & + * PFWTH(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -947,9 +947,9 @@ IF (KRR /= 0) THEN &ZKEFF,PTKEM,PSQRT_TKE,PBLL_O_E,PBETA,PLEPS,PETHETA,ZWORK3) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + ZWORK2(IIJB:IIJE,1:IKT) * ZWORK1(IIJB:IIJE,1:IKT) - ZDFDDRDZ(IIJB:IIJE,1:IKT) = ZDFDDRDZ(IIJB:IIJE,1:IKT) + ZWORK3(IIJB:IIJE,1:IKT) & - * ZWORK1(IIJB:IIJE,1:IKT) + ZF(:,:) = ZF(:,:) + ZWORK2(:,:) * ZWORK1(:,:) + ZDFDDRDZ(:,:) = ZDFDDRDZ(:,:) + ZWORK3(:,:) & + * ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -962,10 +962,10 @@ IF (KRR /= 0) THEN & PREDTH1,PD,PBLL_O_E,PEMOIST,ZWORK2) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZF(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) + Z3RDMOMENT(IIJB:IIJE,1:IKT) & - * ZWORK1(IIJB:IIJE,1:IKT) - ZDFDDRDZ(IIJB:IIJE,1:IKT) = ZDFDDRDZ(IIJB:IIJE,1:IKT) + ZWORK2(IIJB:IIJE,1:IKT) & - * ZWORK1(IIJB:IIJE,1:IKT) + ZF(:,:) = ZF(:,:) + Z3RDMOMENT(:,:) & + * ZWORK1(:,:) + ZDFDDRDZ(:,:) = ZDFDDRDZ(:,:) + ZWORK2(:,:) & + * ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -973,7 +973,7 @@ IF (KRR /= 0) THEN IF (OOCEAN) THEN ! General ocean case ! salinity/evap effect to be added later !!!!! - ZF(IIJB:IIJE,IKE) = 0. + ZF(:,IKE) = 0. ELSE ! atmosp case ! atmosp bottom !* in 3DIM case, a part of the flux goes vertically, and another goes horizontally @@ -983,21 +983,21 @@ IF (KRR /= 0) THEN ! IF (TURBN%CTURBDIM=='3DIM') THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - ZF(IIJB:IIJE,IKB) = ( TURBN%XIMPL*PSFRP(IIJB:IIJE) + PEXPL*PSFRM(IIJB:IIJE) ) & - * PDIRCOSZW(IIJB:IIJE) & - * 0.5 * (1. + PRHODJ(IIJB:IIJE,IKA) / PRHODJ(IIJB:IIJE,IKB)) + ZF(:,IKB) = ( TURBN%XIMPL*PSFRP(:) + PEXPL*PSFRM(:) ) & + * PDIRCOSZW(:) & + * 0.5 * (1. + PRHODJ(:,IKA) / PRHODJ(:,IKB)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE) - ZF(IIJB:IIJE,IKB) = ( TURBN%XIMPL*PSFRP(IIJB:IIJE) + PEXPL*PSFRM(IIJB:IIJE) ) & - / PDIRCOSZW(IIJB:IIJE) & - * 0.5 * (1. + PRHODJ(IIJB:IIJE,IKA) / PRHODJ(IIJB:IIJE,IKB)) + ZF(:,IKB) = ( TURBN%XIMPL*PSFRP(:) + PEXPL*PSFRM(:) ) & + / PDIRCOSZW(:) & + * 0.5 * (1. + PRHODJ(:,IKA) / PRHODJ(:,IKB)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF ! atmos top #ifdef REPRO48 #else - ZF(IIJB:IIJE,IKE+1)=0. + ZF(:,IKE+1)=0. #endif END IF ! Compute the split conservative potential temperature at t+deltat @@ -1007,7 +1007,7 @@ IF (KRR /= 0) THEN ! Compute the equivalent tendency for the conservative mixing ratio ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZRWRNP(IIJB:IIJE,1:IKT) = PRHODJ(IIJB:IIJE,1:IKT)*(PRP(IIJB:IIJE,1:IKT)-PRM(IIJB:IIJE,1:IKT,1))& + ZRWRNP(:,:) = PRHODJ(:,:)*(PRP(:,:)-PRM(:,:,1))& /PTSTEP !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! @@ -1015,70 +1015,70 @@ IF (KRR /= 0) THEN IF (TURBN%LLEONARD) THEN CALL MZM_PHY(D,PRHODJ,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = ZWORK1(IIJB:IIJE,1:IKT)*ZF_LEONARD(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = ZWORK1(:,:)*ZF_LEONARD(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL GZ_W_M_PHY(D,ZWORK2,PDZZ,ZWORK3) !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) - WHERE ( (ZCLD_THOLD(IIJB:IIJE,1:IKT) >= TURBN%XCLDTHOLD ) .AND. ( ZALT(IIJB:IIJE,1:IKT) >= TURBN%XALTHGRAD ) ) - ZRWRNP(IIJB:IIJE,1:IKT) = -ZWORK3(IIJB:IIJE,1:IKT) - PRP(IIJB:IIJE,1:IKT)=PRM(IIJB:IIJE,1:IKT,1)+PTSTEP*ZRWTHL(IIJB:IIJE,1:IKT)/PRHODJ(IIJB:IIJE,1:IKT) + WHERE ( (ZCLD_THOLD(:,:) >= TURBN%XCLDTHOLD ) .AND. ( ZALT(:,:) >= TURBN%XALTHGRAD ) ) + ZRWRNP(:,:) = -ZWORK3(:,:) + PRP(:,:)=PRM(:,:,1)+PTSTEP*ZRWTHL(:,:)/PRHODJ(:,:) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = PRP(IIJB:IIJE,1:IKT) - PRM(IIJB:IIJE,1:IKT,1) + ZWORK1(:,:) = PRP(:,:) - PRM(:,:,1) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL DZM_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PRRS(IIJB:IIJE,1:IKT,1) = PRRS(IIJB:IIJE,1:IKT,1) + ZRWRNP(IIJB:IIJE,1:IKT) + PRRS(:,:,1) = PRRS(:,:,1) + ZRWRNP(:,:) ! !* 3.2 Complete thermal production ! ! cons. mixing ratio flux : ! - ZFLXZ(IIJB:IIJE,1:IKT) = ZF(IIJB:IIJE,1:IKT) & - + TURBN%XIMPL * ZDFDDRDZ(IIJB:IIJE,1:IKT) * ZWORK2(IIJB:IIJE,1:IKT) / PDZZ(IIJB:IIJE,1:IKT) + ZFLXZ(:,:) = ZF(:,:) & + + TURBN%XIMPL * ZDFDDRDZ(:,:) * ZWORK2(:,:) / PDZZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! ! replace the flux by the Leonard terms above ZALT and ZCLD_THOLD IF (TURBN%LLEONARD) THEN !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) - WHERE ( (ZCLD_THOLD(IIJB:IIJE,1:IKT) >= TURBN%XCLDTHOLD ) .AND. ( ZALT(IIJB:IIJE,1:IKT) >= TURBN%XALTHGRAD ) ) - ZFLXZ(IIJB:IIJE,1:IKT) = ZF_LEONARD(IIJB:IIJE,1:IKT) + WHERE ( (ZCLD_THOLD(:,:) >= TURBN%XCLDTHOLD ) .AND. ( ZALT(:,:) >= TURBN%XALTHGRAD ) ) + ZFLXZ(:,:) = ZF_LEONARD(:,:) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKA) = ZFLXZ(IIJB:IIJE,IKB) + ZFLXZ(:,IKA) = ZFLXZ(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! IF (OOCEAN) THEN - ZFLXZ(IIJB:IIJE,IKU) = ZFLXZ(IIJB:IIJE,IKE) + ZFLXZ(:,IKU) = ZFLXZ(:,IKE) END IF ! IF ( OFLYER ) THEN DO JK=IKTB+1,IKTE-1 !$mnh_expand_array(JIJ=IIJB:IIJE) - PWRC(IIJB:IIJE,JK)=0.5*(ZFLXZ(IIJB:IIJE,JK)+ZFLXZ(IIJB:IIJE,JK+IKL)) + PWRC(:,JK)=0.5*(ZFLXZ(:,JK)+ZFLXZ(:,JK+IKL)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO !$mnh_expand_array(JIJ=IIJB:IIJE) - PWRC(IIJB:IIJE,IKB)=0.5*(ZFLXZ(IIJB:IIJE,IKB)+ZFLXZ(IIJB:IIJE,IKB+IKL)) + PWRC(:,IKB)=0.5*(ZFLXZ(:,IKB)+ZFLXZ(:,IKB+IKL)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! IF (OOCEAN) THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - PWRC(IIJB:IIJE,IKE)=0.5*(ZFLXZ(IIJB:IIJE,IKE)+ZFLXZ(IIJB:IIJE,IKE+IKL)) - PWRC(IIJB:IIJE,IKA)=0. - PWRC(IIJB:IIJE,IKE+1)=ZFLXZ(IIJB:IIJE,IKE+1) + PWRC(:,IKE)=0.5*(ZFLXZ(:,IKE)+ZFLXZ(:,IKE+IKL)) + PWRC(:,IKA)=0. + PWRC(:,IKE+1)=ZFLXZ(:,IKE+1) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE) - PWRC(IIJB:IIJE,IKA)=0.5*(ZFLXZ(IIJB:IIJE,IKA)+ZFLXZ(IIJB:IIJE,IKA+IKL)) - PWRC(IIJB:IIJE,IKE)=PWRC(IIJB:IIJE,IKE-IKL) - PWRC(IIJB:IIJE,IKU)=0. + PWRC(:,IKA)=0.5*(ZFLXZ(:,IKA)+ZFLXZ(:,IKA+IKL)) + PWRC(:,IKE)=PWRC(:,IKE-IKL) + PWRC(:,IKU)=0. !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF END IF @@ -1103,24 +1103,24 @@ IF (KRR /= 0) THEN IF (OOCEAN) THEN CALL MZF_PHY(D,ZFLXZ,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZA(IIJB:IIJE,1:IKT)= -CST%XG*CST%XBETAOC * ZWORK1(IIJB:IIJE,1:IKT) + ZA(:,:)= -CST%XG*CST%XBETAOC * ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE CALL MZM_PHY(D,PEMOIST,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = ZWORK1(IIJB:IIJE,1:IKT) * ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = ZWORK1(:,:) * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK1,ZWORK2) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZA(IIJB:IIJE,1:IKT) = PBETA(IIJB:IIJE,1:IKT) * ZWORK2(IIJB:IIJE,1:IKT) + ZA(:,:) = PBETA(:,:) * ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) !$mnh_expand_array(JIJ=IIJB:IIJE) - ZA(IIJB:IIJE,IKB) = PBETA(IIJB:IIJE,IKB) * PEMOIST(IIJB:IIJE,IKB) * & - 0.5 * ( ZFLXZ(IIJB:IIJE,IKB) + ZFLXZ(IIJB:IIJE,IKB+IKL) ) + ZA(:,IKB) = PBETA(:,IKB) * PEMOIST(:,IKB) * & + 0.5 * ( ZFLXZ(:,IKB) + ZFLXZ(:,IKB+IKL) ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PTP(IIJB:IIJE,1:IKT) = PTP(IIJB:IIJE,1:IKT) + ZA(IIJB:IIJE,1:IKT) + PTP(:,:) = PTP(:,:) + ZA(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -1128,14 +1128,14 @@ IF (KRR /= 0) THEN ! CALL MZM_PHY(D,PEMOIST,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PWTHV(IIJB:IIJE,1:IKT)=PWTHV(IIJB:IIJE,1:IKT) + ZWORK1(IIJB:IIJE,1:IKT) * ZFLXZ(IIJB:IIJE,1:IKT) + PWTHV(:,:)=PWTHV(:,:) + ZWORK1(:,:) * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) !$mnh_expand_array(JIJ=IIJB:IIJE) - PWTHV(IIJB:IIJE,IKB) = PWTHV(IIJB:IIJE,IKB) + PEMOIST(IIJB:IIJE,IKB) * ZFLXZ(IIJB:IIJE,IKB) + PWTHV(:,IKB) = PWTHV(:,IKB) + PEMOIST(:,IKB) * ZFLXZ(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) IF (OOCEAN) THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - PWTHV(IIJB:IIJE,IKE) = PWTHV(IIJB:IIJE,IKE) + PEMOIST(IIJB:IIJE,IKE)* ZFLXZ(IIJB:IIJE,IKE) + PWTHV(:,IKE) = PWTHV(:,IKE) + PEMOIST(:,IKE)* ZFLXZ(:,IKE) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF ! @@ -1144,25 +1144,25 @@ IF (KRR /= 0) THEN IF(HPROGRAM/='AROME ') THEN IF ( KRRL >= 1 ) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = ZFLXZ(IIJB:IIJE,1:IKT) / & - PDZZ(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = ZFLXZ(:,:) / & + PDZZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL DZF_PHY(D,ZWORK2,ZWORK1) ! IF ( KRRI >= 1 ) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PRRS(IIJB:IIJE,1:IKT,2) = PRRS(IIJB:IIJE,1:IKT,2) - & - PRHODJ(IIJB:IIJE,1:IKT)*PAMOIST(IIJB:IIJE,1:IKT)*2.*PSRCM(IIJB:IIJE,1:IKT)& - *ZWORK1(IIJB:IIJE,1:IKT) *(1.0-PFRAC_ICE(IIJB:IIJE,1:IKT)) - PRRS(IIJB:IIJE,1:IKT,4) = PRRS(IIJB:IIJE,1:IKT,4) - & - PRHODJ(IIJB:IIJE,1:IKT)*PAMOIST(IIJB:IIJE,1:IKT)*2.*PSRCM(IIJB:IIJE,1:IKT)& - *ZWORK1(IIJB:IIJE,1:IKT) *PFRAC_ICE(IIJB:IIJE,1:IKT) + PRRS(:,:,2) = PRRS(:,:,2) - & + PRHODJ(:,:)*PAMOIST(:,:)*2.*PSRCM(:,:)& + *ZWORK1(:,:) *(1.0-PFRAC_ICE(:,:)) + PRRS(:,:,4) = PRRS(:,:,4) - & + PRHODJ(:,:)*PAMOIST(:,:)*2.*PSRCM(:,:)& + *ZWORK1(:,:) *PFRAC_ICE(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PRRS(IIJB:IIJE,1:IKT,2) = PRRS(IIJB:IIJE,1:IKT,2) - & - PRHODJ(IIJB:IIJE,1:IKT)*PAMOIST(IIJB:IIJE,1:IKT)*2.*PSRCM(IIJB:IIJE,1:IKT)& - *ZWORK1(IIJB:IIJE,1:IKT) + PRRS(:,:,2) = PRRS(:,:,2) - & + PRHODJ(:,:)*PAMOIST(:,:)*2.*PSRCM(:,:)& + *ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF END IF @@ -1178,39 +1178,39 @@ END IF CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1, TLES%X_LES_SUBGRID_WRt ) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = PWM(IIJB:IIJE,1:IKT)*ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = PWM(:,:)*ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK2,ZWORK3) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK3, TLES%X_LES_RES_W_SBG_WRt ) ! CALL GZ_W_M_PHY(D,PWM,PDZZ,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK3(IIJB:IIJE,1:IKT) = ZWORK2(IIJB:IIJE,1:IKT) * ZWORK1(IIJB:IIJE,1:IKT) + ZWORK3(:,:) = ZWORK2(:,:) * ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK3, TLES%X_LES_RES_ddxa_W_SBG_UaRt ) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = PDTH_DZ(IIJB:IIJE,1:IKT)*ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = PDTH_DZ(:,:)*ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK2,ZWORK3) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK3, TLES%X_LES_RES_ddxa_Thl_SBG_UaRt ) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = PDR_DZ(IIJB:IIJE,1:IKT)*ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = PDR_DZ(:,:)*ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK2,ZWORK3) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK3, TLES%X_LES_RES_ddxa_Rt_SBG_UaRt ) ! CALL MZM_PHY(D,PEMOIST,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK3(IIJB:IIJE,1:IKT) = ZWORK2(IIJB:IIJE,1:IKT) * ZFLXZ(IIJB:IIJE,1:IKT) + ZWORK3(:,:) = ZWORK2(:,:) * ZFLXZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZF_PHY(D,ZWORK3,ZWORK4) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK4, TLES%X_LES_SUBGRID_WThv , .TRUE. ) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = -CSTURB%XCTP*PSQRT_TKE(IIJB:IIJE,1:IKT)/PLM(IIJB:IIJE,1:IKT) & - *ZWORK1(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = -CSTURB%XCTP*PSQRT_TKE(:,:)/PLM(:,:) & + *ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2, TLES%X_LES_SUBGRID_RtPz ) CALL SECOND_MNH(ZTIME2) @@ -1234,41 +1234,41 @@ IF ( ((TURBN%LTURB_FLX .AND. TPFILE%LOPENED) .OR. TLES%LLES_CALL) .AND. (KRRL > ! With TURBN%LHARAT is true tke and length scales at half levels ! yet modify to use length scale and tke at half levels from vdfexcuhl !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = TURBN%XIMPL * PTHLP(IIJB:IIJE,1:IKT) + PEXPL * PTHLM(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = TURBN%XIMPL * PTHLP(:,:) + PEXPL * PTHLM(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL DZM_PHY(D,ZWORK1,ZWORK2) IF (TURBN%LHARAT) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZA(IIJB:IIJE,1:IKT) = ZWORK2(IIJB:IIJE,1:IKT)/ PDZZ(IIJB:IIJE,1:IKT) * & - (-PLM(IIJB:IIJE,1:IKT)*PSQRT_TKE(IIJB:IIJE,1:IKT)) + ZA(:,:) = ZWORK2(:,:)/ PDZZ(:,:) * & + (-PLM(:,:)*PSQRT_TKE(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = PLM(IIJB:IIJE,1:IKT)*PSQRT_TKE(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = PLM(:,:)*PSQRT_TKE(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZWORK3) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZA(IIJB:IIJE,1:IKT) = ZWORK2(IIJB:IIJE,1:IKT)/ PDZZ(IIJB:IIJE,1:IKT) * & - (-PPHI3(IIJB:IIJE,1:IKT)*ZWORK3(IIJB:IIJE,1:IKT)) * CSTURB%XCSHF + ZA(:,:) = ZWORK2(:,:)/ PDZZ(:,:) * & + (-PPHI3(:,:)*ZWORK3(:,:)) * CSTURB%XCSHF !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ENDIF !$mnh_expand_array(JIJ=IIJB:IIJE) - ZA(IIJB:IIJE,IKB) = (TURBN%XIMPL*PSFTHP(IIJB:IIJE) + PEXPL*PSFTHM(IIJB:IIJE)) * PDIRCOSZW(IIJB:IIJE) + ZA(:,IKB) = (TURBN%XIMPL*PSFTHP(:) + PEXPL*PSFTHM(:)) * PDIRCOSZW(:) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! ! compute <w Rc> !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = PAMOIST(IIJB:IIJE,1:IKT) * 2.* PSRCM(IIJB:IIJE,1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = PATHETA(IIJB:IIJE,1:IKT) * 2.* PSRCM(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = PAMOIST(:,:) * 2.* PSRCM(:,:) + ZWORK2(:,:) = PATHETA(:,:) * 2.* PSRCM(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MZM_PHY(D,ZWORK1,ZWORK3) CALL MZM_PHY(D,ZWORK2,ZWORK4) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFLXZ(IIJB:IIJE,1:IKT) = ZWORK3(IIJB:IIJE,1:IKT)* ZFLXZ(IIJB:IIJE,1:IKT) & - + ZWORK4(IIJB:IIJE,1:IKT)* ZA(IIJB:IIJE,1:IKT) + ZFLXZ(:,:) = ZWORK3(:,:)* ZFLXZ(:,:) & + + ZWORK4(:,:)* ZA(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKA) = ZFLXZ(IIJB:IIJE,IKB) + ZFLXZ(:,IKA) = ZFLXZ(:,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! ! store the liquid water mixing ratio vertical flux diff --git a/src/PHYEX/turb/mode_update_iiju_phy.f90 b/src/PHYEX/turb/mode_update_iiju_phy.f90 index c67545befe1ec9fba984d2ea008431bb8692963c..92686e36ba21604116206a7fd8ba72108deb1fd0 100644 --- a/src/PHYEX/turb/mode_update_iiju_phy.f90 +++ b/src/PHYEX/turb/mode_update_iiju_phy.f90 @@ -64,8 +64,8 @@ IIU=D%NIT IJU=D%NJT IKT=D%NKT ! -PVAR(IIU,IJB:IJE,1:IKT) = PVAR(IIU-1,IJB:IJE,1:IKT) -PVAR(IIB:IIE,IJU,1:IKT) = PVAR(IIB:IIE,IJU-1,1:IKT) +PVAR(IIU,IJB:IJE,:) = PVAR(IIU-1,IJB:IJE,:) +PVAR(IIB:IIE,IJU,:) = PVAR(IIB:IIE,IJU-1,:) ! IF (LHOOK) CALL DR_HOOK('UPDATE_IIJU_PHY',1,ZHOOK_HANDLE) END SUBROUTINE UPDATE_IIJU_PHY diff --git a/src/PHYEX/turb/shallow_mf.f90 b/src/PHYEX/turb/shallow_mf.f90 index 0eaa8b4056af502c876fde0cc385a7c7f277c8ec..85c85e6fcedb012268c91cb1c6788cb91e49ec5e 100644 --- a/src/PHYEX/turb/shallow_mf.f90 +++ b/src/PHYEX/turb/shallow_mf.f90 @@ -213,13 +213,13 @@ ENDIF ZFRAC_ICE(:,:) = 0. IF (KRR.GE.4) THEN !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) - WHERE(PRM(IIJB:IIJE,1:IKT,2)+PRM(IIJB:IIJE,1:IKT,4) > 1.E-20) - ZFRAC_ICE(IIJB:IIJE,1:IKT) = PRM(IIJB:IIJE,1:IKT,4) / (PRM(IIJB:IIJE,1:IKT,2)+PRM(IIJB:IIJE,1:IKT,4)) + WHERE(PRM(:,:,2)+PRM(:,:,4) > 1.E-20) + ZFRAC_ICE(:,:) = PRM(:,:,4) / (PRM(:,:,2)+PRM(:,:,4)) ENDWHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) ENDIF !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZWK(IIJB:IIJE,1:IKT)=PTHM(IIJB:IIJE,1:IKT)*PEXNM(IIJB:IIJE,1:IKT) +ZWK(:,:)=PTHM(:,:)*PEXNM(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL COMPUTE_FRAC_ICE(HFRAC_ICE,NEB,ZFRAC_ICE(:,:),ZWK(:,:), IERR(:,:)) @@ -230,8 +230,8 @@ CALL THL_RT_FROM_TH_R_MF(D, CST, KRR,KRRL,KRRI, & ! Virtual potential temperature at t-dt !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZTHVM(IIJB:IIJE,1:IKT) = PTHM(IIJB:IIJE,1:IKT)*& - & ((1.+CST%XRV / CST%XRD *PRM(IIJB:IIJE,1:IKT,1))/(1.+ZRTM(IIJB:IIJE,1:IKT))) +ZTHVM(:,:) = PTHM(:,:)*& + & ((1.+CST%XRV / CST%XRD *PRM(:,:,1))/(1.+ZRTM(:,:))) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! !!! 2. Compute updraft @@ -305,7 +305,7 @@ CALL COMPUTE_MF_CLOUD(D,CST,CSTURB,PARAMMF,TURBN%LSTATNW,& !!! ------------------------------------------------------------------------ ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZEMF_O_RHODREF(IIJB:IIJE,1:IKT)=PEMF(IIJB:IIJE,1:IKT)/PRHODREF(IIJB:IIJE,1:IKT) +ZEMF_O_RHODREF(:,:)=PEMF(:,:)/PRHODREF(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) IF ( PIMPL_MF > 1.E-10 ) THEN @@ -342,7 +342,7 @@ ENDIF IF(PRESENT(BUCONF)) THEN IF( BUCONF%LBUDGET_U ) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK(IIJB:IIJE,1:IKT)=PRHODJ(IIJB:IIJE,1:IKT)*PDUDT_MF(IIJB:IIJE,1:IKT) + ZWORK(:,:)=PRHODJ(:,:)*PDUDT_MF(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MXM_PHY(D, ZWORK, ZWORK2) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_U ), 'MAFL', ZWORK2) @@ -350,7 +350,7 @@ IF(PRESENT(BUCONF)) THEN ! IF( BUCONF%LBUDGET_V ) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK(IIJB:IIJE,1:IKT)=PRHODJ(IIJB:IIJE,1:IKT)*PDVDT_MF(IIJB:IIJE,1:IKT) + ZWORK(:,:)=PRHODJ(:,:)*PDVDT_MF(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL MYM_PHY(D, ZWORK, ZWORK2) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_V ), 'MAFL', ZWORK2) @@ -358,14 +358,14 @@ IF(PRESENT(BUCONF)) THEN ! IF( BUCONF%LBUDGET_TH ) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK(IIJB:IIJE,1:IKT)=PRHODJ(IIJB:IIJE,1:IKT)*PDTHLDT_MF(IIJB:IIJE,1:IKT) + ZWORK(:,:)=PRHODJ(:,:)*PDTHLDT_MF(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'MAFL', ZWORK) END IF ! IF( BUCONF%LBUDGET_RV ) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK(IIJB:IIJE,1:IKT)=PRHODJ(IIJB:IIJE,1:IKT)*PDRTDT_MF(IIJB:IIJE,1:IKT) + ZWORK(:,:)=PRHODJ(:,:)*PDRTDT_MF(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'MAFL', ZWORK) END IF @@ -374,13 +374,13 @@ IF(PRESENT(BUCONF)) THEN DO JSV=1,KSV IF (ONOMIXLG .AND. JSV >= KSV_LGBEG .AND. JSV<= KSV_LGEND) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK(IIJB:IIJE,1:IKT)=MAX(PRSVS(IIJB:IIJE,1:IKT,JSV) + PRHODJ(IIJB:IIJE,1:IKT)* & - PDSVDT_MF(IIJB:IIJE,1:IKT,JSV),PSVMIN(JSV)) - ZWORK(IIJB:IIJE,1:IKT)=PRSVS(IIJB:IIJE,1:IKT,JSV) - ZWORK(IIJB:IIJE,1:IKT) + ZWORK(:,:)=MAX(PRSVS(:,:,JSV) + PRHODJ(:,:)* & + PDSVDT_MF(:,:,JSV),PSVMIN(JSV)) + ZWORK(:,:)=PRSVS(:,:,JSV) - ZWORK(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK(IIJB:IIJE,1:IKT)=PRHODJ(IIJB:IIJE,1:IKT)*PDSVDT_MF(IIJB:IIJE,1:IKT,JSV) + ZWORK(:,:)=PRHODJ(:,:)*PDSVDT_MF(:,:,JSV) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + JSV), 'MAFL', ZWORK ) diff --git a/src/PHYEX/turb/shuman_mf.f90 b/src/PHYEX/turb/shuman_mf.f90 index 2c6dabccddf3662dc7daa62f9ac64b73912600ad..1ec7bc1ae92a1447a5d833aadc36bc26d5e0f563 100644 --- a/src/PHYEX/turb/shuman_mf.f90 +++ b/src/PHYEX/turb/shuman_mf.f90 @@ -137,12 +137,12 @@ IKL=D%NKL ! DO JK=2,IKT-1 !$mnh_expand_array(JIJ=IIJB:IIJE) - PMZF(IIJB:IIJE,JK) = 0.5*( PA(IIJB:IIJE,JK)+PA(IIJB:IIJE,JK+IKL) ) + PMZF(:,JK) = 0.5*( PA(:,JK)+PA(:,JK+IKL) ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO !$mnh_expand_array(JIJ=IIJB:IIJE) -PMZF(IIJB:IIJE,IKA) = 0.5*( PA(IIJB:IIJE,IKA)+PA(IIJB:IIJE,IKA+IKL) ) -PMZF(IIJB:IIJE,IKU) = PA(IIJB:IIJE,IKU) +PMZF(:,IKA) = 0.5*( PA(:,IKA)+PA(:,IKA+IKL) ) +PMZF(:,IKU) = PA(:,IKU) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !------------------------------------------------------------------------------- @@ -227,12 +227,12 @@ IKL=D%NKL ! DO JK=2,IKT-1 !$mnh_expand_array(JIJ=IIJB:IIJE) - PMZM(IIJB:IIJE,JK) = 0.5*( PA(IIJB:IIJE,JK)+PA(IIJB:IIJE,JK-IKL) ) + PMZM(:,JK) = 0.5*( PA(:,JK)+PA(:,JK-IKL) ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO !$mnh_expand_array(JIJ=IIJB:IIJE) -PMZM(IIJB:IIJE,IKA) = PA(IIJB:IIJE,IKA) -PMZM(IIJB:IIJE,IKU) = 0.5*( PA(IIJB:IIJE,IKU)+PA(IIJB:IIJE,IKU-IKL) ) +PMZM(:,IKA) = PA(:,IKA) +PMZM(:,IKU) = 0.5*( PA(:,IKU)+PA(:,IKU-IKL) ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !------------------------------------------------------------------------------- @@ -317,12 +317,12 @@ IKL=D%NKL ! DO JK=2,IKT-1 !$mnh_expand_array(JIJ=IIJB:IIJE) - PDZF(IIJB:IIJE,JK) = PA(IIJB:IIJE,JK+IKL) - PA(IIJB:IIJE,JK) + PDZF(:,JK) = PA(:,JK+IKL) - PA(:,JK) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO !$mnh_expand_array(JIJ=IIJB:IIJE) -PDZF(IIJB:IIJE,IKA) = PA(IIJB:IIJE,IKA+IKL) - PA(IIJB:IIJE,IKA) -PDZF(IIJB:IIJE,IKU) = 0. +PDZF(:,IKA) = PA(:,IKA+IKL) - PA(:,IKA) +PDZF(:,IKU) = 0. !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !------------------------------------------------------------------------------- @@ -407,12 +407,12 @@ IKL=D%NKL ! DO JK=2,IKT-1 !$mnh_expand_array(JIJ=IIJB:IIJE) - PDZM(IIJB:IIJE,JK) = PA(IIJB:IIJE,JK) - PA(IIJB:IIJE,JK-IKL) + PDZM(:,JK) = PA(:,JK) - PA(:,JK-IKL) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO !$mnh_expand_array(JIJ=IIJB:IIJE) -PDZM(IIJB:IIJE,IKA) = 0. -PDZM(IIJB:IIJE,IKU) = PA(IIJB:IIJE,IKU) - PA(IIJB:IIJE,IKU-IKL) +PDZM(:,IKA) = 0. +PDZM(:,IKU) = PA(:,IKU) - PA(:,IKU-IKL) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !------------------------------------------------------------------------------- @@ -497,12 +497,12 @@ IKL=D%NKL ! DO JK=2,IKT-1 !$mnh_expand_array(JIJ=IIJB:IIJE) - PGZ_M_W(IIJB:IIJE,JK) = (PY(IIJB:IIJE,JK) - PY(IIJB:IIJE,JK-IKL)) / PDZZ(IIJB:IIJE,JK) + PGZ_M_W(:,JK) = (PY(:,JK) - PY(:,JK-IKL)) / PDZZ(:,JK) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO !$mnh_expand_array(JIJ=IIJB:IIJE) -PGZ_M_W(IIJB:IIJE,IKA) = 0. -PGZ_M_W(IIJB:IIJE,IKU) = (PY(IIJB:IIJE,IKU) - PY(IIJB:IIJE,IKU-IKL)) / PDZZ(IIJB:IIJE,IKU) +PGZ_M_W(:,IKA) = 0. +PGZ_M_W(:,IKU) = (PY(:,IKU) - PY(:,IKU-IKL)) / PDZZ(:,IKU) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !------------------------------------------------------------------------------- diff --git a/src/PHYEX/turb/turb.f90 b/src/PHYEX/turb/turb.f90 index 3cf7afa999a48d7087cbd67d7c483183f9ed3804..4723c74e45b891368032c3f29db7cd879668eea6 100644 --- a/src/PHYEX/turb/turb.f90 +++ b/src/PHYEX/turb/turb.f90 @@ -534,12 +534,12 @@ ZRVORD= CST%XRV / CST%XRD ! !Copy data into ZTHLM and ZRM only if needed IF (TURBN%CTURBLEN=='BL89' .OR. TURBN%CTURBLEN=='RM17' .OR. TURBN%CTURBLEN=='HM21' .OR. TURBN%LRMC01) THEN - ZTHLM(IIJB:IIJE,1:IKT) = PTHLT(IIJB:IIJE,1:IKT) - ZRM(IIJB:IIJE,1:IKT,:) = PRT(IIJB:IIJE,1:IKT,:) + ZTHLM(:,:) = PTHLT(:,:) + ZRM(:,:,:) = PRT(:,:,:) END IF ! !Save LIMA scalar variables sources -ZRSVS(IIJB:IIJE,1:IKT,1:KSV)=PRSVS(IIJB:IIJE,1:IKT,1:KSV) +ZRSVS(:,:,1:KSV)=PRSVS(:,:,1:KSV) ! ! !---------------------------------------------------------------------------- @@ -550,19 +550,19 @@ ZRSVS(IIJB:IIJE,1:IKT,1:KSV)=PRSVS(IIJB:IIJE,1:IKT,1:KSV) !* 2.1 Cph at t ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZCP(IIJB:IIJE,1:IKT)=CST%XCPD +ZCP(:,:)=CST%XCPD ! -IF (KRR > 0) ZCP(IIJB:IIJE,1:IKT) = ZCP(IIJB:IIJE,1:IKT) + CST%XCPV * PRT(IIJB:IIJE,1:IKT,1) +IF (KRR > 0) ZCP(:,:) = ZCP(:,:) + CST%XCPV * PRT(:,:,1) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) DO JRR = 2,1+KRRL ! loop on the liquid components !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZCP(IIJB:IIJE,1:IKT) = ZCP(IIJB:IIJE,1:IKT) + CST%XCL * PRT(IIJB:IIJE,1:IKT,JRR) + ZCP(:,:) = ZCP(:,:) + CST%XCL * PRT(:,:,JRR) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END DO ! DO JRR = 2+KRRL,1+KRRL+KRRI ! loop on the solid components !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZCP(IIJB:IIJE,1:IKT) = ZCP(IIJB:IIJE,1:IKT) + CST%XCI * PRT(IIJB:IIJE,1:IKT,JRR) + ZCP(:,:) = ZCP(:,:) + CST%XCI * PRT(:,:,JRR) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END DO ! @@ -570,31 +570,31 @@ END DO ! IF (OOCEAN) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZEXN(IIJB:IIJE,1:IKT) = 1. + ZEXN(:,:) = 1. !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZEXN(IIJB:IIJE,1:IKT) = (PPABST(IIJB:IIJE,1:IKT)/CST%XP00) ** (CST%XRD/CST%XCPD) + ZEXN(:,:) = (PPABST(:,:)/CST%XP00) ** (CST%XRD/CST%XCPD) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! !* 2.3 dissipative heating coeff a t ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZCOEF_DISS(IIJB:IIJE,1:IKT) = 1/(ZCP(IIJB:IIJE,1:IKT) * ZEXN(IIJB:IIJE,1:IKT)) +ZCOEF_DISS(:,:) = 1/(ZCP(:,:) * ZEXN(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! ! -ZFRAC_ICE(IIJB:IIJE,1:IKT) = 0.0 -ZATHETA(IIJB:IIJE,1:IKT) = 0.0 -ZAMOIST(IIJB:IIJE,1:IKT) = 0.0 +ZFRAC_ICE(:,:) = 0.0 +ZATHETA(:,:) = 0.0 +ZAMOIST(:,:) = 0.0 ! IF (KRRL >=1) THEN ! !* 2.4 Temperature at t ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZT(IIJB:IIJE,1:IKT) = PTHLT(IIJB:IIJE,1:IKT) * ZEXN(IIJB:IIJE,1:IKT) + ZT(:,:) = PTHLT(:,:) * ZEXN(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! !* 2.5 Lv/Cph/Exn @@ -614,19 +614,19 @@ IF (KRRL >=1) THEN ENDIF ! !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) - WHERE(PRT(IIJB:IIJE,1:IKT,2)+PRT(IIJB:IIJE,1:IKT,4)>0.0) - ZFRAC_ICE(IIJB:IIJE,1:IKT) = PRT(IIJB:IIJE,1:IKT,4) / ( PRT(IIJB:IIJE,1:IKT,2) & - +PRT(IIJB:IIJE,1:IKT,4) ) + WHERE(PRT(:,:,2)+PRT(:,:,4)>0.0) + ZFRAC_ICE(:,:) = PRT(:,:,4) / ( PRT(:,:,2) & + +PRT(:,:,4) ) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZLOCPEXNM(IIJB:IIJE,1:IKT) = (1.0-ZFRAC_ICE(IIJB:IIJE,1:IKT))*ZLVOCPEXNM(IIJB:IIJE,1:IKT) & - +ZFRAC_ICE(IIJB:IIJE,1:IKT) *ZLSOCPEXNM(IIJB:IIJE,1:IKT) - ZAMOIST(IIJB:IIJE,1:IKT) = (1.0-ZFRAC_ICE(IIJB:IIJE,1:IKT))*ZAMOIST(IIJB:IIJE,1:IKT) & - +ZFRAC_ICE(IIJB:IIJE,1:IKT) *ZAMOIST_ICE(IIJB:IIJE,1:IKT) - ZATHETA(IIJB:IIJE,1:IKT) = (1.0-ZFRAC_ICE(IIJB:IIJE,1:IKT))*ZATHETA(IIJB:IIJE,1:IKT) & - +ZFRAC_ICE(IIJB:IIJE,1:IKT) *ZATHETA_ICE(IIJB:IIJE,1:IKT) + ZLOCPEXNM(:,:) = (1.0-ZFRAC_ICE(:,:))*ZLVOCPEXNM(:,:) & + +ZFRAC_ICE(:,:) *ZLSOCPEXNM(:,:) + ZAMOIST(:,:) = (1.0-ZFRAC_ICE(:,:))*ZAMOIST(:,:) & + +ZFRAC_ICE(:,:) *ZAMOIST_ICE(:,:) + ZATHETA(:,:) = (1.0-ZFRAC_ICE(:,:))*ZATHETA(:,:) & + +ZFRAC_ICE(:,:) *ZATHETA_ICE(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !wc call new stat functions or not @@ -669,7 +669,7 @@ IF (KRRL >=1) THEN END IF ! ELSE - ZLOCPEXNM(IIJB:IIJE,1:IKT)=0. + ZLOCPEXNM(:,:)=0. END IF ! loop end on KRRL >= 1 ! ! computes conservative variables @@ -678,28 +678,28 @@ IF ( KRRL >= 1 ) THEN IF ( KRRI >= 1 ) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! Rnp at t - PRT(IIJB:IIJE,1:IKT,1) = PRT(IIJB:IIJE,1:IKT,1) + PRT(IIJB:IIJE,1:IKT,2) & - + PRT(IIJB:IIJE,1:IKT,4) - PRRS(IIJB:IIJE,1:IKT,1) = PRRS(IIJB:IIJE,1:IKT,1) + PRRS(IIJB:IIJE,1:IKT,2) & - + PRRS(IIJB:IIJE,1:IKT,4) + PRT(:,:,1) = PRT(:,:,1) + PRT(:,:,2) & + + PRT(:,:,4) + PRRS(:,:,1) = PRRS(:,:,1) + PRRS(:,:,2) & + + PRRS(:,:,4) ! Theta_l at t - PTHLT(IIJB:IIJE,1:IKT) = PTHLT(IIJB:IIJE,1:IKT) - ZLVOCPEXNM(IIJB:IIJE,1:IKT) & - * PRT(IIJB:IIJE,1:IKT,2) & - - ZLSOCPEXNM(IIJB:IIJE,1:IKT) * PRT(IIJB:IIJE,1:IKT,4) - PRTHLS(IIJB:IIJE,1:IKT) = PRTHLS(IIJB:IIJE,1:IKT) - ZLVOCPEXNM(IIJB:IIJE,1:IKT) & - * PRRS(IIJB:IIJE,1:IKT,2) & - - ZLSOCPEXNM(IIJB:IIJE,1:IKT) * PRRS(IIJB:IIJE,1:IKT,4) + PTHLT(:,:) = PTHLT(:,:) - ZLVOCPEXNM(:,:) & + * PRT(:,:,2) & + - ZLSOCPEXNM(:,:) * PRT(:,:,4) + PRTHLS(:,:) = PRTHLS(:,:) - ZLVOCPEXNM(:,:) & + * PRRS(:,:,2) & + - ZLSOCPEXNM(:,:) * PRRS(:,:,4) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! Rnp at t - PRT(IIJB:IIJE,1:IKT,1) = PRT(IIJB:IIJE,1:IKT,1) + PRT(IIJB:IIJE,1:IKT,2) - PRRS(IIJB:IIJE,1:IKT,1) = PRRS(IIJB:IIJE,1:IKT,1) + PRRS(IIJB:IIJE,1:IKT,2) + PRT(:,:,1) = PRT(:,:,1) + PRT(:,:,2) + PRRS(:,:,1) = PRRS(:,:,1) + PRRS(:,:,2) ! Theta_l at t - PTHLT(IIJB:IIJE,1:IKT) = PTHLT(IIJB:IIJE,1:IKT) - ZLOCPEXNM(IIJB:IIJE,1:IKT) & - * PRT(IIJB:IIJE,1:IKT,2) - PRTHLS(IIJB:IIJE,1:IKT) = PRTHLS(IIJB:IIJE,1:IKT) - ZLOCPEXNM(IIJB:IIJE,1:IKT) & - * PRRS(IIJB:IIJE,1:IKT,2) + PTHLT(:,:) = PTHLT(:,:) - ZLOCPEXNM(:,:) & + * PRT(:,:,2) + PRTHLS(:,:) = PRTHLS(:,:) - ZLOCPEXNM(:,:) & + * PRRS(:,:,2) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF END IF @@ -742,8 +742,8 @@ SELECT CASE (TURBN%CTURBLEN) CALL MYF_PHY(D,ZWORK2,ZDVDZ) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZSHEAR(IIJB:IIJE,1:IKT) = SQRT(ZDUDZ(IIJB:IIJE,1:IKT)*ZDUDZ(IIJB:IIJE,1:IKT) & - + ZDVDZ(IIJB:IIJE,1:IKT)*ZDVDZ(IIJB:IIJE,1:IKT)) + ZSHEAR(:,:) = SQRT(ZDUDZ(:,:)*ZDUDZ(:,:) & + + ZDVDZ(:,:)*ZDVDZ(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL BL89(D,CST,CSTURB,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM,OOCEAN,HPROGRAM) ! @@ -760,8 +760,8 @@ SELECT CASE (TURBN%CTURBLEN) CALL MYF_PHY(D,ZWORK2,ZDVDZ) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZSHEAR(IIJB:IIJE,1:IKT) = SQRT(ZDUDZ(IIJB:IIJE,1:IKT)*ZDUDZ(IIJB:IIJE,1:IKT) & - + ZDVDZ(IIJB:IIJE,1:IKT)*ZDVDZ(IIJB:IIJE,1:IKT)) + ZSHEAR(:,:) = SQRT(ZDUDZ(:,:)*ZDUDZ(:,:) & + + ZDVDZ(:,:)*ZDVDZ(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL BL89(D,CST,CSTURB,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM,OOCEAN,HPROGRAM) @@ -773,7 +773,7 @@ SELECT CASE (TURBN%CTURBLEN) ! For grid meshes in the grey zone, then this is the smaller of the two. ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZLM(IIJB:IIJE,1:IKT) = MIN(ZLM(IIJB:IIJE,1:IKT),TURBN%XCADAP*ZLMW(IIJB:IIJE,1:IKT)) + ZLM(:,:) = MIN(ZLM(:,:),TURBN%XCADAP*ZLMW(:,:)) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! !* 3.4 Delta mixing length @@ -794,22 +794,22 @@ SELECT CASE (TURBN%CTURBLEN) CASE ('BLKR') ZL0 = 100. !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZLM(IIJB:IIJE,1:IKT) = ZL0 + ZLM(:,:) = ZL0 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ZALPHA=0.5**(-1.5) ! DO JK=IKTB,IKTE !$mnh_expand_array(JIJ=IIJB:IIJE) - ZLM(IIJB:IIJE,JK) = ( 0.5*(PZZ(IIJB:IIJE,JK)+PZZ(IIJB:IIJE,JK+IKL)) - & - & PZZ(IIJB:IIJE,IKA+JPVEXT_TURB*IKL) ) * PDIRCOSZW(IIJB:IIJE) - ZLM(IIJB:IIJE,JK) = ZALPHA * ZLM(IIJB:IIJE,JK) * ZL0 / ( ZL0 + ZALPHA*ZLM(IIJB:IIJE,JK) ) + ZLM(:,JK) = ( 0.5*(PZZ(:,JK)+PZZ(:,JK+IKL)) - & + & PZZ(:,IKA+JPVEXT_TURB*IKL) ) * PDIRCOSZW(:) + ZLM(:,JK) = ZALPHA * ZLM(:,JK) * ZL0 / ( ZL0 + ZALPHA*ZLM(:,JK) ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO ! !$mnh_expand_array(JIJ=IIJB:IIJE) - ZLM(IIJB:IIJE,IKTB-1) = ZLM(IIJB:IIJE,IKTB) - ZLM(IIJB:IIJE,IKTE+1) = ZLM(IIJB:IIJE,IKTE) + ZLM(:,IKTB-1) = ZLM(:,IKTB) + ZLM(:,IKTE+1) = ZLM(:,IKTE) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! ! @@ -827,21 +827,21 @@ ENDIF ! end LHARRAT IF (TURBN%LHARAT) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZLEPS(IIJB:IIJE,1:IKT)=PLENGTHM(IIJB:IIJE,1:IKT)*(3.75**2.) + ZLEPS(:,:)=PLENGTHM(:,:)*(3.75**2.) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE - ZLEPS(IIJB:IIJE,1:IKT)=ZLM(IIJB:IIJE,1:IKT) + ZLEPS(:,:)=ZLM(:,:) ENDIF ! !* 3.7 Correction in the Surface Boundary Layer (Redelsperger 2001) ! ---------------------------------------- ! !$mnh_expand_array(JIJ=IIJB:IIJE) -ZLMO(IIJB:IIJE)=XUNDEF +ZLMO(:)=XUNDEF !$mnh_end_expand_array(JIJ=IIJB:IIJE) IF (TURBN%LRMC01) THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - ZUSTAR(IIJB:IIJE)=(PSFU(IIJB:IIJE)**2+PSFV(IIJB:IIJE)**2)**(0.25) + ZUSTAR(:)=(PSFU(:)**2+PSFV(:)**2)**(0.25) !$mnh_end_expand_array(JIJ=IIJB:IIJE) IF (KRR>0) THEN CALL LMO(D,CST,ZUSTAR,ZTHLM(:,IKB),ZRM(:,IKB,1),PSFTH,PSFRV,ZLMO) @@ -856,7 +856,7 @@ END IF !RMC01 is only applied on RM17 in HM21 IF (TURBN%CTURBLEN=='HM21') THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZLEPS(IIJB:IIJE,1:IKT) = MIN(ZLEPS(IIJB:IIJE,1:IKT),ZLMW(IIJB:IIJE,1:IKT)*TURBN%XCADAP) + ZLEPS(:,:) = MIN(ZLEPS(:,:),ZLMW(:,:)*TURBN%XCADAP) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! @@ -892,42 +892,42 @@ IF (HPROGRAM/='AROME ') THEN ! CALL UPDATE_ROTATE_WIND(D,ZUSLOPE,ZVSLOPE,HLBCX,HLBCY) ELSE - ZUSLOPE(IIJB:IIJE)=PUT(IIJB:IIJE,IKA) - ZVSLOPE(IIJB:IIJE)=PVT(IIJB:IIJE,IKA) + ZUSLOPE(:)=PUT(:,IKA) + ZVSLOPE(:)=PVT(:,IKA) END IF IF (OOCEAN) THEN - ZUSLOPE(IIJB:IIJE)=PUT(IIJB:IIJE,IKU-1) - ZVSLOPE(IIJB:IIJE)=PVT(IIJB:IIJE,IKU-1) + ZUSLOPE(:)=PUT(:,IKU-1) + ZVSLOPE(:)=PVT(:,IKU-1) END IF ! ! !* 4.2 compute the proportionality coefficient between wind and stress ! !$mnh_expand_array(JIJ=IIJB:IIJE) -ZCDUEFF(IIJB:IIJE) =-SQRT ( (PSFU(IIJB:IIJE)**2 + PSFV(IIJB:IIJE)**2) / & +ZCDUEFF(:) =-SQRT ( (PSFU(:)**2 + PSFV(:)**2) / & #ifdef REPRO48 - (1.E-60 + ZUSLOPE(IIJB:IIJE)**2 + ZVSLOPE(IIJB:IIJE)**2 ) ) + (1.E-60 + ZUSLOPE(:)**2 + ZVSLOPE(:)**2 ) ) #else - (CST%XMNH_TINY + ZUSLOPE(IIJB:IIJE)**2 + ZVSLOPE(IIJB:IIJE)**2 ) ) + (CST%XMNH_TINY + ZUSLOPE(:)**2 + ZVSLOPE(:)**2 ) ) #endif !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !* 4.6 compute the surface tangential fluxes ! IF (OOCEAN) THEN - ZTAU11M(IIJB:IIJE)=0. + ZTAU11M(:)=0. ELSE !$mnh_expand_array(JIJ=IIJB:IIJE) - ZTAU11M(IIJB:IIJE) =2./3.*( (1.+ (PZZ(IIJB:IIJE,IKB+IKL)-PZZ(IIJB:IIJE,IKB)) & - /(PDZZ(IIJB:IIJE,IKB+IKL)+PDZZ(IIJB:IIJE,IKB)) & - ) *PTKET(IIJB:IIJE,IKB) & - -0.5 *PTKET(IIJB:IIJE,IKB+IKL) & + ZTAU11M(:) =2./3.*( (1.+ (PZZ(:,IKB+IKL)-PZZ(:,IKB)) & + /(PDZZ(:,IKB+IKL)+PDZZ(:,IKB)) & + ) *PTKET(:,IKB) & + -0.5 *PTKET(:,IKB+IKL) & ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF -ZTAU12M(IIJB:IIJE) =0.0 -ZTAU22M(IIJB:IIJE) =ZTAU11M(IIJB:IIJE) -ZTAU33M(IIJB:IIJE) =ZTAU11M(IIJB:IIJE) +ZTAU12M(:) =0.0 +ZTAU22M(:) =ZTAU11M(:) +ZTAU33M(:) =ZTAU11M(:) ! !* 4.7 third order terms in temperature and water fluxes and correlations ! ------------------------------------------------------------------ @@ -945,8 +945,8 @@ IF (TURBN%CTOM=='TM06') THEN CALL GZ_M_W_PHY(D,ZMWTH,PDZZ,ZWORK1) ! -d(w'2th' )/dz CALL GZ_W_M_PHY(D,ZMTH2,PDZZ,ZWORK2) ! -d(w'th'2 )/dz !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZFWTH(IIJB:IIJE,1:IKT) = -ZWORK1(IIJB:IIJE,1:IKT) - ZFTH2(IIJB:IIJE,1:IKT) = -ZWORK2(IIJB:IIJE,1:IKT) + ZFWTH(:,:) = -ZWORK1(:,:) + ZFTH2(:,:) = -ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! ZFWTH(:,IKTE:) = 0. @@ -1180,13 +1180,13 @@ END IF ! cloud computation is not statistical CALL MZF_PHY(D,PFLXZTHVMF,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -PTP(IIJB:IIJE,1:IKT) = PTP(IIJB:IIJE,1:IKT) & - + CST%XG / PTHVREF(IIJB:IIJE,1:IKT) * ZWORK1(IIJB:IIJE,1:IKT) +PTP(:,:) = PTP(:,:) & + + CST%XG / PTHVREF(:,:) * ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) IF(PRESENT(PTPMF)) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PTPMF(IIJB:IIJE,1:IKT)=CST%XG / PTHVREF(IIJB:IIJE,1:IKT) * ZWORK1(IIJB:IIJE,1:IKT) + PTPMF(:,:)=CST%XG / PTHVREF(:,:) * ZWORK1(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF ! 6.2 TKE evolution equation @@ -1291,13 +1291,13 @@ END IF !* stores value of conservative variables & wind before turbulence tendency (AROME only) IF(PRESENT(PDRUS_TURB)) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PDRUS_TURB(IIJB:IIJE,1:IKT) = PRUS(IIJB:IIJE,1:IKT) - PDRUS_TURB(IIJB:IIJE,1:IKT) - PDRVS_TURB(IIJB:IIJE,1:IKT) = PRVS(IIJB:IIJE,1:IKT) - PDRVS_TURB(IIJB:IIJE,1:IKT) - PDRTHLS_TURB(IIJB:IIJE,1:IKT) = PRTHLS(IIJB:IIJE,1:IKT) - PDRTHLS_TURB(IIJB:IIJE,1:IKT) - PDRRTS_TURB(IIJB:IIJE,1:IKT) = PRRS(IIJB:IIJE,1:IKT,1) - PDRRTS_TURB(IIJB:IIJE,1:IKT) + PDRUS_TURB(:,:) = PRUS(:,:) - PDRUS_TURB(:,:) + PDRVS_TURB(:,:) = PRVS(:,:) - PDRVS_TURB(:,:) + PDRTHLS_TURB(:,:) = PRTHLS(:,:) - PDRTHLS_TURB(:,:) + PDRRTS_TURB(:,:) = PRRS(:,:,1) - PDRRTS_TURB(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT,JSV=1:KSV) - PDRSVS_TURB(IIJB:IIJE,1:IKT,:) = PRSVS(IIJB:IIJE,1:IKT,:) - PDRSVS_TURB(IIJB:IIJE,1:IKT,:) + PDRSVS_TURB(:,:,:) = PRSVS(:,:,:) - PDRSVS_TURB(:,:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT,JSV=1:KSV) END IF !---------------------------------------------------------------------------- @@ -1308,26 +1308,26 @@ END IF IF ( KRRL >= 1 ) THEN IF ( KRRI >= 1 ) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PRT(IIJB:IIJE,1:IKT,1) = PRT(IIJB:IIJE,1:IKT,1) - PRT(IIJB:IIJE,1:IKT,2) & - - PRT(IIJB:IIJE,1:IKT,4) - PRRS(IIJB:IIJE,1:IKT,1) = PRRS(IIJB:IIJE,1:IKT,1) - PRRS(IIJB:IIJE,1:IKT,2) & - - PRRS(IIJB:IIJE,1:IKT,4) - PTHLT(IIJB:IIJE,1:IKT) = PTHLT(IIJB:IIJE,1:IKT) + ZLVOCPEXNM(IIJB:IIJE,1:IKT) & - * PRT(IIJB:IIJE,1:IKT,2) & - + ZLSOCPEXNM(IIJB:IIJE,1:IKT) * PRT(IIJB:IIJE,1:IKT,4) - PRTHLS(IIJB:IIJE,1:IKT) = PRTHLS(IIJB:IIJE,1:IKT) + ZLVOCPEXNM(IIJB:IIJE,1:IKT) & - * PRRS(IIJB:IIJE,1:IKT,2) & - + ZLSOCPEXNM(IIJB:IIJE,1:IKT) * PRRS(IIJB:IIJE,1:IKT,4) + PRT(:,:,1) = PRT(:,:,1) - PRT(:,:,2) & + - PRT(:,:,4) + PRRS(:,:,1) = PRRS(:,:,1) - PRRS(:,:,2) & + - PRRS(:,:,4) + PTHLT(:,:) = PTHLT(:,:) + ZLVOCPEXNM(:,:) & + * PRT(:,:,2) & + + ZLSOCPEXNM(:,:) * PRT(:,:,4) + PRTHLS(:,:) = PRTHLS(:,:) + ZLVOCPEXNM(:,:) & + * PRRS(:,:,2) & + + ZLSOCPEXNM(:,:) * PRRS(:,:,4) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PRT(IIJB:IIJE,1:IKT,1) = PRT(IIJB:IIJE,1:IKT,1) - PRT(IIJB:IIJE,1:IKT,2) - PRRS(IIJB:IIJE,1:IKT,1) = PRRS(IIJB:IIJE,1:IKT,1) - PRRS(IIJB:IIJE,1:IKT,2) - PTHLT(IIJB:IIJE,1:IKT) = PTHLT(IIJB:IIJE,1:IKT) + ZLOCPEXNM(IIJB:IIJE,1:IKT) & - * PRT(IIJB:IIJE,1:IKT,2) - PRTHLS(IIJB:IIJE,1:IKT) = PRTHLS(IIJB:IIJE,1:IKT) + ZLOCPEXNM(IIJB:IIJE,1:IKT) & - * PRRS(IIJB:IIJE,1:IKT,2) + PRT(:,:,1) = PRT(:,:,1) - PRT(:,:,2) + PRRS(:,:,1) = PRRS(:,:,1) - PRRS(:,:,2) + PTHLT(:,:) = PTHLT(:,:) + ZLOCPEXNM(:,:) & + * PRT(:,:,2) + PRTHLS(:,:) = PRTHLS(:,:) + ZLOCPEXNM(:,:) & + * PRRS(:,:,2) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF END IF @@ -1350,7 +1350,7 @@ IF (TLES%LLES_CALL) THEN CALL LES_MEAN_SUBGRID_PHY(D,TLES,PSFV,TLES%X_LES_VW0) ! !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK2D(IIJB:IIJE) = (PSFU(IIJB:IIJE)*PSFU(IIJB:IIJE)+PSFV(IIJB:IIJE)*PSFV(IIJB:IIJE))**0.25 + ZWORK2D(:) = (PSFU(:)*PSFU(:)+PSFV(:)*PSFV(:))**0.25 !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2D,TLES%X_LES_USTAR) !---------------------------------------------------------------------------- @@ -1374,7 +1374,7 @@ IF (TLES%LLES_CALL) THEN IF (TURBN%CTURBDIM=="1DIM") THEN ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(IIJB:IIJE,1:IKT) = 2./3.*PTKET(IIJB:IIJE,1:IKT) + ZWORK1(:,:) = 2./3.*PTKET(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK1,TLES%X_LES_SUBGRID_U2) TLES%X_LES_SUBGRID_V2(:,:,:) = TLES%X_LES_SUBGRID_U2(:,:,:) @@ -1383,7 +1383,7 @@ IF (TLES%LLES_CALL) THEN CALL GZ_M_W_PHY(D,PTHLT,PDZZ,ZWORK1) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = 2./3.*PTKET(IIJB:IIJE,1:IKT) *ZWORK2(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = 2./3.*PTKET(:,:) *ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2,TLES%X_LES_RES_ddz_Thl_SBG_W2) ! @@ -1391,7 +1391,7 @@ IF (TLES%LLES_CALL) THEN CALL GZ_M_W_PHY(D,PRT(:,:,1),PDZZ,ZWORK1) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = 2./3.*PTKET(IIJB:IIJE,1:IKT) *ZWORK2(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = 2./3.*PTKET(:,:) *ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2,TLES%X_LES_RES_ddz_Rt_SBG_W2) END IF @@ -1399,7 +1399,7 @@ IF (TLES%LLES_CALL) THEN CALL GZ_M_W_PHY(D,PSVT(:,:,JSV),PDZZ,ZWORK1) CALL MZF_PHY(D,ZWORK1,ZWORK2) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK2(IIJB:IIJE,1:IKT) = 2./3.*PTKET(IIJB:IIJE,1:IKT) *ZWORK2(IIJB:IIJE,1:IKT) + ZWORK2(:,:) = 2./3.*PTKET(:,:) *ZWORK2(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) CALL LES_MEAN_SUBGRID_PHY(D,TLES,ZWORK2, TLES%X_LES_RES_ddz_Sv_SBG_W2(:,:,:,JSV)) END DO @@ -1422,7 +1422,7 @@ IF (TLES%LLES_CALL) THEN TLES%XTIME_LES = TLES%XTIME_LES + ZTIME2 - ZTIME1 END IF ! -IF(PRESENT(PLEM)) PLEM(IIJB:IIJE,IKTB:IKTE) = ZLM(IIJB:IIJE,IKTB:IKTE) +IF(PRESENT(PLEM)) PLEM(:,:) = ZLM(:,:) !---------------------------------------------------------------------------- ! IF (LHOOK) CALL DR_HOOK('TURB',1,ZHOOK_HANDLE) @@ -1467,44 +1467,44 @@ REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT) :: PAMOIST,PATHETA !* 1.1 Lv/Cph at t ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PLOCPEXN(IIJB:IIJE,1:IKT) = ( PLTT + (CST%XCPV-PC) * (PT(IIJB:IIJE,1:IKT)-CST%XTT) ) & - / PCP(IIJB:IIJE,1:IKT) + PLOCPEXN(:,:) = ( PLTT + (CST%XCPV-PC) * (PT(:,:)-CST%XTT) ) & + / PCP(:,:) ! !* 1.2 Saturation vapor pressure at t ! - ZRVSAT(IIJB:IIJE,1:IKT) = EXP( PALP - PBETA/PT(IIJB:IIJE,1:IKT) - PGAM*ALOG( PT(IIJB:IIJE,1:IKT) ) ) + ZRVSAT(:,:) = EXP( PALP - PBETA/PT(:,:) - PGAM*ALOG( PT(:,:) ) ) ! !* 1.3 saturation mixing ratio at t ! - ZRVSAT(IIJB:IIJE,1:IKT) = ZRVSAT(IIJB:IIJE,1:IKT) & - * ZEPS / ( PPABST(IIJB:IIJE,1:IKT) - ZRVSAT(IIJB:IIJE,1:IKT) ) + ZRVSAT(:,:) = ZRVSAT(:,:) & + * ZEPS / ( PPABST(:,:) - ZRVSAT(:,:) ) ! !* 1.4 compute the saturation mixing ratio derivative (rvs') ! - ZDRVSATDT(IIJB:IIJE,1:IKT) = ( PBETA / PT(IIJB:IIJE,1:IKT) - PGAM ) / PT(IIJB:IIJE,1:IKT) & - * ZRVSAT(IIJB:IIJE,1:IKT) * ( 1. + ZRVSAT(IIJB:IIJE,1:IKT) / ZEPS ) + ZDRVSATDT(:,:) = ( PBETA / PT(:,:) - PGAM ) / PT(:,:) & + * ZRVSAT(:,:) * ( 1. + ZRVSAT(:,:) / ZEPS ) ! !* 1.5 compute Amoist ! - PAMOIST(IIJB:IIJE,1:IKT)= 0.5 / ( 1.0 + ZDRVSATDT(IIJB:IIJE,1:IKT) * PLOCPEXN(IIJB:IIJE,1:IKT) ) + PAMOIST(:,:)= 0.5 / ( 1.0 + ZDRVSATDT(:,:) * PLOCPEXN(:,:) ) ! !* 1.6 compute Atheta ! - PATHETA(IIJB:IIJE,1:IKT)= PAMOIST(IIJB:IIJE,1:IKT) * PEXN(IIJB:IIJE,1:IKT) * & - ( ( ZRVSAT(IIJB:IIJE,1:IKT) - PRT(IIJB:IIJE,1:IKT,1) ) * PLOCPEXN(IIJB:IIJE,1:IKT) / & - ( 1. + ZDRVSATDT(IIJB:IIJE,1:IKT) * PLOCPEXN(IIJB:IIJE,1:IKT) ) * & + PATHETA(:,:)= PAMOIST(:,:) * PEXN(:,:) * & + ( ( ZRVSAT(:,:) - PRT(:,:,1) ) * PLOCPEXN(:,:) / & + ( 1. + ZDRVSATDT(:,:) * PLOCPEXN(:,:) ) * & ( & - ZRVSAT(IIJB:IIJE,1:IKT) * (1. + ZRVSAT(IIJB:IIJE,1:IKT)/ZEPS) & - * ( -2.*PBETA/PT(IIJB:IIJE,1:IKT) + PGAM ) / PT(IIJB:IIJE,1:IKT)**2 & - +ZDRVSATDT(IIJB:IIJE,1:IKT) * (1. + 2. * ZRVSAT(IIJB:IIJE,1:IKT)/ZEPS) & - * ( PBETA/PT(IIJB:IIJE,1:IKT) - PGAM ) / PT(IIJB:IIJE,1:IKT) & + ZRVSAT(:,:) * (1. + ZRVSAT(:,:)/ZEPS) & + * ( -2.*PBETA/PT(:,:) + PGAM ) / PT(:,:)**2 & + +ZDRVSATDT(:,:) * (1. + 2. * ZRVSAT(:,:)/ZEPS) & + * ( PBETA/PT(:,:) - PGAM ) / PT(:,:) & ) & - - ZDRVSATDT(IIJB:IIJE,1:IKT) & + - ZDRVSATDT(:,:) & ) ! !* 1.7 Lv/Cph/Exner at t-1 ! - PLOCPEXN(IIJB:IIJE,1:IKT) = PLOCPEXN(IIJB:IIJE,1:IKT) / PEXN(IIJB:IIJE,1:IKT) + PLOCPEXN(:,:) = PLOCPEXN(:,:) / PEXN(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! IF (LHOOK) CALL DR_HOOK('TURB:COMPUTE_FUNCTION_THERMO',1,ZHOOK_HANDLE2) @@ -1551,32 +1551,32 @@ REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT) :: PAMOIST,PATHETA !* 1.1 Lv/Cph at t ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PLOCPEXN(IIJB:IIJE,1:IKT) = ( PLTT + (CST%XCPV-PC) * (PT(IIJB:IIJE,1:IKT)-CST%XTT) ) / PCP(IIJB:IIJE,1:IKT) + PLOCPEXN(:,:) = ( PLTT + (CST%XCPV-PC) * (PT(:,:)-CST%XTT) ) / PCP(:,:) ! !* 1.2 Saturation vapor pressure at t ! - ZRVSAT(IIJB:IIJE,1:IKT) = EXP( PALP - PBETA/PT(IIJB:IIJE,1:IKT) - PGAM*ALOG( PT(IIJB:IIJE,1:IKT) ) ) + ZRVSAT(:,:) = EXP( PALP - PBETA/PT(:,:) - PGAM*ALOG( PT(:,:) ) ) ! !* 1.3 saturation mixing ratio at t ! - ZRVSAT(IIJB:IIJE,1:IKT) = ZRVSAT(IIJB:IIJE,1:IKT) * ZEPS / ( PPABST(IIJB:IIJE,1:IKT) - ZRVSAT(IIJB:IIJE,1:IKT) ) + ZRVSAT(:,:) = ZRVSAT(:,:) * ZEPS / ( PPABST(:,:) - ZRVSAT(:,:) ) ! !* 1.4 compute the saturation mixing ratio derivative (rvs') ! - ZDRVSATDT(IIJB:IIJE,1:IKT) = ( PBETA / PT(IIJB:IIJE,1:IKT) - PGAM ) / PT(IIJB:IIJE,1:IKT) & - * ZRVSAT(IIJB:IIJE,1:IKT) * ( 1. + ZRVSAT(IIJB:IIJE,1:IKT) / ZEPS ) + ZDRVSATDT(:,:) = ( PBETA / PT(:,:) - PGAM ) / PT(:,:) & + * ZRVSAT(:,:) * ( 1. + ZRVSAT(:,:) / ZEPS ) ! !* 1.5 compute Amoist ! - PAMOIST(IIJB:IIJE,1:IKT)= 1.0 / ( 1.0 + ZDRVSATDT(IIJB:IIJE,1:IKT) * PLOCPEXN(IIJB:IIJE,1:IKT) ) + PAMOIST(:,:)= 1.0 / ( 1.0 + ZDRVSATDT(:,:) * PLOCPEXN(:,:) ) ! !* 1.6 compute Atheta ! - PATHETA(IIJB:IIJE,1:IKT)= PAMOIST(IIJB:IIJE,1:IKT) * PEXN(IIJB:IIJE,1:IKT) * ZDRVSATDT(IIJB:IIJE,1:IKT) + PATHETA(:,:)= PAMOIST(:,:) * PEXN(:,:) * ZDRVSATDT(:,:) ! !* 1.7 Lv/Cph/Exner at t-1 ! - PLOCPEXN(IIJB:IIJE,1:IKT) = PLOCPEXN(IIJB:IIJE,1:IKT) / PEXN(IIJB:IIJE,1:IKT) + PLOCPEXN(:,:) = PLOCPEXN(:,:) / PEXN(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! IF (LHOOK) CALL DR_HOOK('TURB:COMPUTE_FUNCTION_THERMO_NEW_STAT',1,ZHOOK_HANDLE2) @@ -1620,36 +1620,36 @@ IF (ODZ) THEN ! Dz is take into account in the computation DO JK = IKTB,IKTE ! 1D turbulence scheme !$mnh_expand_array(JIJ=IIJB:IIJE) - PLM(IIJB:IIJE,JK) = PZZ(IIJB:IIJE,JK+IKL) - PZZ(IIJB:IIJE,JK) + PLM(:,JK) = PZZ(:,JK+IKL) - PZZ(:,JK) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END DO !$mnh_expand_array(JIJ=IIJB:IIJE) - PLM(IIJB:IIJE,IKU) = PLM(IIJB:IIJE,IKE) - PLM(IIJB:IIJE,IKA) = PZZ(IIJB:IIJE,IKB) - PZZ(IIJB:IIJE,IKA) + PLM(:,IKU) = PLM(:,IKE) + PLM(:,IKA) = PZZ(:,IKB) - PZZ(:,IKA) !$mnh_end_expand_array(JIJ=IIJB:IIJE) IF ( TURBN%CTURBDIM /= '1DIM' ) THEN ! 3D turbulence scheme IF ( O2D) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PLM(IIJB:IIJE,1:IKT) = SQRT( PLM(IIJB:IIJE,1:IKT)*ZWORK1(IIJB:IIJE,1:IKT) ) + PLM(:,:) = SQRT( PLM(:,:)*ZWORK1(:,:) ) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PLM(IIJB:IIJE,1:IKT) = (PLM(IIJB:IIJE,1:IKT)*ZWORK1(IIJB:IIJE,1:IKT) & - * ZWORK2(IIJB:IIJE,1:IKT) ) ** (1./3.) + PLM(:,:) = (PLM(:,:)*ZWORK1(:,:) & + * ZWORK2(:,:) ) ** (1./3.) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF END IF ELSE ! Dz not taken into account in computation to assure invariability with vertical grid mesh !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PLM(IIJB:IIJE,1:IKT)=1.E10 + PLM(:,:)=1.E10 !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) IF ( TURBN%CTURBDIM /= '1DIM' ) THEN ! 3D turbulence scheme IF ( O2D) THEN PLM(:,:) = ZWORK1(:,:) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PLM(IIJB:IIJE,1:IKT) = (ZWORK1(IIJB:IIJE,1:IKT)*ZWORK2(IIJB:IIJE,1:IKT) ) ** (1./2.) + PLM(:,:) = (ZWORK1(:,:)*ZWORK2(:,:) ) ** (1./2.) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF END IF @@ -1686,8 +1686,8 @@ IF (.NOT. TURBN%LRMC01) THEN END IF ! !$mnh_expand_array(JIJ=IIJB:IIJE) -PLM(IIJB:IIJE,IKA) = PLM(IIJB:IIJE,IKB) -PLM(IIJB:IIJE,IKU) = PLM(IIJB:IIJE,IKE) +PLM(:,IKA) = PLM(:,IKB) +PLM(:,IKU) = PLM(:,IKE) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! IF (LHOOK) CALL DR_HOOK('TURB:DELT',1,ZHOOK_HANDLE2) @@ -1731,22 +1731,22 @@ IF ( TURBN%CTURBDIM /= '1DIM' ) THEN END IF ! 1D turbulence scheme !$mnh_expand_array(JIJ=IIJB:IIJE,JK=IKTB:IKTE) -PLM(IIJB:IIJE,IKTB:IKTE) = PZZ(IIJB:IIJE,IKL+IKTB:IKTE+IKL) - PZZ(IIJB:IIJE,IKTB:IKTE) +PLM(:,:) = PZZ(:,IKL+:+IKL) - PZZ(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=IKTB:IKTE) !$mnh_expand_array(JIJ=IIJB:IIJE) -PLM(IIJB:IIJE,IKU) = PLM(IIJB:IIJE,IKE) -PLM(IIJB:IIJE,IKA) = PZZ(IIJB:IIJE,IKB) - PZZ(IIJB:IIJE,IKA) +PLM(:,IKU) = PLM(:,IKE) +PLM(:,IKA) = PZZ(:,IKB) - PZZ(:,IKA) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! IF ( TURBN%CTURBDIM /= '1DIM' ) THEN ! 3D turbulence scheme IF ( O2D) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PLM(IIJB:IIJE,1:IKT) = SQRT( PLM(IIJB:IIJE,1:IKT)*ZWORK1(IIJB:IIJE,1:IKT) ) + PLM(:,:) = SQRT( PLM(:,:)*ZWORK1(:,:) ) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - PLM(IIJB:IIJE,1:IKT) = (PLM(IIJB:IIJE,1:IKT)*ZWORK1(IIJB:IIJE,1:IKT) & - * ZWORK2(IIJB:IIJE,1:IKT) ) ** (1./3.) + PLM(:,:) = (PLM(:,:)*ZWORK1(:,:) & + * ZWORK2(:,:) ) ** (1./3.) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF END IF @@ -1795,12 +1795,12 @@ ELSE! For dry atmos or unsalted ocean runs END IF ! special case near the surface !$mnh_expand_array(JIJ=IIJB:IIJE) -ZDTHLDZ(IIJB:IIJE,IKB)=(PTHLT(IIJB:IIJE,IKB+IKL)-PTHLT(IIJB:IIJE,IKB))/PDZZ(IIJB:IIJE,IKB+IKL) +ZDTHLDZ(:,IKB)=(PTHLT(:,IKB+IKL)-PTHLT(:,IKB))/PDZZ(:,IKB+IKL) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! For dry simulations IF (KRR>0) THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - ZDRTDZ(IIJB:IIJE,IKB)=(PRT(IIJB:IIJE,IKB+IKL,1)-PRT(IIJB:IIJE,IKB,1))/PDZZ(IIJB:IIJE,IKB+IKL) + ZDRTDZ(:,IKB)=(PRT(:,IKB+IKL,1)-PRT(:,IKB,1))/PDZZ(:,IKB+IKL) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ELSE ZDRTDZ(:,IKB)=0 @@ -1808,18 +1808,18 @@ ENDIF ! IF (OOCEAN) THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK2D(IIJB:IIJE)=CST%XG*(CST%XALPHAOC*ZDTHLDZ(IIJB:IIJE,IKB)-CST%XBETAOC*ZDRTDZ(IIJB:IIJE,IKB)) + ZWORK2D(:)=CST%XG*(CST%XALPHAOC*ZDTHLDZ(:,IKB)-CST%XBETAOC*ZDRTDZ(:,IKB)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK2D(IIJB:IIJE)=CST%XG/PTHVREF(IIJB:IIJE,IKB)* & - (ZETHETA(IIJB:IIJE,IKB)*ZDTHLDZ(IIJB:IIJE,IKB)+ZEMOIST(IIJB:IIJE,IKB)*ZDRTDZ(IIJB:IIJE,IKB)) + ZWORK2D(:)=CST%XG/PTHVREF(:,IKB)* & + (ZETHETA(:,IKB)*ZDTHLDZ(:,IKB)+ZEMOIST(:,IKB)*ZDRTDZ(:,IKB)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF !$mnh_expand_where(JIJ=IIJB:IIJE) -WHERE(ZWORK2D(IIJB:IIJE)>0.) - PLM(IIJB:IIJE,IKB)=MAX(CST%XMNH_EPSILON,MIN( PLM(IIJB:IIJE,IKB), & - 0.76* SQRT(PTKET(IIJB:IIJE,IKB)/ZWORK2D(IIJB:IIJE)))) +WHERE(ZWORK2D(:)>0.) + PLM(:,IKB)=MAX(CST%XMNH_EPSILON,MIN( PLM(:,IKB), & + 0.76* SQRT(PTKET(:,IKB)/ZWORK2D(:)))) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE) ! @@ -1853,9 +1853,9 @@ IF (.NOT. TURBN%LRMC01) THEN END IF ! !$mnh_expand_array(JIJ=IIJB:IIJE) -PLM(IIJB:IIJE,IKA) = PLM(IIJB:IIJE,IKB) -PLM(IIJB:IIJE,IKE) = PLM(IIJB:IIJE,IKE-IKL) -PLM(IIJB:IIJE,IKU) = PLM(IIJB:IIJE,IKU-IKL) +PLM(:,IKA) = PLM(:,IKB) +PLM(:,IKE) = PLM(:,IKE-IKL) +PLM(:,IKU) = PLM(:,IKU-IKL) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! IF (LHOOK) CALL DR_HOOK('TURB:DEAR',1,ZHOOK_HANDLE2) @@ -1922,7 +1922,7 @@ ZPENTE = ( PCOEF_AMPL_SAT - 1. ) / ( PCEI_MAX - PCEI_MIN ) ZCOEF_AMPL_CEI_NUL = 1. - ZPENTE * PCEI_MIN ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) -ZCOEF_AMPL(IIJB:IIJE,1:IKT) = 1. +ZCOEF_AMPL(:,:) = 1. !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ! !* 2. CALCULATION OF THE AMPLIFICATION COEFFICIENT @@ -1931,8 +1931,8 @@ ZCOEF_AMPL(IIJB:IIJE,1:IKT) = 1. ! Saturation ! !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) -WHERE ( PCEI(IIJB:IIJE,1:IKT)>=PCEI_MAX ) - ZCOEF_AMPL(IIJB:IIJE,1:IKT)=PCOEF_AMPL_SAT +WHERE ( PCEI(:,:)>=PCEI_MAX ) + ZCOEF_AMPL(:,:)=PCOEF_AMPL_SAT END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) ! @@ -1940,8 +1940,8 @@ END WHERE ! amplification coefficient ZCOEF_AMPL as a function of CEI ! !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) -WHERE ( PCEI(IIJB:IIJE,1:IKT) < PCEI_MAX .AND. PCEI(IIJB:IIJE,1:IKT) > PCEI_MIN) - ZCOEF_AMPL(IIJB:IIJE,1:IKT) = ZPENTE * PCEI(IIJB:IIJE,1:IKT) + ZCOEF_AMPL_CEI_NUL +WHERE ( PCEI(:,:) < PCEI_MAX .AND. PCEI(:,:) > PCEI_MIN) + ZCOEF_AMPL(:,:) = ZPENTE * PCEI(:,:) + ZCOEF_AMPL_CEI_NUL END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) ! @@ -1995,16 +1995,16 @@ ENDIF ! Amplification of the mixing length when the criteria are verified ! !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) -WHERE (ZCOEF_AMPL(IIJB:IIJE,1:IKT) /= 1.) - ZLM(IIJB:IIJE,1:IKT) = ZCOEF_AMPL(IIJB:IIJE,1:IKT)*ZLM_CLOUD(IIJB:IIJE,1:IKT) +WHERE (ZCOEF_AMPL(:,:) /= 1.) + ZLM(:,:) = ZCOEF_AMPL(:,:)*ZLM_CLOUD(:,:) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) ! ! Cloud mixing length in the clouds at the points which do not verified the CEI ! !$mnh_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) -WHERE (PCEI(IIJB:IIJE,1:IKT) == -1.) - ZLM(IIJB:IIJE,1:IKT) = ZLM_CLOUD(IIJB:IIJE,1:IKT) +WHERE (PCEI(:,:) == -1.) + ZLM(:,:) = ZLM_CLOUD(:,:) END WHERE !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:IKT) !