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

Philippe 16/01/2017: OpenACC: correct boundaries after merge with 5.3.0

parent 319d67ed
No related branches found
No related tags found
No related merge requests found
......@@ -6,9 +6,11 @@
MODULE MODI_ADV_BOUNDARIES
!#####################
!
#ifdef _OPENACC
INTERFACE ADV_BOUNDARIES_DEVICE
MODULE PROCEDURE ADV_BOUNDARIES_DEVICE1, ADV_BOUNDARIES_DEVICE2, ADV_BOUNDARIES_DEVICE3
END INTERFACE
#endif
!
!INTERFACE
!
......@@ -56,6 +58,7 @@ END MODULE MODI_ADV_BOUNDARIES
!
CONTAINS
!
#ifdef _OPENACC
! ####################################################################
SUBROUTINE ADV_BOUNDARIES_DEVICE1 ( HLBCX,HLBCY,PFIELD )
! ####################################################################
......@@ -161,11 +164,13 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PFIELDI
INTEGER :: IKB ! indice K Beginning in z direction
INTEGER :: IKE ! indice K End in z direction
INTEGER :: IIU, IJU ! Index End in X and Y directions
INTEGER :: IIB,IIE,IJB,IJE ! interior domaine bound
!
!-------------------------------------------------------------------------------
!
!* 1. COMPUTE DIMENSIONS OF ARRAYS AND OTHER INDICES:
! ----------------------------------------------
CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
IKB = 1 + JPVEXT
IKE = SIZE(PFIELD,3) - JPVEXT
IIU=SIZE(PFIELD,1)
......@@ -195,16 +200,16 @@ IF (SIZE(PFIELD)==0) RETURN
! ---------------------------
!
IF (HLBCX(1)=='OPEN' .AND. LWEST_ll()) THEN
PFIELD(1,:,:) = PFIELDI(1,:,:)
PFIELD(:IIB-1,:,:) = PFIELDI(:IIB-1,:,:)
END IF
IF (HLBCX(2)=='OPEN' .AND. LEAST_ll()) THEN
PFIELD(IIU,:,:) = PFIELDI(IIU,:,:)
PFIELD(IIE+1:,:,:) = PFIELDI(IIE+1:,:,:)
END IF
IF (HLBCY(1)=='OPEN' .AND. LSOUTH_ll()) THEN
PFIELD(:,1,:) = PFIELDI(:,1,:)
PFIELD(:,:IJB-1,:) = PFIELDI(:,:IJB-1,:)
END IF
IF (HLBCY(2)=='OPEN' .AND. LNORTH_ll()) THEN
PFIELD(:,IJU,:) = PFIELDI(:,IJU,:)
PFIELD(:,IJE+1:,:) = PFIELDI(:,IJE+1:,:)
END IF
!$acc end kernels
!
......@@ -268,11 +273,13 @@ CHARACTER(LEN=1), INTENT(IN) :: HFIELD ! Field type
INTEGER :: IKB ! indice K Beginning in z direction
INTEGER :: IKE ! indice K End in z direction
INTEGER :: IIU, IJU ! Index End in X and Y directions
INTEGER :: IIB,IIE,IJB,IJE ! interior domaine bound
!
!-------------------------------------------------------------------------------
!
!* 1. COMPUTE DIMENSIONS OF ARRAYS AND OTHER INDICES:
! ----------------------------------------------
CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
IKB = 1 + JPVEXT
IKE = SIZE(PFIELD,3) - JPVEXT
IIU=SIZE(PFIELD,1)
......@@ -305,21 +312,25 @@ IF (SIZE(PFIELD)==0) RETURN
! ---------------------------
!
IF (HLBCX(1)=='OPEN' .AND. LWEST_ll()) THEN
PFIELD(1,:,:) = PFIELDI(1,:,:)
PFIELD(:IIB-1,:,:) = PFIELDI(:IIB-1,:,:)
IF (HFIELD=='U') &
PFIELD(2,:,:) = PFIELDI(2,:,:)
PFIELD(:IIB,:,:) = PFIELDI(:IIB,:,:)
END IF
IF (HLBCX(2)=='OPEN' .AND. LEAST_ll()) THEN
PFIELD(IIU,:,:) = PFIELDI(IIU,:,:)
PFIELD(IIE+1:,:,:) = PFIELDI(IIE+1:,:,:)
END IF
IF (HLBCY(1)=='OPEN' .AND. LSOUTH_ll()) THEN
PFIELD(:,1,:) = PFIELDI(:,1,:)
PFIELD(:,:IJB-1,:) = PFIELDI(:,:IJB-1,:)
IF (HFIELD=='V') &
PFIELD(:,2,:) = PFIELDI(:,2,:)
PFIELD(:,:IJB,:) = PFIELDI(:,:IJB,:)
END IF
IF (HLBCY(2)=='OPEN' .AND. LNORTH_ll()) THEN
PFIELD(:,IJU,:) = PFIELDI(:,IJU,:)
PFIELD(:,IJE+1,:) = PFIELDI(:,IJE+1,:)
END IF
!
!* 4. TOP BC for W
!
IF (HFIELD=='W') PFIELD(:,:,IKE+1) = 0.
!$acc end kernels
!
#if 0
......@@ -346,6 +357,7 @@ IF (SIZE(PFIELD)==0) RETURN
!-------------------------------------------------------------------------------
!
END SUBROUTINE ADV_BOUNDARIES_DEVICE3
#endif
!
! ####################################################################
SUBROUTINE ADV_BOUNDARIES ( HLBCX,HLBCY,PFIELD,PFIELDI,HFIELD )
......
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