comms_no_sync_allreduce_real Subroutine

private subroutine comms_no_sync_allreduce_real(array, size, op, error, comm)

Reduce real data to all nodes

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(inout) :: array
integer, intent(in) :: size
character(len=*), intent(in) :: op
type(w90_error_type), intent(out), allocatable :: error
type(w90_comm_type), intent(in) :: comm

Called by

proc~~comms_no_sync_allreduce_real~~CalledByGraph proc~comms_no_sync_allreduce_real comms_no_sync_allreduce_real interface~comms_no_sync_allreduce comms_no_sync_allreduce interface~comms_no_sync_allreduce->proc~comms_no_sync_allreduce_real proc~comms_allreduce_real comms_allreduce_real proc~comms_allreduce_real->proc~comms_no_sync_allreduce_real interface~comms_allreduce comms_allreduce interface~comms_allreduce->proc~comms_allreduce_real proc~calctdfanddos calcTDFandDOS proc~calctdfanddos->interface~comms_allreduce proc~dis_extract dis_extract proc~dis_extract->interface~comms_allreduce proc~overlap_project overlap_project proc~overlap_project->interface~comms_allreduce proc~overlap_write overlap_write proc~overlap_write->interface~comms_allreduce proc~plot_svd_omega_i plot_svd_omega_i proc~plot_svd_omega_i->interface~comms_allreduce proc~wann_domega wann_domega proc~wann_domega->interface~comms_allreduce proc~wann_main wann_main proc~wann_main->interface~comms_allreduce proc~wann_main->proc~wann_domega proc~wann_omega wann_omega proc~wann_main->proc~wann_omega proc~wann_phases wann_phases proc~wann_main->proc~wann_phases proc~wann_omega->interface~comms_allreduce proc~wann_phases->interface~comms_allreduce proc~boltzwann_main boltzwann_main proc~boltzwann_main->proc~calctdfanddos proc~dis_main dis_main proc~dis_main->proc~dis_extract proc~plot_main plot_main proc~plot_main->proc~plot_svd_omega_i proc~w90_disentangle~2 w90_disentangle proc~w90_disentangle~2->proc~overlap_write proc~w90_disentangle~2->proc~dis_main proc~w90_project_overlap~2 w90_project_overlap proc~w90_project_overlap~2->proc~overlap_project proc~w90_project_overlap~2->proc~overlap_write proc~w90_wannierise~2 w90_wannierise proc~w90_wannierise~2->proc~wann_main proc~wann_main_gamma wann_main_gamma proc~w90_wannierise~2->proc~wann_main_gamma proc~wann_main_gamma->proc~wann_phases proc~w90_disentangle w90_disentangle proc~w90_disentangle->proc~w90_disentangle~2 proc~w90_plot w90_plot proc~w90_plot->proc~plot_main proc~w90_project_overlap w90_project_overlap proc~w90_project_overlap->proc~w90_project_overlap~2 proc~w90_wannierise w90_wannierise proc~w90_wannierise->proc~w90_wannierise~2 program~postw90 postw90 program~postw90->proc~boltzwann_main program~wannier wannier program~wannier->proc~w90_disentangle~2 program~wannier->proc~w90_project_overlap~2 program~wannier->proc~w90_wannierise~2 program~wannier->proc~w90_plot

Source Code

  subroutine comms_no_sync_allreduce_real(array, size, op, error, comm)
    !! Reduce real data to all nodes

    implicit none

    real(kind=dp), intent(inout) :: array
    integer, intent(in) :: size
    character(len=*), intent(in) :: op
    type(w90_comm_type), intent(in) :: comm
    type(w90_error_type), allocatable, intent(out) :: error

#ifdef W90_MPI
    integer :: ierr

    select case (op)

    case ('SUM')
      call mpi_allreduce(MPI_IN_PLACE, array, size, MPI_DOUBLE_PRECISION, MPI_SUM, comm%comm, &
                         ierr)
    case ('PRD')
      call mpi_allreduce(MPI_IN_PLACE, array, size, MPI_DOUBLE_PRECISION, MPI_PROD, comm%comm, &
                         ierr)
    case ('MIN')
      call mpi_allreduce(MPI_IN_PLACE, array, size, MPI_DOUBLE_PRECISION, MPI_MIN, comm%comm, &
                         ierr)
    case ('MAX')
      call mpi_allreduce(MPI_IN_PLACE, array, size, MPI_DOUBLE_PRECISION, MPI_MAX, comm%comm, &
                         ierr)
    case default
      call set_base_error(error, 'Unknown operation in comms_allreduce_real', code_mpi)
      return

    end select

    if (ierr .ne. MPI_SUCCESS) then
      call set_base_error(error, 'Error in comms_allreduce_real', code_mpi)
      return
    end if
#endif

  end subroutine comms_no_sync_allreduce_real