subroutine BoundaryCondition implicit none integer::i,j,k real(8),dimension(mgn,jn,kn,nbc):: varsendXstt,varsendXend real(8),dimension(in,mgn,kn,nbc):: varsendYstt,varsendYend real(8),dimension(in,jn,mgn,nbc):: varsendZstt,varsendZend real(8),dimension(mgn,jn,kn,nbc):: varrecvXstt,varrecvXend real(8),dimension(in,mgn,kn,nbc):: varrecvYstt,varrecvYend real(8),dimension(in,jn,mgn,nbc):: varrecvZstt,varrecvZend !$acc data create(varsendXstt,varsendXend,varsendYstt,varsendYend,varsendZstt,varsendZend,varrecvXstt,varrecvXend,varrecvYstt,varrecvYend,varrecvZstt,varrecvZend) !$acc kernels !$acc loop collapse(3) independent do k=1,kn-1 do j=1,jn-1 do i=1,mgn varsendXend(i,j,k,1) = d(ie-mgn+i,j,k) varsendXend(i,j,k,2) = ei(ie-mgn+i,j,k) varsendXend(i,j,k,nv1) = v1(ie-mgn+i,j,k) varsendXend(i,j,k,nv2) = v2(ie-mgn+i,j,k) varsendXend(i,j,k,nv3) = v3(ie-mgn+i,j,k) varsendXend(i,j,k,6) = b1(ie-mgn+i,j,k) varsendXend(i,j,k,7) = b2(ie-mgn+i,j,k) varsendXend(i,j,k,8) = b3(ie-mgn+i,j,k) varsendXend(i,j,k,9) = bp(ie-mgn+i,j,k) varsendXend(i,j,k,10:nbc) = Xcomp(1:ncomp,ie-mgn+i,j,k) varsendXstt(i,j,k,1) = d( is+i-1,j,k) varsendXstt(i,j,k,2) = ei( is+i-1,j,k) varsendXstt(i,j,k,nv1) = v1( is+i-1,j,k) varsendXstt(i,j,k,nv2) = v2( is+i-1,j,k) varsendXstt(i,j,k,nv3) = v3( is+i-1,j,k) varsendXstt(i,j,k,6) = b1( is+i-1,j,k) varsendXstt(i,j,k,7) = b2( is+i-1,j,k) varsendXstt(i,j,k,8) = b3( is+i-1,j,k) varsendXstt(i,j,k,9) = bp( is+i-1,j,k) varsendXstt(i,j,k,10:nbc) = Xcomp(1:ncomp,is+i-1,j,k) enddo enddo enddo !$acc loop collapse(3) independent do k=1,kn-1 do i=1,in-1 do j=1,mgn varsendYend(i,j,k,1) = d(i,je-mgn+j,k) varsendYend(i,j,k,2) = ei(i,je-mgn+j,k) varsendYend(i,j,k,nv1) = v1(i,je-mgn+j,k) varsendYend(i,j,k,nv2) = v2(i,je-mgn+j,k) varsendYend(i,j,k,nv3) = v3(i,je-mgn+j,k) varsendYend(i,j,k,6) = b1(i,je-mgn+j,k) varsendYend(i,j,k,7) = b2(i,je-mgn+j,k) varsendYend(i,j,k,8) = b3(i,je-mgn+j,k) varsendYend(i,j,k,9) = bp(i,je-mgn+j,k) varsendYend(i,j,k,10:nbc) = Xcomp(1:ncomp,i,je-mgn+j,k) varsendYstt(i,j,k,1) = d(i, js+j-1,k) varsendYstt(i,j,k,2) = ei(i, js+j-1,k) varsendYstt(i,j,k,nv1) = v1(i, js+j-1,k) varsendYstt(i,j,k,nv2) = v2(i, js+j-1,k) varsendYstt(i,j,k,nv3) = v3(i, js+j-1,k) varsendYstt(i,j,k,6) = b1(i, js+j-1,k) varsendYstt(i,j,k,7) = b2(i, js+j-1,k) varsendYstt(i,j,k,8) = b3(i, js+j-1,k) varsendYstt(i,j,k,9) = bp(i, js+j-1,k) varsendYstt(i,j,k,10:nbc) = Xcomp(1:ncomp,i, js+j-1,k) enddo enddo enddo !$acc loop collapse(3) independent do j=1,jn-1 do i=1,in-1 do k=1,mgn varsendZend(i,j,k,1) = d(i,j,ke-mgn+k) varsendZend(i,j,k,2) = ei(i,j,ke-mgn+k) varsendZend(i,j,k,nv1) = v1(i,j,ke-mgn+k) varsendZend(i,j,k,nv2) = v2(i,j,ke-mgn+k) varsendZend(i,j,k,nv3) = v3(i,j,ke-mgn+k) varsendZend(i,j,k,6) = b1(i,j,ke-mgn+k) varsendZend(i,j,k,7) = b2(i,j,ke-mgn+k) varsendZend(i,j,k,8) = b3(i,j,ke-mgn+k) varsendZend(i,j,k,9) = bp(i,j,ke-mgn+k) varsendZend(i,j,k,10:nbc) = Xcomp(1:ncomp,i,j,ke-mgn+k) varsendZstt(i,j,k,1) = d(i,j,ks+k-1 ) varsendZstt(i,j,k,2) = ei(i,j,ks+k-1 ) varsendZstt(i,j,k,nv1) = v1(i,j,ks+k-1 ) varsendZstt(i,j,k,nv2) = v2(i,j,ks+k-1 ) varsendZstt(i,j,k,nv3) = v3(i,j,ks+k-1 ) varsendZstt(i,j,k,6) = b1(i,j,ks+k-1 ) varsendZstt(i,j,k,7) = b2(i,j,ks+k-1 ) varsendZstt(i,j,k,8) = b3(i,j,ks+k-1 ) varsendZstt(i,j,k,9) = bp(i,j,ks+k-1 ) varsendZstt(i,j,k,10:nbc) = Xcomp(1:ncomp,i,j,ks+k-1 ) enddo enddo enddo !$acc end kernels call XbcSendRecv(varsendXstt,varsendXend,varrecvXstt,varrecvXend) call YbcSendRecv(varsendYstt,varsendYend,varrecvYstt,varrecvYend) call ZbcSendRecv(varsendZstt,varsendZend,varrecvZstt,varrecvZend) !$acc kernels !$acc loop collapse(3) independent do k=1,kn-1 do j=1,jn-1 do i=1,mgn d(i,j,k) = varrecvXstt(i,j,k,1) ei(i,j,k) = varrecvXstt(i,j,k,2) v1(i,j,k) = varrecvXstt(i,j,k,nv1) v2(i,j,k) = varrecvXstt(i,j,k,nv2) v3(i,j,k) = varrecvXstt(i,j,k,nv3) b1(i,j,k) = varrecvXstt(i,j,k,6) b2(i,j,k) = varrecvXstt(i,j,k,7) b3(i,j,k) = varrecvXstt(i,j,k,8) bp(i,j,k) = varrecvXstt(i,j,k,9) Xcomp(1:ncomp,i,j,k) = varrecvXstt(i,j,k,10:nbc) d(ie+i,j,k) = varrecvXend(i,j,k,1) ei(ie+i,j,k) = varrecvXend(i,j,k,2) v1(ie+i,j,k) = varrecvXend(i,j,k,nv1) v2(ie+i,j,k) = varrecvXend(i,j,k,nv2) v3(ie+i,j,k) = varrecvXend(i,j,k,nv3) b1(ie+i,j,k) = varrecvXend(i,j,k,6) b2(ie+i,j,k) = varrecvXend(i,j,k,7) b3(ie+i,j,k) = varrecvXend(i,j,k,8) bp(ie+i,j,k) = varrecvXend(i,j,k,9) Xcomp(1:ncomp,ie+i,j,k) = varrecvXend(i,j,k,10:nbc) enddo enddo enddo !$acc loop collapse(3) independent do k=1,kn-1 do i=1,in-1 do j=1,mgn d(i,j,k) = varrecvYstt(i,j,k,1) ei(i,j,k) = varrecvYstt(i,j,k,2) v1(i,j,k) = varrecvYstt(i,j,k,nv1) v2(i,j,k) = varrecvYstt(i,j,k,nv2) v3(i,j,k) = varrecvYstt(i,j,k,nv3) b1(i,j,k) = varrecvYstt(i,j,k,6) b2(i,j,k) = varrecvYstt(i,j,k,7) b3(i,j,k) = varrecvYstt(i,j,k,8) bp(i,j,k) = varrecvYstt(i,j,k,9) Xcomp(1:ncomp,i,j,k) = varrecvYstt(i,j,k,10:nbc) d(i,je+j,k) = varrecvYend(i,j,k,1) ei(i,je+j,k) = varrecvYend(i,j,k,2) v1(i,je+j,k) = varrecvYend(i,j,k,nv1) v2(i,je+j,k) = varrecvYend(i,j,k,nv2) v3(i,je+j,k) = varrecvYend(i,j,k,nv3) b1(i,je+j,k) = varrecvYend(i,j,k,6) b2(i,je+j,k) = varrecvYend(i,j,k,7) b3(i,je+j,k) = varrecvYend(i,j,k,8) bp(i,je+j,k) = varrecvYend(i,j,k,9) Xcomp(1:ncomp,i,je+j,k) = varrecvYend(i,j,k,10:nbc) enddo enddo enddo !$acc loop collapse(3) independent do j=1,jn-1 do i=1,in-1 do k=1,mgn d(i,j,k) = varrecvZstt(i,j,k,1) ei(i,j,k) = varrecvZstt(i,j,k,2) v1(i,j,k) = varrecvZstt(i,j,k,nv1) v2(i,j,k) = varrecvZstt(i,j,k,nv2) v3(i,j,k) = varrecvZstt(i,j,k,nv3) b1(i,j,k) = varrecvZstt(i,j,k,6) b2(i,j,k) = varrecvZstt(i,j,k,7) b3(i,j,k) = varrecvZstt(i,j,k,8) bp(i,j,k) = varrecvZstt(i,j,k,9) Xcomp(1:ncomp,i,j,k) = varrecvZstt(i,j,k,10:nbc) d(i,j,ke+k) = varrecvZend(i,j,k,1) ei(i,j,ke+k) = varrecvZend(i,j,k,2) v1(i,j,ke+k) = varrecvZend(i,j,k,nv1) v2(i,j,ke+k) = varrecvZend(i,j,k,nv2) v3(i,j,ke+k) = varrecvZend(i,j,k,nv3) b1(i,j,ke+k) = varrecvZend(i,j,k,6) b2(i,j,ke+k) = varrecvZend(i,j,k,7) b3(i,j,ke+k) = varrecvZend(i,j,k,8) bp(i,j,ke+k) = varrecvZend(i,j,k,9) Xcomp(1:ncomp,i,j,ke+k) = varrecvZend(i,j,k,10:nbc) enddo enddo enddo !$acc end kernels !$acc end data return end subroutine BoundaryCondition