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

Philippe 19/01/2017: OpenACC: gradient + shuman: ported modifications to...

Philippe 19/01/2017: OpenACC: gradient + shuman: ported modifications to device versions of subroutines
parent a50aac04
No related branches found
No related tags found
No related merge requests found
......@@ -859,8 +859,8 @@ INTEGER IIU,IJU,IKU,JI
IIU=SIZE(PY,1)
IJU=SIZE(PY,2)
IKU=SIZE(PY,3)
IF (.NOT. LFLAT) THEN
!$acc kernels
IF (.NOT. LFLAT) THEN
PGX_M_U(1+JPHEXT:IIU,1:IJU,1+JPVEXT_TURB:IKU-JPVEXT_TURB) = &
( PY(1+JPHEXT:IIU,1:IJU,1+JPVEXT_TURB:IKU-JPVEXT_TURB)-PY(JPHEXT:IIU-1,1:IJU,1+JPVEXT_TURB:IKU-JPVEXT_TURB) &
-( (PY(1+JPHEXT:IIU,1:IJU,1+JPVEXT_TURB:IKU-JPVEXT_TURB)-PY(1+JPHEXT:IIU,1:IJU,JPVEXT_TURB:IKU-JPVEXT_TURB-1)) &
......@@ -877,21 +877,16 @@ PGX_M_U(1+JPHEXT:IIU,1:IJU,1+JPVEXT_TURB:IKU-JPVEXT_TURB) = &
!
DO JI=1+JPHEXT,IIU
PGX_M_U(JI,:,KKU)= ( PY(JI,:,KKU)-PY(JI-1,:,KKU) ) / PDXX(JI,:,KKU)
PGX_M_U(JI,:,KKA)= -999.
PGX_M_U(JI,:,KKA)= PGX_M_U(JI,:,KKU) ! -999.
END DO
!
PGX_M_U(1,:,:)=PGX_M_U(IIU-2*JPHEXT+1,:,:)
!$acc end kernels
ELSE
!$acc kernels
PGX_M_U(1+JPHEXT:IIU,:,:) = ( PY(1+JPHEXT:IIU,:,:)-PY(JPHEXT:IIU-1,:,:) ) &
/ PDXX(1+JPHEXT:IIU,:,:)
!
PGX_M_U(1,:,:)=PGX_M_U(IIU-2*JPHEXT+1,:,:)
!$acc end kernels
!
PGX_M_U(1+1:IIU,:,:) = ( PY(1+1:IIU,:,:)-PY(1:IIU-1,:,:) ) & ! +JPHEXT
/ PDXX(1+1:IIU,:,:)
ENDIF
DO JI=1,JPHEXT
PGX_M_U(JI,:,:)=PGX_M_U(IIU-2*JPHEXT+JI,:,:) ! for reprod JPHEXT <> 1
END DO
!$acc end kernels
!
!-------------------------------------------------------------------------------
......@@ -1061,8 +1056,8 @@ INTEGER IJU,IKU,JJ,JK
!
IJU=SIZE(PY,2)
IKU=SIZE(PY,3)
IF (.NOT. LFLAT) THEN
!$acc kernels
IF (.NOT. LFLAT) THEN
DO JK=1+JPVEXT_TURB,IKU-JPVEXT_TURB
DO JJ=1+JPHEXT,IJU
PGY_M_V(:,JJ,JK)= &
......@@ -1079,19 +1074,16 @@ IF (.NOT. LFLAT) THEN
!
DO JJ=1+JPHEXT,IJU
PGY_M_V(:,JJ,KKU)= ( PY(:,JJ,KKU)-PY(:,JJ-1,KKU) ) / PDYY(:,JJ,KKU)
PGY_M_V(:,JJ,KKA)= -999.
PGY_M_V(:,JJ,KKA)= PGY_M_V(:,JJ,KKU) ! -999.
END DO
!
PGY_M_V(:,1,:)=PGY_M_V(:,IJU-2*JPHEXT+1,:)
!$acc end kernels
ELSE
!$acc kernels
PGY_M_V(:,1+JPHEXT:IJU,:) = ( PY(:,1+JPHEXT:IJU,:)-PY(:,JPHEXT:IJU-1,:) ) &
/ PDYY(:,1+JPHEXT:IJU,:)
!
PGY_M_V(:,1,:)=PGY_M_V(:,IJU-2*JPHEXT+1,:)
!$acc end kernels
PGY_M_V(:,1+1:IJU,:) = ( PY(:,1+1:IJU,:)-PY(:,1:IJU-1,:) ) & ! +JPHEXT
/ PDYY(:,1+1:IJU,:)
ENDIF
DO JJ=1,JPHEXT
PGY_M_V(:,JJ,:)=PGY_M_V(:,IJU-2*JPHEXT+JJ,:)
END DO
!$acc end kernels
!
!-------------------------------------------------------------------------------
!
......@@ -1230,7 +1222,7 @@ PGZ_M_W(:,:,IKTB:IKTE) = (PY(:,:,IKTB:IKTE)-PY(:,:,IKTB-KL:IKTE-KL)) &
/ PDZZ(:,:,IKTB:IKTE)
PGZ_M_W(:,:,KKU)= (PY(:,:,KKU)-PY(:,:,KKU-KL)) &
/ PDZZ(:,:,KKU)
PGZ_M_W(:,:,KKA)=-999.
PGZ_M_W(:,:,KKA)= PGZ_M_W(:,:,KKU) ! -999.
!$acc end kernels
!
!-------------------------------------------------------------------------------
......
......@@ -143,6 +143,8 @@ END MODULE MODI_SHUMAN_DEVICE
!! Original 04/07/94
!! Modification to include the periodic case 13/10/94 J.Stein
!! optimisation 20/08/00 J. Escobar
!! correction of in halo/pseudo-cyclic calculation for JPHEXT<> 1
!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
......@@ -184,7 +186,7 @@ IKU = SIZE(PA,3)
!$acc kernels present(PMXF,PA)
DO JK = 1, IKU
DO JJ = 1, IJU
DO JI = 1 + JPHEXT, IIU
DO JI = 1 + 1, IIU
PMXF(JI-1,JJ,JK) = 0.5*( PA(JI-1,JJ,JK)+PA(JI,JJ,JK) )
ENDDO
ENDDO
......@@ -193,7 +195,7 @@ ENDDO
PMXF(IIU,:,:) = PMXF(2*JPHEXT,:,:)
!$acc end kernels
#else
JIJKOR = 1 + JPHEXT
JIJKOR = 1 + 1
JIJKEND = IIU*IJU*IKU
!
!$acc kernels present(PMXF,PA)
......@@ -205,8 +207,10 @@ END DO
!
!CDIR NODEP
!OCL NOVREC
DO JJK=1,IJU*IKU
PMXF(IIU,JJK,1) = PMXF(2*JPHEXT,JJK,1)
DO JI=1,JPHEXT
DO JJK=1,IJU*IKU
PMXF(IIU-JPHEXT+JI,JJK,1) = PMXF(JPHEXT+JI,JJK,1) ! for reprod JPHEXT <> 1
END DO
END DO
!$acc end kernels
#endif
......@@ -260,6 +264,8 @@ END SUBROUTINE MXF_DEVICE
!! Original 04/07/94
!! Modification to include the periodic case 13/10/94 J.Stein
!! optimisation 20/08/00 J. Escobar
!! correction of in halo/pseudo-cyclic calculation for JPHEXT<> 1
!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
......@@ -303,7 +309,7 @@ IKU = SIZE(PA,3)
!$acc kernels present(PA,PMXM)
DO JK = 1, IKU
DO JJ = 1, IJU
DO JI = 1 + JPHEXT, IIU
DO JI = 1 + 1, IIU
PMXM(JI,JJ,JK) = 0.5*( PA(JI,JJ,JK)+PA(JI-1,JJ,JK) )
ENDDO
ENDDO
......@@ -316,7 +322,7 @@ DO JK = 1, IKU
ENDDO
!$acc end kernels
#else
JIJKOR = 1 + JPHEXT
JIJKOR = 1 + 1
JIJKEND = IIU*IJU*IKU
!
!CDIR NODEP
......@@ -328,8 +334,10 @@ END DO
!
!CDIR NODEP
!OCL NOVREC
DO JJK=1,IJU*IKU
PMXM(1,JJK,1) = PMXM(IIU-2*JPHEXT+1,JJK,1)
DO JI=1,JPHEXT
DO JJK=1,IJU*IKU
PMXM(JI,JJK,1) = PMXM(IIU-2*JPHEXT+JI,JJK,1) ! for reprod JPHEXT <> 1
END DO
END DO
!$acc end kernels
#endif
......@@ -383,6 +391,8 @@ END SUBROUTINE MXM_DEVICE
!! Original 04/07/94
!! Modification to include the periodic case 13/10/94 J.Stein
!! optimisation 20/08/00 J. Escobar
!! correction of in halo/pseudo-cyclic calculation for JPHEXT<> 1
!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
......@@ -419,8 +429,8 @@ IIU = SIZE(PA,1)
IJU = SIZE(PA,2)
IKU = SIZE(PA,3)
!
#ifndef _OPT_LINEARIZED_LOOPS
!$acc kernels present(PA,PMYF)
#ifndef _OPT_LINEARIZED_LOOPS
DO JK=1,IKU
DO JJ=1,IJU-1
DO JI=1,IIU !TODO: remplacer le 1 par JPHEXT ?
......@@ -428,23 +438,22 @@ DO JK=1,IKU
END DO
END DO
END DO
!
PMYF(:,IJU,:) = PMYF(:,2*JPHEXT,:)
!$acc end kernels
#else
JIJKOR = 1 + IIU
JIJKEND = IIU*IJU*IKU
!
!$acc kernels present(PA,PMYF)
!CDIR NODEP
!OCL NOVREC
DO JIJK=JIJKOR , JIJKEND
PMYF(JIJK-IIU,1,1) = 0.5*( PA(JIJK-IIU,1,1)+PA(JIJK,1,1) )
END DO
#endif
!
PMYF(:,IJU,:) = PMYF(:,2*JPHEXT,:)
DO JJ=1,JPHEXT
PMYF(:,IJU-JPHEXT+JJ,:) = PMYF(:,JPHEXT+JJ,:) ! for reprod JPHEXT <> 1
END DO
!$acc end kernels
#endif
!
!
!-------------------------------------------------------------------------------
!
......@@ -495,6 +504,8 @@ END SUBROUTINE MYF_DEVICE
!! Original 04/07/94
!! Modification to include the periodic case 13/10/94 J.Stein
!! optimisation 20/08/00 J. Escobar
!! correction of in halo/pseudo-cyclic calculation for JPHEXT<> 1
!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
......@@ -542,9 +553,6 @@ DO JK=1,IKU
END DO
END DO
END DO
!
PMYM(:,1,:) = PMYM(:,IJU-2*JPHEXT+1,:)
!$acc end kernels
#else
JIJKOR = 1 + IIU
JIJKEND = IIU*IJU*IKU
......@@ -554,10 +562,12 @@ JIJKEND = IIU*IJU*IKU
DO JIJK=JIJKOR , JIJKEND
PMYM(JIJK,1,1) = 0.5*( PA(JIJK,1,1)+PA(JIJK-IIU,1,1) )
END DO
#endif
!
PMYM(:,1,:) = PMYM(:,IJU-2*JPHEXT+1,:)
DO JJ=1,JPHEXT
PMYM(:,JJ,:) = PMYM(:,IJU-2*JPHEXT+JJ,:) ! for reprod JPHEXT <> 1
END DO
!$acc end kernels
#endif
!
!-------------------------------------------------------------------------------
!
......@@ -661,7 +671,7 @@ END DO
!CDIR NODEP
!OCL NOVREC
DO JIJ=1,IIU*IJU
PMZF(JIJ,1,IKU) = -999.
PMZF(JIJ,1,IKU) = PMZF(JIJ,1,IKU-1) !-999.
END DO
!$acc end kernels
#endif
......@@ -825,6 +835,8 @@ END SUBROUTINE MZM_DEVICE
!! Original 05/07/94
!! Modification to include the periodic case 13/10/94 J.Stein
!! optimisation 20/08/00 J. Escobar
!! correction of in halo/pseudo-cyclic calculation for JPHEXT<> 1
!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
......@@ -866,7 +878,7 @@ IKU = SIZE(PA,3)
!$acc kernels present(PA,PDXF)
DO JK=1,IKU
DO JJ=1,IJU
DO JI=1+JPHEXT,IIU
DO JI=1+1,IIU
PDXF(JI-1,JJ,JK) = PA(JI,JJ,JK) - PA(JI-1,JJ,JK)
END DO
END DO
......@@ -879,7 +891,7 @@ DO JK=1,IKU
ENDDO
!$acc end kernels
#else
JIJKOR = 1 + JPHEXT
JIJKOR = 1 + 1
JIJKEND = IIU*IJU*IKU
!
!$acc kernels present(PA,PDXF)
......@@ -891,8 +903,10 @@ END DO
!
!CDIR NODEP
!OCL NOVREC
DO JJK=1,IJU*IKU
PDXF(IIU,JJK,1) = PDXF(2*JPHEXT,JJK,1)
DO JI=1,JPHEXT
DO JJK=1,IJU*IKU
PDXF(IIU-JPHEXT+JI,JJK,1) = PDXF(JPHEXT+JI,JJK,1) ! for reprod JPHEXT <> 1
END DO
END DO
!$acc end kernels
#endif
......@@ -1011,8 +1025,10 @@ END DO
!
!CDIR NODEP
!OCL NOVREC
DO JJK=1,IJU*IKU
PDXM(1,JJK,1) = PDXM(IIU-2*JPHEXT+1,JJK,1)
DO JI=1,JPHEXT
DO JJK=1,IJU*IKU
PDXM(JI,JJK,1) = PDXM(IIU-2*JPHEXT+JI,JJK,1) ! for reprod JPHEXT <> 1
END DO
END DO
!$acc end kernels
#endif
......@@ -1066,6 +1082,8 @@ END SUBROUTINE DXM_DEVICE
!! Original 05/07/94
!! Modification to include the periodic case 13/10/94 J.Stein
!! optimisation 20/08/00 J. Escobar
!! correction of in halo/pseudo-cyclic calculation for JPHEXT<> 1
!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
......@@ -1101,8 +1119,8 @@ IIU = SIZE(PA,1)
IJU = SIZE(PA,2)
IKU = SIZE(PA,3)
!
#ifndef _OPT_LINEARIZED_LOOPS
!$acc kernels present(PA,PDYF)
#ifndef _OPT_LINEARIZED_LOOPS
DO JK=1,IKU
DO JJ=1,IJU-1 !TODO: remplacer le 1 par JPHEXT ?
DO JI=1,IIU
......@@ -1110,23 +1128,21 @@ DO JK=1,IKU
END DO
END DO
END DO
!
PDYF(:,IJU,:) = PDYF(:,2*JPHEXT,:)
!$acc end kernels
#else
JIJKOR = 1 + IIU
JIJKEND = IIU*IJU*IKU
!
!$acc kernels present(PA,PDYF)
!CDIR NODEP
!OCL NOVREC
DO JIJK=JIJKOR , JIJKEND
PDYF(JIJK-IIU,1,1) = PA(JIJK,1,1) - PA(JIJK-IIU,1,1)
END DO
#endif
!
PDYF(:,IJU,:) = PDYF(:,2*JPHEXT,:)
DO JJ=1,JPHEXT
PDYF(:,IJU-JPHEXT+JJ,:) = PDYF(:,JPHEXT+JJ,:) ! for reprod JPHEXT <> 1
END DO
!$acc end kernels
#endif
!
!-------------------------------------------------------------------------------
!
......@@ -1177,6 +1193,8 @@ END SUBROUTINE DYF_DEVICE
!! Original 05/07/94
!! Modification to include the periodic case 13/10/94 J.Stein
!! optimisation 20/08/00 J. Escobar
!! correction of in halo/pseudo-cyclic calculation for JPHEXT<> 1
!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
......@@ -1222,8 +1240,9 @@ DO JK=1,IKU
END DO
END DO
!
PDYM(:,1,:) = PDYM(:,IJU-2*JPHEXT+1,:)
!$acc end kernels
DO JJ=1,JPHEXT
PDYM(:,JJ,:) = PDYM(:,IJU-2*JPHEXT+JJ,:) ! for reprod JPHEXT <> 1
END DO
#else
JIJKOR = 1 + IIU
JIJKEND = IIU*IJU*IKU
......@@ -1232,12 +1251,14 @@ JIJKEND = IIU*IJU*IKU
!CDIR NODEP
!OCL NOVREC
DO JIJK=JIJKOR , JIJKEND
PDYM(JIJK,1,1) = PA(JIJK,1,1) - PA(JIJK-IIU,1,1)
PDYM(JIJK,1,1) = PA(JIJK,1,1) - PA(JIJK-IIU,1,1)
END DO
#endif
!
PDYM(:,1,:) = PDYM(:,IJU-2*JPHEXT+1,:)
DO JJ=1,JPHEXT
PDYM(:,JJ,:) = PDYM(:,IJU-2*JPHEXT+JJ,:) ! for reprod JPHEXT <> 1
END DO
!$acc end kernels
#endif
!
!
!-------------------------------------------------------------------------------
......
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