From f3b8d6a34291a8a6a7ebde88d661dbba560c8d69 Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Thu, 27 Jun 2024 12:03:28 +0200
Subject: [PATCH] Philippe 27/06/2024: PHYEX: mode_prandtl: do not recompute
 some arrays at each iteration on JSV

---
 src/PHYEX/turb/mode_prandtl.f90 | 40 ++++++++++++++++++---------------
 1 file changed, 22 insertions(+), 18 deletions(-)

diff --git a/src/PHYEX/turb/mode_prandtl.f90 b/src/PHYEX/turb/mode_prandtl.f90
index 02904a59a..ec204cab3 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(:,:)
-- 
GitLab