Philippe 17/06/2016: optimisations: removed unnecessary operations when JSPL=K/ISPLIT...
authorPhilippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Fri, 17 Jun 2016 08:11:28 +0000 (10:11 +0200)
committerPhilippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Fri, 17 Jun 2016 08:11:28 +0000 (10:11 +0200)
src/MNH/advection_metsv.f90
src/MNH/advection_uvw.f90

index 60d68a9..42fd180 100644 (file)
@@ -17,7 +17,7 @@ INTERFACE
                             PRTHS, PRRS, PRTKES, PRSVS,                        &
                             PRTHS_CLD, PRRS_CLD, PRSVS_CLD, PRTKES_ADV         )
 !
-LOGICAL,                INTENT(IN)   ::  OCLOSE_OUT   ! switch for syncronous
+LOGICAL,                INTENT(IN)   ::  OCLOSE_OUT   ! switch for synchronous
                                                       ! file opening
 CHARACTER(LEN=*),       INTENT(IN)   ::  HFMFILE      ! Name of the output
                                                       ! FM-file
@@ -161,7 +161,7 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
-LOGICAL,                INTENT(IN)   ::  OCLOSE_OUT   ! switch for syncronous
+LOGICAL,                INTENT(IN)   ::  OCLOSE_OUT   ! switch for synchronous
                                                       ! file opening
 CHARACTER(LEN=*),       INTENT(IN)   ::  HFMFILE      ! Name of the output
                                                       ! FM-file
@@ -232,7 +232,7 @@ REAL, DIMENSION(SIZE(PSVT,1),SIZE(PSVT,2),SIZE(PSVT,3),SIZE(PSVT,4)) :: ZSV
 ! Guess at the sub time step
 REAL, DIMENSION(SIZE(PRT,1), SIZE(PRT,2), SIZE(PRT,3), SIZE(PRT,4) ) :: ZRRS_OTHER
 REAL, DIMENSION(SIZE(PSVT,1),SIZE(PSVT,2),SIZE(PSVT,3),SIZE(PSVT,4)) :: ZRSVS_OTHER
-! Tendencie since the beginning of the time step
+! Tendencies since the beginning of the time step
 REAL, DIMENSION(SIZE(PRT,1), SIZE(PRT,2), SIZE(PRT,3), SIZE(PRT,4) ) :: ZRRS_PPM
 REAL, DIMENSION(SIZE(PSVT,1),SIZE(PSVT,2),SIZE(PSVT,3),SIZE(PSVT,4)) :: ZRSVS_PPM
 ! Guess at the end of the sub time step
@@ -458,7 +458,7 @@ CALL PPM_RHODJ(HLBCX,HLBCY, ZRUCPPM, ZRVCPPM, ZRWCPPM,              &
                ZTSTEP_PPM, PRHODJ, ZRHOX1, ZRHOX2, ZRHOY1, ZRHOY2,  &
                ZRHOZ1, ZRHOZ2                                       )
 !
-!* valuesw of the fields at the beginning of the time splitting loop
+!* values of the fields at the beginning of the time splitting loop
 ZTH   = PTHT
 ZTKE   = PTKET
 IF (KRR /=0 ) ZR    = PRT
@@ -469,10 +469,10 @@ IF (GTKE)    PRTKES_ADV(:,:,:)  = 0.
 !* time splitting loop
 DO JSPL=1,KSPLIT
 !
-   ZRTHS_PPM(:,:,:)   = 0.              
-   ZRTKES_PPM(:,:,:)   = 0.              
-   IF (KRR /=0) ZRRS_PPM(:,:,:,:)   = 0.              
-   IF (KSV /=0) ZRSVS_PPM(:,:,:,:)   = 0.              
+   !ZRTHS_PPM(:,:,:)   = 0.
+   !ZRTKES_PPM(:,:,:)   = 0.
+   !IF (KRR /=0) ZRRS_PPM(:,:,:,:)   = 0.
+   !IF (KSV /=0) ZRSVS_PPM(:,:,:,:)   = 0.
 !
    IF (LNEUTRAL) ZTH=ZTH-PTHVREF  !* To be removed with the new PPM scheme ?
    CALL PPM_MET (HLBCX,HLBCY, KRR, KTCOUNT, ZRUCPPM, ZRVCPPM, ZRWCPPM, ZTSTEP_PPM,    &
@@ -491,35 +491,36 @@ DO JSPL=1,KSPLIT
    IF (KRR /=0)  PRRS      (:,:,:,:) = PRRS      (:,:,:,:) + ZRRS_PPM  (:,:,:,:) / KSPLIT
    IF (KSV /=0 ) PRSVS     (:,:,:,:) = PRSVS     (:,:,:,:) + ZRSVS_PPM (:,:,:,:) / KSPLIT
 !
-!
-!  Guesses of the field inside the time splitting loop
-!
-   ZTH = ZTH + ( ZRTHS_PPM(:,:,:) + ZRTHS_OTHER(:,:,:) + PRTHS_CLD(:,:,:)) * &
-           ZTSTEP_PPM / PRHODJ(:,:,:)
-   IF (GTKE) ZTKE = ZTKE + ( ZRTKES_PPM(:,:,:) + ZRTKES_OTHER(:,:,:) ) * ZTSTEP_PPM / PRHODJ(:,:,:)
-   DO JR = 1, KRR
-    ZR(:,:,:,JR) = ZR(:,:,:,JR) + ( ZRRS_PPM(:,:,:,JR) + ZRRS_OTHER(:,:,:,JR) + PRRS_CLD(:,:,:,JR) ) &
-                    * ZTSTEP_PPM / PRHODJ(:,:,:)
-   END DO
-   DO JSV = 1, KSV
-    ZSV(:,:,:,JSV) = ZSV(:,:,:,JSV) + ( ZRSVS_PPM(:,:,:,JSV) + ZRSVS_OTHER(:,:,:,JSV) +  &
-                     PRSVS_CLD(:,:,:,JSV) ) * ZTSTEP_PPM / PRHODJ(:,:,:)
-   END DO
-!
-! Top and bottom Boundaries and LBC for the guesses
-!
-   CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZTH, PTHT )    
-   CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZTKE, PTKET)
-   DO JR = 1, KRR
-     CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZR(:,:,:,JR), PRT(:,:,:,JR))
-   END DO
-   DO JSV = 1, KSV
-     CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZSV(:,:,:,JSV), PSVT(:,:,:,JSV))
-   END DO
-!
-!  Exchanges fields between processors
-!
-   NULLIFY(TZFIELDS1_ll)
+   IF (JSPL<KSPLIT) THEN
+    !
+    !  Guesses of the field inside the time splitting loop
+    !
+    ZTH = ZTH + ( ZRTHS_PPM(:,:,:) + ZRTHS_OTHER(:,:,:) + PRTHS_CLD(:,:,:)) * &
+          ZTSTEP_PPM / PRHODJ(:,:,:)
+    IF (GTKE) ZTKE = ZTKE + ( ZRTKES_PPM(:,:,:) + ZRTKES_OTHER(:,:,:) ) * ZTSTEP_PPM / PRHODJ(:,:,:)
+    DO JR = 1, KRR
+      ZR(:,:,:,JR) = ZR(:,:,:,JR) + ( ZRRS_PPM(:,:,:,JR) + ZRRS_OTHER(:,:,:,JR) + PRRS_CLD(:,:,:,JR) ) &
+                     * ZTSTEP_PPM / PRHODJ(:,:,:)
+    END DO
+    DO JSV = 1, KSV
+      ZSV(:,:,:,JSV) = ZSV(:,:,:,JSV) + ( ZRSVS_PPM(:,:,:,JSV) + ZRSVS_OTHER(:,:,:,JSV) +  &
+                       PRSVS_CLD(:,:,:,JSV) ) * ZTSTEP_PPM / PRHODJ(:,:,:)
+    END DO
+    !
+    ! Top and bottom Boundaries and LBC for the guesses
+    !
+    CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZTH, PTHT )    
+    IF (GTKE) CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZTKE, PTKET)
+    DO JR = 1, KRR
+      CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZR(:,:,:,JR), PRT(:,:,:,JR))
+    END DO
+    DO JSV = 1, KSV
+      CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZSV(:,:,:,JSV), PSVT(:,:,:,JSV))
+    END DO
+    !
+    !  Exchanges fields between processors
+    !
+    NULLIFY(TZFIELDS1_ll)
 !!$   IF(NHALO == 1) THEN
     CALL ADD3DFIELD_ll(TZFIELDS1_ll, ZTH)
     IF (GTKE) CALL ADD3DFIELD_ll(TZFIELDS1_ll, ZTKE)
@@ -532,6 +533,7 @@ DO JSPL=1,KSPLIT
     CALL UPDATE_HALO_ll(TZFIELDS1_ll,IINFO_ll)
     CALL CLEANLIST_ll(TZFIELDS1_ll)
 !!$   END IF
+   END IF
 !
 END DO
 !
index b01a5a0..0e46a59 100644 (file)
@@ -286,22 +286,24 @@ DO JSPL=1,ISPLIT
   PRVS(:,:,:) = PRVS(:,:,:) + ZRVS_ADV(:,:,:) / ISPLIT
   PRWS(:,:,:) = PRWS(:,:,:) + ZRWS_ADV(:,:,:) / ISPLIT
 
-!
-! Guesses for next time splitting loop
-!
-  ZU(:,:,:) = ZU(:,:,:) + ZTSTEP / ZMXM_RHODJ *  &
-              (ZRUS_OTHER(:,:,:) + ZRUS_ADV(:,:,:))
-  ZV(:,:,:) = ZV(:,:,:) + ZTSTEP / ZMYM_RHODJ *  &
-              (ZRVS_OTHER(:,:,:) + ZRVS_ADV(:,:,:))
-  ZW(:,:,:) = ZW(:,:,:) + ZTSTEP / ZMZM_RHODJ *  &
+  IF (JSPL<ISPLIT) THEN
+    !
+    ! Guesses for next time splitting loop
+    !
+    ZU(:,:,:) = ZU(:,:,:) + ZTSTEP / ZMXM_RHODJ *  &
+                (ZRUS_OTHER(:,:,:) + ZRUS_ADV(:,:,:))
+    ZV(:,:,:) = ZV(:,:,:) + ZTSTEP / ZMYM_RHODJ *  &
+                (ZRVS_OTHER(:,:,:) + ZRVS_ADV(:,:,:))
+    ZW(:,:,:) = ZW(:,:,:) + ZTSTEP / ZMZM_RHODJ *  &
               (ZRWS_OTHER(:,:,:) + ZRWS_ADV(:,:,:))
-!
-! Top and bottom Boundaries 
-!
-  CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZU, PUT, 'U' )    
-  CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZV, PVT, 'V' )    
-  CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZW, PWT, 'W' )
-  ZW (:,:,IKE+1 ) = 0.
+    !
+    ! Top and bottom Boundaries
+    !
+    CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZU, PUT, 'U' )
+    CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZV, PVT, 'V' )
+    CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZW, PWT, 'W' )
+    ZW (:,:,IKE+1 ) = 0.
+  END IF
 !
 ! End of the time splitting loop
 END DO