6 integer,
parameter :: bands_caldyn=1
7 integer,
parameter :: bands_vanleer=2
8 integer,
parameter :: bands_dissip=3
10 INTEGER,
dimension(:),
allocatable :: jj_Nb_Caldyn
11 INTEGER,
dimension(:),
allocatable :: jj_Nb_vanleer
12 INTEGER,
dimension(:),
allocatable :: jj_Nb_vanleer2
13 INTEGER,
dimension(:),
allocatable :: jj_Nb_dissip
14 INTEGER,
dimension(:),
allocatable :: jj_Nb_physic
15 INTEGER,
dimension(:),
allocatable :: jj_Nb_physic_bis
17 TYPE(distrib),
SAVE,
TARGET :: distrib_Caldyn
18 TYPE(distrib),
SAVE,
TARGET :: distrib_vanleer
19 TYPE(distrib),
SAVE,
TARGET :: distrib_vanleer2
20 TYPE(distrib),
SAVE,
TARGET :: distrib_dissip
21 TYPE(distrib),
SAVE,
TARGET :: distrib_physic
22 TYPE(distrib),
SAVE,
TARGET :: distrib_physic_bis
24 INTEGER,
dimension(:),
allocatable :: distrib_phys
32 allocate(jj_nb_caldyn(0:mpi_size-1))
33 allocate(jj_nb_vanleer(0:mpi_size-1))
34 allocate(jj_nb_vanleer2(0:mpi_size-1))
35 allocate(jj_nb_dissip(0:mpi_size-1))
36 allocate(jj_nb_physic(0:mpi_size-1))
37 allocate(jj_nb_physic_bis(0:mpi_size-1))
38 allocate(distrib_phys(0:mpi_size-1))
46 include
"dimensions.h"
48 character (len=4) :: siim,sjjm,sllm,sproc
49 character (len=255) :: filename
50 integer :: unit_number=10
54 write(siim,
'(i3)')
iim
55 write(sjjm,
'(i3)') jjm
56 write(sllm,
'(i3)') llm
57 write(sproc,
'(i3)') mpi_size
58 filename=
'Bands_'//trim(adjustl(siim))//
'x'//trim(adjustl(sjjm))//
'x'//trim(adjustl(sllm))//
'_' &
59 //trim(adjustl(sproc))//
'prc.dat'
61 OPEN(
unit=unit_number,file=trim(filename),status=
'old',form=
'formatted',iostat=ierr)
66 read (unit_number,*)
j,jj_nb_caldyn(
i)
70 read (unit_number,*)
j,jj_nb_vanleer(
i)
74 read (unit_number,*)
j,jj_nb_dissip(
i)
78 read (unit_number,*)
j,distrib_phys(
i)
85 jj_nb_caldyn(
i)=(jjm+1)/mpi_size
86 if (
i<mod(jjm+1,mpi_size)) jj_nb_caldyn(
i)=jj_nb_caldyn(
i)+1
89 jj_nb_vanleer(:)=jj_nb_caldyn(:)
90 jj_nb_dissip(:)=jj_nb_caldyn(:)
93 distrib_phys(
i)=(
iim*(jjm-1)+2)/mpi_size
94 IF (
i<mod(
iim*(jjm-1)+2,mpi_size)) distrib_phys(
i)=distrib_phys(
i)+1
112 include
'dimensions.h'
116 jj_nb_vanleer2(
i)=(jjm+1)/mpi_size
117 if (
i<mod(jjm+1,mpi_size)) jj_nb_vanleer2(
i)=jj_nb_vanleer2(
i)+1
122 jj_nb_physic(
i)=jj_para_end(
i)-jj_para_begin(
i)+1
124 if (jj_para_begin(
i)==jj_para_end(
i-1))
then
125 jj_nb_physic(
i-1)=jj_nb_physic(
i-1)-1
131 jj_nb_physic_bis(
i)=jj_para_end(
i)-jj_para_begin(
i)+1
133 if (jj_para_begin(
i)==jj_para_end(
i-1))
then
134 jj_nb_physic_bis(
i)=jj_nb_physic_bis(
i)-1
136 jj_nb_physic_bis(
i-1)=jj_nb_physic_bis(
i-1)+1
137 jj_nb_physic_bis(
i)=jj_nb_physic_bis(
i)-1
149 distrib_physic_bis%jjb_u=distrib_physic%jjb_u
150 distrib_physic_bis%jje_u=distrib_physic%jje_u
151 distrib_physic_bis%jjnb_u=distrib_physic%jjnb_u
153 distrib_physic_bis%ijb_u=distrib_physic%ijb_u
154 distrib_physic_bis%ije_u=distrib_physic%ije_u
155 distrib_physic_bis%ijnb_u=distrib_physic%ijnb_u
157 distrib_physic_bis%jjb_v=distrib_physic%jjb_v
158 distrib_physic_bis%jje_v=distrib_physic%jje_v
159 distrib_physic_bis%jjnb_v=distrib_physic%jjnb_v
161 distrib_physic_bis%ijb_v=distrib_physic%ijb_v
162 distrib_physic_bis%ije_v=distrib_physic%ije_v
163 distrib_physic_bis%ijnb_v=distrib_physic%ijnb_v
172 TYPE(distrib),
INTENT(INOUT) :: new_dist
174 real :: minvalue,maxvalue
175 integer :: min_proc,max_proc
177 real,
allocatable,
dimension(:) :: value
178 integer,
allocatable,
dimension(:) :: index
182 allocate(value(0:mpi_size-1))
183 allocate(index(0:mpi_size-1))
189 value(
i)=timer_average(jj_nb_caldyn(
i),timer_caldyn,
i)
195 if (value(
i)>value(
j))
then
207 maxvalue=value(mpi_size-1)
208 max_proc=index(mpi_size-1)
213 if (jj_nb_caldyn(max_proc)>3)
then
214 if (timer_iteration(jj_nb_caldyn(min_proc)+1,timer_caldyn,min_proc)<=1 )
then
215 jj_nb_caldyn(min_proc)=jj_nb_caldyn(min_proc)+1
216 jj_nb_caldyn(max_proc)=jj_nb_caldyn(max_proc)-1
219 if (timer_average(jj_nb_caldyn(min_proc)+1,timer_caldyn,min_proc) &
220 -timer_delta(jj_nb_caldyn(min_proc)+1,timer_caldyn,min_proc) < maxvalue)
then
221 jj_nb_caldyn(min_proc)=jj_nb_caldyn(min_proc)+1
222 jj_nb_caldyn(max_proc)=jj_nb_caldyn(max_proc)-1
239 TYPE(distrib),
INTENT(INOUT) :: new_dist
241 real :: minvalue,maxvalue
242 integer :: min_proc,max_proc
244 real,
allocatable,
dimension(:) :: value
245 integer,
allocatable,
dimension(:) :: index
249 allocate(value(0:mpi_size-1))
250 allocate(index(0:mpi_size-1))
256 value(
i)=timer_average(jj_nb_vanleer(
i),timer_vanleer,
i)
262 if (value(
i)>value(
j))
then
274 maxvalue=value(mpi_size-1)
275 max_proc=index(mpi_size-1)
281 if (jj_nb_vanleer(max_proc)>3)
then
282 if (timer_average(jj_nb_vanleer(min_proc)+1,timer_vanleer,min_proc)==0. .or. &
283 timer_average(jj_nb_vanleer(max_proc)-1,timer_vanleer,max_proc)==0.)
then
284 jj_nb_vanleer(min_proc)=jj_nb_vanleer(min_proc)+1
285 jj_nb_vanleer(max_proc)=jj_nb_vanleer(max_proc)-1
288 if (timer_average(jj_nb_vanleer(min_proc)+1,timer_vanleer,min_proc) < maxvalue)
then
289 jj_nb_vanleer(min_proc)=jj_nb_vanleer(min_proc)+1
290 jj_nb_vanleer(max_proc)=jj_nb_vanleer(max_proc)-1
308 TYPE(distrib),
INTENT(INOUT) :: new_dist
310 real :: minvalue,maxvalue
311 integer :: min_proc,max_proc
313 real,
allocatable,
dimension(:) :: value
314 integer,
allocatable,
dimension(:) :: index
318 allocate(value(0:mpi_size-1))
319 allocate(index(0:mpi_size-1))
325 value(
i)=timer_average(jj_nb_dissip(
i),timer_dissip,
i)
331 if (value(
i)>value(
j))
then
343 maxvalue=value(mpi_size-1)
344 max_proc=index(mpi_size-1)
350 if (jj_nb_dissip(max_proc)>3)
then
351 if (timer_iteration(jj_nb_dissip(min_proc)+1,timer_dissip,min_proc)<=1)
then
352 jj_nb_dissip(min_proc)=jj_nb_dissip(min_proc)+1
353 jj_nb_dissip(max_proc)=jj_nb_dissip(max_proc)-1
356 if (timer_average(jj_nb_dissip(min_proc)+1,timer_dissip,min_proc) &
357 - timer_delta(jj_nb_dissip(min_proc)+1,timer_dissip,min_proc) < maxvalue)
then
358 jj_nb_dissip(min_proc)=jj_nb_dissip(min_proc)+1
359 jj_nb_dissip(max_proc)=jj_nb_dissip(max_proc)-1
383 real,
allocatable,
dimension(:) :: value
384 integer,
allocatable,
dimension(:) :: inc
388 allocate(value(0:mpi_size-1))
389 allocate(inc(0:mpi_size-1))
396 value(
i)=timer_average(jj_nb_physic(
i),timer_physic,
i)
397 medium=medium+value(
i)
400 medium=medium/mpi_size
404 inc(
i)=nint(klon_mpi_para_nb(
i)*(medium-value(
i))/value(
i))
417 inc(index)=inc(index)-sgn
419 if (index>mpi_size-1) index=0
423 distrib_phys(
i)=klon_mpi_para_nb(
i)+inc(
i)
432 include
"dimensions.h"
435 character (len=4) :: siim,sjjm,sllm,sproc
436 character (len=255) :: filename
437 integer :: unit_number=10
440 write(siim,
'(i3)')
iim
441 write(sjjm,
'(i3)') jjm
442 write(sllm,
'(i3)') llm
443 write(sproc,
'(i3)') mpi_size
445 filename=
'Bands_'//trim(adjustl(siim))//
'x'//trim(adjustl(sjjm))//
'x'//trim(adjustl(sllm))//
'_' &
446 //trim(adjustl(sproc))//
'prc.dat'
448 OPEN(
unit=unit_number,file=trim(filename),status=
'replace',form=
'formatted',iostat=ierr)
454 write (unit_number,*)
i,jj_nb_caldyn(
i)
459 write (unit_number,*)
i,jj_nb_vanleer(
i)
464 write (unit_number,*)
i,jj_nb_dissip(
i)
468 write (unit_number,*)
i,distrib_phys(
i)
473 print *,
'probleme lors de l ecriture des bandes'