| Class | mpi_wrapper | 
| In: | setup/mpi_wrapper.F90 | 
Note that Japanese and English are described in parallel.
MPI 関係の変数の管理と MPI 関係ラッパールーチンのモジュール.
This is a module containing MPI-related variables and wrapper routines.
| !$ ! RadiationFluxDennouAGCM : | 放射フラックスの計算 | 
| !$ ! RadiationFinalize : | 終了処理 (モジュール内部の変数の割り付け解除) | 
| !$ ! ———— : | ———— | 
| !$ ! RadiationFluxDennouAGCM : | Calculate radiation flux | 
| !$ ! RadiationFinalize : | Termination (deallocate variables in this module) | 
| Subroutine : | 
MPI の終了処理
Finalization of MPI
  subroutine MPIWrapperFinalize
    !
    ! MPI の終了処理
    !
    ! Finalization of MPI
    !
    ! モジュール引用 ; USE statements
    !
#ifdef LIB_MPI
    ! 作業変数
    ! Work variables
    !
    integer :: ierr
    call mpi_finalize( ierr )
#endif
  end subroutine MPIWrapperFinalize
          | Subroutine : | |||
| idep : | integer , intent(in ) 
 | ||
| im : | integer , intent(in ) 
 | ||
| buf( im ) : | real(DP), intent(out) 
 | ||
| ireq : | integer , intent(out) 
 | 
1D 倍精度配列の非ブロッキング通信(受信)
Non-blocking transfer (receive) of real(8) 1D array
Alias for MPIWrapperIRecv_dble_1d
| Subroutine : | |||
| idep : | integer , intent(in ) 
 | ||
| im : | integer , intent(in ) 
 | ||
| jm : | integer , intent(in ) 
 | ||
| buf( im, jm ) : | real(DP), intent(out) 
 | ||
| ireq : | integer , intent(out) 
 | 
2D 倍精度配列の非ブロッキング通信(受信)
Non-blocking transfer (receive) of real(8) 2D array
Alias for MPIWrapperIRecv_dble_2d
| Subroutine : | |||
| idep : | integer , intent(in ) 
 | ||
| im : | integer , intent(in ) 
 | ||
| jm : | integer , intent(in ) 
 | ||
| km : | integer , intent(in ) 
 | ||
| buf( im, jm, km ) : | real(DP), intent(out) 
 | ||
| ireq : | integer , intent(out) 
 | 
3D 倍精度配列の非ブロッキング通信(受信)
Non-blocking transfer (receive) of real(8) 3D array
Alias for MPIWrapperIRecv_dble_3d
| Subroutine : | |||
| idep : | integer , intent(in ) 
 | ||
| im : | integer , intent(in ) 
 | ||
| jm : | integer , intent(in ) 
 | ||
| km : | integer , intent(in ) 
 | ||
| lm : | integer , intent(in ) 
 | ||
| buf( im, jm, km, lm ) : | real(DP), intent(out) 
 | ||
| ireq : | integer , intent(out) 
 | 
4D 倍精度配列の非ブロッキング通信(受信)
Non-blocking transfer (receive) of real(8) 4D array
Alias for MPIWrapperIRecv_dble_4d
| Subroutine : | |||
| idest : | integer , intent(in ) 
 | ||
| im : | integer , intent(in ) 
 | ||
| buf( im ) : | real(DP), intent(in ) 
 | ||
| ireq : | integer , intent(out) 
 | 
1D 倍精度配列の非ブロッキング通信(送信)
Non-blocking transfer (send) of real(8) 1D array
Alias for MPIWrapperISend_dble_1d
| Subroutine : | |||
| idest : | integer , intent(in ) 
 | ||
| im : | integer , intent(in ) 
 | ||
| jm : | integer , intent(in ) 
 | ||
| buf( im, jm ) : | real(DP), intent(in ) 
 | ||
| ireq : | integer , intent(out) 
 | 
2D 倍精度配列の非ブロッキング通信(送信)
Non-blocking transfer (send) of real(8) 2D array
Alias for MPIWrapperISend_dble_2d
| Subroutine : | |||
| idest : | integer , intent(in ) 
 | ||
| im : | integer , intent(in ) 
 | ||
| jm : | integer , intent(in ) 
 | ||
| km : | integer , intent(in ) 
 | ||
| buf( im, jm, km ) : | real(DP), intent(in ) 
 | ||
| ireq : | integer , intent(out) 
 | 
3D 倍精度配列の非ブロッキング通信(送信)
Non-blocking transfer (send) of real(8) 3D array
Alias for MPIWrapperISend_dble_3d
| Subroutine : | |||
| idest : | integer , intent(in ) 
 | ||
| im : | integer , intent(in ) 
 | ||
| jm : | integer , intent(in ) 
 | ||
| km : | integer , intent(in ) 
 | ||
| lm : | integer , intent(in ) 
 | ||
| buf( im, jm, km, lm ) : | real(DP), intent(in ) 
 | ||
| ireq : | integer , intent(out) 
 | 
4D 倍精度配列の非ブロッキング通信(送信)
Non-blocking transfer (send) of real(8) 4D array
Alias for MPIWrapperISend_dble_4d
| Subroutine : | 
MPI の初期化
Initialization of MPI
  subroutine MPIWrapperInit
    !
    ! MPI の初期化
    !
    ! Initialization of MPI
    !
    ! モジュール引用 ; USE statements
    !
#ifdef LIB_MPI
    ! 作業変数
    ! Work variables
    !
    integer :: ierr
#endif
    nprocs = 1
    myrank = 0
#ifdef LIB_MPI
    call mpi_init( ierr )
    call mpi_comm_size( mpi_comm_world, nprocs, ierr )
    call mpi_comm_rank( mpi_comm_world, myrank, ierr )
#endif
  end subroutine MPIWrapperInit
          | Subroutine : | |||
| ireq : | integer, intent(inout) 
 | 
MPI 通信終了まで待機
Wait finishing MPI transfer
  subroutine MPIWrapperWait( ireq )
    !
    ! MPI 通信終了まで待機
    !
    ! Wait finishing MPI transfer
    !
    ! モジュール引用 ; USE statements
    !
    integer, intent(inout) :: ireq
                               ! request number
#ifdef LIB_MPI
    ! 作業変数
    ! Work variables
    !
    integer :: ierr
    integer :: istatus( MPI_STATUS_SIZE )
    call mpi_wait( ireq, istatus, ierr )
#endif
  end subroutine MPIWrapperWait
          | Subroutine : | |||
| idep : | integer , intent(in ) 
 | ||
| im : | integer , intent(in ) 
 | ||
| buf( im ) : | real(DP), intent(out) 
 | ||
| ireq : | integer , intent(out) 
 | 
1D 倍精度配列の非ブロッキング通信(受信)
Non-blocking transfer (receive) of real(8) 1D array
  subroutine MPIWrapperIRecv_dble_1d( idep, im, buf, ireq )
    !
    ! 1D 倍精度配列の非ブロッキング通信(受信)
    !
    ! Non-blocking transfer (receive) of real(8) 1D array
    !
    ! モジュール引用 ; USE statements
    !
    integer , intent(in ) :: idep
                              ! Process number of departure
    integer , intent(in ) :: im
                              ! Size of 1st dimension of received data
    real(DP), intent(out) :: buf( im )
                              ! Array to be received
    integer , intent(out) :: ireq
                              ! Request number
#ifdef LIB_MPI
    ! 作業変数
    ! Work variables
    !
    integer :: ierr
    integer :: isize
    isize = size( buf )
    call mpi_irecv( buf, isize, mpi_double_precision, idep, 1, mpi_comm_world, ireq, ierr )
#endif
  end subroutine MPIWrapperIRecv_dble_1d
          | Subroutine : | |||
| idep : | integer , intent(in ) 
 | ||
| im : | integer , intent(in ) 
 | ||
| jm : | integer , intent(in ) 
 | ||
| buf( im, jm ) : | real(DP), intent(out) 
 | ||
| ireq : | integer , intent(out) 
 | 
2D 倍精度配列の非ブロッキング通信(受信)
Non-blocking transfer (receive) of real(8) 2D array
  subroutine MPIWrapperIRecv_dble_2d( idep, im, jm, buf, ireq )
    !
    ! 2D 倍精度配列の非ブロッキング通信(受信)
    !
    ! Non-blocking transfer (receive) of real(8) 2D array
    !
    ! モジュール引用 ; USE statements
    !
    integer , intent(in ) :: idep
                              ! Process number of destination
    integer , intent(in ) :: im
                              ! Size of 1st dimension of received data
    integer , intent(in ) :: jm
                              ! Size of 2nd dimension of received data
    real(DP), intent(out) :: buf( im, jm )
                              ! Array to be received
    integer , intent(out) :: ireq
                              ! Request number
#ifdef LIB_MPI
    ! 作業変数
    ! Work variables
    !
    integer :: ierr
    integer :: isize
    isize = size( buf )
    call mpi_irecv( buf, isize, mpi_double_precision, idep, 1, mpi_comm_world, ireq, ierr )
#endif
  end subroutine MPIWrapperIRecv_dble_2d
          | Subroutine : | |||
| idep : | integer , intent(in ) 
 | ||
| im : | integer , intent(in ) 
 | ||
| jm : | integer , intent(in ) 
 | ||
| km : | integer , intent(in ) 
 | ||
| buf( im, jm, km ) : | real(DP), intent(out) 
 | ||
| ireq : | integer , intent(out) 
 | 
3D 倍精度配列の非ブロッキング通信(受信)
Non-blocking transfer (receive) of real(8) 3D array
  subroutine MPIWrapperIRecv_dble_3d( idep, im, jm, km, buf, ireq )
    !
    ! 3D 倍精度配列の非ブロッキング通信(受信)
    !
    ! Non-blocking transfer (receive) of real(8) 3D array
    !
    ! モジュール引用 ; USE statements
    !
    integer , intent(in ) :: idep
                              ! Process number of departure
    integer , intent(in ) :: im
                              ! Size of 1st dimension of received data
    integer , intent(in ) :: jm
                              ! Size of 2nd dimension of received data
    integer , intent(in ) :: km
                              ! Size of 3rd dimension of received data
    real(DP), intent(out) :: buf( im, jm, km )
                              ! Array to be received
    integer , intent(out) :: ireq
                              ! Request number
#ifdef LIB_MPI
    ! 作業変数
    ! Work variables
    !
    integer :: ierr
    integer :: isize
    isize = size( buf )
    call mpi_irecv( buf, isize, mpi_double_precision, idep, 1, mpi_comm_world, ireq, ierr )
#endif
  end subroutine MPIWrapperIRecv_dble_3d
          | Subroutine : | |||
| idep : | integer , intent(in ) 
 | ||
| im : | integer , intent(in ) 
 | ||
| jm : | integer , intent(in ) 
 | ||
| km : | integer , intent(in ) 
 | ||
| lm : | integer , intent(in ) 
 | ||
| buf( im, jm, km, lm ) : | real(DP), intent(out) 
 | ||
| ireq : | integer , intent(out) 
 | 
4D 倍精度配列の非ブロッキング通信(受信)
Non-blocking transfer (receive) of real(8) 4D array
  subroutine MPIWrapperIRecv_dble_4d( idep, im, jm, km, lm, buf, ireq )
    !
    ! 4D 倍精度配列の非ブロッキング通信(受信)
    !
    ! Non-blocking transfer (receive) of real(8) 4D array
    !
    ! モジュール引用 ; USE statements
    !
    integer , intent(in ) :: idep
                              ! Process number of departure
    integer , intent(in ) :: im
                              ! Size of 1st dimension of received data
    integer , intent(in ) :: jm
                              ! Size of 2nd dimension of received data
    integer , intent(in ) :: km
                              ! Size of 3rd dimension of received data
    integer , intent(in ) :: lm
                              ! Size of 4th dimension of received data
    real(DP), intent(out) :: buf( im, jm, km, lm )
                              ! Array to be received
    integer , intent(out) :: ireq
                              ! Request number
#ifdef LIB_MPI
    ! 作業変数
    ! Work variables
    !
    integer :: ierr
    integer :: isize
    isize = size( buf )
    call mpi_irecv( buf, isize, mpi_double_precision, idep, 1, mpi_comm_world, ireq, ierr )
#endif
  end subroutine MPIWrapperIRecv_dble_4d
          | Subroutine : | |||
| idest : | integer , intent(in ) 
 | ||
| im : | integer , intent(in ) 
 | ||
| buf( im ) : | real(DP), intent(in ) 
 | ||
| ireq : | integer , intent(out) 
 | 
1D 倍精度配列の非ブロッキング通信(送信)
Non-blocking transfer (send) of real(8) 1D array
  subroutine MPIWrapperISend_dble_1d( idest, im, buf, ireq )
    !
    ! 1D 倍精度配列の非ブロッキング通信(送信)
    !
    ! Non-blocking transfer (send) of real(8) 1D array
    !
    ! モジュール引用 ; USE statements
    !
    integer , intent(in ) :: idest
                              ! Process number of destination
    integer , intent(in ) :: im
                              ! Size of 1st dimension of sent data
    real(DP), intent(in ) :: buf( im )
                              ! Array to be sent
    integer , intent(out) :: ireq
                              ! Request number
#ifdef LIB_MPI
    ! 作業変数
    ! Work variables
    !
    integer :: ierr
    integer :: isize
    isize = size( buf )
    call mpi_isend( buf, isize, mpi_double_precision, idest, 1, mpi_comm_world, ireq, ierr )
#endif
  end subroutine MPIWrapperISend_dble_1d
          | Subroutine : | |||
| idest : | integer , intent(in ) 
 | ||
| im : | integer , intent(in ) 
 | ||
| jm : | integer , intent(in ) 
 | ||
| buf( im, jm ) : | real(DP), intent(in ) 
 | ||
| ireq : | integer , intent(out) 
 | 
2D 倍精度配列の非ブロッキング通信(送信)
Non-blocking transfer (send) of real(8) 2D array
  subroutine MPIWrapperISend_dble_2d( idest, im, jm, buf, ireq )
    !
    ! 2D 倍精度配列の非ブロッキング通信(送信)
    !
    ! Non-blocking transfer (send) of real(8) 2D array
    !
    ! モジュール引用 ; USE statements
    !
    integer , intent(in ) :: idest
                              ! Process number of destination
    integer , intent(in ) :: im
                              ! Size of 1st dimension of sent data
    integer , intent(in ) :: jm
                              ! Size of 2nd dimension of sent data
    real(DP), intent(in ) :: buf( im, jm )
                              ! Array to be sent
    integer , intent(out) :: ireq
                              ! Request number
#ifdef LIB_MPI
    ! 作業変数
    ! Work variables
    !
    integer :: ierr
    integer :: isize
    isize = size( buf )
    call mpi_isend( buf, isize, mpi_double_precision, idest, 1, mpi_comm_world, ireq, ierr )
#endif
  end subroutine MPIWrapperISend_dble_2d
          | Subroutine : | |||
| idest : | integer , intent(in ) 
 | ||
| im : | integer , intent(in ) 
 | ||
| jm : | integer , intent(in ) 
 | ||
| km : | integer , intent(in ) 
 | ||
| buf( im, jm, km ) : | real(DP), intent(in ) 
 | ||
| ireq : | integer , intent(out) 
 | 
3D 倍精度配列の非ブロッキング通信(送信)
Non-blocking transfer (send) of real(8) 3D array
  subroutine MPIWrapperISend_dble_3d( idest, im, jm, km, buf, ireq )
    !
    ! 3D 倍精度配列の非ブロッキング通信(送信)
    !
    ! Non-blocking transfer (send) of real(8) 3D array
    !
    ! モジュール引用 ; USE statements
    !
    integer , intent(in ) :: idest
                              ! Process number of destination
    integer , intent(in ) :: im
                              ! Size of 1st dimension of sent data
    integer , intent(in ) :: jm
                              ! Size of 2nd dimension of sent data
    integer , intent(in ) :: km
                              ! Size of 3rd dimension of sent data
    real(DP), intent(in ) :: buf( im, jm, km )
                              ! Array to be sent
    integer , intent(out) :: ireq
                              ! Request number
#ifdef LIB_MPI
    ! 作業変数
    ! Work variables
    !
    integer :: ierr
    integer :: isize
    isize = size( buf )
    call mpi_isend( buf, isize, mpi_double_precision, idest, 1, mpi_comm_world, ireq, ierr )
#endif
  end subroutine MPIWrapperISend_dble_3d
          | Subroutine : | |||
| idest : | integer , intent(in ) 
 | ||
| im : | integer , intent(in ) 
 | ||
| jm : | integer , intent(in ) 
 | ||
| km : | integer , intent(in ) 
 | ||
| lm : | integer , intent(in ) 
 | ||
| buf( im, jm, km, lm ) : | real(DP), intent(in ) 
 | ||
| ireq : | integer , intent(out) 
 | 
4D 倍精度配列の非ブロッキング通信(送信)
Non-blocking transfer (send) of real(8) 4D array
  subroutine MPIWrapperISend_dble_4d( idest, im, jm, km, lm, buf, ireq )
    !
    ! 4D 倍精度配列の非ブロッキング通信(送信)
    !
    ! Non-blocking transfer (send) of real(8) 4D array
    !
    ! モジュール引用 ; USE statements
    !
    integer , intent(in ) :: idest
                              ! Process number of destination
    integer , intent(in ) :: im
                              ! Size of 1st dimension of sent data
    integer , intent(in ) :: jm
                              ! Size of 2nd dimension of sent data
    integer , intent(in ) :: km
                              ! Size of 3rd dimension of sent data
    integer , intent(in ) :: lm
                              ! Size of 4th dimension of sent data
    real(DP), intent(in ) :: buf( im, jm, km, lm )
                              ! Array to be sent
    integer , intent(out) :: ireq
                              ! Request number
#ifdef LIB_MPI
    ! 作業変数
    ! Work variables
    !
    integer :: ierr
    integer :: isize
    isize = size( buf )
    call mpi_isend( buf, isize, mpi_double_precision, idest, 1, mpi_comm_world, ireq, ierr )
#endif
  end subroutine MPIWrapperISend_dble_4d
          | Subroutine : | 
MPI の異常終了処理
Abort of MPI
  subroutine MPIWrapperStop
    !
    ! MPI の異常終了処理
    !
    ! Abort of MPI
    !
    ! モジュール引用 ; USE statements
    !
#ifdef LIB_MPI
    ! 作業変数
    ! Work variables
    !
    integer :: errorcode = 9
    integer :: ierr
    call mpi_abort( mpi_comm_world, errorcode, ierr )
    call MPIWrapperFinalize
    stop
#endif
  end subroutine MPIWrapperstop