| MpiFx 1.4.0
    | 
MPI communicator with some additional information. More...
| Public Member Functions | |
| procedure | init (self, commid, error) | 
| Initializes the MPI environment. | |
| procedure | split (self, splitkey, rankkey, newcomm, error) | 
| Creates a new communicator by splitting the old one. | |
| procedure | split_type (self, splittype, rankkey, newcomm, error) | 
| Creates a new communicator by splitting the old one given a split type. | |
| procedure | free (self) | 
| Frees the communicator. The communicator should not be used after this. | |
MPI communicator with some additional information.
| procedure mpifx_comm_module::mpifx_comm::free | ( | class(mpifx_comm), intent(inout) | self | ) | 
Frees the communicator. The communicator should not be used after this.
After this call, the passed communicator should not be used any more.
| self | Communicator instance. | 
| procedure mpifx_comm_module::mpifx_comm::init | ( | class(mpifx_comm), intent(out) | self, | 
| integer, intent(in), optional | commid, | ||
| integer, intent(out), optional | error ) | 
Initializes the MPI environment.
| self | Initialized instance on exit. | 
| commid | MPI Communicator ID (default: MPI_COMM_WORLD) | 
| error | Error flag on return containing the first error occuring during the calls mpi_comm_size and mpi_comm_rank. | 
| procedure mpifx_comm_module::mpifx_comm::split | ( | class(mpifx_comm), intent(inout) | self, | 
| integer, intent(in) | splitkey, | ||
| integer, intent(in) | rankkey, | ||
| class(mpifx_comm), intent(out) | newcomm, | ||
| integer, intent(out), optional | error ) | 
Creates a new communicator by splitting the old one.
| self | Communicator instance. | 
| splitkey | Key for the splitting. Processes invoking the routine with the same value for splitkey will be belong to the same communicator. | 
| rankkey | Is used to determine the rank of the process in its new communicator. Processes calling the routine with a higher value will have a higher rank in the new communicator. | 
| newcomm | New communicator for the given process. | 
| error | Optional error code on return. | 
Example:
program test_split
  use libmpifx_module
  implicit none
  type(mpifx_comm) :: allproc, groupproc
  integer :: groupsize, mygroup
  call mpifx_init()
  call allproc%init()
  groupsize = allproc%size / 2
  mygroup = allproc%rank / groupsize
  call allproc%split(mygroup, allproc%rank, groupproc)
  write(*, "(3(A,1X,I0,1X))") "ID:", allproc%rank, "SUBGROUP", &
      & mygroup, "SUBGROUP ID", groupproc%rank
  call mpifx_finalize()
end program test_split
 MPI_COMM_SPLIT) | procedure mpifx_comm_module::mpifx_comm::split_type | ( | class(mpifx_comm), intent(inout) | self, | 
| integer, intent(in) | splittype, | ||
| integer, intent(in) | rankkey, | ||
| class(mpifx_comm), intent(out) | newcomm, | ||
| integer, intent(out), optional | error ) | 
Creates a new communicator by splitting the old one given a split type.
| self | Communicator instance. | 
| splittype | Determines which ranks to be grouped together. In MPI 3.0, this can only be MPI_COMM_TYPE_SHARED grouping all MPI ranks together that can share memory (usually on a node). | 
| rankkey | Is used to determine the rank of the process in its new communicator. Processes calling the routine with a higher value will have a higher rank in the new communicator. | 
| newcomm | New communicator for the given process. | 
| error | Optional error code on return. | 
Example:
program test_split_type use libmpifx_module implicit none type(mpifx_comm) :: allproc, splitproc call mpifx_init() call allproc%init() call allproc%split_type(MPI_COMM_TYPE_SHARED, allproc%rank, splitproc) write(*, "(2(A,1X,I0,1X))") "ID:", allproc%rank, "SPLIT ID", splitproc%rank call mpifx_finalize() end program test_split_type
MPI_COMM_SPLIT_TYPE) 