7 INTEGER,
SAVE :: ii_begin
9 INTEGER,
SAVE :: jj_begin
10 INTEGER,
SAVE :: jj_end
12 INTEGER,
SAVE :: ij_begin
13 INTEGER,
SAVE :: ij_end
15 INTEGER,
SAVE :: klon_mpi_begin
16 INTEGER,
SAVE :: klon_mpi_end
17 INTEGER,
SAVE :: klon_mpi
19 INTEGER,
SAVE,
ALLOCATABLE,
DIMENSION(:) :: jj_para_nb
20 INTEGER,
SAVE,
ALLOCATABLE,
DIMENSION(:) :: jj_para_begin
21 INTEGER,
SAVE,
ALLOCATABLE,
DIMENSION(:) :: jj_para_end
23 INTEGER,
SAVE,
ALLOCATABLE,
DIMENSION(:) :: ii_para_begin
24 INTEGER,
SAVE,
ALLOCATABLE,
DIMENSION(:) :: ii_para_end
26 INTEGER,
SAVE,
ALLOCATABLE,
DIMENSION(:) :: ij_para_nb
27 INTEGER,
SAVE,
ALLOCATABLE,
DIMENSION(:) :: ij_para_begin
28 INTEGER,
SAVE,
ALLOCATABLE,
DIMENSION(:) :: ij_para_end
30 INTEGER,
SAVE,
ALLOCATABLE,
DIMENSION(:) :: klon_mpi_para_nb
31 INTEGER,
SAVE,
ALLOCATABLE,
DIMENSION(:) :: klon_mpi_para_begin
32 INTEGER,
SAVE,
ALLOCATABLE,
DIMENSION(:) :: klon_mpi_para_end
35 INTEGER,
SAVE :: mpi_rank
36 INTEGER,
SAVE :: mpi_size
37 INTEGER,
SAVE :: mpi_root
38 LOGICAL,
SAVE :: is_mpi_root
39 LOGICAL,
SAVE :: is_using_mpi
42 LOGICAL,
SAVE :: is_north_pole
43 LOGICAL,
SAVE :: is_south_pole
44 INTEGER,
SAVE :: COMM_LMDZ_PHY
51 INTEGER,
INTENT(in) ::
iim
52 INTEGER,
INTENT(in) ::
jjp1
53 INTEGER,
INTENT(in) :: nb_proc
54 INTEGER,
INTENT(in) ::
distrib(0:nb_proc-1)
72 comm_lmdz_phy=comm_lmdz
74 IF (is_using_mpi)
THEN
76 CALL mpi_comm_size(comm_lmdz_phy,mpi_size,ierr)
77 CALL mpi_comm_rank(comm_lmdz_phy,mpi_rank,ierr)
84 IF (mpi_rank == 0)
THEN
89 IF (mpi_rank == 0)
THEN
90 is_north_pole = .true.
92 is_north_pole = .
false.
95 IF (mpi_rank == mpi_size-1)
THEN
96 is_south_pole = .true.
98 is_south_pole = .
false.
101 ALLOCATE(jj_para_nb(0:mpi_size-1))
102 ALLOCATE(jj_para_begin(0:mpi_size-1))
103 ALLOCATE(jj_para_end(0:mpi_size-1))
105 ALLOCATE(ij_para_nb(0:mpi_size-1))
106 ALLOCATE(ij_para_begin(0:mpi_size-1))
107 ALLOCATE(ij_para_end(0:mpi_size-1))
109 ALLOCATE(ii_para_begin(0:mpi_size-1))
110 ALLOCATE(ii_para_end(0:mpi_size-1))
112 ALLOCATE(klon_mpi_para_nb(0:mpi_size-1))
113 ALLOCATE(klon_mpi_para_begin(0:mpi_size-1))
114 ALLOCATE(klon_mpi_para_end(0:mpi_size-1))
117 klon_mpi_para_nb(0:mpi_size-1)=
distrib(0:nb_proc-1)
121 klon_mpi_para_begin(
i)=1
123 klon_mpi_para_begin(
i)=klon_mpi_para_end(
i-1)+1
125 klon_mpi_para_end(
i)=klon_mpi_para_begin(
i)+klon_mpi_para_nb(
i)-1
134 ij_para_begin(
i) = klon_mpi_para_begin(
i)+
iim-1
137 jj_para_begin(
i) = (ij_para_begin(
i)-1)/
iim + 1
138 ii_para_begin(
i) = mod(ij_para_begin(
i)-1,
iim) + 1
141 ij_para_end(
i) = klon_mpi_para_end(
i)+
iim-1
142 jj_para_end(
i) = (ij_para_end(
i)-1)/
iim + 1
143 ii_para_end(
i) = mod(ij_para_end(
i)-1,
iim) + 1
146 ij_para_nb(
i) = ij_para_end(
i)-ij_para_begin(
i)+1
147 jj_para_nb(
i) = jj_para_end(
i)-jj_para_begin(
i)+1
151 ii_begin = ii_para_begin(mpi_rank)
152 ii_end = ii_para_end(mpi_rank)
153 jj_begin = jj_para_begin(mpi_rank)
154 jj_end = jj_para_end(mpi_rank)
155 jj_nb = jj_para_nb(mpi_rank)
156 ij_begin = ij_para_begin(mpi_rank)
157 ij_end = ij_para_end(mpi_rank)
158 ij_nb = ij_para_nb(mpi_rank)
159 klon_mpi_begin = klon_mpi_para_begin(mpi_rank)
160 klon_mpi_end = klon_mpi_para_end(mpi_rank)
161 klon_mpi = klon_mpi_para_nb(mpi_rank)
171 WRITE(
lunout,*)
'ii_begin =', ii_begin
172 WRITE(
lunout,*)
'ii_end =', ii_end
173 WRITE(
lunout,*)
'jj_begin =',jj_begin
174 WRITE(
lunout,*)
'jj_end =', jj_end
175 WRITE(
lunout,*)
'jj_nb =', jj_nb
176 WRITE(
lunout,*)
'ij_begin =', ij_begin
177 WRITE(
lunout,*)
'ij_end =', ij_end
178 WRITE(
lunout,*)
'ij_nb =', ij_nb
179 WRITE(
lunout,*)
'klon_mpi_begin =', klon_mpi_begin
180 WRITE(
lunout,*)
'klon_mpi_end =', klon_mpi_end
181 WRITE(
lunout,*)
'klon_mpi =', klon_mpi
182 WRITE(
lunout,*)
'jj_para_nb =', jj_para_nb
183 WRITE(
lunout,*)
'jj_para_begin =', jj_para_begin
184 WRITE(
lunout,*)
'jj_para_end =', jj_para_end
185 WRITE(
lunout,*)
'ii_para_begin =', ii_para_begin
186 WRITE(
lunout,*)
'ii_para_end =', ii_para_end
187 WRITE(
lunout,*)
'ij_para_nb =', ij_para_nb
188 WRITE(
lunout,*)
'ij_para_begin =', ij_para_begin
189 WRITE(
lunout,*)
'ij_para_end =', ij_para_end
190 WRITE(
lunout,*)
'klon_mpi_para_nb =', klon_mpi_para_nb
191 WRITE(
lunout,*)
'klon_mpi_para_begin =', klon_mpi_para_begin
192 WRITE(
lunout,*)
'klon_mpi_para_end =', klon_mpi_para_end
193 WRITE(
lunout,*)
'mpi_rank =', mpi_rank
194 WRITE(
lunout,*)
'mpi_size =', mpi_size
195 WRITE(
lunout,*)
'mpi_root =', mpi_root
196 WRITE(
lunout,*)
'is_mpi_root =', is_mpi_root
197 WRITE(
lunout,*)
'is_north_pole =', is_north_pole
198 WRITE(
lunout,*)
'is_south_pole =', is_south_pole
199 WRITE(
lunout,*)
'COMM_LMDZ_PHY =', comm_lmdz_phy