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
16 INTEGER,
dimension(:),
allocatable :: distrib_phys
24 allocate(jj_nb_caldyn(0:mpi_size-1))
25 allocate(jj_nb_vanleer(0:mpi_size-1))
26 allocate(jj_nb_vanleer2(0:mpi_size-1))
27 allocate(jj_nb_dissip(0:mpi_size-1))
28 allocate(jj_nb_physic(0:mpi_size-1))
29 allocate(jj_nb_physic_bis(0:mpi_size-1))
30 allocate(distrib_phys(0:mpi_size-1))
38 include
"dimensions.h"
40 character (len=4) :: siim,sjjm,sllm,sproc
41 character (len=255) :: filename
42 integer :: unit_number=10
46 write(siim,
'(i3)')
iim
47 write(sjjm,
'(i3)') jjm
48 write(sllm,
'(i3)') llm
49 write(sproc,
'(i3)') mpi_size
50 filename=
'Bands_'//trim(adjustl(siim))//
'x'//trim(adjustl(sjjm))//
'x'//trim(adjustl(sllm))//
'_' &
51 //trim(adjustl(sproc))//
'prc.dat'
53 OPEN(
unit=unit_number,file=trim(filename),status=
'old',form=
'formatted',iostat=ierr)
58 read (unit_number,*)
j,jj_nb_caldyn(
i)
62 read (unit_number,*)
j,jj_nb_vanleer(
i)
66 read (unit_number,*)
j,jj_nb_dissip(
i)
70 read (unit_number,*)
j,distrib_phys(
i)
77 jj_nb_caldyn(
i)=(jjm+1)/mpi_size
78 if (
i<mod(jjm+1,mpi_size)) jj_nb_caldyn(
i)=jj_nb_caldyn(
i)+1
81 jj_nb_vanleer(:)=jj_nb_caldyn(:)
82 jj_nb_dissip(:)=jj_nb_caldyn(:)
85 distrib_phys(
i)=(
iim*(jjm-1)+2)/mpi_size
86 IF (
i<mod(
iim*(jjm-1)+2,mpi_size)) distrib_phys(
i)=distrib_phys(
i)+1
100 include
'dimensions.h'
104 jj_nb_vanleer2(
i)=(jjm+1)/mpi_size
105 if (
i<mod(jjm+1,mpi_size)) jj_nb_vanleer2(
i)=jj_nb_vanleer2(
i)+1
110 jj_nb_physic(
i)=jj_para_end(
i)-jj_para_begin(
i)+1
112 if (jj_para_begin(
i)==jj_para_end(
i-1))
then
113 jj_nb_physic(
i-1)=jj_nb_physic(
i-1)-1
119 jj_nb_physic_bis(
i)=jj_para_end(
i)-jj_para_begin(
i)+1
121 if (jj_para_begin(
i)==jj_para_end(
i-1))
then
122 jj_nb_physic_bis(
i)=jj_nb_physic_bis(
i)-1
124 jj_nb_physic_bis(
i-1)=jj_nb_physic_bis(
i-1)+1
125 jj_nb_physic_bis(
i)=jj_nb_physic_bis(
i)-1
139 real :: minvalue,maxvalue
140 integer :: min_proc,max_proc
142 real,
allocatable,
dimension(:) :: value
143 integer,
allocatable,
dimension(:) :: index
147 allocate(value(0:mpi_size-1))
148 allocate(index(0:mpi_size-1))
154 value(
i)=timer_average(jj_nb_caldyn(
i),timer_caldyn,
i)
160 if (value(
i)>value(
j))
then
172 maxvalue=value(mpi_size-1)
173 max_proc=index(mpi_size-1)
178 if (jj_nb_caldyn(max_proc)>3)
then
179 if (timer_iteration(jj_nb_caldyn(min_proc)+1,timer_caldyn,min_proc)<=1 )
then
180 jj_nb_caldyn(min_proc)=jj_nb_caldyn(min_proc)+1
181 jj_nb_caldyn(max_proc)=jj_nb_caldyn(max_proc)-1
184 if (timer_average(jj_nb_caldyn(min_proc)+1,timer_caldyn,min_proc) &
185 -timer_delta(jj_nb_caldyn(min_proc)+1,timer_caldyn,min_proc) < maxvalue)
then
186 jj_nb_caldyn(min_proc)=jj_nb_caldyn(min_proc)+1
187 jj_nb_caldyn(max_proc)=jj_nb_caldyn(max_proc)-1
204 real :: minvalue,maxvalue
205 integer :: min_proc,max_proc
207 real,
allocatable,
dimension(:) :: value
208 integer,
allocatable,
dimension(:) :: index
212 allocate(value(0:mpi_size-1))
213 allocate(index(0:mpi_size-1))
219 value(
i)=timer_average(jj_nb_vanleer(
i),timer_vanleer,
i)
225 if (value(
i)>value(
j))
then
237 maxvalue=value(mpi_size-1)
238 max_proc=index(mpi_size-1)
244 if (jj_nb_vanleer(max_proc)>3)
then
245 if (timer_average(jj_nb_vanleer(min_proc)+1,timer_vanleer,min_proc)==0. .or. &
246 timer_average(jj_nb_vanleer(max_proc)-1,timer_vanleer,max_proc)==0.)
then
247 jj_nb_vanleer(min_proc)=jj_nb_vanleer(min_proc)+1
248 jj_nb_vanleer(max_proc)=jj_nb_vanleer(max_proc)-1
251 if (timer_average(jj_nb_vanleer(min_proc)+1,timer_vanleer,min_proc) < maxvalue)
then
252 jj_nb_vanleer(min_proc)=jj_nb_vanleer(min_proc)+1
253 jj_nb_vanleer(max_proc)=jj_nb_vanleer(max_proc)-1
270 real :: minvalue,maxvalue
271 integer :: min_proc,max_proc
273 real,
allocatable,
dimension(:) :: value
274 integer,
allocatable,
dimension(:) :: index
278 allocate(value(0:mpi_size-1))
279 allocate(index(0:mpi_size-1))
285 value(
i)=timer_average(jj_nb_dissip(
i),timer_dissip,
i)
291 if (value(
i)>value(
j))
then
303 maxvalue=value(mpi_size-1)
304 max_proc=index(mpi_size-1)
310 if (jj_nb_dissip(max_proc)>3)
then
311 if (timer_iteration(jj_nb_dissip(min_proc)+1,timer_dissip,min_proc)<=1)
then
312 jj_nb_dissip(min_proc)=jj_nb_dissip(min_proc)+1
313 jj_nb_dissip(max_proc)=jj_nb_dissip(max_proc)-1
316 if (timer_average(jj_nb_dissip(min_proc)+1,timer_dissip,min_proc) &
317 - timer_delta(jj_nb_dissip(min_proc)+1,timer_dissip,min_proc) < maxvalue)
then
318 jj_nb_dissip(min_proc)=jj_nb_dissip(min_proc)+1
319 jj_nb_dissip(max_proc)=jj_nb_dissip(max_proc)-1
341 real,
allocatable,
dimension(:) :: value
342 integer,
allocatable,
dimension(:) :: inc
346 allocate(value(0:mpi_size-1))
347 allocate(inc(0:mpi_size-1))
354 value(
i)=timer_average(jj_nb_physic(
i),timer_physic,
i)
355 medium=medium+value(
i)
358 medium=medium/mpi_size
362 inc(
i)=nint(klon_mpi_para_nb(
i)*(medium-value(
i))/value(
i))
375 inc(index)=inc(index)-sgn
377 if (index>mpi_size-1) index=0
381 distrib_phys(
i)=klon_mpi_para_nb(
i)+inc(
i)
389 include
"dimensions.h"
392 character (len=4) :: siim,sjjm,sllm,sproc
393 character (len=255) :: filename
394 integer :: unit_number=10
397 write(siim,
'(i3)')
iim
398 write(sjjm,
'(i3)') jjm
399 write(sllm,
'(i3)') llm
400 write(sproc,
'(i3)') mpi_size
402 filename=
'Bands_'//trim(adjustl(siim))//
'x'//trim(adjustl(sjjm))//
'x'//trim(adjustl(sllm))//
'_' &
403 //trim(adjustl(sproc))//
'prc.dat'
405 OPEN(
unit=unit_number,file=trim(filename),status=
'replace',form=
'formatted',iostat=ierr)
411 write (unit_number,*)
i,jj_nb_caldyn(
i)
416 write (unit_number,*)
i,jj_nb_vanleer(
i)
421 write (unit_number,*)
i,jj_nb_dissip(
i)
425 write (unit_number,*)
i,distrib_phys(
i)
430 print *,
'probleme lors de l ecriture des bandes'