From b24dac2a13e46db14364eeae3135303b44829457 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Fri, 17 Jun 2016 10:11:28 +0200 Subject: [PATCH] Philippe 17/06/2016: optimisations: removed unnecessary operations when JSPL=K/ISPLIT, removed unnecessary initialisations --- src/MNH/advection_metsv.f90 | 76 +++++++++++++++++++------------------ src/MNH/advection_uvw.f90 | 32 ++++++++-------- 2 files changed, 56 insertions(+), 52 deletions(-) diff --git a/src/MNH/advection_metsv.f90 b/src/MNH/advection_metsv.f90 index 60d68a9f6..42fd18021 100644 --- a/src/MNH/advection_metsv.f90 +++ b/src/MNH/advection_metsv.f90 @@ -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 ! diff --git a/src/MNH/advection_uvw.f90 b/src/MNH/advection_uvw.f90 index b01a5a02d..0e46a592c 100644 --- a/src/MNH/advection_uvw.f90 +++ b/src/MNH/advection_uvw.f90 @@ -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 -- GitLab