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