115 2 STIFN ,FSAV ,WEIGHT ,IRECT ,NSV ,
116 3 MSR ,IRTL ,IRUPT ,CRST ,MMASS ,
117 4 MINER ,SMASS ,SINER ,AREA ,UVAR ,
118 5 XSM0 ,DSM ,FSM ,PROP ,IPARI ,
119 6 NSN ,NMN ,NUVAR ,IGTYP ,PID ,
120 7 NPF ,TF ,ITAB ,FNCONT ,PDAMA2 ,
121 8 ISYM ,INORM ,H3D_DATA,FNCONTP ,FTCONTP )
131#include "implicit_f.inc"
135 INTEGER NSN, NMN,NUVAR,PID,IGTYP,ISYM
136 INTEGER IRECT(4,*),MSR(*),NSV(*),IRTL(*),IRUPT(*),IPARI(*),
137 . weight(*),npf(*),itab(*),pdama2(*),inorm(*)
140 . x(3,*),v(3,*),a(3,*),xsm0(3,*),dsm(3,*),fsm(3,*),prop(*),
141 .
area(*),stifn(*),siner(*),smass(*),fncont(3,*),
142 . ms(*),in(*),mmass(*),miner(*),crst(2,*),fsav(*),tf(*),
143 . fncontp(3,*) ,ftcontp(3,* )
144 my_real,
DIMENSION(NUVAR,NSN) ::
146 TYPE (H3D_DATABASE) :: H3D_DATA
150#include "com01_c.inc"
151#include "com08_c.inc"
152#include "scr14_c.inc"
153#include "comlock.inc"
154#include "userlib.inc"
158 INTEGER NIR,I,J,II,JJ,L,N1,N2,N3,N4,RFLAG,W,IONE,
159 . IMOD,IFILTR,IFUNS,IFUNN,IFUNT,NOINT,IDBG
162 . S,T,SP,SM,TP,TM,AA,INS,MXI,MYI,MZI,XSM,YSM,ZSM,XC,YC,ZC,
163 . X0,X1,X2,X3,X4,Y0,Y1,Y2,Y3,Y4,Z0,Z1,Z2,Z3,Z4,SUM,DX,DY,DZ,
164 . FX,FY,FZ,FXI,FYI,FZI,SX,SY,SZ,TX,TY,TZ,DT12M,DTIME,
165 . DXNORM,DXTANG,DXTAN2,FNORM,FTANG,FTAN2,MCDG,
166 . VX,VY,VZ,VNX,VNY,VNZ,VTX,VTY,VTZ,VUX,VUY,VUZ,FACN,FACT,
167 . FSAV1,FSAV2,FSAV3,FSAV4,FSAV5,FSAV6,FSAV7,FSAV8,FSAV9,FSAV10,
168 . FSAV11,FSAV12,FSAV13,FSAV14,FSAV15,IMPX,IMPY,IMPZ
170 . h(4),dxn(3),dxt(3),dxu(3),fn(3),ft(3),fu(3),fnarea,ftarea,adxtang
216 xc = x1 * h(1) + x2 * h(2) + x3 * h(3) + x4 * h(4)
217 yc = y1 * h(1) + y2 * h(2) + y3 * h(3) + y4 * h(4)
218 zc = z1 * h(1) + z2 * h(2) + z3 * h(3) + z4 * h(4)
230 sx = -(x2 + x3 - x1 - x4)
231 sy = -(y2 + y3 - y1 - y4)
232 sz = -(z2 + z3 - z1 - z4)
233 tx = -(x3 + x4 - x1 - x2)
234 ty = -(y3 + y4 - y1 - y2)
235 tz = -(z3 + z4 - z1 - z2)
236 vnx = sy * tz - sz * ty
237 vny = sz * tx - sx * tz
238 vnz = sx * ty - sy * tx
239 sum = one / sqrt(vnx*vnx + vny*vny + vnz*vnz)
243 sum = vnx*xsm + vny*ysm + vnz*zsm
244 inorm(ii) = sign(ione, nint(sum))
259 IF (iroddl /= 0) in(i) = miner(ii)
264 IF (iroddl /= 0) in(i)= siner(ii)
274 IF (irupt(ii) == 1)
THEN
321 xc = x1 * h(1) + x2 * h(2) + x3 * h(3) + x4 * h(4)
322 yc = y1 * h(1) + y2 * h(2) + y3 * h(3) + y4 * h(4)
323 zc = z1 * h(1) + z2 * h(2) + z3 * h(3) + z4 * h(4)
328 dx = xsm - xsm0(1,ii)
329 dy = ysm - xsm0(2,ii)
330 dz = zsm - xsm0(3,ii)
337 sx = -(x2 + x3 - x1 - x4)
339 sz = -(z2 + z3 - z1 - z4)
340 tx = -(x3 + x4 - x1 - x2)
341 ty = -(y3 + y4 - y1 - y2)
342 tz = -(z3 + z4 - z1 - z2)
343 vnx = sy * tz - sz * ty
344 vny = sz * tx - sx * tz
345 vnz = sx * ty - sy * tx
346 sum = inorm(ii) / sqrt(vnx*vnx + vny*vny + vnz*vnz)
350 sum = one / sqrt(sx*sx + sy*sy + sz*sz)
357 dxnorm = vnx*dx + vny*dy + vnz*dz
364 dxtang = sqrt(dxt(1)**2 + dxt(2)**2 + dxt(3)**2)
366 IF (dxtang > zero)
THEN
372 vux = vny * vtz - vnz * vty
373 vuy = vnz * vtx - vnx * vtz
374 vuz = vnx * vty - vny * vtx
378 IF (irupt(ii) == 0)
THEN
380 mcdg = one/(ms(i)+ms(n1)+ms(n2)+ms(n3
381 vx = v(1,i)*ms(i)+v(1,n1)*ms(n1)
382 . +v(1,n2)*ms(n2)+v(1,n3)*ms(n3)+v(1,n4)*ms(n4)
383 vy = v(2,i)*ms(i)+v(2,n1)*ms(n1)
384 . +v(2,n2)*ms(n2)+v(2,n3)*ms(n3)+v(2,n4)*ms(n4)
385 vz = v(3,i)*ms(i)+v(3,n1)*ms(n1)
386 . +v(3,n2)*ms(n2)+v(3,n3)*ms(n3)+v(3,n4)*ms(n4)
390 fx = a(1,i) + (v(1,i) - vx)*ms(i)*dt12m
391 fy = a(2,i) + (v(2,i) - vy)*ms(i)*dt12m
392 fz = a(3,i) + (v(3,i) - vz)*ms(i)*dt12m
393 ELSEIF (irupt(ii) == -1)
THEN
400 fnorm = vnx*fx + vny*fy + vnz*fz
401 ftang = vtx*fx + vty*fy + vtz*fz
402 ftan2 = vux*fx + vuy*fy + vuz*fz
415 dtime =
max(dt1,em20)
416 IF(userl_avail==1.AND.igtyp /= -1)
THEN
417 adxtang = abs(dxtang)
418 fnarea=fnorm /
area(ii)
419 ftarea=
max(abs(ftang),abs(ftan2)) /
area(ii)
420 CALL eng_userlib_uintbuf_var(i,
area(ii),dxnorm,adxtang,fnarea,ftarea,dtime,rflag)
424 userbuf%AREA =
area(ii)
426 userbuf%DXT = abs(dxtang)
427 userbuf%SIGN = fnorm /
area(ii)
428 userbuf%SIGT =
max(abs(ftang),abs(ftan2)) /
area(ii)
433 IF (igtyp == -1)
THEN
442 . nsn ,ii ,nuvar ,uvar(1,ii),userbuf ,
443 . prop ,ifuns ,ifunn ,ifunt ,imod ,
444 . ifiltr ,idbg ,npf ,tf ,noint ,
445 . itab ,pdama2 ,isym ,h3d_data )
446 ELSEIF (igtyp == 29)
THEN
447 IF(userl_avail==1)
THEN
448 CALL eng_userlib_userint(igtyp,
449 . nsn ,ii ,pid ,nuvar ,
450 . uvar(1,ii),userbuf )
454 option=
'INTERFACE TYPE2 RUPTURE MODEL'
455 size=len_trim(option)
456 CALL ancmsg(msgid=257,c1=option(1:size),anmode=aninfo)
461 ELSEIF (igtyp == 30)
THEN
462 IF(userl_avail==1)
THEN
463 CALL eng_userlib_userint(igtyp,
465 . uvar(1,ii),userbuf )
469 option=
'INTERFACE TYPE2 RUPTURE MODEL'
470 size=len_trim(option)
471 CALL ancmsg(msgid=257,c1=option(1:size),anmode=aninfo)
475 ELSEIF (igtyp == 31)
THEN
476 IF(userl_avail==1)
THEN
477 CALL eng_userlib_userint(igtyp,
478 . nsn ,ii ,pid ,nuvar ,
479 . uvar(1,ii),userbuf )
483 option=
'INTERFACE TYPE2 RUPTURE MODEL'
484 size=len_trim(option)
485 CALL ancmsg(msgid=257,c1=option(1:size
489 ELSEIF (igtyp == 37)
THEN
490 IF(userl_avail==1)
THEN
491 CALL eng_userlib_userint(igtyp,
492 . nsn ,ii ,pid ,nuvar ,
493 . uvar(1,ii),userbuf )
497 option=
'INTERFACE TYPE2 RUPTURE MODEL'
498 size=len_trim(option)
499 CALL ancmsg(msgid=257,c1=option(1:size),anmode=aninfo)
503 ELSEIF (igtyp == 38)
THEN
504 IF(userl_avail==1)
THEN
505 CALL eng_userlib_userint(igtyp,
506 . nsn ,ii ,pid ,nuvar ,
507 . uvar(1,ii),userbuf )
511 option=
'INTERFACE TYPE2 RUPTURE MODEL'
512 size=len_trim(option)
513 CALL ancmsg(msgid=257,c1=option(1:size),anmode=aninfo)
517 ELSEIF (igtyp == 39)
THEN
518 IF(userl_avail==1)
THEN
519 CALL eng_userlib_userint(igtyp,
520 . nsn ,ii ,pid ,nuvar ,
521 . uvar(1,ii),userbuf )
525 option=
'INTERFACE TYPE2 RUPTURE MODEL'
526 size=len_trim(option)
527 CALL ancmsg(msgid=257,c1=option(1:size),anmode=aninfo)
531 ELSEIF (igtyp == 40)
THEN
532 IF(userl_avail==1)
THEN
533 CALL eng_userlib_userint(igtyp,
534 . nsn ,ii ,pid ,nuvar ,
535 . uvar(1,ii),userbuf )
539 option=
'INTERFACE TYPE2 RUPTURE MODEL'
540 size=len_trim(option)
541 CALL ancmsg(msgid=257,c1=option(1:size),anmode=aninfo)
545 ELSEIF (igtyp == 41)
THEN
546 IF(userl_avail==1)
THEN
547 CALL eng_userlib_userint(igtyp,
548 . nsn ,ii ,pid ,nuvar ,
549 . uvar(1,ii),userbuf )
553 option=
'INTERFACE TYPE2 RUPTURE MODEL'
554 size=len_trim(option)
555 CALL ancmsg(msgid=257,c1=option(1:size),anmode=aninfo)
559 ELSEIF (igtyp == 42)
THEN
560 IF(userl_avail==1)
THEN
561 CALL eng_userlib_userint(igtyp,
562 . nsn ,ii ,pid ,nuvar ,
563 . uvar(1,ii),userbuf )
567 option=
'INTERFACE TYPE2 RUPTURE MODEL'
568 size=len_trim(option)
569 CALL ancmsg(msgid=257,c1=option(1:size),anmode=aninfo)
577 irupt(ii) = nint(userbuf%RUPT)
590 fsm(1,ii) = vnx*fnorm + vtx*ftang + vux*ftan2
591 fsm(2,ii) = vny*fnorm + vty*ftang + vuy*ftan2
592 fsm(3,ii) = vnz*fnorm + vtz*ftang + vuz*ftan2
620 fsav(1) = fsav(1) + fsav1*w
621 fsav(2) = fsav(2) + fsav2*w
622 fsav(3) = fsav(3) + fsav3*w
623 fsav(4) = fsav(4) + fsav4*w
624 fsav(5) = fsav(5) + fsav5*w
625 fsav(6) = fsav(6) + fsav6*w
626 fsav(8) = fsav(8) + fsav8*w
627 fsav(9) = fsav(9) + fsav9*w
628 fsav(10)= fsav(10)+ fsav10*w
629 fsav(11)= fsav(11)+ fsav11*w
630 fsav(12)= fsav(12)+ fsav12*w
631 fsav(13)= fsav(13)+ fsav13*w
632 fsav(14)= fsav(14)+ fsav14*w
633 fsav(15)= fsav(15)+ fsav15*w
634#include "lockoff.inc"
636 IF(anim_v(13)+h3d_data%N_VECT_CONT2>0)
THEN
637 fncont(1,i) = - (fn(1)+ft(1)) * w
638 fncont(2,i) = - (fn(2)+ft(2)) * w
639 fncont(3,i) = - (fn(3)+ft(3)) * w
642 fncont(1,j) = fncont(1,j) + w *(fn(1)+ft(1))*h(jj)
643 fncont(2,j) = fncont(2,j) + w *(fn(2)+ft(2))*h(jj)
644 fncont(3,j) = fncont(3,j) + w *(fn(3)+ft(3))*h(jj)
648 IF(anim_v(27)+h3d_data%N_VECT_PCONT2>0)
THEN
649 fncontp(1,i) = - (fn(1)+ft(1)) * w
650 fncontp(2,i) = - (fn(2)+ft(2)) * w
651 fncontp(3,i) = - (fn(3)+ft(3)) * w
654 fncontp(1,j) = fncontp(1,j) - fncontp(1,i)*h(jj)
655 fncontp(2,j) = fncontp(2,j) - fncontp(2,i)*h(jj)
656 fncontp(3,j) = fncontp(3,j) - fncontp(3,i)*h(jj)
659 ftcontp(1,i) = vnx * w
660 ftcontp(2,i) = vny * w
661 ftcontp(3,i) = vnz * w
664 ftcontp(1,j) = ftcontp(1,j) - ftcontp(1,i)*h(jj)
665 ftcontp(2,j) = ftcontp(2,j) - ftcontp(2,i)*h(jj)
666 ftcontp(3,j) = ftcontp(3,j) - ftcontp(3,i)*h(jj)