source: CONFIG_DEVT/IPSLCM6.5_work_ENSEMBLES/oasis3-mct/examples/test_1bin_ocnice/decomp_def.F90 @ 5725

Last change on this file since 5725 was 5725, checked in by aclsce, 3 years ago

Added new oasis3-MCT version to be used to handle ensembles simulations with XIOS.

File size: 2.2 KB
Line 
1!****************************************************************************************
2SUBROUTINE decomp_def(id_paral,id_size,id_im,id_jm,id_rank,id_npes,id_unit)
3
4  IMPLICIT NONE
5  INTEGER, DIMENSION(id_size), INTENT(out) :: id_paral(id_size)   
6  INTEGER, INTENT(in)  :: id_size
7  INTEGER, INTENT(in)  :: id_im       ! Grid dimension in i
8  INTEGER, INTENT(in)  :: id_jm       ! Grid dimension in j
9  INTEGER, INTENT(in)  :: id_rank     ! Rank of process
10  INTEGER, INTENT(in)  :: id_npes     ! Number of processes involved in the coupling
11  INTEGER, INTENT(in)  :: id_unit     ! Unit of log file
12  INTEGER              :: il_imjm, il_partj, il_parti, il_partij, npes2
13
14  if (id_rank < 0 .or. id_rank > id_npes) then
15    write(*,*) 'decomp_def ABORT invalid rank',id_rank,id_npes
16    stop
17  endif
18
19  il_imjm = id_im*id_jm
20  il_partj = id_jm/id_npes  ! Nbr of latitude circles in the partition
21  il_parti = id_im/id_npes  ! Nbr of lon in partition
22  il_partij = il_imjm/id_npes
23  id_paral(:) = 0
24
25  if (id_size == 3) then    ! APPLE (this is simple 1d decomp)
26      id_paral (1) = 1
27      id_paral (2) = id_rank*(il_partij)
28      IF (id_rank .LT. (id_npes-1)) THEN
29          id_paral (3) = il_partij
30      ELSE
31          id_paral (3) = il_imjm - ((id_npes-1)*(il_partij))
32      ENDIF
33
34  elseif (id_size == 4) then    ! GRAPE (this is doing a decomp in y)
35      id_paral (1) = 1
36      id_paral (2) = id_rank*(il_partj * id_im)
37      IF (id_rank .LT. (id_npes-1)) THEN
38          id_paral (3) = il_partj * id_im
39      ELSE
40          id_paral (3) = il_imjm-(id_rank*(il_partj * id_im))
41      ENDIF
42
43  elseif (id_size == 5) then   ! BOX
44      id_paral (1) = 2
45      id_paral (5) = id_im
46
47      ! full X boxes
48!      id_paral (2) = id_rank*il_partj*id_im
49!      id_paral (3) = id_im
50!      IF (id_rank .LT. (id_npes-1)) THEN
51!          id_paral (4) = il_partj
52!      ELSE
53!          id_paral (4) = id_jm-(id_rank*il_partj)
54!      ENDIF
55
56      ! full Y boxes
57      id_paral (2) = id_rank*il_parti
58      id_paral (4) = id_jm
59      IF (id_rank .LT. (id_npes-1)) THEN
60          id_paral (3) = il_parti
61      ELSE
62          id_paral (3) = id_im-(id_rank*il_parti)
63      ENDIF
64
65  else
66      write(*,*) 'decomp_def ABORT unknown decomp'
67      stop
68  endif
69
70END SUBROUTINE decomp_def
71
Note: See TracBrowser for help on using the repository browser.