define.f 2.26 KB
c---------------------------------------------------------------------
c---------------------------------------------------------------------

      subroutine compute_buffer_size(dim)

c---------------------------------------------------------------------
c---------------------------------------------------------------------

      include 'header.h'

      integer  c, dim, face_size

      if (ncells .eq. 1) return

c---------------------------------------------------------------------
c     compute the actual sizes of the buffers; note that there is 
c     always one cell face that doesn't need buffer space, because it 
c     is at the boundary of the grid
c---------------------------------------------------------------------
      west_size = 0
      east_size = 0

      do   c = 1, ncells
         face_size = cell_size(2,c) * cell_size(3,c) * dim * 2
         if (cell_coord(1,c).ne.1) west_size = west_size + face_size
         if (cell_coord(1,c).ne.ncells) east_size = east_size + 
     >        face_size 
      end do

      north_size = 0
      south_size = 0
      do   c = 1, ncells
         face_size = cell_size(1,c)*cell_size(3,c) * dim * 2
         if (cell_coord(2,c).ne.1) south_size = south_size + face_size
         if (cell_coord(2,c).ne.ncells) north_size = north_size + 
     >        face_size 
      end do

      top_size = 0
      bottom_size = 0
      do   c = 1, ncells
         face_size = cell_size(1,c) * cell_size(2,c) * dim * 2
         if (cell_coord(3,c).ne.1) bottom_size = bottom_size + 
     >        face_size
         if (cell_coord(3,c).ne.ncells) top_size = top_size +
     >        face_size     
      end do

      start_send_west   = 1
      start_send_east   = start_send_west   + west_size
      start_send_south  = start_send_east   + east_size
      start_send_north  = start_send_south  + south_size
      start_send_bottom = start_send_north  + north_size
      start_send_top    = start_send_bottom + bottom_size
      start_recv_west   = 1
      start_recv_east   = start_recv_west   + west_size
      start_recv_south  = start_recv_east   + east_size
      start_recv_north  = start_recv_south  + south_size
      start_recv_bottom = start_recv_north  + north_size
      start_recv_top    = start_recv_bottom + bottom_size

      return
      end