resolve_parallel_rank_size Subroutine

public subroutine resolve_parallel_rank_size(local_rank, n_ranks, mpi_rank, mpi_size, mpi, caller_name)

併存対応のため mpi_context と rank/size の両方を受け、最終的なrank/sizeを解決する。

Arguments

Type IntentOptional Attributes Name
integer(kind=i32), intent(out) :: local_rank
integer(kind=i32), intent(out) :: n_ranks
integer(kind=i32), intent(in), optional :: mpi_rank
integer(kind=i32), intent(in), optional :: mpi_size
type(mpi_context), intent(in), optional :: mpi
character(len=*), intent(in) :: caller_name

Calls

proc~~resolve_parallel_rank_size~~CallsGraph proc~resolve_parallel_rank_size resolve_parallel_rank_size proc~mpi_get_rank_size mpi_get_rank_size proc~resolve_parallel_rank_size->proc~mpi_get_rank_size

Called by

proc~~resolve_parallel_rank_size~~CalledByGraph proc~resolve_parallel_rank_size resolve_parallel_rank_size proc~init_particle_batch_from_config init_particle_batch_from_config proc~init_particle_batch_from_config->proc~resolve_parallel_rank_size proc~seed_particles_from_config seed_particles_from_config proc~seed_particles_from_config->proc~resolve_parallel_rank_size proc~load_or_init_run_state load_or_init_run_state proc~load_or_init_run_state->proc~seed_particles_from_config program~main main program~main->proc~load_or_init_run_state

Source Code

  subroutine resolve_parallel_rank_size(local_rank, n_ranks, mpi_rank, mpi_size, mpi, caller_name)
    integer(i32), intent(out) :: local_rank, n_ranks
    integer(i32), intent(in), optional :: mpi_rank, mpi_size
    type(mpi_context), intent(in), optional :: mpi
    character(len=*), intent(in) :: caller_name

    call mpi_get_rank_size(local_rank, n_ranks, mpi)
    if (present(mpi_rank)) local_rank = mpi_rank
    if (present(mpi_size)) n_ranks = mpi_size
    if (n_ranks <= 0_i32) error stop 'mpi_size must be > 0 in '//trim(caller_name)//'.'
    if (local_rank < 0_i32 .or. local_rank >= n_ranks) then
      error stop 'mpi_rank is out of range in '//trim(caller_name)//'.'
    end if
  end subroutine resolve_parallel_rank_size