subroutine BoundaryCondition implicit none integer::i,j,k real(8), allocatable :: varsendXstt(:,:,:,:), varsendXend(:,:,:,:), & varsendYstt(:,:,:,:), varsendYend(:,:,:,:), varsendZstt(:,:,:,:), varsendZend(:,:,:,:), & varrecvXstt(:,:,:,:), varrecvXend(:,:,:,:), varrecvYstt(:,:,:,:), varrecvYend(:,:,:,:), varrecvZstt(:,:,:,:), varrecvZend(:,:,:,:) allocate(varsendXstt(mgn,jn,kn,nbc), varsendXend(mgn,jn,kn,nbc), & varsendYstt(in,mgn,kn,nbc), varsendYend(in,mgn,kn,nbc), & varsendZstt(in,jn,mgn,nbc), varsendZend(in,jn,mgn,nbc), & varrecvXstt(mgn,jn,kn,nbc), varrecvXend(mgn,jn,kn,nbc), & varrecvYstt(in,mgn,kn,nbc), varrecvYend(in,mgn,kn,nbc), & varrecvZstt(in,jn,mgn,nbc), varrecvZend(in,jn,mgn,nbc)) !$omp parallel do collapse(3) schedule(static) 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 !$omp end parallel do !$omp parallel do collapse(3) schedule(static) 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 !$omp end parallel do !$omp parallel do collapse(3) schedule(static) 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 !$omp end parallel do call XbcSendRecv(varsendXstt,varsendXend,varrecvXstt,varrecvXend) call YbcSendRecv(varsendYstt,varsendYend,varrecvYstt,varrecvYend) call ZbcSendRecv(varsendZstt,varsendZend,varrecvZstt,varrecvZend) !$omp parallel do collapse(3) schedule(static) 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 !$omp end parallel do !$omp parallel do collapse(3) schedule(static) 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 !$omp end parallel do !$omp parallel do collapse(3) schedule(static) 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 !$omp end parallel do return deallocate(varsendXstt,varsendXend,varsendYstt,varsendYend,varsendZstt,varsendZend, & varrecvXstt,varrecvXend,varrecvYstt,varrecvYend,varrecvZstt,varrecvZend) end subroutine BoundaryCondition