46 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
47#include "implicit_f.inc"
62 INTEGER KXSP(NISP,*),IXSP(KVOISPH,*),
63 . WSP2SORT(*), IREDUCE, LGAUGE(3,*)
68 INTEGER P, I, NN, N, NN0, NSP, IDEB, INITV, IG,
69 . , LOC_PROC, NBIRECV,
70 . IERROR, IERROR1, LEN, NVOIS1, NVOIS2,
71 . REQ_SD(NSPMD), REQ_SD2(NSPMD),
72 . INDEX(NSPHR), (MPI_STATUS_SIZE),
75 . xsphtmp(
sizspt,nsphr), sbufcom(2,nspmd),bufcom(2,nspmd)
77 INTEGER :: REQUEST_SBUF
79 INTEGER :: REQUEST_INDEX
80 INTEGER,
DIMENSION(NSPMD) :: DISPLS_INDEX,DISPLS_LSPHS
81 INTEGER,
DIMENSION(NSPMD) :: SEND_SIZE_INDEX,RCV_SIZE_LSPHS
82 INTEGER ::TOTAL_SEND_SIZE_INDEX,TOTAL_RCV_SIZE_LSPHS
96 sbufcom(1,p) = ireduce
100 IF(xsphr(1,i+ideb)<zero)
THEN
103 xsphtmp(1,nn) = -xsphr(1,i+ideb)
104 xsphtmp(2,nn) = xsphr(2,i+ideb)
105 xsphtmp(3,nn) = xsphr(3,i+ideb)
106 xsphtmp(4,nn) = xsphr(4,i+ideb)
107 xsphtmp(5,nn) = xsphr(5,i+ideb)
108 xsphtmp(6,nn) = xsphr(6,i+ideb)
114 sbufcom(2,p) =
psphr(p)
116 sbufcom(1:2,p) = zero
124 . 2*nspmd,2,request_sbuf,spmd_comm_world)
131 IF(
ALLOCATED(xsphr))
DEALLOCATE(xsphr)
133 ALLOCATE(xsphr(
sizspc,nsphr),stat=ierror1)
134 ierror = ierror + ierror1
135 IF(
ALLOCATED(wacompr))
DEALLOCATE(wacompr)
137 ALLOCATE(wacompr(
sizspw,nsphr),stat=ierror1)
138 ierror = ierror + ierror1
142 ALLOCATE(
isphr(nsphr),stat=ierror1)
143 ierror = ierror + ierror1
147 ALLOCATE(
ispsymr(nspcond,nsphr),stat=ierror1)
148 ierror = ierror + ierror1
151 CALL ancmsg(msgid=20,anmode=aninfo)
165 xsphr(1,i) = xsphtmp(1,i)
166 xsphr(2,i) = xsphtmp(2,i)
167 xsphr(3,i) = xsphtmp(3,i)
168 xsphr(4,i) = xsphtmp(4,i)
169 xsphr(5,i) = xsphtmp(5,i)
170 xsphr(6,i) = xsphtmp(6,i)
181 IF(ixsp(nn,n)<zero)
THEN
183 ixsp(nn,n) = -index(-ixsp(nn,n))
185 isphr(-ixsp(nn,n)) = 1
188 DO nn = nvois1+1,nvois2
189 IF(ixsp(nn,n)<zero)
THEN
191 ixsp(nn,n) = -index(-ixsp(nn,n))
199 IF(lgauge(1,ig) > -(numels+1))cycle
204 IF(ixsp(nn,n)<zero)
THEN
206 ixsp(nn,n) = -index(-ixsp(nn,n))
208 isphr(-ixsp(nn,n)) = 1
211 DO nn = nvois1+1,nvois2
212 IF(ixsp(nn,n)<zero)
THEN
214 ixsp(nn,n) = -index(-ixsp(nn,n))
224 IF(loc_proc/=p.AND.nsp>0)
THEN
226 index(ideb+i) = nint(xsphr(1,i+ideb))
237! -------------------------
243 CALL mpi_wait(request_sbuf,status,ierror)
251 ireduce =
max(ireduce,nint(bufcom(1,p)))
252 psphs(p) = nint(bufcom(2,p))
262 ierror = ierror + ierror1
264 CALL ancmsg(msgid=20,anmode=aninfo)
269 IF(p/=loc_proc.AND.
psphs(p)>0)
THEN
271 ideb = ideb +
psphs(p)
278 displs_index(1:nspmd) = 0
279 displs_lsphs(1:nspmd) = 0
280 send_size_index(1:nspmd) = 0
281 rcv_size_lsphs(1:nspmd) = 0
282 total_send_size_index = 0
283 total_rcv_size_lsphs = 0
290 send_size_index(p) =
psphr(p)
291 rcv_size_lsphs(p) =
psphs(p)
293 total_send_size_index = total_send_size_index + send_size_index(p)
294 total_rcv_size_lsphs = total_rcv_size_lsphs + rcv_size_lsphs(p)
297 displs_index(p) = displs_index(p-1) + send_size_index(p-1)
298 displs_lsphs(p) = displs_lsphs(p-1) + rcv_size_lsphs(p-1)
307 . send_size_index,total_send_size_index,displs_index,
308 . total_rcv_size_lsphs,rcv_size_lsphs,displs_lsphs,
309 . request_index,spmd_comm_world,nspmd)
319 CALL mpi_wait(request_index,status,ierror)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)