43
44
45
47 USE elbufdef_mod
49 use element_mod , only : nixs
50
51
52
53#include "implicit_f.inc"
54#include "comlock.inc"
55
56
57
58#include "com01_c.inc"
59#include "com04_c.inc"
60#include "com06_c.inc"
61#include "param_c.inc"
62#include "parit_c.inc"
63#include "scr17_c.inc"
64#include "sphcom.inc"
65#include "task_c.inc"
66#include "units_c.inc"
67#include "vect01_c.inc"
68
69
70
71 INTEGER KXSP(NISP,*),
72 . IPARTSP(*), IPARG(NPARG,*), NGROUNC,
73 . IGROUNC(*), ITASK, IXSP(KVOISPH,*), NOD2SP(*),
74 . SOL2SPH(2,*), SPH2SOL(*), IXS(NIXS,*),
75 . IADS(8,*), ADDCNE(*), ICONTACT(*)
77 . x(3,*), spbuf(nspbuf,*), ms(*), pm(npropm,*), fskyd(*),
78 . dmsph(*), v(3,*)
79 TYPE (ELBUF_STRUCT_), TARGET, DIMENSION(NGROUP) :: ELBUF_TAB
80
81
82
83 INTEGER I, N, KP, NG, MG, NP, KFT, IG, NELEM,
84 . NEL, OFFSET, INOD, IMAT,
85 . N1, N2, N3, N4, N5, N6, N7, N8,
86 . K1, K2, K3, K4, K5, K6, K7, K8,
87 . NODFT, NODLT
89 . dm, rho0, ehourt, ek, vi2, vxi, vyi, vzi,
90 . vx1, vx2, vx3, vx4, vx5, vx6, vx7, vx8,
91 . vy1, vy2, vy3, vy4, vy5, vy6, vy7, vy8,
92 . vz1, vz2, vz3, vz4, vz5, vz6, vz7, vz8
93
94
95 TYPE(G_BUFEL_) ,POINTER :: GBUF, GBUFSP
96 TYPE(L_BUFEL_) ,POINTER :: LBUF
97 TYPE(BUF_MAT_) ,POINTER :: MBUF
98
99
100 DO ig = 1, ngrounc
101 ng = igrounc(ig)
102 IF(iparg(8,ng)==1)GOTO 50
104 DO nelem = 1,iparg(2,ng),nvsiz
105 offset = nelem - 1
106 nel =iparg(2,ng)
107 nft =iparg(3,ng) + offset
108 iad =iparg(4,ng)
109 ity =iparg(5,ng)
110 ipartsph=iparg(69,ng)
111 lft=1
112 llt=
min(nvsiz,nel-nelem+1)
113 IF(ity==1.AND.ipartsph/=0) THEN
114
115 gbuf => elbuf_tab(ng)%GBUF
116 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
117 mbuf => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)
118
119 DO i=lft,llt
120 IF(gbuf%OFF(i)/=zero) THEN
121 n=nft+i
122 DO kp=1,sol2sph(2,n)-sol2sph(1,n)
123 np=sol2sph(1,n)+kp
124 inod=kxsp(3,np)
125 IF(icontact(inod)/=0)THEN
126
127
128 gbuf%OFF(i)=four_over_5
129 idel7nok=1
130#include "lockon.inc"
131 WRITE(iout,*)
132 .' -- PARTICLE INTO CONTACT => DELETE SOLID ELEMENT AT NEXT CYCLE',
133 . ixs(nixs,n)
134 WRITE(istdo,*)
135 .' -- PARTICLE INTO CONTACT => DELETE SOLID ELEMENT AT NEXT CYCLE',
136 . ixs(nixs,n)
137#include "lockoff.inc"
138 EXIT
139 END IF
140 END DO
141 END IF
142 ENDDO
143 END IF
144 END DO
146
147 50 CONTINUE
148 END DO
149
150
151 ehourt=zero
152 IF(iparit==0)THEN
153
154
155
156
157 DO ig = 1, ngrounc
158 ng = igrounc(ig)
159 IF(iparg(8,ng)==1)GOTO 100
161 DO nelem = 1,iparg(2,ng),nvsiz
162 offset = nelem - 1
163 nel =iparg(2,ng)
164 nft =iparg(3,ng) + offset
165 iad =iparg(4,ng)
166 ity =iparg(5,ng)
167 ipartsph=iparg(69,ng)
168 lft=1
169 llt=
min(nvsiz,nel-nelem+1)
170 IF(ity==1.AND.ipartsph/=0) THEN
171
172 gbuf => elbuf_tab(ng)%GBUF
173 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
174 mbuf => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)
175
176 DO i=lft,llt
177 IF(gbuf%OFF(i)==zero) THEN
178
179
180 n=nft+i
181 np=sol2sph(1,n)+1
182 IF(kxsp(2,np)<0)THEN
183
184
185 ek=zero
186 DO kp=1,sol2sph(2,n)-sol2sph(1,n)
187 np=sol2sph(1,n)+kp
188 mg =mod(-kxsp(2,np),ngroup+1)
189 kft=iparg(3,mg)
190 gbufsp => elbuf_tab(mg)%GBUF
191 kxsp(2,np) =abs(kxsp(2,np))
192 gbufsp%OFF(np-kft)=one
193 sph2sol(np) =0
194
195 inod=kxsp(3,np)
196 vi2= v(1,inod)*v(1,inod)
197 . +v(2,inod)*v(2,inod)
198 . +v(3,inod)*v(3,inod)
199 ek=ek+half*ms(inod)*vi2
200 ENDDO
201 n1=ixs(2,n)
202 n2=ixs(3,n)
203 n3=ixs(4,n)
204 n4=ixs(5,n)
205 n5=ixs(6,n)
206 n6=ixs(7,n)
207 n7=ixs(8,n)
208 n8=ixs(9,n)
209 imat=ixs(1,n)
210 rho0=pm(1,imat)
211 dm=one_over_8*gbuf%VOL(i)*rho0
212
213 dmsph(n1)=dmsph(n1)+dm
214 dmsph(n2)=dmsph(n2)+dm
215 dmsph(n3)=dmsph(n3)+dm
216 dmsph(n4)=dmsph(n4)+dm
217 dmsph(n5)=dmsph(n5)+dm
218 dmsph(n6)=dmsph(n6)+dm
219 dmsph(n7)=dmsph(n7)+dm
220 dmsph(n8)=dmsph(n8)+dm
221
222 n1=ixs(2,n)
223 vx1=v(1,n1)
224 vy1=v(2,n1)
225 vz1=v(3,n1)
226 n2=ixs(3,n)
227 vx2=v(1,n2)
228 vy2=v(2,n2)
229 vz2=v(3,n2)
230 n3=ixs(4,n)
231 vx3=v(1,n3)
232 vy3=v(2,n3)
233 vz3=v(3,n3)
234 n4=ixs(5,n)
235 vx4=v(1,n4)
236 vy4=v(2,n4)
237 vz4=v(3,n4)
238 n5=ixs(6,n)
239 vx5=v(1,n5)
240 vy5=v(2,n5)
241 vz5=v(3,n5)
242 n6=ixs(7,n)
243 vx6=v(1,n6)
244 vy6=v(2,n6)
245 vz6=v(3,n6)
246 n7=ixs(8,n)
247 vx7=v(1,n7)
248 vy7=v(2,n7)
249 vz7=v(3,n7)
250 n8=ixs(9,n)
251 vx8=v(1,n8)
252 vy8=v(2,n8)
253 vz8=v(3,n8)
254 vxi=vx1+vx2+vx3+vx4+vx5+vx6+vx7+vx8
255 vyi=vy1+vy2+vy3+vy4+vy5+vy6+vy7+vy8
256 vzi=vz1+vz2+vz3+vz4+vz5+vz6+vz7+vz8
257 vi2=vx1*vx1+vx2*vx2+vx3*vx3+vx4*vx4
258 1 +vx5*vx5+vx6*vx6+vx7*vx7+vx8*vx8
259 2 +vy1*vy1+vy2*vy2+vy3*vy3+vy4*vy4
260 3 +vy5*vy5+vy6*vy6+vy7*vy7+vy8*vy8
261 4 +vz1*vz1+vz2*vz2+vz3*vz3+vz4*vz4
262 5 +vz5*vz5+vz6*vz6+vz7*vz7+vz8*vz8
263
264
265 ehourt=ehourt+half*dm*vi2-ek
266 END IF
267 END IF
268 ENDDO
269 END IF
270 END DO
272
273 100 CONTINUE
274 END DO
275
276 ELSE
277
278
279
280 nodft = 1+itask*numnod/ nthread
281 nodlt = (itask+1)*numnod/nthread
282 DO n = nodft, nodlt
283 fskyd(addcne(n):addcne(n+1)-1)=zero
284 ENDDO
285
287
288
289 DO ig = 1, ngrounc
290 ng = igrounc(ig)
291 IF(iparg(8,ng)==1)GOTO 200
293 DO nelem = 1,iparg(2,ng),nvsiz
294 offset = nelem - 1
295 nel =iparg(2,ng)
296 nft =iparg(3,ng) + offset
297 iad =iparg(4,ng)
298 ity =iparg(5,ng)
299 ipartsph=iparg(69,ng)
300 lft=1
301 llt=
min(nvsiz,nel-nelem+1)
302 IF(ity==1.AND.ipartsph/=0) THEN
303
304 gbuf => elbuf_tab(ng)%GBUF
305 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
306 mbuf => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)
307
308 DO i=lft,llt
309 IF(gbuf%OFF(i)==zero) THEN
310
311
312 n=nft+i
313 np=sol2sph(1,n)+1
314 IF(kxsp(2,np)<0)THEN
315
316
317 ek=zero
318 DO kp=1,sol2sph(2,n)-sol2sph(1,n)
319 np=sol2sph(1,n)+kp
320 mg =mod(-kxsp(2,np),ngroup+1)
321 kft=iparg(3,mg)
322 gbufsp => elbuf_tab(mg)%GBUF
323 kxsp(2,np) =abs(kxsp(2,np))
324 gbufsp%OFF(np-kft)=one
325 sph2sol(np) =0
326
327 inod=kxsp(3,np)
328 vi2= v(1,inod)*v(1,inod)
329 . +v(2,inod)*v(2,inod)
330 . +v(3,inod)*v(3,inod)
331 ek=ek+half*ms(inod)*vi2
332 ENDDO
333 imat=ixs(1,n)
334 rho0=pm(1,imat)
335 dm=one_over_8*gbuf%VOL(i)*rho0
336
337 k1=iads(1,n)
338 fskyd(k1)=dm
339 k2=iads(2,n)
340 fskyd(k2)=dm
341 k3=iads(3,n)
342 fskyd(k3)=dm
343 k4=iads(4,n)
344 fskyd(k4)=dm
345 k5=iads(5,n)
346 fskyd(k5)=dm
347 k6=iads(6,n)
348 fskyd(k6)=dm
349 k7=iads(7,n)
350 fskyd(k7)=dm
351 k8=iads(8,n)
352 fskyd(k8)=dm
353
354 n1=ixs(2,n)
355 vx1=v(1,n1)
356 vy1=v(2,n1)
357 vz1=v(3,n1)
358 n2=ixs(3,n)
359 vx2=v(1,n2)
360 vy2=v(2,n2)
361 vz2=v(3,n2)
362 n3=ixs(4,n)
363 vx3=v(1,n3)
364 vy3=v(2,n3)
365 vz3=v(3,n3)
366 n4=ixs(5,n)
367 vx4=v(1,n4)
368 vy4=v(2,n4)
369 vz4=v(3,n4)
370 n5=ixs(6,n)
371 vx5=v(1,n5)
372 vy5=v(2,n5)
373 vz5=v(3,n5)
374 n6=ixs(7,n)
375 vx6=v(1,n6)
376 vy6=v(2,n6)
377 vz6=v(3,n6)
378 n7=ixs(8,n)
379 vx7=v(1,n7)
380 vy7=v(2,n7)
381 vz7=v(3,n7)
382 n8=ixs(9,n)
383 vx8=v(1,n8)
384 vy8=v(2,n8)
385 vz8=v(3,n8)
386 vxi=vx1+vx2+vx3+vx4+vx5+vx6+vx7+vx8
387 vyi=vy1+vy2+vy3+vy4+vy5+vy6+vy7+vy8
388 vzi=vz1+vz2+vz3+vz4+vz5+vz6+vz7+vz8
389 vi2=vx1*vx1+vx2*vx2+vx3*vx3+vx4*vx4
390 1 +vx5*vx5+vx6*vx6+vx7*vx7+vx8*vx8
391 2 +vy1*vy1+vy2*vy2+vy3*vy3+vy4*vy4
392 3 +vy5*vy5+vy6*vy6+vy7*vy7+vy8*vy8
393 4 +vz1*vz1+vz2*vz2+vz3*vz3+vz4*vz4
394 5 +vz5*vz5+vz6*vz6+vz7*vz7+vz8*vz8
395
396
397 ehourt=ehourt+half*dm*vi2-ek
398 END IF
399 END IF
400 ENDDO
401 END IF
402 END DO
404
405 200 CONTINUE
406 END DO
407
408
409 END IF
410
411#include "lockon.inc"
412 ehour=ehour+ehourt
413#include "lockoff.inc"
414
415 RETURN