33 SUBROUTINE clusterf(CLUSTER ,ELBUF_TAB,X ,A ,AR ,
34 . SKEW ,IXS ,IPARG ,FCLUSTER,MCLUSTER ,
42 use element_mod ,
only : nixs
46#include "implicit_f.inc"
61 INTEGER IXS(NIXS,*),IPARG(NPARG,*)
62 my_real ,
DIMENSION(3,*) :: X,A,AR,FCLUSTER,MCLUSTER
63 my_real ,
DIMENSION(LSKEW,*) :: skew
64 TYPE (CLUSTER_) ,
DIMENSION(NCLUSTER) :: CLUSTER
65 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP) :: ELBUF_TAB
66 TYPE (H3D_DATABASE) :: H3D_DATA
70 INTEGER I,J,K,IL,IEL,NG,NFT,NNOD,ISKN,N,N1,N2,N3,N4,NINDX,IFAIL,IPID
71 INTEGER CLUSTERNOD(NCLUSTER),LCLUSTER(NCLUSTER),LCL(NCLUSTER),
73 INTEGER INDX(NCLUSTER)
74 my_real,
DIMENSION(NPROPG,*) :: GEO
75 my_real,
DIMENSION(3) :: fbot,ftop,mbot,mtop,m1,xg,x1,x2
76 my_real,
DIMENSION(3,NCLUSTER) :: vn,vx,vy
77 my_real :: fn,ft,mr,mb,dmg,xm,ym,zm,dx1,dy1,dz1,dx2,dy2,dz2,
78 . fx,fy,fz,momx,momy,momz,
norm,critf,critm,drx,dry,drz,
80 my_real,
DIMENSION(NCLUSTER) :: tthick
83 tthick(1:ncluster) = zero
86 IF (cluster(i)%OFF == 0) cycle
87 nnod = cluster(i)%NNOD
88 iskn = cluster(i)%SKEW
89 ifail= cluster(i)%IFAIL
95 n1 = cluster(i)%NOD1(j)
96 x1(1) = x1(1) + x(1,n1)
97 x1(2) = x1(2) + x(2,n1)
98 x1(3) = x1(3) + x(3,n1)
106 IF (ifail > 0 .and. iskn == 0)
THEN
113 IF (cluster(i)%TYPE == 1)
THEN
114 DO j = 1,cluster(i)%NEL
115 ng = cluster(i)%NG(j)
116 iel = cluster(i)%ELEM(j)
118 ipid = ixs(10,nft+iel)
123 tthick(i) = geo(41,ipid)
124 sx = x(1,n3) - x(1,n1)
125 sy = x(2,n3) - x(2,n1)
126 sz = x(3,n3) - x(3,n1)
127 tx = x(1,n4) - x(1,n2)
128 ty = x(2,n4) - x(2,n2)
129 tz = x(3,n4) - x(3,n2)
130 vn(1,i) = vn(1,i) + sy*tz - sz*ty
131 vn(2,i) = vn(2,i) + sz*tx - sx*tz
132 vn(3,i) = vn(3,i) + sx*ty - sy*tx
136 n1 = cluster(i)%NOD1(nnod)
137 n2 = cluster(i)%NOD1(1)
144 vn(1,i) = vn(1,i) + sy*tz - sz*ty
145 vn(2,i) = vn(2,i) + sz*tx - sx*tz
146 vn(3,i) = vn(3,i) + sx*ty - sy*tx
148 n1 = cluster(i)%NOD1(j)
149 n2 = cluster(i)%NOD1(j+1)
156 vn(1,i) = vn(1,i) + sy*tz - sz*ty
157 vn(2,i) = vn(2,i) + sz*tx - sx*tz
158 vn(3,i) = vn(3,i) + sx*ty - sy*tx
162 norm = one / sqrt(vn(1,i)**2 + vn(2,i)**2 + vn(3,i)**2)
163 vn(1,i) = vn(1,i)*
norm
164 vn(2,i) = vn(2,i)*
norm
165 vn(3,i) = vn(3,i)*
norm
169 n1 = cluster(i)%NOD1(1)
170 n2 = cluster(i)%NOD1(2)
171 vx(1,i) = x(1,n1) - xm
172 vx(2,i) = x(2,n1) - ym
173 vx(3,i) = x(3,n1) - zm
174 vy(1,i) = vn(2,i)*vx(3,i) - vn(3,i)*vx(2,i)
175 vy(2,i) = vn(3,i)*vx(1,i) - vn(1,i)*vx(3,i)
176 vy(3,i) = vn(1,i)*vx(2,i) - vn(2,i)*vx(1,i)
177 norm = one / sqrt(vy(1,i)**2 + vy(2,i)**2 + vy(3,i)**2)
178 vy(1,i) = vy(1,i)*
norm
179 vy(2,i) = vy(2,i)*
norm
180 vy(3,i) = vy(3,i)*
norm
181 vx(1,i) = vy(2,i)*vn(3,i) - vy(3,i)*vn(2,i)
182 vx(2,i) = vy(3,i)*vn(1,i) - vy(1,i)*vn(3,i)
183 vx(3,i) = vy(1,i)*vn(2,i) - vy(2,i)*vn(1,i)
184 norm = one / sqrt(vx(1,i)**2 + vx(2,i)**2 + vx(3,i)**
185 vx(1,i) = vx(1,i)*
norm
186 vx(2,i) = vx(2,i)*
norm
187 vx(3,i) = vx(3,i)*
norm
196 n1 = cluster(i)%NOD1(j)
197 n2 = cluster(i)%NOD2(j)
198 fbot(1) = fbot(1) + a(1,n1)
199 fbot(2) = fbot(2) + a(2,n1)
200 fbot(3) = fbot(3) + a(3,n1)
201 ftop(1) = ftop(1) + a(1,n2)
202 ftop(2) = ftop(2) + a(2,n2)
203 ftop(3) = ftop(3) + a(3,n2)
211 IF (cluster(i)%TYPE == 1 .and. iskn == 0 .and. tthick(i) > zero)
THEN
213 n1 = cluster(i)%NOD1(j)
214 n2 = cluster(i)%NOD2(j)
218 drz = sign(tthick(i), x(3,n2) - zm)
219 mtop(1) = mtop(1) + dry*a(3,n2) - drz*a(2,n2)
220 mtop(2) = mtop(2) + drz*a(1,n2) - drx*a(3,n2)
221 mtop(3) = mtop(3) + drx*a(2,n2) - dry*a(1,n2)
225 mbot(1) = mbot(1) + dry*a(3,n1)
226 mbot(2) = mbot(2) - drx*a(3,n1)
227 mbot(3) = mbot(3) + drx*a(2,n1) - dry*a(1,n1)
231 n1 = cluster(i)%NOD1(j)
232 n2 = cluster(i)%NOD2(j)
237 mtop(1) = mtop(1) + dry*a(3,n2) - drz*a(2,n2)
238 mtop(2) = mtop(2) + drz*a(1,n2) - drx*a(3,n2)
239 mtop(3) = mtop(3) + drx*a(2,n2) - dry*a(1,n2)
244 mbot(1) = mbot(1) + dry*a(3,n1) - drz*a(2,n1)
245 mbot(2) = mbot(2) + drz*a(1,n1) - drx*a(3,n1)
246 mbot(3) = mbot(3) + drx*a(2,n1) - dry*a(1,n1)
250 IF (cluster(i)%TYPE == 1)
THEN
251 fx = (ftop(1) - fbot(1))*half
252 fy = (ftop(2) - fbot(2))*half
253 fz = (ftop(3) - fbot(3))*half
254 momx = (mtop(1) - mbot(1))*half
255 momy = (mtop(2) - mbot(2))*half
256 momz = (mtop(3) - mbot(3))*half
265 n1 = cluster(i)%NOD1(j)
266 n2 = cluster(i)%NOD2(j)
267 momx = momx + ar(1,n2)
268 momy = momy + ar(2,n2)
269 momz = momz + ar(3,n2)
273 cluster(i)%FOR(1) = fx
274 cluster(i)%FOR(2) = fy
275 cluster(i)%FOR(3) = fz
276 cluster(i)%MOM(1) = momx
277 cluster(i)%MOM(2) = momy
278 cluster(i)%MOM(3) = momz
290 IF (cluster(i)%OFF == 0)
THEN
291 cluster(i)%FOR(1) = zero
292 cluster(i)%FOR(2) = zero
293 cluster(i)%FOR(3) = zero
294 cluster(i)%MOM(1) = zero
295 cluster(i)%MOM(2) = zero
296 cluster(i)%MOM(3) = zero
299 nnod = cluster(i)%NNOD
300 iskn = cluster(i)%SKEW
301 ifail= cluster(i)%IFAIL
326 fbot(1) = cluster(i)%FOR(1)*skew(1,iskn) +
327 . cluster(i)%FOR(2)*skew(2,iskn) +
328 . cluster(i)%FOR(3)*skew(3,iskn)
329 fbot(2) = cluster(i)%FOR(1)*skew(4,iskn) +
330 . cluster(i)%FOR(2)*skew(5,iskn) +
331 . cluster(i)%FOR(3)*skew(6,iskn)
332 fbot(3) = cluster(i)%FOR(1)*skew(7,iskn) +
333 . cluster(i)%FOR(2)*skew(8,iskn) +
334 . cluster(i)%FOR(3)*skew(9,iskn)
335 m1(1) = cluster(i)%MOM(1)*skew(1,iskn) +
336 . cluster(i)%MOM(2)*skew(2,iskn) +
337 . cluster(i)%MOM(3)*skew(3,iskn)
338 m1(2) = cluster(i)%MOM(1)*skew(4,iskn) +
339 . cluster(i)%MOM(2)*skew(5,iskn) +
340 . cluster(i)%MOM(3)*skew(6,iskn)
341 m1(3) = cluster(i)%MOM(1)*skew(7,iskn) +
342 . cluster(i)%MOM(2)*skew(8,iskn) +
343 . cluster(i)%MOM(3)*skew(9,iskn)
345 fbot(1) = cluster(i)%FOR(1)*vx(1,i) +
346 . cluster(i)%FOR(2)*vx(2,i) +
347 . cluster(i)%FOR(3)*vx(3,i)
348 fbot(2) = cluster(i)%FOR(1)*vy(1,i) +
349 . cluster(i)%FOR(2)*vy(2,i) +
350 . cluster(i)%FOR(3)*vy(3,i)
351 fbot(3) = cluster(i)%FOR(1)*vn(1,i) +
352 . cluster(i)%FOR(2)*vn(2,i) +
353 . cluster(i)%FOR(3)*vn(3,i)
354 m1(1) = cluster(i)%MOM(1)*vx(1,i) +
355 . cluster(i)%MOM(2)*vx(2,i) +
356 . cluster(i)%MOM(3)*vx(3,i)
357 m1(2) = cluster(i)%MOM(1)*vy(1,i) +
358 . cluster(i)%MOM(2)*vy(2,i) +
359 . cluster(i)%MOM(3)*vy(3,i)
360 m1(3) = cluster(i)%MOM(1)*vn(1,i) +
361 . cluster(i)%MOM(2)*vn(2,i) +
362 . cluster(i)%MOM(3)*vn(3,i)
367 ft = sqrt(fbot(1)*fbot(1) + fbot(2)*fbot(2))
369 mb = sqrt(m1(1)*m1(1) + m1(2)*m1(2))
375 critf =
max(fn/cluster(i)%FMAX(1),ft/cluster(i)%FMAX(2))
376 critm =
max(mr/cluster(i)%MMAX(1),mb/cluster(i)%MMAX(2))
377 dmg =
max(critf,critm)
379 ELSEIF (ifail == 2)
THEN
381 dmg = fourth*(
min(one+em10, fn/cluster(i)%FMAX(1)) +
382 .
min(one+em10, ft/cluster(i)%FMAX(2)) +
383 .
min(one+em10, mr/cluster(i)%MMAX(1)) +
384 .
min(one+em10, mb/cluster(i)%MMAX(2)))
386 ELSEIF (ifail == 3)
THEN
389 . cluster(i)%AX(1)*(fn/cluster(i)%FMAX(1))**cluster(i)%NX(1)
390 . + cluster(i)%AX(2)*(ft/cluster(i)%FMAX(2))**cluster(i)%NX(2)
391 . + cluster(i)%AX(3)*(mr/cluster(i)%MMAX(1))**cluster(i)%NX(3)
392 . + cluster(i)%AX(4)*(mb/cluster(i)%MMAX(2))**cluster(i)%NX(4)
396 cluster(i)%FAIL = dmg
404 cluster(i)%FOR(1) = zero
405 cluster(i)%FOR(2) = zero
406 cluster(i)%FOR(3) = zero
407 cluster(i)%MOM(1) = zero
408 cluster(i)%MOM(2) = zero
409 cluster(i)%MOM(3) = zero
410 IF (cluster(i)%TYPE == 1)
THEN
411 DO j = 1,cluster(i)%NEL
412 ng = cluster(i)%NG(j)
413 iel = cluster(i)%ELEM(j)
414 elbuf_tab(ng)%GBUF%OFF(iel) = zero
423 IF (anim_v(19) + h3d_data%N_VECT_CLUST_FORCE > 0)
THEN
425 nnod = cluster(i)%NNOD
427 n = cluster(i)%NOD1(j)
428 fcluster(1,n) = cluster(i)%FOR(1)
429 fcluster(2,n) = cluster(i)%FOR(2)
430 fcluster(3,n) = cluster(i)%FOR(3)
431 n = cluster(i)%NOD2(j)
432 fcluster(1,n) = cluster(i)%FOR(1)
433 fcluster(2,n) = cluster(i)%FOR(2)
434 fcluster(3,n) = cluster(i)%FOR(3)
438 IF (anim_v(20) + h3d_data%N_VECT_CLUST_MOM > 0)
THEN
440 nnod = cluster(i)%NNOD
442 n = cluster(i)%NOD1(j)
443 mcluster(1,n) = cluster(i)%MOM(1)
444 mcluster(2,n) = cluster(i)%MOM(2)
445 mcluster(3,n) = cluster(i)%MOM(3)
446 n = cluster(i)%NOD2(j)
447 mcluster(1,n) = cluster(i)%MOM(1)
448 mcluster(2,n) = cluster(i)%MOM(2)
449 mcluster(3,n) = cluster(i)%MOM(3)
457 WRITE(iout ,1000) cluster(indx(j))%ID
458 WRITE(istdo,1100) cluster(indx(j))%ID,tt
459#include "lockoff.inc"
463 1000
FORMAT(5x,
'DELETE ELEMENT CLUSTER,ID=',i10)
464 1100
FORMAT(5x,
'DELETE ELEMENT CLUSTER,ID=',i10,
', AT TIME ',1pe16.9)