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