Changeset 1113 for palm/trunk/SOURCE/exchange_horiz.f90
- Timestamp:
- Mar 10, 2013 2:48:14 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/exchange_horiz.f90
r1037 r1113 20 20 ! Current revisions: 21 21 ! ----------------- 22 ! 22 ! GPU-porting for single-core (1PE) mode 23 23 ! 24 24 ! Former revisions: … … 82 82 83 83 84 INTEGER :: nbgp_local84 INTEGER :: i, j, k, nbgp_local 85 85 REAL, DIMENSION(nzb:nzt+1,nys-nbgp_local:nyn+nbgp_local, & 86 86 nxl-nbgp_local:nxr+nbgp_local) :: ar … … 199 199 200 200 ! 201 !-- Lateral boundary conditions in the non-parallel case 201 !-- Lateral boundary conditions in the non-parallel case. 202 !-- Case dependent, because in GPU mode still not all arrays are on device. This 203 !-- workaround has to be removed later. Also, since PGI compiler 12.5 has problems 204 !-- with array syntax, explicit loops are used. 202 205 IF ( bc_lr == 'cyclic' ) THEN 203 ar(:,:,nxl-nbgp_local:nxl-1) = ar(:,:,nxr-nbgp_local+1:nxr) 204 ar(:,:,nxr+1:nxr+nbgp_local) = ar(:,:,nxl:nxl+nbgp_local-1) 206 IF ( on_device ) THEN 207 !$acc kernels present( ar ) 208 !$acc loop independent 209 DO i = 0, nbgp_local-1 210 DO j = nys-nbgp_local, nyn+nbgp_local 211 !$acc loop vector( 32 ) 212 DO k = nzb, nzt+1 213 ar(k,j,nxl-nbgp_local+i) = ar(k,j,nxr-nbgp_local+1+i) 214 ar(k,j,nxr+1+i) = ar(k,j,nxl+i) 215 ENDDO 216 ENDDO 217 ENDDO 218 !$acc end kernels 219 ELSE 220 ar(:,:,nxl-nbgp_local:nxl-1) = ar(:,:,nxr-nbgp_local+1:nxr) 221 ar(:,:,nxr+1:nxr+nbgp_local) = ar(:,:,nxl:nxl+nbgp_local-1) 222 ENDIF 205 223 ENDIF 206 224 207 225 IF ( bc_ns == 'cyclic' ) THEN 208 ar(:,nys-nbgp_local:nys-1,:) = ar(:,nyn-nbgp_local+1:nyn,:) 209 ar(:,nyn+1:nyn+nbgp_local,:) = ar(:,nys:nys+nbgp_local-1,:) 226 IF ( on_device ) THEN 227 !$acc kernels present( ar ) 228 !$acc loop 229 DO i = nxl-nbgp_local, nxr+nbgp_local 230 !$acc loop independent 231 DO j = 0, nbgp_local-1 232 !$acc loop vector( 32 ) 233 DO k = nzb, nzt+1 234 ar(k,nys-nbgp_local+j,i) = ar(k,nyn-nbgp_local+1+j,i) 235 ar(k,nyn+1+j,i) = ar(k,nys+j,i) 236 ENDDO 237 ENDDO 238 ENDDO 239 !$acc end kernels 240 ELSE 241 ar(:,nys-nbgp_local:nys-1,:) = ar(:,nyn-nbgp_local+1:nyn,:) 242 ar(:,nyn+1:nyn+nbgp_local,:) = ar(:,nys:nys+nbgp_local-1,:) 243 ENDIF 210 244 ENDIF 211 245
Note: See TracChangeset
for help on using the changeset viewer.