Skip to content
Snippets Groups Projects
Commit aaaedd9a authored by ESCOBAR MUNOZ Juan's avatar ESCOBAR MUNOZ Juan
Browse files

Juan 04/11/2022:ZSOLVER/p_abs.f90, Special Optimization for CCE >= 1402 ,...

Juan 04/11/2022:ZSOLVER/p_abs.f90, Special Optimization for CCE >= 1402 , precompute PEXNREF_BR(...)
parent 65a8063d
No related branches found
No related tags found
No related merge requests found
...@@ -123,7 +123,7 @@ USE MODE_REPRO_SUM ...@@ -123,7 +123,7 @@ USE MODE_REPRO_SUM
#if defined(MNH_BITREP) || defined(MNH_BITREP_OMP) #if defined(MNH_BITREP) || defined(MNH_BITREP_OMP)
USE MODI_BITREP USE MODI_BITREP
#endif #endif
#ifdef MNH_BITREP_OMP #ifdef MNH_COMPILER_CCE
!$mnh_undef(LOOP) !$mnh_undef(LOOP)
!$mnh_undef(OPENACC) !$mnh_undef(OPENACC)
#endif #endif
...@@ -159,6 +159,9 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PRVREF ! vapor mixing ratio ...@@ -159,6 +159,9 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PRVREF ! vapor mixing ratio
! for the reference state ! for the reference state
REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXNREF! Exner function of the REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXNREF! Exner function of the
! reference state ! reference state
#ifdef MNH_COMPILER_CCE_1403
REAL, DIMENSION(:,:,:), POINTER , CONTIGUOUS :: PEXNREF_BR
#endif
! !
REAL, INTENT(INOUT) :: PPHI0 ! PHI0 at t REAL, INTENT(INOUT) :: PPHI0 ! PHI0 at t
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PPHIT ! Perturbation of REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PPHIT ! Perturbation of
...@@ -245,6 +248,9 @@ ALLOCATE (ZRTOT(IIU,IJU,IKU), ZRHOREF(IIU,IJU,IKU), ZWORK(IIU,IJU,IKU)) ...@@ -245,6 +248,9 @@ ALLOCATE (ZRTOT(IIU,IJU,IKU), ZRHOREF(IIU,IJU,IKU), ZWORK(IIU,IJU,IKU))
!Pin positions in the pools of MNH memory !Pin positions in the pools of MNH memory
CALL MNH_MEM_POSITION_PIN() CALL MNH_MEM_POSITION_PIN()
#ifdef MNH_COMPILER_CCE_1403
CALL MNH_MEM_GET(PEXNREF_BR , IIB,IIE , IJB,IJE, IKB,IKE)
#endif
CALL MNH_MEM_GET(ZMASS_O_PI_2D , IIB,IIE , IJB,IJE) CALL MNH_MEM_GET(ZMASS_O_PI_2D , IIB,IIE , IJB,IJE)
CALL MNH_MEM_GET(ZMASSGUESS_2D , IIB,IIE , IJB,IJE) CALL MNH_MEM_GET(ZMASSGUESS_2D , IIB,IIE , IJB,IJE)
CALL MNH_MEM_GET(ZWATERMASST_2D , IIB,IIE , IJB,IJE) CALL MNH_MEM_GET(ZWATERMASST_2D , IIB,IIE , IJB,IJE)
...@@ -290,23 +296,35 @@ IF ( CEQNSYS=='DUR' .OR. CEQNSYS=='MAE' ) THEN ...@@ -290,23 +296,35 @@ IF ( CEQNSYS=='DUR' .OR. CEQNSYS=='MAE' ) THEN
ZWORK(:,:,:)=PRHODJ * XTH00 & ZWORK(:,:,:)=PRHODJ * XTH00 &
/ ( PRHODREF * PTHVREF * (1. + PRVREF) ) / ( PRHODREF * PTHVREF * (1. + PRVREF) )
END IF END IF
! #ifdef MNH_COMPILER_CCE_1403
!$acc loop
!$mnh_do_concurrent(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE )
PEXNREF_BR(JI,JJ,JK)=BR_POW((PEXNREF(JI,JJ,JK)+PPHIT(JI,JJ,JK)),ZCVD_O_RD)
!$mnh_end_do()
#endif
!$acc end kernels
!$acc parallel
!$acc loop seq !$acc loop seq
DO JK = IKB,IKE DO JK = IKB,IKE
!$mnh_do_concurrent(JI = IIB:IIE , JJ = IJB:IJE ) !$acc loop independent
DO CONCURRENT ( JJ = IJB:IJE , JI = IIB:IIE )
ZMASSGUESS_2D(JI,JJ) = ZMASSGUESS_2D(JI,JJ) + & ZMASSGUESS_2D(JI,JJ) = ZMASSGUESS_2D(JI,JJ) + &
#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
(PEXNREF(JI,JJ,JK)+PPHIT(JI,JJ,JK))**ZCVD_O_RD & (PEXNREF(JI,JJ,JK)+PPHIT(JI,JJ,JK))**ZCVD_O_RD &
#else #else
#ifndef MNH_COMPILER_CCE_1403
BR_POW((PEXNREF(JI,JJ,JK)+PPHIT(JI,JJ,JK)),ZCVD_O_RD) & BR_POW((PEXNREF(JI,JJ,JK)+PPHIT(JI,JJ,JK)),ZCVD_O_RD) &
#else
PEXNREF_BR(JI,JJ,JK) &
#endif
#endif #endif
* ZWORK(JI,JJ,JK) / PTHETAV(JI,JJ,JK) * ZWORK(JI,JJ,JK) / PTHETAV(JI,JJ,JK)
ZMASS_O_PI_2D(JI,JJ) = ZMASS_O_PI_2D(JI,JJ) + ZWORK(JI,JJ,JK) / PTHETAV(JI,JJ,JK) ZMASS_O_PI_2D(JI,JJ) = ZMASS_O_PI_2D(JI,JJ) + ZWORK(JI,JJ,JK) / PTHETAV(JI,JJ,JK)
ZWATERMASST_2D(JI,JJ) = ZWATERMASST_2D(JI,JJ) + & ZWATERMASST_2D(JI,JJ) = ZWATERMASST_2D(JI,JJ) + &
ZRTOT(JI,JJ,JK) * ZWORK(JI,JJ,JK) * PRHODREF(JI,JJ,JK) ZRTOT(JI,JJ,JK) * ZWORK(JI,JJ,JK) * PRHODREF(JI,JJ,JK)
!$mnh_end_do() END DO
END DO END DO
!$acc end kernels !$acc end parallel
! !
ELSE ELSE
DO JK = IKB,IKE DO JK = IKB,IKE
...@@ -330,9 +348,9 @@ IF ( CEQNSYS=='DUR' .OR. CEQNSYS=='MAE' ) THEN ...@@ -330,9 +348,9 @@ IF ( CEQNSYS=='DUR' .OR. CEQNSYS=='MAE' ) THEN
! !
! !
!$acc update host(ZMASSGUESS_2D,ZMASS_O_PI_2D,ZWATERMASST_2D) !$acc update host(ZMASSGUESS_2D,ZMASS_O_PI_2D,ZWATERMASST_2D)
ZMASSGUESS = SUM_DD_R2_ll(ZMASSGUESS_2D) ZMASSGUESS = SUM_DD_R2_ll_DEVICE(ZMASSGUESS_2D)
ZMASS_O_PI = SUM_DD_R2_ll(ZMASS_O_PI_2D) ZMASS_O_PI = SUM_DD_R2_ll_DEVICE(ZMASS_O_PI_2D)
ZWATERMASST = SUM_DD_R2_ll(ZWATERMASST_2D) ZWATERMASST = SUM_DD_R2_ll_DEVICE(ZWATERMASST_2D)
! !
ZMASS_O_PI = ZMASS_O_PI*ZP00_O_RD*ZCVD_O_RD ZMASS_O_PI = ZMASS_O_PI*ZP00_O_RD*ZCVD_O_RD
ZPI0 = (PDRYMASST + ZWATERMASST - ZP00_O_RD*ZMASSGUESS ) / ZMASS_O_PI ZPI0 = (PDRYMASST + ZWATERMASST - ZP00_O_RD*ZMASSGUESS ) / ZMASS_O_PI
...@@ -349,19 +367,32 @@ IF ( CEQNSYS=='DUR' .OR. CEQNSYS=='MAE' ) THEN ...@@ -349,19 +367,32 @@ IF ( CEQNSYS=='DUR' .OR. CEQNSYS=='MAE' ) THEN
!$acc end kernels !$acc end kernels
IF ( CEQNSYS == 'DUR' ) THEN IF ( CEQNSYS == 'DUR' ) THEN
!$acc kernels !$acc kernels
#ifdef MNH_COMPILER_CCE_1403
!$acc loop
!$mnh_do_concurrent(JI=IIB:IIE,JJ=IJB:IJE,JK=IKB:IKE )
PEXNREF_BR(JI,JJ,JK)=BR_POW((PEXNREF(JI,JJ,JK)+PPHIT(JI,JJ,JK)),ZCVD_O_RD)
!$mnh_end_do()
#endif
!$acc end kernels
!$acc parallel
!$acc loop seq !$acc loop seq
DO JK = IKB,IKE DO JK = IKB,IKE
!$mnh_do_concurrent(JI = IIB:IIE , JJ = IJB:IJE ) !$acc loop independent
DO CONCURRENT ( JJ = IJB:IJE , JI = IIB:IIE )
ZMASSGUESS_2D(JI,JJ) = ZMASSGUESS_2D(JI,JJ) + & ZMASSGUESS_2D(JI,JJ) = ZMASSGUESS_2D(JI,JJ) + &
#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
(PEXNREF(JI,JJ,JK)+PPHIT(JI,JJ,JK))**ZCVD_O_RD & (PEXNREF(JI,JJ,JK)+PPHIT(JI,JJ,JK))**ZCVD_O_RD &
#else #else
#ifndef MNH_COMPILER_CCE_1403
BR_POW((PEXNREF(JI,JJ,JK)+PPHIT(JI,JJ,JK)),ZCVD_O_RD) & BR_POW((PEXNREF(JI,JJ,JK)+PPHIT(JI,JJ,JK)),ZCVD_O_RD) &
#else
PEXNREF_BR(JI,JJ,JK) &
#endif
#endif #endif
* ZWORK(JI,JJ,JK) / PTHETAV(JI,JJ,JK) * ZWORK(JI,JJ,JK) / PTHETAV(JI,JJ,JK)
!$mnh_end_do() END DO
END DO END DO
!$acc end kernels !$acc end parallel
ELSE ELSE
DO JK = IKB,IKE DO JK = IKB,IKE
DO JJ = IJB,IJE DO JJ = IJB,IJE
...@@ -379,7 +410,7 @@ IF ( CEQNSYS=='DUR' .OR. CEQNSYS=='MAE' ) THEN ...@@ -379,7 +410,7 @@ IF ( CEQNSYS=='DUR' .OR. CEQNSYS=='MAE' ) THEN
END IF END IF
! !
!$acc update host(ZMASSGUESS_2D) !$acc update host(ZMASSGUESS_2D)
ZMASSGUESS = SUM_DD_R2_ll(ZMASSGUESS_2D) ZMASSGUESS = SUM_DD_R2_ll_DEVICE(ZMASSGUESS_2D)
! !
ZPI0 = (PDRYMASST + ZWATERMASST - ZP00_O_RD*ZMASSGUESS ) / ZMASS_O_PI ZPI0 = (PDRYMASST + ZWATERMASST - ZP00_O_RD*ZMASSGUESS ) / ZMASS_O_PI
!$acc kernels !$acc kernels
......
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