35
36
37
39
40
41
42 USE spmd_comm_world_mod, ONLY : spmd_comm_world
43#include "implicit_f.inc"
44
45
46
47#include "spmd.inc"
48
49
50
51#include "task_c.inc"
52
53
54
55 INTEGER FVEL2FA(*)
57 . fvmass(*), fvpres(*), fvqx(*), fvqy(*), fvqz(*), fvrho(*),
58 . fvener(*), fvcson(*), fvgama(*), fvvisu(*)
59
60
61
62#ifdef MPI
63 INTEGER , I, PMAIN, J, K, KK, N, NN, IDP, ITAG, MSGOFF,
64 . NNTR, LEN, IAD, STAT(MPI_STATUS_SIZE), IERR,MSGOFF2
66 . gama, ssp, fac
68 . , DIMENSION(:), ALLOCATABLE :: rbuf
69 DATA msgoff/7046/
70 DATA msgoff2/7047/
71
72
76 IF (ispmd==0) THEN
77 IF (ispmd==pmain-1) THEN
80 ssp=sqrt((gama-one)*gama*
fvdata(i)%EPOLH(j)/
84 DO n=
fvdata(i)%IFVTADR(kk),
85 .
fvdata(i)%IFVTADR(kk+1)-1
87 fac=one
88 IF (
fvdata(i)%IFVTRI(4,nn)/=0)
THEN
90 fvvisu(fvel2fa(
eloff+nn))=idp-(idp/8)*8+1
91 ELSE
92 fvvisu(fvel2fa(
eloff+nn))=-1
93 fac=half
94 ENDIF
96 fvmass(nn)=fvmass(nn)+fac*
fvdata(i)%MPOLH(j)
97 fvpres(nn)=fvpres(nn)+fac*
fvdata(i)%PPOLH(j)
98 IF (
fvdata(i)%MPOLH(j)>zero)
THEN
99 fvqx(nn)=fvqx(nn)+fac*
fvdata(i)%QPOLH(1,j)/
101 fvqy(nn)=fvqy(nn)+fac*
fvdata(i)%QPOLH(2,j)/
103 fvqz(nn)=fvqz(nn)+fac*
fvdata(i)%QPOLH(3,j)/
105 fvener(nn)=fvener(nn)+fac*
fvdata(i)%EPOLH(j)/
107 ENDIF
108 fvrho(nn)=fvrho(nn)+fac*
fvdata(i)%RPOLH(j)
109 fvcson(nn)=fvcson(nn)+fac*ssp
110 fvgama(nn)=fvgama(nn)+fac*gama
111 ENDDO
112 ENDDO
113 ENDDO
115 ELSE
116 itag=msgoff
117 CALL mpi_recv(nntr, 1, mpi_integer, it_spmd(pmain),
118 . itag, spmd_comm_world, stat, ierr)
119
120 len=10*nntr
121 ALLOCATE(rbuf(len))
122 itag=msgoff2
123 CALL mpi_recv(rbuf, len, real, it_spmd(pmain),
124 . itag, spmd_comm_world, stat, ierr)
125
126 DO j=1,nntr
128 fvmass(nn)=rbuf(j)
129 fvpres(nn)=rbuf(nntr+j)
130 fvqx(nn)=rbuf(2*nntr+j)
131 fvqy(nn)=rbuf(3*nntr+j)
132 fvqz(nn)=rbuf(4*nntr+j)
133 fvener(nn)=rbuf(5*nntr+j)
134 fvrho(nn)=rbuf(6*nntr+j)
135 fvcson(nn
136 fvgama(nn)=rbuf(8*nntr+j)
137 fvvisu(nn)=rbuf(9*nntr+j)
138 ENDDO
140 DEALLOCATE(rbuf)
141 ENDIF
142 ELSE
143 IF (ispmd==pmain-1) THEN
145 itag=msgoff
146 CALL mpi_send(nntr, 1, mpi_integer, it_spmd(1),
147 . itag, spmd_comm_world, ierr)
148
149 len=10*nntr
150 ALLOCATE(rbuf(len))
151 DO j=1,len
152 rbuf(j)=zero
153 ENDDO
156 ssp=sqrt((gama-one)*gama*
fvdata(i)%EPOLH(j)/
160 DO n=
fvdata(i)%IFVTADR(kk),
161 .
fvdata(i)%IFVTADR(kk+1)-1
163 fac=one
164 IF (
fvdata(i)%IFVTRI(4,nn)/=0)
THEN
166 rbuf(9*nntr+nn)=idp-(idp/8)*8+1
167 ELSE
168 rbuf(9*nntr+nn)=-1
169 fac=half
170 ENDIF
171 rbuf(nn)=rbuf(nn)+fac*
fvdata(i)%MPOLH(j)
172 rbuf(nntr+nn)=rbuf(nntr+nn)
174 IF (
fvdata(i)%MPOLH(j)>zero)
THEN
175 rbuf(2*nntr+nn)=rbuf(2*nntr+nn)
176 . +fac*
fvdata(i)%QPOLH(1,j)/
178 rbuf(3*nntr+nn)=rbuf(3*nntr+nn)
179 . +fac*
fvdata(i)%QPOLH(2,j)/
181 rbuf(4*nntr+nn)=rbuf(4*nntr+nn)
182 . +fac*
fvdata(i)%QPOLH(3,j)/
184 rbuf(5*nntr+nn)=rbuf(5*nntr+nn)
185 . +fac*
fvdata(i)%EPOLH(j)/
187 ENDIF
188 rbuf(6*nntr+nn)=rbuf(6*nntr+nn)
190 rbuf(7*nntr+nn)=rbuf(7*nntr+nn)+fac*ssp
191 rbuf(8*nntr+nn)=rbuf(8*nntr+nn)+fac*gama
192 ENDDO
193 ENDDO
194 ENDDO
195 itag=msgoff2
196 CALL mpi_send(rbuf, len, real, it_spmd(1),
197 . itag, spmd_comm_world, ierr)
198
199 DEALLOCATE(rbuf)
200 ENDIF
201 ENDIF
202 ENDDO
203
204#endif
205 RETURN
subroutine eloff(ixs, ixq, ixc, ixp, ixt, ixr, ixtg, iparg, iactiv, time, iflag, nn, elbuf_tab, x, temp, mcp, pm, igroups, mcp_off, igrbric, igrquad, igrsh4n, igrsh3n, igrtruss, igrbeam, igrspring, itherm_fe)
subroutine mpi_recv(buf, cnt, datatype, source, tag, comm, status, ierr)
subroutine mpi_send(buf, cnt, datatype, dest, tag, comm, ierr)
type(fvbag_spmd), dimension(:), allocatable fvspmd
type(fvbag_data), dimension(:), allocatable fvdata