Skip to content
Snippets Groups Projects
Commit a96384ab authored by WAUTELET Philippe's avatar WAUTELET Philippe
Browse files

Philippe 02/07/2019: add shape of arrays in computation terms (necessary to...

Philippe 02/07/2019: add shape of arrays in computation terms (necessary to get good performance with PGI and OpenACC)
parent ce7f82fb
No related branches found
No related tags found
No related merge requests found
...@@ -466,7 +466,7 @@ END IF ...@@ -466,7 +466,7 @@ END IF
!PW: not necessary: data already on device due to contrav_device !$acc update device(ZRUCPPM,ZRVCPPM,ZRWCPPM) !PW: not necessary: data already on device due to contrav_device !$acc update device(ZRUCPPM,ZRVCPPM,ZRWCPPM)
!$acc kernels !$acc kernels
IF (.NOT. L1D) THEN IF (.NOT. L1D) THEN
ZCFLU = 0.0 ; ZCFLV = 0.0 ; ZCFLW = 0.0 ZCFLU(:,:,:) = 0.0 ; ZCFLV(:,:,:) = 0.0 ; ZCFLW(:,:,:) = 0.0
ZCFLU(IIB:IIE,IJB:IJE,:) = ABS(ZRUCPPM(IIB:IIE,IJB:IJE,:) * PTSTEP) ZCFLU(IIB:IIE,IJB:IJE,:) = ABS(ZRUCPPM(IIB:IIE,IJB:IJE,:) * PTSTEP)
ZCFLV(IIB:IIE,IJB:IJE,:) = ABS(ZRVCPPM(IIB:IIE,IJB:IJE,:) * PTSTEP) ZCFLV(IIB:IIE,IJB:IJE,:) = ABS(ZRVCPPM(IIB:IIE,IJB:IJE,:) * PTSTEP)
ZCFLW(IIB:IIE,IJB:IJE,:) = ABS(ZRWCPPM(IIB:IIE,IJB:IJE,:) * PTSTEP) ZCFLW(IIB:IIE,IJB:IJE,:) = ABS(ZRWCPPM(IIB:IIE,IJB:IJE,:) * PTSTEP)
...@@ -648,8 +648,8 @@ ZRWCPPM = ZRWCPPM*ZTSTEP_PPM ...@@ -648,8 +648,8 @@ ZRWCPPM = ZRWCPPM*ZTSTEP_PPM
! Clouds related processes from previous time-step are taken into account in PRTHS_CLD ! Clouds related processes from previous time-step are taken into account in PRTHS_CLD
! Advection related processes from previous time-step will be taken into account in ZRTHS_PPM ! Advection related processes from previous time-step will be taken into account in ZRTHS_PPM
! !
ZRTHS_OTHER = PRTHS - PTHT * PRHODJ / PTSTEP ZRTHS_OTHER(:,:,:) = PRTHS(:,:,:) - PTHT(:,:,:) * PRHODJ(:,:,:) / PTSTEP
IF (GTKE) ZRTKES_OTHER = PRTKES - PTKET * PRHODJ / PTSTEP IF (GTKE) ZRTKES_OTHER(:,:,:) = PRTKES(:,:,:) - PTKET(:,:,:) * PRHODJ(:,:,:) / PTSTEP
DO JR = 1, KRR DO JR = 1, KRR
ZRRS_OTHER(:,:,:,JR) = PRRS(:,:,:,JR) - PRT(:,:,:,JR) * PRHODJ(:,:,:) / PTSTEP ZRRS_OTHER(:,:,:,JR) = PRRS(:,:,:,JR) - PRT(:,:,:,JR) * PRHODJ(:,:,:) / PTSTEP
END DO END DO
...@@ -776,9 +776,9 @@ DO JSPL=1,KSPLIT ...@@ -776,9 +776,9 @@ DO JSPL=1,KSPLIT
! !
! Guesses of the field inside the time splitting loop ! Guesses of the field inside the time splitting loop
! !
ZTH = ZTH + ( ZRTHS_PPM(:,:,:) + ZRTHS_OTHER(:,:,:) + PRTHS_CLD(:,:,:)) * & ZTH(:,:,:) = ZTH(:,:,:) + ( ZRTHS_PPM(:,:,:) + ZRTHS_OTHER(:,:,:) + PRTHS_CLD(:,:,:)) * &
ZTSTEP_PPM / PRHODJ(:,:,:) ZTSTEP_PPM / PRHODJ(:,:,:)
IF (GTKE) ZTKE = ZTKE + ( ZRTKES_PPM(:,:,:) + ZRTKES_OTHER(:,:,:) ) * ZTSTEP_PPM / PRHODJ(:,:,:) IF (GTKE) ZTKE(:,:,:) = ZTKE(:,:,:) + ( ZRTKES_PPM(:,:,:) + ZRTKES_OTHER(:,:,:) ) * ZTSTEP_PPM / PRHODJ(:,:,:)
DO JR = 1, KRR DO JR = 1, KRR
ZR(:,:,:,JR) = ZR(:,:,:,JR) + ( ZRRS_PPM(:,:,:,JR) + ZRRS_OTHER(:,:,:,JR) + PRRS_CLD(:,:,:,JR) ) & ZR(:,:,:,JR) = ZR(:,:,:,JR) + ( ZRRS_PPM(:,:,:,JR) + ZRRS_OTHER(:,:,:,JR) + PRRS_CLD(:,:,:,JR) ) &
* ZTSTEP_PPM / PRHODJ(:,:,:) * ZTSTEP_PPM / PRHODJ(:,:,:)
......
...@@ -332,9 +332,9 @@ CALL MZM_DEVICE(PRHODJ,ZMZM_RHODJ) ...@@ -332,9 +332,9 @@ CALL MZM_DEVICE(PRHODJ,ZMZM_RHODJ)
! ------------------------------------- ! -------------------------------------
! !
!$acc kernels !$acc kernels
ZRUT = PUT(:,:,:) * ZMXM_RHODJ ZRUT(:,:,:) = PUT(:,:,:) * ZMXM_RHODJ(:,:,:)
ZRVT = PVT(:,:,:) * ZMYM_RHODJ ZRVT(:,:,:) = PVT(:,:,:) * ZMYM_RHODJ(:,:,:)
ZRWT = PWT(:,:,:) * ZMZM_RHODJ ZRWT(:,:,:) = PWT(:,:,:) * ZMZM_RHODJ(:,:,:)
!$acc end kernels !$acc end kernels
!$acc update self(ZRUT,ZRVT) !$acc update self(ZRUT,ZRVT)
! !
...@@ -373,9 +373,9 @@ NULLIFY(TZFIELDS_ll) ...@@ -373,9 +373,9 @@ NULLIFY(TZFIELDS_ll)
! !
!$acc update device(PRUS,PRVS,PRWS) !$acc update device(PRUS,PRVS,PRWS)
!$acc kernels !$acc kernels
ZRUS_OTHER = PRUS - ZRUT / PTSTEP + PRUS_PRES ZRUS_OTHER(:,:,:) = PRUS(:,:,:) - ZRUT(:,:,:) / PTSTEP + PRUS_PRES(:,:,:)
ZRVS_OTHER = PRVS - ZRVT / PTSTEP + PRVS_PRES ZRVS_OTHER(:,:,:) = PRVS(:,:,:) - ZRVT(:,:,:) / PTSTEP + PRVS_PRES(:,:,:)
ZRWS_OTHER = PRWS - ZRWT / PTSTEP + PRWS_PRES ZRWS_OTHER(:,:,:) = PRWS(:,:,:) - ZRWT(:,:,:) / PTSTEP + PRWS_PRES(:,:,:)
!$acc end kernels !$acc end kernels
! !
! Top and bottom Boundaries ! Top and bottom Boundaries
...@@ -420,9 +420,9 @@ ZTSTEP = PTSTEP / REAL(ISPLIT) ...@@ -420,9 +420,9 @@ ZTSTEP = PTSTEP / REAL(ISPLIT)
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
! !
!$acc kernels !$acc kernels
ZU = PUT ZU(:,:,:) = PUT(:,:,:)
ZV = PVT ZV(:,:,:) = PVT(:,:,:)
ZW = PWT ZW(:,:,:) = PWT(:,:,:)
!$acc end kernels !$acc end kernels
!$acc update self(ZU,ZV,ZW) !$acc update self(ZU,ZV,ZW)
! !
......
...@@ -239,19 +239,19 @@ CALL MZM_DEVICE(PRHODJ,ZMZM_RHODJ) ...@@ -239,19 +239,19 @@ CALL MZM_DEVICE(PRHODJ,ZMZM_RHODJ)
! ------------------------------------- ! -------------------------------------
! !
!$acc kernels present(ZRUT,ZRVT,ZRWT,PUT,PVT,PWT,ZMXM_RHODJ,ZMYM_RHODJ,ZMZM_RHODJ) !$acc kernels present(ZRUT,ZRVT,ZRWT,PUT,PVT,PWT,ZMXM_RHODJ,ZMYM_RHODJ,ZMZM_RHODJ)
ZRUT = PUT(:,:,:) * ZMXM_RHODJ ZRUT(:,:,:) = PUT(:,:,:) * ZMXM_RHODJ(:,:,:)
ZRVT = PVT(:,:,:) * ZMYM_RHODJ ZRVT(:,:,:) = PVT(:,:,:) * ZMYM_RHODJ(:,:,:)
ZRWT = PWT(:,:,:) * ZMZM_RHODJ ZRWT(:,:,:) = PWT(:,:,:) * ZMZM_RHODJ(:,:,:)
!$acc end kernels !$acc end kernels
! !
#ifndef _OPENACC #ifndef _OPENACC
IF (HUVW_ADV_SCHEME=='CEN2ND' ) THEN IF (HUVW_ADV_SCHEME=='CEN2ND' ) THEN
CALL CONTRAV (HLBCX,HLBCY,ZRUT,ZRVT,ZRWT,PDXX,PDYY,PDZZ,PDZX,PDZY,ZRUCT,ZRVCT,ZRWCT,2) CALL CONTRAV (HLBCX,HLBCY,ZRUT,ZRVT,ZRWT,PDXX,PDYY,PDZZ,PDZX,PDZY,ZRUCT,ZRVCT,ZRWCT,2)
ELSEIF (HUVW_ADV_SCHEME=='CEN4TH') THEN ELSEIF (HUVW_ADV_SCHEME=='CEN4TH') THEN
CALL CONTRAV (HLBCX,HLBCY,ZRUT,ZRVT,ZRWT,PDXX,PDYY,PDZZ,PDZX,PDZY,ZRUCT,ZRVCT,ZRWCT,4) CALL CONTRAV (HLBCX,HLBCY,ZRUT,ZRVT,ZRWT,PDXX,PDYY,PDZZ,PDZX,PDZY,ZRUCT,ZRVCT,ZRWCT,4)
END IF END IF
#else #else
IF (HUVW_ADV_SCHEME=='CEN2ND' ) THEN IF (HUVW_ADV_SCHEME=='CEN2ND' ) THEN
CALL CONTRAV_DEVICE (HLBCX,HLBCY,ZRUT,ZRVT,ZRWT,PDXX,PDYY,PDZZ,PDZX,PDZY,ZRUCT,ZRVCT,ZRWCT,2, & CALL CONTRAV_DEVICE (HLBCX,HLBCY,ZRUT,ZRVT,ZRWT,PDXX,PDYY,PDZZ,PDZX,PDZY,ZRUCT,ZRVCT,ZRWCT,2, &
ZT3D(:,:,:,IZ1),ZT3D(:,:,:,IZ2),ODATA_ON_DEVICE=.TRUE.) ZT3D(:,:,:,IZ1),ZT3D(:,:,:,IZ2),ODATA_ON_DEVICE=.TRUE.)
ELSEIF (HUVW_ADV_SCHEME=='CEN4TH') THEN ELSEIF (HUVW_ADV_SCHEME=='CEN4TH') THEN
...@@ -277,9 +277,9 @@ NULLIFY(TZFIELDS_ll) ...@@ -277,9 +277,9 @@ NULLIFY(TZFIELDS_ll)
! ---------------------------- ! ----------------------------
! !
!$acc kernels present(ZRUS,ZRVS,ZRWS,PUM,PVM,PWM,ZMXM_RHODJ,ZMYM_RHODJ,ZMZM_RHODJ) !$acc kernels present(ZRUS,ZRVS,ZRWS,PUM,PVM,PWM,ZMXM_RHODJ,ZMYM_RHODJ,ZMZM_RHODJ)
ZRUS(:,:,:) = PUM(:,:,:) * ZMXM_RHODJ/(2.*PTSTEP) ZRUS(:,:,:) = PUM(:,:,:) * ZMXM_RHODJ(:,:,:)/(2.*PTSTEP)
ZRVS(:,:,:) = PVM(:,:,:) * ZMYM_RHODJ/(2.*PTSTEP) ZRVS(:,:,:) = PVM(:,:,:) * ZMYM_RHODJ(:,:,:)/(2.*PTSTEP)
ZRWS(:,:,:) = PWM(:,:,:) * ZMZM_RHODJ/(2.*PTSTEP) ZRWS(:,:,:) = PWM(:,:,:) * ZMZM_RHODJ(:,:,:)/(2.*PTSTEP)
!$acc end kernels !$acc end kernels
! !
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
...@@ -306,21 +306,21 @@ END IF ...@@ -306,21 +306,21 @@ END IF
!$acc kernels present(ZRUS,ZRVS,ZRWS) present(ZUS,ZVS,ZWS) present(PUM,PVM,PWM) & !$acc kernels present(ZRUS,ZRVS,ZRWS) present(ZUS,ZVS,ZWS) present(PUM,PVM,PWM) &
!$acc & present(ZMXM_RHODJ,ZMYM_RHODJ,ZMZM_RHODJ) pcopy(PDUM,PDVM,PDWM,PRUS,PRVS,PRWS) !$acc & present(ZMXM_RHODJ,ZMYM_RHODJ,ZMZM_RHODJ) pcopy(PDUM,PDVM,PDWM,PRUS,PRVS,PRWS)
!default added in OpenACC 2.5 !!$acc & default(none) !default added in OpenACC 2.5 !!$acc & default(none)
ZUS = ZRUS(:,:,:)/ZMXM_RHODJ*2.*PTSTEP ZUS(:,:,:) = ZRUS(:,:,:)/ZMXM_RHODJ(:,:,:)*2.*PTSTEP
ZVS = ZRVS(:,:,:)/ZMYM_RHODJ*2.*PTSTEP ZVS(:,:,:) = ZRVS(:,:,:)/ZMYM_RHODJ(:,:,:)*2.*PTSTEP
ZWS = ZRWS(:,:,:)/ZMZM_RHODJ*2.*PTSTEP ZWS(:,:,:) = ZRWS(:,:,:)/ZMZM_RHODJ(:,:,:)*2.*PTSTEP
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
! !
!* 5. Extracts the variation between current and future time step !* 5. Extracts the variation between current and future time step
! ----------------------------------------------------------- ! -----------------------------------------------------------
! !
PRUS(:,:,:) = PRUS(:,:,:) + ( ZUS(:,:,:) - PUM(:,:,:) - 0.5* PDUM) * ZMXM_RHODJ/(PTSTEP) PRUS(:,:,:) = PRUS(:,:,:) + ( ZUS(:,:,:) - PUM(:,:,:) - 0.5* PDUM(:,:,:)) * ZMXM_RHODJ(:,:,:)/(PTSTEP)
PRVS(:,:,:) = PRVS(:,:,:) + ( ZVS(:,:,:) - PVM(:,:,:) - 0.5* PDVM) * ZMYM_RHODJ/(PTSTEP) PRVS(:,:,:) = PRVS(:,:,:) + ( ZVS(:,:,:) - PVM(:,:,:) - 0.5* PDVM(:,:,:)) * ZMYM_RHODJ(:,:,:)/(PTSTEP)
PRWS(:,:,:) = PRWS(:,:,:) + ( ZWS(:,:,:) - PWM(:,:,:) - 0.5* PDWM) * ZMZM_RHODJ/(PTSTEP) PRWS(:,:,:) = PRWS(:,:,:) + ( ZWS(:,:,:) - PWM(:,:,:) - 0.5* PDWM(:,:,:)) * ZMZM_RHODJ(:,:,:)/(PTSTEP)
! !
PDUM = ZUS(:,:,:) - PUM(:,:,:) PDUM(:,:,:) = ZUS(:,:,:) - PUM(:,:,:)
PDVM = ZVS(:,:,:) - PVM(:,:,:) PDVM(:,:,:) = ZVS(:,:,:) - PVM(:,:,:)
PDWM = ZWS(:,:,:) - PWM(:,:,:) PDWM(:,:,:) = ZWS(:,:,:) - PWM(:,:,:)
!$acc end kernels !$acc end kernels
! !
IF (LBUDGET_U) CALL BUDGET (PRUS,1,'ADV_BU_RU') IF (LBUDGET_U) CALL BUDGET (PRUS,1,'ADV_BU_RU')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment