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

Juan 11/06/2018: rewrite some loops for OpenACC in PPM_01_Z

parent 6b180983
No related branches found
No related tags found
No related merge requests found
......@@ -1838,6 +1838,7 @@ ZQR0(:,:,IKE+1) = ZQR0(:,:,IKB)
!
ZDQ = ZQR0 - ZQL0
ZQ60 = 6.0*(PSRC - 0.5*(ZQL0 + ZQR0))
#ifndef _OPENACC
!
! initialize final parabolae parameters
!
......@@ -1847,7 +1848,6 @@ ZQ6 = ZQ60
!
! eliminate over and undershoots and create qL and qR as in Lin96
!
#ifndef _OPENACC
WHERE ( ZDMQ == 0.0 )
ZQL = PSRC
ZQR = PSRC
......@@ -1857,34 +1857,93 @@ ELSEWHERE ( ZQ60*ZDQ < -(ZDQ)**2 )
ZQR = ZQL0 - ZQ6
ZQL = ZQL0
ELSEWHERE ( ZQ60*ZDQ > (ZDQ)**2 )
ZQ6 = 3.0*(ZQR0 - PSRC)
ZQL = ZQR0 - ZQ6
ZQR = ZQR0
END WHERE
#else
!PW: BUG: done like that because if using PGI (tested up to 16.10)
! will cause crashes at run (address not mapped)
! and problems at compilation
WHERE ( ZDMQ == 0.0 )
ZQL = PSRC
ZQR = PSRC
ZQ6 = 0.0
END WHERE
WHERE ( ( ZDMQ /= 0.0 ) .AND. ( ZQ60*ZDQ < -(ZDQ)**2 ) )
ZQ6 = 3.0*(ZQL0 - PSRC)
ZQR = ZQL0 - ZQ6
ZQL = ZQL0
END WHERE
WHERE ( ( ZDMQ /= 0.0 ) .AND. ( ZQ60*ZDQ > (ZDQ)**2 ) )
ZQ6 = 3.0*(ZQR0 - PSRC)
ZQL = ZQR0 - ZQ6
ZQR = ZQR0
END WHERE
#endif
!
! recalculate coefficients of the parabolae
!
ZDQ = ZQR - ZQL
#else
!!!
!!! initialize final parabolae parameters
!!!
!!ZQL = ZQL0
!!ZQR = ZQR0
!!ZQ6 = ZQ60
!!!
!!! eliminate over and undershoots and create qL and qR as in Lin96
!!!
!!!PW: BUG: done like that because if using PGI (tested up to 16.10)
!!! will cause crashes at run (address not mapped)
!!! and problems at compilation
!!$WHERE ( ZDMQ == 0.0 )
!!$ ZQL = PSRC
!!$ ZQR = PSRC
!!$ ZQ6 = 0.0
!!$END WHERE
!!$WHERE ( ( ZDMQ /= 0.0 ) .AND. ( ZQ60*ZDQ < -ZDQ**2 ) )
!!$WHERE ( ( ZDMQ /= 0.0 ) .AND. ( ZQ60*ZDQ < -BR_P2(ZDQ) ) )
!!$ ZQ6 = 3.0*(ZQL0 - PSRC)
!!$ ZQR = ZQL0 - ZQ6
!!$ ZQL = ZQL0
!!$END WHERE
!!$WHERE ( ( ZDMQ /= 0.0 ) .AND. ( ZQ60*ZDQ > ZDQ**2 ) )
!!$WHERE ( ( ZDMQ /= 0.0 ) .AND. ( ZQ60*ZDQ > BR_P2(ZDQ) ) )
!!$ ZQ6 = 3.0*(ZQR0 - PSRC)
!!$ ZQL = ZQR0 - ZQ6
!!$ ZQR = ZQR0
!!$END WHERE
!!!
!!! recalculate coefficients of the parabolae
!!!
!!ZDQ = ZQR - ZQL
!$acc loop gang vector
DO K=1,IKU
!$acc loop gang vector
DO J=1,IJU
!$acc loop gang vector
DO I=1,IIU
!
! determine initial coefficients of the parabolae
!
ZDQ(I,J,K) = ZQR0(I,J,K) - ZQL0(I,J,K)
ZQ60(I,J,K) = 6.0*(PSRC(I,J,K) - 0.5*(ZQL0(I,J,K) + ZQR0(I,J,K)))
!
! initialize final parabolae parameters
!
ZQL(I,J,K) = ZQL0(I,J,K)
ZQR(I,J,K) = ZQR0(I,J,K)
ZQ6(I,J,K) = ZQ60(I,J,K)
!
! eliminate over and undershoots and create qL and qR as in Lin96
!
IF ( ZDMQ(I,J,K) == 0.0 ) THEN
ZQL(I,J,K) = PSRC(I,J,K)
ZQR(I,J,K) = PSRC(I,J,K)
ZQ6(I,J,K) = 0.0
END IF
IF ( ( ZDMQ(I,J,K) /= 0.0 ) .AND. ( ZQ60(I,J,K)*ZDQ(I,J,K) < -ZDQ(I,J,K)**2 ) ) THEN
ZQ6(I,J,K) = 3.0*(ZQL0(I,J,K) - PSRC(I,J,K))
ZQR(I,J,K) = ZQL0(I,J,K) - ZQ6(I,J,K)
ZQL(I,J,K) = ZQL0(I,J,K)
END IF
IF ( ( ZDMQ(I,J,K) /= 0.0 ) .AND. ( ZQ60(I,J,K)*ZDQ(I,J,K) > ZDQ(I,J,K)**2 ) ) THEN
ZQ6(I,J,K) = 3.0*(ZQR0(I,J,K) - PSRC(I,J,K))
ZQL(I,J,K) = ZQR0(I,J,K) - ZQ6(I,J,K)
ZQR(I,J,K) = ZQR0(I,J,K)
END IF
!
! recalculate coefficients of the parabolae
!
ZDQ(I,J,K) = ZQR(I,J,K) - ZQL(I,J,K)
!
END DO
END DO
END DO
#endif
!
! and finally calculate fluxes for the advection
!
......
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