| |
| 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 |
| |