1 | !**************************************************************************************** |
---|
2 | SUBROUTINE decomp_def(id_part_id,id_paral,id_size,id_im,id_jm,id_rank,id_npes,id_unit) |
---|
3 | ! |
---|
4 | IMPLICIT NONE |
---|
5 | INTEGER, INTENT(out) :: id_part_id ! Local partition ID |
---|
6 | INTEGER, DIMENSION(id_size), INTENT(out) :: id_paral(id_size) |
---|
7 | INTEGER, INTENT(in) :: id_size |
---|
8 | INTEGER, INTENT(in) :: id_im ! Grid dimension in i |
---|
9 | INTEGER, INTENT(in) :: id_jm ! Grid dimension in j |
---|
10 | INTEGER, INTENT(in) :: id_rank ! Rank of process |
---|
11 | INTEGER, INTENT(in) :: id_npes ! Number of processes involved in the coupling |
---|
12 | INTEGER, INTENT(in) :: id_unit ! Unit of log file |
---|
13 | INTEGER :: il_imjm, il_partj |
---|
14 | ! |
---|
15 | il_imjm = id_im*id_jm |
---|
16 | il_partj = id_jm/id_npes ! Nbr of latitude circles in the partition |
---|
17 | ! |
---|
18 | #ifdef DECOMP_APPLE |
---|
19 | ! Each process is responsible for a part of field defined by |
---|
20 | ! the number of grid points and the offset of the first point |
---|
21 | ! |
---|
22 | WRITE (id_unit,*) 'APPLE partitioning' |
---|
23 | ! |
---|
24 | IF (id_rank .LT. (id_npes-1)) THEN |
---|
25 | id_paral (1) = 1 |
---|
26 | id_paral (2) = id_rank*(il_partj * id_im) |
---|
27 | id_paral (3) = il_partj * id_im |
---|
28 | ELSE |
---|
29 | id_paral (1) = 1 |
---|
30 | id_paral (2) = id_rank*(il_partj * id_im) |
---|
31 | id_paral (3) = il_imjm-(id_rank*(il_partj * id_im)) |
---|
32 | ENDIF |
---|
33 | ! |
---|
34 | #elif defined DECOMP_BOX |
---|
35 | ! |
---|
36 | WRITE (id_unit,*) 'BOX partitioning' |
---|
37 | ! |
---|
38 | ! Each process is responsible for a rectangular box of 32x48 points |
---|
39 | ! |
---|
40 | id_paral (1) = 2 |
---|
41 | id_paral (5) = id_im |
---|
42 | id_paral (2) = id_rank*il_partj*id_im |
---|
43 | id_paral (3) = id_im |
---|
44 | IF (id_rank .LT. (id_npes-1)) THEN |
---|
45 | id_paral (4) = il_partj |
---|
46 | ELSE |
---|
47 | id_paral (4) = id_jm-(id_rank*il_partj) |
---|
48 | ENDIF |
---|
49 | ! |
---|
50 | #endif |
---|
51 | ! |
---|
52 | END SUBROUTINE decomp_def |
---|
53 | |
---|