Research Article
High-Performance Design Patterns for Modern Fortran
subroutine mpi_begin | integer:: dims(), periods(), reorder | ! prevent accidentally starting MPI | ! if it has already been initiated | if (program_status .eq. 0) then | call MPI_INIT(ierr) | call MPI_COMM_SIZE(MPI_COMM_WORLD, num_procs, ierr) | call MPI_COMM_RANK(MPI_COMM_WORLD, my_id, ierr) | ! Create a 1D Cartesian partition | ! with reordering and periodicity | dims = num_procs | reorder = .true. | periods = .true. | call MPI_CART_CREATE(MPI_COMM_WORLD, 1, dims, periods, reorder, MPI_COMM_CART, ierr) | call MPI_COMM_RANK(MPI_COMM_CART, my_id, ierr) | call MPI_CART_SHIFT(MPI_COMM_CART, 0, 1, left_id, right_id, ierr) | program_status = 1 | endif | end subroutine |
|