47
48
49
51 USE elbufdef_mod
53
54
55
56#include "implicit_f.inc"
57#include "comlock.inc"
58
59
60
61#include "com01_c.inc"
62#include "com04_c.inc"
63#include "com08_c.inc"
64#include "vect01_c.inc"
65#include "param_c.inc"
66#include "task_c.inc"
67#include "tabsiz_c.inc"
68
69
70
71 INTEGER IPARG(NPARG,NGROUP), ITASK, LENCOM,IXTG(NIXTG,NUMELTG),
72 . NERCVOIS(*),NESDVOIS(*),LERCVOIS(*),LESDVOIS(*),
73 . IXS(NIXS,NUMELS),IXQ(NIXQ,NUMELQ),LGAUGE(3,NBGAUGE),IGAUP(NBGAUGE),NGAUP(NSPMD)
74 my_real phi(sphi),gauge(llgauge,nbgauge),x(3,numnod),v(3,numnod)
75 TYPE(ELBUF_STRUCT_), TARGET, DIMENSION(NGROUP) :: ELBUF_STR
76 TYPE(t_ale_connectivity), INTENT(IN) :: ALE_CONNECT
77
78
79
80 INTEGER NG, JMUL, IADR, , II,J,JJ(6),N,IG,IS,IGAUGE,IG0,ITAG(NBGAUGE),NEL,NUMEL,NCONNECT
82 TYPE(G_BUFEL_) ,POINTER :: GBUF
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132 igauge=0
133 DO ig=1,nbgauge
134 IF(lgauge(1,ig) <= 0 .AND. lgauge(1,ig) >= -(numels+numelq+numeltg))
135 . igauge=1
136 END DO
137
139
140 IF(igauge == 0)RETURN
141
142
143
144
145 IF(tt==zero)THEN
146 DO ng=itask+1,ngroup,nthread
147 IF( iparg(5,ng) /= 1 .AND. iparg(5,ng) /= 2 .AND.
148 . (iparg(5,ng) /= 7 .AND. n2d == 0) ) cycle
150 2 mtn ,llt ,nft ,iadr ,ity ,
151 3 npt ,jale ,ismstr ,jeul ,jtur ,
152 4 jthe ,jlag ,jmul ,jhbe ,jivf ,
153 5 nvaux ,jpor ,jcvt ,jclose ,jplasol ,
154 6 irep ,iint ,igtyp ,israt ,isrot ,
155 7 icsen ,isorth ,isorthg ,ifailure,jsms )
156 IF (iparg(8,ng) == 1) cycle
157 lft=1
158 IF (iparg(5,ng) == 1) THEN
159
160 numel = numels
161 nconnect = 8
162 CALL agaug30(lgauge,gauge,ixs ,x ,nixs,numel,nconnect)
163 ELSEIF (iparg(5,ng) == 2) THEN
164
165 numel = numelq
166 nconnect = 4
167 CALL agaug30(lgauge,gauge,ixq ,x ,nixq,numel,nconnect)
168 ELSEIF (iparg(5,ng) == 7) THEN
169
170 numel = numeltg
171 nconnect = 3
172 CALL agaug30(lgauge,gauge,ixtg ,x ,nixtg,numel,nconnect
173 ENDIF
174 ENDDO
176 ENDIF
177
178 IF(itask==0)THEN
179 DO i=1,
max(numels,numelq,numeltg)
180 phi(i)=zero
181 END DO
182
183 DO ig=1,nbgauge
184 is = -lgauge(1,ig)
185 IF(is > 0 .AND. is <= numels+numelq+numeltg)THEN
186 phi(is)= ig
187
188
189
190 gauge(5,ig)=zero
191 ENDIF
192 END DO
193 ENDIF
194
196
197
198
199 IF (nspmd > 1) THEN
200
201 CALL spmd_e1vois(phi,nercvois,nesdvois,lercvois,lesdvois,lencom)
202
203 ENDIF
204
205
206
207 DO ng=itask+1,ngroup,nthread
208 IF( iparg(5,ng) /= 1 .AND. iparg(5,ng) /= 2 .AND.
209 . (iparg(5,ng) /= 7 .AND. n2d == 0) ) cycle
211 2 mtn ,llt ,nft ,iadr ,ity ,
212 3 npt ,jale ,ismstr ,jeul ,jtur ,
213 4 jthe ,jlag ,jmul ,jhbe ,jivf ,
214 5 nvaux ,jpor ,jcvt ,jclose ,jplasol ,
215 6 irep ,iint ,igtyp ,israt ,isrot ,
216 7 icsen ,isorth ,isorthg ,ifailure,jsms )
217 IF(iparg(8,ng) == 1) cycle
218
219 lft=1
220 IF (iparg(5,ng) == 1) THEN
221
222 CALL agaug3(lgauge,gauge,phi,ixs ,x ,ale_connect )
223 ELSEIF (iparg(5,ng) == 2) THEN
224
225 CALL agaug3q(lgauge,gauge,phi,ixq ,x ,ale_connect )
226 ELSEIF (iparg(5,ng) == 7) THEN
227
228 CALL agaug3t(lgauge,gauge,phi,ixtg ,x ,ale_connect )
229 ENDIF
230 END DO
231
233 IF(itask==0)THEN
234 DO i=1,
max(numels,numelq,numeltg)
235 phi(i)=zero
236 END DO
237
238
239
240 DO ig= 1,nbgauge
241 itag(ig) = 0
242 ENDDO
243
244 DO ig=1,nbgauge
245 is = -lgauge(1,ig)
246 IF(is > 0 .AND. is <= (numels+numelq+numeltg))THEN
247 ig0 = nint(phi(is))
248 IF(ig0 > 0) THEN
249 itag(ig) = ig0
250 ELSE
251 phi(is) = ig
252 ENDIF
253 ENDIF
254 END DO
255 ENDIF
256
258
259
260
261 IF (nspmd > 1) THEN
262
263 CALL spmd_e1vois(phi,nercvois,nesdvois,lercvois,lesdvois,lencom)
264
265 ENDIF
266
267
268
269 DO ng=itask+1,ngroup,nthread
270
271 IF( iparg(5,ng) /= 1 .AND. iparg(5,ng) /= 2 .AND.
272 . (iparg(5,ng) /= 7 .AND. n2d == 0) ) cycle
274 2 mtn ,llt ,nft ,iadr ,ity ,
275 3 npt ,jale ,ismstr ,jeul ,jtur ,
276 4 jthe ,jlag ,jmul ,jhbe ,jivf ,
277 5 nvaux ,jpor ,jcvt ,jclose ,jplasol ,
278 6 irep ,iint ,igtyp ,israt ,isrot ,
279 7 icsen ,isorth ,isorthg ,ifailure,jsms )
280 IF (iparg(8,ng) == 1) cycle
281 gbuf => elbuf_str(ng)%GBUF
282 lft=1
283
284 nel = llt
285 DO i=1,6
286 jj(i) = nel*(i-1)
287 ENDDO
288
289 DO i=lft,llt
290 ii=i+nft
291 ig = nint(phi(ii))
292 IF (ig <= 0) cycle
293
294 p = (gbuf%SIG(jj(1)+i) + gbuf%SIG(jj(2)+i) + gbuf%SIG(jj(3)+i))/three
295 rho = gbuf%RHO(i)
296 e = gbuf%EINT(i)
297 u2 = zero
298
299 IF (iparg(5,ng) == 1) THEN
300
301 DO j=2,9
302 n = ixs(j,ii)
303 u2 = u2+ v(1,n)*v(1,n)
304 u2 = u2+ v(2,n)*v(2,n)
305 u2 = u2+ v(3,n)*v(3,n)
306 ENDDO
307 ELSEIF (iparg(5,ng) == 2) THEN
308
309 DO j=2,5
310 n = ixq(j,ii)
311 u2 = u2+ v(1,n)*v(1,n)
312 u2 = u2+ v(2,n)*v(2,n)
313 u2 = u2+ v(3,n)*v(3,n)
314 ENDDO
315 ELSEIF (iparg(5,ng) == 7) THEN
316
317 DO j=2,4
318 n = ixtg(j,ii)
319 u2 = u2+ v(1,n)*v(1,n)
320 u2 = u2+ v(2,n)*v(2,n)
321 u2 = u2+ v(3,n)*v(3,n)
322 ENDDO
323 ENDIF
324 pa = p - rho*u2/sixteen
325#include "lockon.inc"
326 gauge(30,ig)= -p
327 gauge(31,ig)= -pa
328 gauge(32,ig)= rho
329 gauge(33,ig)= e
330#include "lockoff.inc"
331 END DO
332 ENDDO
333
334 IF(itask == 0) THEN
335 DO ig=1,nbgauge
336 ig0= itag(ig)
337 IF(ig0 > 0) THEN
338#include "lockon.inc"
339 gauge(30,ig)= gauge(30,ig0)
340 gauge(31,ig)= gauge(31,ig0)
341 gauge(32,ig)= gauge(32,ig0)
342 gauge(33,ig)= gauge(33,ig0)
343#include "lockoff.inc"
344 ENDIF
345 ENDDO
346 ENDIF
347
349
350 IF(nspmd > 1) THEN
351 IF(itask == 0) THEN
352 DO ig=1,nbgauge
353 alpha(ig) = gauge(5,ig)
354 ENDDO
357
358 DO ig=1,nbgauge
359 IF(gauge(5,ig) /=
alpha(ig))lgauge(1,ig) = 0
360 ENDDO
361 ENDIF
362 ENDIF
363 RETURN
subroutine agaug3q(lgauge, gauge, phi, ixq, x, ale_connect)
subroutine agaug3t(lgauge, gauge, phi, ixtg, x, ale_connect)
subroutine agaug30(lgauge, gauge, ix, x, nix, numel, nconnect)
subroutine agaug3(lgauge, gauge, phi, ixs, x, ale_connect)
subroutine initbuf(iparg, ng, mtn, llt, nft, iad, ity, npt, jale, ismstr, jeul, jtur, jthe, jlag, jmult, jhbe, jivf, mid, jpor, jcvt, jclose, jpla, irep, iint, igtyp, israt, isrot, icsen, isorth, isorthg, ifailure, jsms)
subroutine spmd_e1vois(phi, nercvois, nesdvois, lercvois, lesdvois, lencom)
subroutine spmd_rbcast(tabi, tabr, n1, n2, from, add)
subroutine spmd_sd_gaug(lgauge, gauge, igaup, ngaup)