
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

