37 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
38#include "implicit_f.inc"
52 . x(3,*),ms(*),msini(*)
53 INTEGER WEIGHT(*),NODGLOB(*),NUM,IFLAG,ITAB(*),LENG
58 REAL,
DIMENSION(:) ,
ALLOCATABLE :: MAXV0, MAXV1, MAXV2
61 . ,
DIMENSION(:),
ALLOCATABLE :: v, maxv, maxv_1, maxv_2, maxv_res0,
62 . maxv_res1, maxv_res2
64 INTEGER STATUS(MPI_STATUS_SIZE),IERROR,MSGOFF,FLAG,ITABG(LENG)
65 INTEGER SIZ,MSGTYP,I,J,K,NG,NREC,MSGOFF2,
66 . l,ismasschange,msgoff3,msgoff4
67 INTEGER,
DIMENSION(:) ,
ALLOCATABLE :: IDNOD0, IDNOD, IDNOD_RES
77 ALLOCATE(maxv0(num),maxv1(num),maxv2(num))
79 ALLOCATE(v(numnod),maxv(num),maxv_1(num),maxv_2(num),maxv_res0(num),
80 . maxv_res1(num),maxv_res2(num))
82 ALLOCATE(idnod0(num),idnod(num),idnod_res(num))
93 v(i)=sqrt(x(1,i)**2+x(2,i)**2+x(3,i)**2)
97 v(i)=half*ms(i)*(x(1,i)**2+x(2,i)**2+x(3,i)**2)
105 v(i)=(ms(i)-msini(i))/
max(em20,msini(i))
114 IF(v(i) > maxv0(j) .AND. flag == 0)
THEN
116 idnod0(num-k+1) = idnod0(num-k)
117 maxv0(num-k+1) = maxv0(num-k)
118 maxv1(num-k+1) = maxv1(num-k)
119 maxv2(num-k+1) = maxv2(num-k)
121 idnod0(j) = nodglob(i)
136 CALL mpi_send(idnod0,siz,mpi_integer,it_spmd(1),msgtyp,
137 . spmd_comm_world,ierror)
140 CALL mpi_send(maxv0,siz,mpi_real,it_spmd(1),msgtyp,
141 . spmd_comm_world,ierror)
144 CALL mpi_send(maxv1,siz,mpi_real,it_spmd(1),msgtyp,
145 . spmd_comm_world,ierror)
148 CALL mpi_send(maxv2,siz,mpi_real,it_spmd(1),msgtyp,
149 . spmd_comm_world,ierror)
153 IF (weight(i)==1)
THEN
156 IF(v(i) > maxv(j) .AND. flag == 0)
THEN
158 idnod(num-k+1) = idnod(num-k)
159 maxv(num-k+1) = maxv(num-k)
160 maxv_1(num-k+1) = maxv_1(num-k)
161 maxv_2(num-k+1) = maxv_2(num-k)
163 idnod(j) = nodglob(i)
180 . spmd_comm_world,status,ierror)
183 CALL mpi_recv(idnod0,siz,mpi_integer,it_spmd(i),msgtyp,
184 . spmd_comm_world,status,ierror)
189 CALL mpi_recv(maxv0,siz,mpi_real,it_spmd(i),msgtyp,
190 . spmd_comm_world,status,ierror)
193 CALL mpi_recv(maxv1,siz,mpi_real,it_spmd(i),msgtyp,
194 . spmd_comm_world,status,ierror)
197 CALL mpi_recv(maxv2,siz,mpi_real,it_spmd(i),msgtyp,
198 . spmd_comm_world,status,ierror)
204 DO WHILE( j <= siz .AND. k <= siz .AND. l <= siz)
205 IF(maxv(j) > maxv0(k))
THEN
206 maxv_res0(l) = maxv(j)
207 idnod_res(l) = idnod(j)
208 maxv_res1(l) = maxv_1(j)
209 maxv_res2(l) = maxv_2(j)
212 ELSEIF(maxv0(k) > maxv(j))
THEN
213 maxv_res0(l) = maxv0(k)
214 idnod_res(l) = idnod0(k)
215 maxv_res1(l) = maxv1(k)
216 maxv_res2(l) = maxv2(k)
220 maxv_res0(l) = maxv0(k)
221 idnod_res(l) = idnod0(k)
222 maxv_res1(l) = maxv1(k)
223 maxv_res2(l) = maxv2(k)
230 maxv(j) = maxv_res0(j)
231 idnod(j) = idnod_res(j)
232 maxv_1(j) = maxv_res1(j)
233 maxv_2(j) = maxv_res2(j)
243 IF(maxv_res0(i) /= zero)
THEN
244 WRITE(iout,1100) itabg(idnod_res(i)),maxv_res0(i),
245 . half*(maxv_res1(i))*maxv_res0(i)**2,
246 . maxv_res1(i),maxv_res2(i),
247 . (maxv_res1(i)-maxv_res2(i))/
max(em20,maxv_res2(i))
250 ELSEIF(iflag == 2)
THEN
256 WRITE(iout,1300) itabg(idnod_res(i)),maxv_res0(i)
258 ELSEIF(iflag == 3)
THEN
264 WRITE(iout,1500) itabg(idnod_res(i)),maxv_res0(i)
266 ELSEIF(iflag == 4 .AND. (idtmin(11) == 3 .OR.idtmin(11)==8))
THEN
269 IF(maxv_res0(i) /=zero) ismasschange = 1
271 IF(ismasschange /= 0)
THEN
278 .
WRITE(iout,1700) itabg
279 . maxv_res2(i),maxv_res0
285 1000
FORMAT(
'*** NODES WITH HIGHEST VELOCITY')
286 1001
FORMAT(
' NODE VELOCITY K-ENER MASS MASS0
288 1100
FORMAT(i10,5g11.4)
290 1200
FORMAT(
'*** NODES WITH HIGHEST KINEMATIC ENERGY')
291 1201
FORMAT(
' NODE K-ENER MASS MASS0 MASS/MASS0')
292 1300
FORMAT(i10,g11.4)
294 1400
FORMAT(
'*** NODES WITH HIGHEST MASS')
295 1401
FORMAT(
' NODE MASS MASS0 MASS/MASS0')
296 1500
FORMAT(i10,g11.4)
298 1600
FORMAT(
'*** NODES WITH HIGHEST MASS CHANGE')
299 1601
FORMAT(
' NODE MASS MASS0 DM/MASS0')
300 1700
FORMAT(i10,3g11.4)
303 2100
FORMAT(
' ** STATISTICS **')
305 DEALLOCATE(maxv0,maxv1,maxv2)
306 DEALLOCATE(v,maxv,maxv_res0,maxv_res1,maxv_res2)
307 DEALLOCATE(idnod0,idnod,idnod_res)