32 SUBROUTINE clusterf(CLUSTER ,ELBUF_TAB,X ,A ,AR ,
33 . SKEW ,IXS ,IPARG ,FCLUSTER,MCLUSTER ,
44#include
"implicit_f.inc"
59 INTEGER IXS(NIXS,*),(NPARG,*)
60 my_real ,
DIMENSION(3,*) :: X,A,AR,FCLUSTER,MCLUSTER
61 my_real ,
DIMENSION(LSKEW,*) :: skew
62 TYPE (CLUSTER_) ,
DIMENSION(NCLUSTER) :: CLUSTER
63 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP) :: ELBUF_TAB
64 TYPE (H3D_DATABASE) :: H3D_DATA
68 INTEGER I,J,K,IL,IEL,NG,NFT,NNOD,ISKN,N,N1,N2,N3,N4,NINDX,IFAIL,IPID
69 INTEGER CLUSTERNOD(NCLUSTER),LCLUSTER(NCLUSTER),LCL(NCLUSTER)
71 INTEGER INDX(NCLUSTER)
72 my_real,
DIMENSION(NPROPG,*) :: GEO
73 my_real,
DIMENSION(3) :: fbot,ftop,mbot,mtop,m1,xg,x1,x2
74 my_real,
DIMENSION(3,NCLUSTER) :: vn,vx,vy
75 my_real :: fn,ft,mr,mb,dmg,xm,ym,zm,dx1,dy1,dz1,dx2,dy2,dz2,
76 . fx,fy,fz,momx,momy,momz,
norm,critf,critm,drx,dry,drz,
78 my_real,
DIMENSION(NCLUSTER) :: tthick
81 tthick(1:ncluster) = zero
84 IF (cluster(i)%OFF == 0) cycle
85 nnod = cluster(i)%NNOD
86 iskn = cluster(i)%SKEW
87 ifail= cluster(i)%IFAIL
93 n1 = cluster(i)%NOD1(j)
94 x1(1) = x1(1) + x(1,n1)
95 x1(2) = x1(2) + x(2,n1)
96 x1(3) = x1(3) + x(3,n1)
104 IF (ifail > 0 .and. iskn == 0)
THEN
111 IF (cluster(i)%TYPE == 1)
THEN
112 DO j = 1,cluster(i)%NEL
114 iel = cluster(i)%ELEM(j)
116 ipid = ixs(10,nft+iel)
121 tthick(i) = geo(41,ipid)
122 sx = x(1,n3) - x(1,n1)
123 sy = x(2,n3) - x(2,n1)
124 sz = x(3,n3) - x(3,n1)
125 tx = x(1,n4) - x(1,n2)
126 ty = x(2,n4) - x(2,n2)
127 tz = x(3,n4) - x(3,n2)
128 vn(1,i) = vn(1,i) + sy*tz - sz*ty
129 vn(2,i) = vn(2,i) + sz*tx - sx*tz
130 vn(3,i) = vn(3,i) + sx*ty - sy*tx
134 n1 = cluster(i)%NOD1(nnod)
135 n2 = cluster(i)%NOD1(1)
142 vn(1,i) = vn(1,i) + sy*tz - sz*ty
143 vn(2,i) = vn(2,i) + sz*tx - sx*tz
144 vn(3,i) = vn(3,i) + sx*ty - sy*tx
146 n1 = cluster(i)%NOD1(j)
147 n2 = cluster(i)%NOD1(j+1)
154 vn(1,i) = vn(1,i) + sy*tz - sz*ty
155 vn(2,i) = vn(2,i) + sz*tx - sx*tz
156 vn(3,i) = vn(3,i) + sx*ty - sy*tx
160 norm = one / sqrt(vn(1,i)**2 + vn(2,i)**2 + vn(3,i)**2)
161 vn(1,i) = vn(1,i)*
norm
162 vn(2,i) = vn(2,i)*
norm
163 vn(3,i) = vn(3,i)*
norm
167 n1 = cluster(i)%NOD1(1)
168 n2 = cluster(i)%NOD1(2)
169 vx(1,i) = x(1,n1) - xm
170 vx(2,i) = x(2,n1) - ym
171 vx(3,i) = x(3,n1) - zm
172 vy(1,i) = vn(2,i)*vx(3,i) - vn(3,i)*vx(2,i)
173 vy(2,i) = vn(3,i)*vx(1,i) - vn(1,i)*vx(3,i)
174 vy(3,i) = vn(1,i)*vx(2,i) - vn(2,i)*vx(1,i)
175 norm = one / sqrt(vy(1,i)**2 + vy(2,i)**2 + vy(3,i)**2)
176 vy(1,i) = vy(1,i)*
norm
177 vy(2,i) = vy(2,i)*
norm
178 vy(3,i) = vy(3,i)*
norm
179 vx(1,i) = vy(2,i)*vn(3,i) - vy(3,i)*vn(2,i)
180 vx(2,i) = vy(3,i)*vn(1,i) - vy(1,i)*vn(3,i)
181 vx(3,i) = vy(1,i)*vn(2,i) - vy(2,i)*vn(1,i)
182 norm = one / sqrt(vx(1,i)**2 + vx(2,i)**2 + vx(3,i)**2)
183 vx(1,i) = vx(1,i)*
norm
184 vx(2,i) = vx(2,i)*
norm
185 vx(3,i) = vx(3,i)*
norm
194 n1 = cluster(i)%NOD1(j)
195 n2 = cluster(i)%NOD2(j)
196 fbot(1) = fbot(1) + a(1,n1)
197 fbot(2) = fbot(2) + a(2,n1)
198 fbot(3) = fbot(3) + a(3,n1)
199 ftop(1) = ftop(1) + a(1,n2)
200 ftop(2) = ftop(2) + a
201 ftop(3) = ftop(3) + a(3,n2)
209 IF (cluster(i)%TYPE == 1 .and. iskn == 0 .and.
THEN
211 n1 = cluster(i)%NOD1(j)
212 n2 = cluster(i)%NOD2(j)
216 drz = sign(tthick(i), x(3,n2) - zm)
217 mtop(1) = mtop(1) + dry*a(3,n2) - drz*a(2,n2)
218 mtop(2) = mtop(2) + drz*a(1,n2) - drx*a(3,n2)
219 mtop(3) = mtop(3) + drx*a(2,n2) - dry*a
223 mbot(1) = mbot(1) + dry*a(3,n1)
224 mbot(2) = mbot(2) - drx*a(3,n1)
225 mbot(3) = mbot(3) + drx*a(2,n1) - dry*a(1,n1)
229 n1 = cluster(i)%NOD1(j)
230 n2 = cluster(i)%NOD2(j)
235 mtop(1) = mtop(1) + dry*a(3,n2) - drz*a(2,n2)
236 mtop(2) = mtop(2) + drz*a(1,n2) - drx*a(3,n2)
237 mtop(3) = mtop(3) + drx*a(2,n2) - dry*a(1,n2)
242 mbot(1) = mbot(1) + dry*a(3,n1) - drz*a(2,n1)
243 mbot(2) = mbot(2) + drz*a(1,n1) - drx*a(3,n1)
244 mbot(3) = mbot(3) + drx*a(2,n1) - dry*a(1,n1)
248 IF (cluster(i)%TYPE == 1)
THEN
249 fx = (ftop(1) - fbot(1))*half
250 fy = (ftop(2) - fbot(2))*half
251 fz = (ftop(3) - fbot(3))*half
252 momx = (mtop(1) - mbot(1))*half
253 momy = (mtop(2) - mbot(2))*half
254 momz = (mtop(3) - mbot(3))*half
263 n1 = cluster(i)%NOD1(j)
264 n2 = cluster(i)%NOD2(j)
265 momx = momx + ar(1,n2)
266 momy = momy + ar(2,n2)
267 momz = momz + ar(3,n2)
271 cluster(i)%FOR(1) = fx
272 cluster(i)%FOR(2) = fy
273 cluster(i)%FOR(3) = fz
274 cluster(i)%MOM(1) = momx
275 cluster(i)%MOM(2) = momy
276 cluster(i)%MOM(3) = momz
288 IF (cluster(i)%OFF == 0)
THEN
289 cluster(i)%FOR(1) = zero
290 cluster(i)%FOR(2) = zero
291 cluster(i)%FOR(3) = zero
292 cluster(i)%MOM(1) = zero
293 cluster(i)%MOM(2) = zero
294 cluster(i)%MOM(3) = zero
297 nnod = cluster(i)%NNOD
298 iskn = cluster(i)%SKEW
299 ifail= cluster(i)%IFAIL
324 fbot(1) = cluster(i)%FOR(1)*skew(1,iskn) +
325 . cluster(i)%FOR(2)*skew(2,iskn) +
326 . cluster(i)%FOR(3)*skew(3,iskn)
327 fbot(2) = cluster(i)%FOR(1)*skew(4,iskn) +
328 . cluster(i)%FOR(2)*skew(5,iskn) +
329 . cluster(i)%FOR(3)*skew(6,iskn)
330 fbot(3) = cluster(i)%FOR(1)*skew(7,iskn) +
331 . cluster(i)%FOR(2)*skew(8,iskn) +
332 . cluster(i)%FOR(3)*skew(9,iskn)
333 m1(1) = cluster(i)%MOM(1)*skew(1,iskn) +
334 . cluster(i)%MOM(2)*skew(2,iskn) +
335 . cluster(i)%MOM(3)*skew(3,iskn)
336 m1(2) = cluster(i)%MOM(1)*skew(4,iskn) +
337 . cluster(i)%MOM(2)*skew(5,iskn) +
338 . cluster(i)%MOM(3)*skew(6,iskn)
339 m1(3) = cluster(i)%MOM(1)*skew(7,iskn) +
340 . cluster(i)%MOM(2)*skew(8,iskn) +
341 . cluster(i)%MOM(3)*skew(9,iskn)
343 fbot(1) = cluster(i)%FOR(1)*vx(1,i) +
344 . cluster(i)%FOR(2)*vx(2,i) +
345 . cluster(i)%FOR(3)*vx(3,i)
346 fbot(2) = cluster(i)%FOR(1)*vy(1,i) +
347 . cluster(i)%FOR(2)*vy(2,i) +
348 . cluster(i)%FOR(3)*vy(3,i)
349 fbot(3) = cluster(i)%FOR(1)*vn(1,i) +
350 . cluster(i)%FOR(2)*vn(2,i) +
351 . cluster(i)%FOR(3)*vn(3,i)
352 m1(1) = cluster(i)%MOM(1)*vx(1,i) +
353 . cluster(i)%MOM(2)*vx(2,i) +
354 . cluster(i)%MOM(3)*vx(3,i)
355 m1(2) = cluster(i)%MOM(1)*vy(1,i) +
356 . cluster(i)%MOM(2)*vy(2,i) +
357 . cluster(i)%MOM(3)*vy(3,i)
358 m1(3) = cluster(i)%MOM(1)*vn(1,i) +
359 . cluster(i)%MOM(2)*vn(2,i) +
360 . cluster(i)%MOM(3)*vn(3,i)
365 ft = sqrt(fbot(1)*fbot(1) + fbot(2)*fbot(2))
367 mb = sqrt(m1(1)*m1(1) + m1(2)*m1(2))
373 critf =
max(fn/cluster(i)%FMAX(1),ft/cluster(i)%FMAX(2))
374 critm =
max(mr/cluster(i)%MMAX(1),mb/cluster(i)%MMAX(2))
375 dmg =
max(critf,critm)
377 ELSEIF (ifail == 2)
THEN
379 dmg = fourth*(
min(one+em10, fn/cluster(i)%FMAX(1)) +
380 .
min(one+em10, ft/cluster(i)%FMAX(2)) +
381 .
min(one+em10, mr/cluster(i)%MMAX(1)) +
382 .
min(one+em10, mb/cluster(i)%MMAX(2)))
384 ELSEIF (ifail == 3)
THEN
387 . cluster(i)%AX(1)*(fn/cluster(i)%FMAX(1))**cluster(i)%NX(1)
388 . + cluster(i)%AX(2)*(ft/cluster(i)%FMAX(2))**cluster(i)%NX(2)
389 . + cluster(i)%AX(3)*(mr/cluster(i)%MMAX(1))**cluster(i)%NX(3)
394 cluster(i)%FAIL = dmg
402 cluster(i)%FOR(1) = zero
403 cluster(i)%FOR(2) = zero
404 cluster(i)%FOR(3) = zero
405 cluster(i)%MOM(1) = zero
406 cluster(i)%MOM(2) = zero
407 cluster(i)%MOM(3) = zero
408 IF (cluster(i)%TYPE == 1)
THEN
409 DO j = 1,cluster(i)%NEL
410 ng = cluster(i)%NG(j)
411 iel = cluster(i)%ELEM(j)
412 elbuf_tab(ng)%GBUF%OFF(iel) = zero
421 IF (anim_v(19) + h3d_data%N_VECT_CLUST_FORCE > 0)
THEN
423 nnod = cluster(i)%NNOD
425 n = cluster(i)%NOD1(j)
426 fcluster(1,n) = cluster(i)%FOR(1)
427 fcluster(2,n) = cluster(i)%FOR(2)
428 fcluster(3,n) = cluster(i)%FOR(3)
429 n = cluster(i)%NOD2(j)
430 fcluster(1,n) = cluster(i)%FOR(1)
431 fcluster(2,n) = cluster(i)%FOR(2)
432 fcluster(3,n) = cluster(i)%FOR(3)
436 IF (anim_v(20) + h3d_data%N_VECT_CLUST_MOM > 0)
THEN
438 nnod = cluster(i)%NNOD
440 n = cluster(i)%NOD1(j)
441 mcluster(1,n) = cluster(i)%MOM(1)
442 mcluster(2,n) = cluster(i)%MOM(2)
443 mcluster(3,n) = cluster(i)%MOM(3)
444 n = cluster(i)%NOD2(j)
445 mcluster(1,n) = cluster(i)%MOM(1)
446 mcluster(2,n) = cluster(i)%MOM(2)
447 mcluster(3,n) = cluster(i)%MOM(3)
455 WRITE(iout ,1000) cluster(indx(j))%ID
456 WRITE(istdo,1100) cluster(indx(j))%ID,tt
457#include "lockoff.inc"
461 1000
FORMAT(5x,
'DELETE ELEMENT CLUSTER,ID=',i10)
462 1100
FORMAT(5x,
'DELETE ELEMENT CLUSTER,ID=',i10,
', AT TIME ',1pe16.9)