diff --git a/src/PHYEX/turb/mode_prandtl.f90 b/src/PHYEX/turb/mode_prandtl.f90 index 02904a59aaf12cab9f0b48fe9afdbc78ac0e64fa..ec204cab3cdd956b7a03786ffdfe737467a83603 100644 --- a/src/PHYEX/turb/mode_prandtl.f90 +++ b/src/PHYEX/turb/mode_prandtl.f90 @@ -534,7 +534,7 @@ DO JSV=1,KSV 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) + CALL MZM_PHY(D,ZWORK1,ZWORK2) IF (KRR /= 0) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ZW1(:,:) = ZWORK2(:,:) * PETHETA(:,:) @@ -543,14 +543,16 @@ DO JSV=1,KSV ZW1 = ZWORK2 END IF ELSE - !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(:,:) = (CST%XG / PTHVREF(:,:) * PLM(:,:) & - * PLEPS(:,:) / PTKEM(:,:))**2 - !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - CALL MZM_PHY(D,ZWORK1,ZW1) + !Compute only once and reuse in next JSV iterations + IF ( JSV == 1 ) THEN + !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) + ZWORK1(:,:) = (CST%XG / PTHVREF(:,:) * PLM(:,:) * PLEPS(:,:) / PTKEM(:,:))**2 + !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) + CALL MZM_PHY(D,ZWORK1,ZW1) + END IF ! CALL GX_M_M_PHY(D,OFLAT,PSVM(:,:,JSV),PDXX,PDZZ,PDZX,ZGXMM_PSV) - CALL GX_M_M_PHY(D,OFLAT,PTHLM,PDXX,PDZZ,PDZX,ZGXMM_PTH) + !Already computed CALL GX_M_M_PHY(D,OFLAT,PTHLM,PDXX,PDZZ,PDZX,ZGXMM_PTH) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ZWORK1(:,:) = ZGXMM_PSV(:,:) * ZGXMM_PTH(:,:) @@ -567,7 +569,7 @@ DO JSV=1,KSV ZWORK1(:,:) * ZWORK2(:,:) ! IF (KRR /= 0) THEN - CALL GX_M_M_PHY(D,OFLAT,PRM(:,:,1),PDXX,PDZZ,PDZX,ZGXMM_PRM) + !Already computed CALL GX_M_M_PHY(D,OFLAT,PRM(:,:,1),PDXX,PDZZ,PDZX,ZGXMM_PRM) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ZWORK1(:,:) = ZGXMM_PSV(:,:) * ZGXMM_PRM(:,:) @@ -589,7 +591,7 @@ DO JSV=1,KSV 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) + CALL MZM_PHY(D,ZWORK1,ZWORK2) IF (KRR /= 0) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ZW1(:,:) = ZWORK2(:,:) * PETHETA(:,:) @@ -598,16 +600,18 @@ DO JSV=1,KSV ZW1 = ZWORK2 END IF ELSE - !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - ZWORK1(:,:) = (CST%XG / PTHVREF(:,:) * PLM(:,:) & - * PLEPS(:,:) / PTKEM(:,:))**2 - !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - CALL MZM_PHY(D,ZWORK1,ZW1) + !Compute only once and reuse in next JSV iterations + IF ( JSV == 1 ) THEN + !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) + ZWORK1(:,:) = (CST%XG / PTHVREF(:,:) * PLM(:,:) * PLEPS(:,:) / PTKEM(:,:))**2 + !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) + CALL MZM_PHY(D,ZWORK1,ZW1) + END IF ! CALL GX_M_M_PHY(D,OFLAT,PSVM(:,:,JSV),PDXX,PDZZ,PDZX,ZGXMM_PSV) - CALL GX_M_M_PHY(D,OFLAT,PTHLM,PDXX,PDZZ,PDZX,ZGXMM_PTH) + !Already computed CALL GX_M_M_PHY(D,OFLAT,PTHLM,PDXX,PDZZ,PDZX,ZGXMM_PTH) CALL GY_M_M_PHY(D,OFLAT,PSVM(:,:,JSV),PDYY,PDZZ,PDZY,ZGYMM_PSV) - CALL GY_M_M_PHY(D,OFLAT,PTHLM,PDYY,PDZZ,PDZY,ZGYMM_PTH) + !Already computed CALL GY_M_M_PHY(D,OFLAT,PTHLM,PDYY,PDZZ,PDZY,ZGYMM_PTH) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ZWORK1(:,:) = ZGXMM_PSV(:,:) * ZGXMM_PTH(:,:) & @@ -616,8 +620,8 @@ DO JSV=1,KSV CALL MZM_PHY(D,ZWORK1,ZWORK2) ! IF (KRR /= 0) THEN - 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) + !Already computed CALL GX_M_M_PHY(D,OFLAT,PRM(:,:,1),PDXX,PDZZ,PDZX,ZGXMM_PRM) + !Already computed CALL GY_M_M_PHY(D,OFLAT,PRM(:,:,1),PDYY,PDZZ,PDZY,ZGYMM_PRM) ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) ZWORK1(:,:) = ZGXMM_PSV(:,:) * ZGXMM_PRM(:,:) + ZGYMM_PSV(:,:) * ZGYMM_PRM(:,:)