41 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
42#include "implicit_f.inc"
55 INTEGER I, PMAIN, NNS_ANIM, NNTR, J, K, KK, L, LL, N1, N2, N3,
56 . ITAG, LEN, MSGOFF, STAT(), IERR,MSGOFF2
61 INTEGER,
DIMENSION(:),
ALLOCATABLE :: NPTR, NPN
63 . ,
DIMENSION(:,:),
ALLOCATABLE :: vtr, vv
71 IF (ispmd==pmain-1)
THEN
72 nns_anim=
fvdata(i)%NNS_ANIM
74 ALLOCATE(vtr(3,nntr), vv(3,nns_anim), nptr(nntr),
90 IF (
fvdata(i)%MPOLH(j)==zero) cycle
93 DO l=
fvdata(i)%IFVTADR(kk),
94 .
fvdata(i)%IFVTADR(kk+1)-1
97 vtr(1,ll)=vtr(1,ll)+
fvdata(i)%QPOLH(1,j)/
99 vtr(2,ll)=vtr(2,ll)+
fvdata(i)%QPOLH(2,j)/
101 vtr(3,ll)=vtr(3,ll)+
fvdata(i)%QPOLH(3,j)/
107 n1=
fvdata(i)%IFVTRI_ANIM(1,j)
108 n2=
fvdata(i)%IFVTRI_ANIM(2,j)
109 n3=
fvdata(i)%IFVTRI_ANIM(3,j
114 vvt(1)=vtr(1,j)/nptr(j)
115 vvt(2)=vtr(2,j)/nptr(j)
116 vvt(3)=vtr(3,j)/nptr(j)
122 vv(1,n1)=vv(1,n1)+vvt(1)
123 vv(2,n1)=vv(2,n1)+vvt(2)
124 vv(3,n1)=vv(3,n1)+vvt(3)
125 vv(1,n2)=vv(1,n2)+vvt(1)
126 vv(2,n2)=vv(2,n2)+vvt(2)
127 vv(3,n2)=vv(3,n2)+vvt(3)
128 vv(1,n3)=vv(1,n3)+vvt(1)
129 vv(2,n3)=vv(2,n3)+vvt(2)
130 vv(3,n3)=vv(3,n3)+vvt(3)
142 DEALLOCATE(vtr, vv, nptr, npn)
145 CALL mpi_recv(nns_anim, 1, mpi_integer, it_spmd(pmain),
146 . itag, spmd_comm_world, stat, ierr)
148 ALLOCATE(vv(3,nns_anim))
151 CALL mpi_recv(vv, len, real, it_spmd(pmain),
152 . itag, spmd_comm_world, stat, ierr)
166 IF (ispmd==pmain-1)
THEN
167 nns_anim=
fvdata(i)%NNS_ANIM
169 CALL mpi_send(nns_anim, 1, mpi_integer, it_spmd(1),
170 . itag, spmd_comm_world, ierr)
173 ALLOCATE(vtr(3,nntr), vv(3,nns_anim), nptr(nntr),
189 IF (
fvdata(i)%MPOLH(j)==zero) cycle
192 DO l=
fvdata(i)%IFVTADR(kk),
193 .
fvdata(i)%IFVTADR(kk+1)-1
196 vtr(1,ll)=vtr(1,ll)+
fvdata(i)%QPOLH(1,j)/
198 vtr(2,ll)=vtr(2,ll)+
fvdata(i)%QPOLH(2,j)/
200 vtr(3,ll)=vtr(3,ll)+
fvdata(i)%QPOLH(3,j)/
206 n1=
fvdata(i)%IFVTRI_ANIM(1,j)
207 n2=
fvdata(i)%IFVTRI_ANIM(2,j)
208 n3=
fvdata(i)%IFVTRI_ANIM(3,j)
213 vvt(1)=vtr(1,j)/nptr(j)
214 vvt(2)=vtr(2,j)/nptr(j)
215 vvt(3)=vtr(3,j)/nptr(j)
221 vv(1,n1)=vv(1,n1)+vvt(1)
222 vv(2,n1)=vv(2,n1)+vvt(2)
223 vv(3,n1)=vv(3,n1)+vvt(3)
224 vv(1,n2)=vv(1,n2)+vvt(1)
225 vv(2,n2)=vv(2,n2)+vvt(2)
226 vv(3,n2)=vv(3,n2)+vvt(3)
227 vv(1,n3)=vv(1,n3)+vvt(1)
228 vv(2,n3)=vv(2,n3)+vvt(2)
229 vv(3,n3)=vv(3,n3)+vvt(3)
233 vv(1,j)=vv(1,j)/npn(j)
234 vv(2,j)=vv(2,j)/npn(j)
235 vv(3,j)=vv(3,j)/npn(j)
239 CALL mpi_send(vv, len, real, it_spmd(1),
240 . itag, spmd_comm_world, ierr)
242 DEALLOCATE(vtr, vv, nptr, npn)
subroutine mpi_recv(buf, cnt, datatype, source, tag, comm, status, ierr)
subroutine mpi_send(buf, cnt, datatype, dest, tag, comm, ierr)