ALL_ALL_j2 Subroutine

private subroutine ALL_ALL_j2(p, ptrans, iaction, ksen)

Uses

  • proc~~all_all_j2~~UsesGraph proc~all_all_j2 modpois::ALL_ALL_j2 module~modglobal modglobal proc~all_all_j2->module~modglobal module~modmpi modmpi proc~all_all_j2->module~modmpi mpi mpi module~modmpi->mpi

Arguments

Type IntentOptional Attributes Name
real :: p(0:imax+1,0:jmax+1,0:kmax+1)
real :: ptrans(1:imax,1:jtot,1:ksen)
integer :: iaction
integer :: ksen

Calls

proc~~all_all_j2~~CallsGraph proc~all_all_j2 modpois::ALL_ALL_j2 mpi_alltoall mpi_alltoall proc~all_all_j2->mpi_alltoall proc~barrou modmpi::barrou proc~all_all_j2->proc~barrou mpi_barrier mpi_barrier proc~barrou->mpi_barrier

Called by

proc~~all_all_j2~~CalledByGraph proc~all_all_j2 modpois::ALL_ALL_j2 proc~poisr modpois::poisr proc~poisr->proc~all_all_j2 proc~poisson modpois::poisson proc~poisson->proc~poisr program~dalesurban DALESURBAN program~dalesurban->proc~poisson

Contents

Source Code


Source Code

      subroutine ALL_ALL_j2(p,ptrans,iaction,ksen)
!
  use modglobal, only : imax,isen,jmax,jsen,jtot,kmax
  use modmpi,    only : comm3d,mpierr,my_real,nprocs, barrou

      implicit none
!
!     include 'param.txt'
!
!     include 'mpif.h'
!     include 'mpi_cons.txt'
!
      integer  iaction, ksen
      real     p(0:imax+1,0:jmax+1,0:kmax+1)
      real     ptrans(1:imax,1:jtot,1:ksen)
      integer i,j,k
!
!
! purpose: do all-to-all communication
!
! data are only distributed over the j-direction for p
! data are only distributed over the k-direction for ptrans
!
! help arrays for sending and receiving
!
       real bufin ((imax)*jmax*(kmax))
       real bufout((imax)*jmax*(kmax))
!
! help variables
!
       integer ii, jstart, jend, proc
       integer     kstart, kend, jvalue, kvalue
!
!
       if(iaction.eq.0)then
!
       ii = 0
       do proc=0,nprocs-1
          kstart =    (proc)*ksen+1
          kend   =  (proc+1)*ksen
       do k=kstart,kend
       do j=1,jmax
       do i=1,imax
          ii = ii + 1
          bufin(ii) = p(i,j,k)
       enddo
       enddo
       enddo
       enddo
       
!
!
       ii = 0
!
!
       call barrou()
!
       call MPI_ALLTOALL(bufin,   (imax*jsen*ksen),MY_REAL, &
                           bufout,(imax*jsen*ksen),MY_REAL, &
                           comm3d,mpierr)
!      bufout = bufin
!
       call barrou()
!
       ii = 0
!
       do  proc = 0,nprocs-1
           jstart =  proc   *jsen + 1
           jend   = (proc+1)*jsen
       do k=1,ksen
       do j=jstart,jend
       do i=1,imax
          ii = ii + 1
          ptrans(i,j,k) = bufout(ii) 
       enddo
       enddo
       enddo
!
       enddo
! 
!
       call barrou()
!
!  
       elseif(iaction.eq.1)then
!
       ii = 0
!
       do  proc = 0,nprocs-1
           jstart =  proc   *jsen + 1
           jend   = (proc+1)*jsen
       do k=1,ksen
       do j=jstart,jend
       do i=1,imax
          ii = ii + 1
          bufin(ii)  = ptrans(i,j,k) 
       enddo
       enddo
       enddo
!
       enddo
!
       call barrou()
!
       call MPI_ALLTOALL(bufin,   (imax*jsen*ksen),MY_REAL, &
                           bufout,(imax*jsen*ksen),MY_REAL, &
                           comm3d,mpierr)
!      bufout = bufin
!
       call barrou()
! 
!
       ii = 0
!
       do proc=0,nprocs-1
          kstart =    (proc)*ksen+1
          kend   =  (proc+1)*ksen
       do k=kstart,kend
       do j=1,jmax
       do i=1,imax
          ii = ii + 1
          p(i,j,k) = bufout(ii) 
       enddo
       enddo
       enddo
       enddo
! 
!
       call barrou()
       endif
!
       return
       end subroutine ALL_ALL_j2