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

Juan 26/09/2012: advec_ppm_algo.f90 completly in GPU with PPM_01* also on GPU

parent e286dedf
No related branches found
No related tags found
No related merge requests found
...@@ -104,6 +104,8 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRC ! source term after advection ...@@ -104,6 +104,8 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRC ! source term after advection
! !
!* 0.2 Declarations of local variables : !* 0.2 Declarations of local variables :
! !
REAL, DIMENSION(SIZE(PFIELDT,1),SIZE(PFIELDT,2),SIZE(PFIELDT,3)) :: ZPPM ! temp PPM output
!
!INTEGER:: IW,IE,IS,IN,IT,IB,IWF,IEF,ISF,INF ! Coordinate of 4th order diffusion area !INTEGER:: IW,IE,IS,IN,IT,IB,IWF,IEF,ISF,INF ! Coordinate of 4th order diffusion area
! !
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
...@@ -116,7 +118,10 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRC ! source term after advection ...@@ -116,7 +118,10 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRC ! source term after advection
!* 0. INITIAL STEP !* 0. INITIAL STEP
! ------------ ! ------------
! !
!$acc data copyin(PFIELDT,PRHODJ) copyout(PSRC) local (ZPPM)
!$acc kernels
PSRC = PFIELDT PSRC = PFIELDT
!$acc end kernels
! !
SELECT CASE (HMET_ADV_SCHEME) SELECT CASE (HMET_ADV_SCHEME)
! !
...@@ -176,46 +181,71 @@ CASE('PPM_01') ...@@ -176,46 +181,71 @@ CASE('PPM_01')
!* 1. ADVECTION IN X DIRECTION !* 1. ADVECTION IN X DIRECTION
! ------------------------ ! ------------------------
! !
PSRC = (PSRC * PRHODJ) - & !$acc data copyin(PCRU,PCRV,PCRW,PRHOX1,PRHOY1,PRHOZ1)
PPM_01_X(HLBCX, KGRID, PSRC, PCRU, PRHODJ, PTSTEP) !
CALL PPM_01_X(HLBCX, KGRID, PSRC, PCRU, PRHODJ, PTSTEP, ZPPM)
!!$ - PPM_01_X(HLBCX, KGRID, PSRC, PCRU, PRHODJ, PTSTEP)
!$acc kernels
PSRC = ( PSRC * PRHODJ ) - ZPPM
PSRC = PSRC / PRHOX1 PSRC = PSRC / PRHOX1
!$acc end kernels
! !
!* 2. ADVECTION IN Y DIRECTION !* 2. ADVECTION IN Y DIRECTION
! ------------------------ ! ------------------------
! !
PSRC = (PSRC * PRHOX1) - & CALL PPM_01_Y(HLBCY, KGRID, PSRC, PCRV, PRHOX1, PTSTEP, ZPPM)
PPM_01_Y(HLBCY, KGRID, PSRC, PCRV, PRHOX1, PTSTEP) !!$ - PPM_01_Y(HLBCY, KGRID, PSRC, PCRV, PRHOX1, PTSTEP)
!$acc kernels
PSRC = (PSRC * PRHOX1) - ZPPM
PSRC = PSRC / PRHOY1 PSRC = PSRC / PRHOY1
!$acc end kernels
! !
!* 3. ADVECTION IN Z DIRECTION !* 3. ADVECTION IN Z DIRECTION
! ------------------------ ! ------------------------
! !
PSRC = (PSRC * PRHOY1) - & CALL PPM_01_Z(KGRID, PSRC, PCRW, PRHOY1, PTSTEP, ZPPM)
PPM_01_Z(KGRID, PSRC, PCRW, PRHOY1, PTSTEP) !!$ - PPM_01_Z(KGRID, PSRC, PCRW, PRHOY1, PTSTEP)
!$acc kernels
PSRC = (PSRC * PRHOY1) - ZPPM
PSRC = PSRC / PRHOZ1 PSRC = PSRC / PRHOZ1
!$acc end kernels
!$acc end data
! !
ELSE ELSE
! !
!* 1. ADVECTION IN Z DIRECTION !* 1. ADVECTION IN Z DIRECTION
! ------------------------ ! ------------------------
! !
PSRC = (PSRC * PRHODJ) - & !$acc data copyin(PCRW,PCRV,PRHOZ2,PRHOY2,PCRU,PRHOX2)
PPM_01_Z(KGRID, PSRC, PCRW, PRHODJ, PTSTEP) !
CALL PPM_01_Z(KGRID, PSRC, PCRW, PRHODJ, PTSTEP, ZPPM)
!!$ - PPM_01_Z(KGRID, PSRC, PCRW, PRHODJ, PTSTEP)
!$acc kernels
PSRC = (PSRC * PRHODJ) - ZPPM
PSRC = PSRC / PRHOZ2 PSRC = PSRC / PRHOZ2
!$acc end kernels
! !
!* 2. ADVECTION IN Y DIRECTION !* 2. ADVECTION IN Y DIRECTION
! ------------------------ ! ------------------------
! !
PSRC = (PSRC * PRHOZ2) - & CALL PPM_01_Y(HLBCY, KGRID, PSRC, PCRV, PRHOZ2, PTSTEP, ZPPM)
PPM_01_Y(HLBCY, KGRID, PSRC, PCRV, PRHOZ2, PTSTEP) !!$ - PPM_01_Y(HLBCY, KGRID, PSRC, PCRV, PRHOZ2, PTSTEP)
!$acc kernels
PSRC = (PSRC * PRHOZ2) - ZPPM
PSRC = PSRC / PRHOY2 PSRC = PSRC / PRHOY2
!$acc end kernels
! !
!* 3. ADVECTION IN X DIRECTION !* 3. ADVECTION IN X DIRECTION
! ------------------------ ! ------------------------
! !
PSRC = (PSRC * PRHOY2) - & CALL PPM_01_X(HLBCX, KGRID, PSRC, PCRU, PRHOY2, PTSTEP, ZPPM)
PPM_01_X(HLBCX, KGRID, PSRC, PCRU, PRHOY2, PTSTEP) !!$ - PPM_01_X(HLBCX, KGRID, PSRC, PCRU, PRHOY2, PTSTEP)
!$acc kernels
PSRC = (PSRC * PRHOY2) - ZPPM
PSRC = PSRC / PRHOX2 PSRC = PSRC / PRHOX2
!$acc end kernels
!$acc end data
! !
END IF END IF
! !
...@@ -275,6 +305,9 @@ END SELECT ...@@ -275,6 +305,9 @@ END SELECT
! compatible to the rest of the model forcings, we need to substract the ! compatible to the rest of the model forcings, we need to substract the
! initial field, devide by dt and muliplty by RHODJ ! initial field, devide by dt and muliplty by RHODJ
! !
!$acc kernels
PSRC = (PSRC - PFIELDT)*PRHODJ/PTSTEP PSRC = (PSRC - PFIELDT)*PRHODJ/PTSTEP
!$acc end kernels
!$acc end data
! !
END SUBROUTINE ADVEC_PPM_ALGO END SUBROUTINE ADVEC_PPM_ALGO
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