You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.6 KiB
52 lines
1.6 KiB
!**************************************************************************************** |
|
SUBROUTINE decomp_def(id_paral,id_size,id_im,id_jm,id_rank,id_npes,id_unit) |
|
! |
|
IMPLICIT NONE |
|
INTEGER, DIMENSION(id_size), INTENT(out) :: id_paral(id_size) |
|
INTEGER, INTENT(in) :: id_size |
|
INTEGER, INTENT(in) :: id_im ! Grid dimension in i |
|
INTEGER, INTENT(in) :: id_jm ! Grid dimension in j |
|
INTEGER, INTENT(in) :: id_rank ! Rank of process |
|
INTEGER, INTENT(in) :: id_npes ! Number of processes involved in the coupling |
|
INTEGER, INTENT(in) :: id_unit ! Unit of log file |
|
INTEGER :: il_imjm, il_partj |
|
! |
|
il_imjm = id_im*id_jm |
|
il_partj = id_jm/id_npes ! Nbr of latitude circles in the partition |
|
! |
|
#ifdef DECOMP_APPLE |
|
! Each process is responsible for a part of field defined by |
|
! the number of grid points and the offset of the first point |
|
! |
|
WRITE (id_unit,*) 'APPLE partitioning' |
|
! |
|
IF (id_rank .LT. (id_npes-1)) THEN |
|
id_paral (1) = 1 |
|
id_paral (2) = id_rank*(il_partj * id_im) |
|
id_paral (3) = il_partj * id_im |
|
ELSE |
|
id_paral (1) = 1 |
|
id_paral (2) = id_rank*(il_partj * id_im) |
|
id_paral (3) = il_imjm-(id_rank*(il_partj * id_im)) |
|
ENDIF |
|
! |
|
#elif defined DECOMP_BOX |
|
! |
|
WRITE (id_unit,*) 'BOX partitioning' |
|
! |
|
! Each process is responsible for a rectangular box of il_partj lines |
|
! |
|
id_paral (1) = 2 |
|
id_paral (5) = id_im |
|
id_paral (2) = id_rank*il_partj*id_im |
|
id_paral (3) = id_im |
|
IF (id_rank .LT. (id_npes-1)) THEN |
|
id_paral (4) = il_partj |
|
ELSE |
|
id_paral (4) = id_jm-(id_rank*il_partj) |
|
ENDIF |
|
! |
|
#endif |
|
! |
|
END SUBROUTINE decomp_def |
|
|
|
|