34
35
36
38
39
40
41 USE spmd_comm_world_mod, ONLY : spmd_comm_world
42#include "implicit_f.inc"
43
44
45
46#include "spmd.inc"
47
48
49
50#include "task_c.inc"
51
52
53
54 INTEGER FVEL2FA(*)
55
56
57
58#ifdef MPI
59 INTEGER ELOFF, I, PMAIN, J, K, KK, N, NN, N1, N2, N3, NND,
60 . ITAG, NNTR, IERR, STAT(MPI_STATUS_SIZE), JJ, IAD,
61 . LEN, MSGOFF,MSGOFF2
62 INTEGER, DIMENSION(:), ALLOCATABLE :: OFFTR, IBUF, ITAGT
63
64 DATA msgoff/7041/
65 DATA msgoff2/7042/
66
67
71 IF (ispmd==0) THEN
72 IF (ispmd==pmain-1) THEN
73 ALLOCATE(offtr(
fvdata(i)%NNTR))
75 offtr(j)=0
76 ENDDO
80 DO n=
fvdata(i)%IFVTADR(kk),
81 .
fvdata(i)%IFVTADR(kk+1)-1
83 IF (nn>0) THEN
84 n1=
fvdata(i)%IFVTRI_ANIM(1,nn)
85 n2=
fvdata(i)%IFVTRI_ANIM(2,nn)
86 n3=
fvdata(i)%IFVTRI_ANIM(3,nn)
87 nnd=1
88 IF (n2/=n1) nnd=nnd+1
89 IF (n3/=n2.AND.n3/=n1) nnd=nnd+1
90
92 IF (nnd==3) offtr(nn)=1
93 ENDIF
94 ENDDO
95 ENDDO
96 ENDDO
99 DEALLOCATE(offtr)
100 ELSE
101 itag=msgoff
102 CALL mpi_recv(nntr, 1, mpi_integer, it_spmd(pmain),
103 . itag, spmd_comm_world, stat, ierr)
104
105 len=2*nntr
106 ALLOCATE(ibuf(len), offtr(nntr))
107 itag=msgoff2
108 CALL mpi_recv(ibuf, len, mpi_integer, it_spmd(pmain),
109 . itag, spmd_comm_world, stat, ierr)
110
111 DO j=1,nntr
112 offtr(j)=0
113 ENDDO
114 jj=0
115 DO j=1,nntr
116 nn=ibuf(jj+1)
117 IF (nn /=0 ) THEN
119 offtr(nn)=ibuf(jj+2)
120 ENDIF
121 jj=jj+2
122 ENDDO
125 DEALLOCATE(ibuf, offtr)
126 ENDIF
127 ELSE
128 IF (ispmd==pmain-1) THEN
129 itag=msgoff
131 . it_spmd(1), itag, spmd_comm_world,
132 . ierr)
133
135 ALLOCATE(ibuf(len), itagt(
fvdata(i)%NNTR))
136 DO j=1,len
137 ibuf(j)=0
138 ENDDO
140 itagt(j)=0
141 ENDDO
142 iad=0
146 DO n=
fvdata(i)%IFVTADR(kk),
147 .
fvdata(i)%IFVTADR(kk+1)-1
149 IF (nn>0.AND.itagt(nn)==0) THEN
150 n1=
fvdata(i)%IFVTRI_ANIM(1,nn)
151 n2=
fvdata(i)%IFVTRI_ANIM(2,nn)
152 n3=
fvdata(i)%IFVTRI_ANIM(3,nn)
153 nnd=1
154 IF (n2/=n1) nnd=nnd+1
155 IF (n3/=n2.AND.n3/=n1) nnd=nnd+1
156
157 ibuf(iad+1)=nn
158 IF (nnd==3) ibuf(iad+2)=1
159 iad=iad+2
160 itagt(nn)=1
161 ENDIF
162 ENDDO
163 ENDDO
164 ENDDO
165 itag=msgoff2
166 CALL mpi_send(ibuf, len, mpi_integer, it_spmd(1),
167 . itag, spmd_comm_world, ierr)
168
169 DEALLOCATE(ibuf, itagt)
170 ENDIF
171 ENDIF
172 ENDDO
173
174#endif
175 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
void write_c_c(int *w, int *len)