31 SUBROUTINE i21for3(JLT ,NIN ,NOINT ,IBCC ,ICODT ,
32 2 FSAV ,GAP ,STIGLO ,VISC ,INACTI ,
33 3 MFROT ,IFQ ,IBAG ,IADM ,ICURV ,
34 4 STIF ,GAPV ,ITAB ,PENI ,ALPHA0 ,
35 5 IFPEN ,ICONTACT,RCONTACT,ACONTACT,PCONTACT,
36 6 NSVG ,X1 ,Y1 ,Z1 ,X2 ,
37 7 Y2 ,Z2 ,X3 ,Y3 ,Z3 ,
38 8 X4 ,Y4 ,Z4 ,XI ,YI ,
39 9 ZI ,VXI ,VYI ,VZI ,MSI ,
40 A VXM ,VYM ,VZM ,NX ,NY ,
41 B NZ ,PENE ,FXT ,FYT ,FZT ,
42 C FXN ,FYN ,FZN ,RCURVI ,ANGLMI ,
43 D PADM ,CAND_N_N, WEIGHT,IGAP ,GAP0 ,
44 E AREA0 ,PMAX ,IROT ,XG ,MXI ,
45 F MYI ,MZI ,STRI ,WXM ,WYM ,
46 G WZM ,XP ,YP ,ZP ,KT ,
47 H C ,ILEV ,FNI ,INTTH ,FHEAT ,
48 I EFRICT ,QFRIC ,IFRIC ,XFRIC ,TEMPI ,
49 J TEMPM ,NPC ,TF ,IX1 ,IX2 ,
50 K IX3 ,IX4 ,DT2T ,NELTST ,ITYPTST,
51 L KINET ,NISUB ,ISENSINT,FSAVPARIT,NFT ,
52 M IFTLIM ,PSKIDFLAG,PRATIO,PMAXSKID,INTEREFRIC,
53 N EFRIC_L ,FRICC ,FRIC_COEFS)
61#include "implicit_f.inc"
78#include "kincod_c.inc"
82 INTEGER JLT, IBCC, INACTI, IBAG, NIN, NOINT, IADM,
83 . MFROT, IFQ, ICURV(3), IGAP, IROT, ILEV,INTTH,IFRIC,
84 . NELTST,ITYPTST,IFTLIM,
85 . ICODT(*), ITAB(*),IFPEN(*) ,ICONTACT(*), NPC(*),KINET(*)
86 INTEGER NSVG(MVSIZ),CAND_N_N(MVSIZ), WEIGHT(*),
87 . IX1(MVSIZ), IX2(MVSIZ), IX3(MVSIZ), IX4(MVSIZ), NISUB,
88 . ISENSINT(*),NFT,PSKIDFLAG
89 INTEGER ,
INTENT(IN) :: INTEREFRIC
91 . STIGLO, PENI(*), FSAV(*), TF(*),
92 . ALPHA0, GAP, VISC,DT2T,PMAXSKID ,
94 . FXN(MVSIZ), FYN(MVSIZ), FZN(MVSIZ),
95 . FXT(MVSIZ), FYT(MVSIZ), FZT(MVSIZ)
97 . STIF(MVSIZ), GAPV(MVSIZ),
98 . VXI(MVSIZ),VYI(MVSIZ),VZI(MVSIZ),MSI(MVSIZ),
99 . X1(MVSIZ),Y1(MVSIZ),Z1(MVSIZ),
100 . X2(MVSIZ),Y2(MVSIZ),Z2(MVSIZ),
101 . X3(MVSIZ),Y3(MVSIZ),Z3(MVSIZ),
102 . X4(MVSIZ),Y4(MVSIZ),Z4(MVSIZ),
103 . XI(MVSIZ),YI(MVSIZ),ZI(MVSIZ),
104 . nx(mvsiz),ny(mvsiz),nz(mvsiz),pene(mvsiz),
105 . gap0(mvsiz), area0(mvsiz), pmax, ftmax,
106 . vxm, vym, vzm, wxm, wym, wzm,
107 . xp(mvsiz), yp(mvsiz), zp(mvsiz)
109 . rcurvi(*), rcontact(*), acontact(*),
110 . pcontact(*), padm, anglmi(*),
111 . xg(3), mxi(mvsiz), myi(mvsiz), mzi(mvsiz),
stri(mvsiz),
112 . kt(mvsiz), c(mvsiz), fheat,efrict(mvsiz),qfric,
113 . tempi(mvsiz),tempm(mvsiz),xfric,
114 . fsavparit(nisub+1,11,*),pratio(mvsiz)
115 my_real ,
INTENT(INOUT) :: efric_l(mvsiz)
116 my_real ,
INTENT(IN) :: fric_coefs(mvsiz,10), fricc(mvsiz)
120 INTEGER I, IG, JG , NI,
123 . FXI(MVSIZ), FYI(MVSIZ), FZI(MVSIZ),
125 . VX(MVSIZ), VY(MVSIZ), VZ(MVSIZ), VN(MVSIZ), DTMI(MVSIZ),
128 . FX, FY, FZ, FT, FN, FTN,
129 . ECONTT, ECONVT, FS2,ECONTDT,
130 . fsav1, fsav2, fsav3, fsav4, fsav5, fsav6, fsav8,
131 . fsav9, fsav10, fsav11, fsav12, fsav13, fsav14, fsav15,fsav25,
132 . vv,
area,p,vv1,vv2,dmu,
133 . dt1inv, vis, pa, plin, fs, qfrict,dtmi0, mas2,beta1
138 . penx(mvsiz),stif0(mvsiz)
140 . impx,impy,impz,xx,yy,zz
156 IF(pskidflag >0)
THEN
161 efric_l(1:jlt) = zero
171 peni(cand_n_n(i))=
min(peni(cand_n_n(i)),
172 . ((one-fiveem2)*peni(cand_n_n(i))+fiveem2*pene(i)) )
174 pene(i)=
max(zero,pene(i)-peni(cand_n_n(i)))
175 IF( pene(i)==zero ) stif(i) = zero
176 gapv(i)=gapv(i)-peni(cand_n_n(i))
178 ELSEIF(inacti==6)
THEN
181 peni(cand_n_n(i))=
min(peni(cand_n_n(i)),
182 . ( (one-fiveem2)*peni(cand_n_n(i))
183 . +fiveem2*(pene(i)+fiveem2*(gapv(i)-pene(i)))) )
185 pene(i)=
max(zero,pene(i)-peni(cand_n_n(i)))
186 IF( pene(i)==zero ) stif(i) = zero
187 gapv(i)=gapv(i)-peni(cand_n_n(i))
191 IF( pene(i)==zero ) stif(i) = zero
199 IF(penx(i) >
max(gapv(i)-gap0(i),zero))
200 . penx(i) = penx(i)-
max(gapv(i)-gap0(i),zero)
201 peni(cand_n_n(i))=
min(peni(cand_n_n(i)),
202 . ((one-fiveem2)*peni(cand_n_n(i))+fiveem2*penx(i)) )
204 pene(i)=
max(zero,pene(i)-peni(cand_n_n(i)))
205 IF( pene(i)==zero ) stif(i) = zero
206 gapv(i)=gapv(i)-peni(cand_n_n(i))
207 gap0(i)=gap0(i)-peni(cand_n_n(i))
209 ELSEIF(inacti==6)
THEN
213 IF(penx(i) >
max(gapv(i)-gap0(i),zero))
214 . penx(i) = penx(i)-
max(gapv(i)-gap0(i),zero)
215 peni(cand_n_n(i))=
min(peni(cand_n_n(i)),
216 . ( (one-fiveem2)*peni(cand_n_n(i))
217 . +fiveem2*(penx(i)+fiveem2*(gap0(i)-penx(i)))) )
219 pene(i)=
max(zero,pene(i)-peni(cand_n_n(i)))
220 IF( pene(i)==zero ) stif(i) = zero
221 gapv(i)=gapv(i)-peni(cand_n_n(i))
222 gap0(i)=gap0(i)-peni(cand_n_n(i))
226 IF( pene(i)==zero ) stif(i) = zero
236 peni(cand_n_n(i))=
min(peni(cand_n_n(i)),
237 . ( (one-fiveem2)*peni(cand_n_n(i))
238 . +fiveem2*(pene(i)+fiveem2*abs(gapv(i)-pene(i)))) )
240 pene(i)=
max(zero,pene(i)-peni(cand_n_n(i)))
241 IF( pene(i)==zero .AND.
242 . ( ifpen(cand_n_n(i))/=1 .OR.tt==zero ) ) stif(i) = zero
247 peni(cand_n_n(i))=
min(peni(cand_n_n(i)),
248 . ((one-fiveem2)*peni(cand_n_n(i))+fiveem2*pene(i)) )
250 pene(i)=
max(zero,pene(i)-peni(cand_n_n(i)))
251 IF( pene(i)==zero .AND.
252 . (ifpen(cand_n_n(i))/=1 .OR.
253 . (inacti==5.AND.tt==zero) ) ) stif(i) = zero
274 econtt = econtt - half*stiglo*stif(i)*pene(i)**2
276 stif(i) = -stiglo*stif(i)
278 ELSEIF(stif(i)/=zero)
THEN
279 econtt = econtt + stiglo**pene(i)**2 * weight(ig)
282 fni(i)= - stif(i) * pene(i)
288 stif(i) = -stiglo*stif(i)
289 ELSEIF(stif(i)/=zero)
THEN
293 IF(stif(i)*
max(gapv(i)-gap0(i),zero) <= pa)
THEN
294 fni(i)= - stif(i)*pene(i)
295 econtt = econtt - half * pene(i) * fni(i)* weight(ig)
297 fni(i)= - stif(i)*
max(pene(i)-
max(gapv(i)-gap0(i),zero),zero)
298 . -
min(pa,stif(i)*pene(i))
299 plin = -fni(i)/
max(em20,stif(i))
300 econtt = econtt + weight(ig)*
301 . (
max(pene(i)-plin,zero)*area0(i)*pmax - half *plin *fni
312 vx(i)=vxi(i)-(vxm + wym*zz-wzm*yy)
313 vy(i)=vyi(i)-(vym + wzm*xx-wxm*zz)
314 vz(i)=vzi(i)-(vzm + wxm*yy-wym*xx)
315 vn(i) = nx(i)*vx(i) + ny(i)*vy(i) + nz(i)*vz(i)
320 IF(idtmins/=2.AND.idtmins_int==0)
THEN
322 vis = visc * sqrt(two * stif(i) * msi(i))
323 stif(i) = stif(i) + vis *dt1inv
324 fni(i) = fni(i) + vis * vn(i)
326 econtdt = econtdt + vis * vn(i) * vn(i) * dt1 * weight(ig)
330 c(i) = visc * sqrt(two * stif(i) * msi(i))
332 stif(i) = stif(i) + c(i) *dt1inv
333 fni(i) = fni(i) + c(i) * vn(i)
335 econtdt = econtdt + c(i) * vn(i) * vn(i) * dt1 * weight(ig)
358 impx=fxn(i)*dt12*weight(ig)
359 impy=fyn(i)*dt12*weight(ig)
360 impz=fzn(i)*dt12*weight(ig)
364 fsav8 =fsav8 +abs(impx)
365 fsav9 =fsav9 +abs(impy)
366 fsav10=fsav10+abs(impz)
367 fsav11=fsav11+fni(i)*dt12
371 fsav(1)=fsav(1)+fsav1
372 fsav(2)=fsav(2)+fsav2
373 fsav(3)=fsav(3)+fsav3
374 fsav(8)=fsav(8)+fsav8
375 fsav(9)=fsav(9)+fsav9
376 fsav(10)=fsav(10)+fsav10
377 fsav(11)=fsav(11)+fsav11
378#include "lockoff.inc"
380 IF(isensint(1)/=0)
THEN
383 fsavparit(1,1,i+nft) = fxn(i)*weight(ig)
384 fsavparit(1,2,i+nft) = fyn(i)*weight(ig)
385 fsavparit(1,3,i+nft) = fzn(i)*weight(ig)
397 ELSEIF (mfrot==1)
THEN
401 aa = nx(i)*vx(i) + ny(i)*vy(i) + nz(i)*vz(i)
402 v2 = (vx(i) - nx(i)*aa)**2
403 . + (vy(i) - ny(i)*aa)**2
404 . + (vz(i) - nz(i)*aa)**2
405 vv = sqrt(
max(em30,v2))
410 xmu(i) = fricc(i)+ (fric_coefs(i,1) + fric_coefs(i,4)*p ) * p
411 . +(fric_coefs(i,2) + fric_coefs(i,3)*p) * vv + fric_coefs(i,5)*v2
412 xmu(i) =
max(xmu(i),em30)
417 aa = nx(i)*vx(i) + ny(i)*vy(i) + nz(i)*vz(i)
418 v2 = (vx(i) - nx(i)*aa)**2
419 . + (vy(i) - ny(i)*aa)**2
420 . + (vz(i) - nz(i)*aa)**2
421 vv = sqrt(
max(em30,v2))
427 . + fric_coefs(i,1)*exp(fric_coefs(i,2)*vv)*p*p
429 . + fric_coefs(i,5)*exp(fric_coefs(i,6)*vv)
430 xmu(i) =
max(xmu(i),em30)
432 ELSEIF (mfrot==3)
THEN
435 aa = nx(i)*vx(i) + ny(i)*vy(i) + nz(i)*vz(i)
436 v2 = (vx(i) - nx(i)*aa)**2
437 . + (vy(i) - ny(i)*aa)**2
438 . + (vz(i) - nz(i)*aa)**2
439 vv = sqrt(
max(em30,v2))
440 IF(vv>=0.AND.vv<=fric_coefs(i,5))
THEN
441 dmu = fric_coefs(i,3)-fric_coefs(i,1)
442 vv1 = vv / fric_coefs(i,5)
443 xmu(i) = fric_coefs(i,1)+ dmu*vv1*(two-vv1)
444 ELSEIF(vv>fric_coefs(i,5).AND.vv<fric_coefs(i,6))
THEN
445 dmu = fric_coefs(i,4)-fric_coefs(i,3)
446 vv1 = (vv - fric_coefs(i,5))/(fric_coefs(i,6)-fric_coefs(i,5))
447 xmu(i) = fric_coefs(i,3)+ dmu * (three-two*vv1)*vv1**2
449 dmu = fric_coefs(i,2)-fric_coefs(i,4)
450 vv2 = (vv - fric_coefs(i,6))**2
451 xmu(i) = fric_coefs(i,2) - dmu / (one + dmu*vv2)
453 xmu(i) =
max(xmu(i),em30)
458 aa = nx(i)*vx(i) + ny(i)*vy(i) + nz(i)*vz(i)
459 v2 = (vx(i) - nx(i)*aa)**2
460 . + (vy(i) - ny(i)*aa)**2
461 . + (vz(i) - nz(i)*aa)**2
462 vv = sqrt(
max(em30,v2))
463 xmu(i) = fric_coefs(i,1)
464 . + (fric_coefs(i,1)-fricc(i))*exp(-fric_coefs(i,2)*vv)
465 xmu(i) =
max(xmu(i),em30)
483 alpha =
max(one,alpha0*dt12)
487 IF(iftlim == 0 )
THEN
493 fx = stif0(i)*vx(i)*dt12
494 fy = stif0(i)*vy(i)*dt12
495 fz = stif0(i)*vz(i)*dt12
497 fx = fxt(i) + alpha*fx
498 fy = fyt(i) + alpha*fy
499 fz = fzt(i) + alpha*fz
501 ftn = fx*nx(i) + fy*ny(i) + fz*nz(i)
507 ft = fx*fx + fy*fy + fz*fz
516 beta =
min(one,beta1)
520 fs = ftmax/sqrt(three)*
area
521 beta =
min(beta,fs/ft)
522 IF(pskidflag >0)
THEN
523 beta1 =
min(beta1,fs/ft)
524 IF(beta1 <= one)
THEN
525 fs2 = pmaxskid/sqrt(three)*
area
526 pratio(i) =
min(one,beta*ft/fs2)
534 fxi(i)=fxn(i) + fxt(i)
535 fyi(i)=fyn(i) + fyt(i)
536 fzi(i)=fzn(i) + fzt(i)
541 efric_l(i) = dt1*(vx(i)*fxt(i)+vy(i)*fyt(i)+vz(i)*fzt(i))
543 econvt = econvt + efric_l(i)
545 IF( intth > 0 .AND.beta/=zero)
THEN
546 efrict(i) = (fx-fxt(i))*fxt(i) + (fy-fyt(i))*fyt(i) +
548 efrict(i) = efrict(i)/stif0(i)
549 qfrict = qfrict + efrict(i)
555 impx=fxt(i)*dt12*weight(ig)
556 impy=fyt(i)*dt12*weight(ig)
557 impz=fzt(i)*dt12*weight(ig)
564 fsav12=fsav12+abs(impx)
565 fsav13=fsav13+abs(impy)
566 fsav14=fsav14+abs(impz)
571 fsav(4) = fsav(4) + fsav4
572 fsav(5) = fsav(5) + fsav5
573 fsav(6) = fsav(6) + fsav6
574 fsav(12) = fsav(12) + fsav12
575 fsav(13) = fsav(13) + fsav13
576 fsav(14) = fsav(14) + fsav14
577 fsav(15) = fsav(15) + fsav15
578 fsav(25) = fsav(25) + fheat*qfrict
579 fsav(26) = fsav(26) + econtt
580 fsav(27) = fsav(27) + econvt- fheat*qfrict
581 fsav(28) = fsav(28) + econtdt
582#include "lockoff.inc"
584 IF(isensint(1)/=0)
THEN
587 fsavparit(1,4,i+nft) = fxt(i)*weight(ig)
588 fsavparit(1,5,i+nft) = fyt(i)*weight(ig)
589 fsavparit(1,6,i+nft) = fzt(i)*weight(ig)
594 econtv = econtv + econvt
595 econt = econt + econtt
596 econtd = econtd + econtdt
598 qfric = qfric + fheat*qfrict
599 econtv = econtv - fheat*qfrict
601#include "lockoff.inc"
608 mxi(i) =yy*fzi(i)-zz*fyi(i)
609 myi(i) =zz*fxi(i)-xx*fzi(i)
610 mzi(i) =xx*fyi(i)-yy*fxi(i)
611 stri(i)= stif(i)*(xx*xx+yy*yy+zz*zz)
618 IF(idtmin(10)==1)
THEN
624 IF(mas2>zero.AND.stif(i)>zero.AND.
625 . irb(kinet(jg))==0.AND.irb2(kinet(jg))==0)
THEN
626 dtmi(i) =
min(dtmi(i),dtfac1(10)*sqrt(mas2/stif(i)))
628 dtmi0 =
min(dtmi0,dtmi(i))
631 IF(dtmi0<=dtmin1(10))
THEN
633 IF(dtmi(i)<=dtmin1(10))
THEN
636 IF(idtmin(10)==1)
THEN
638 WRITE(iout,
'(A,E12.4,A,I10,A,E12.4,A)')
639 .
' **WARNING MINIMUM TIME STEP ',dtmi(i),
640 .
' IN INTERFACE ',noint,
'(DTMIN =',dtmin1(10),
')'
641 WRITE(iout,
'(A,I10)')
' SECONDARY NODE : ',ni
644#include "lockoff.inc"
646 IF ( istamping == 1)
THEN
647 WRITE(istdo,
'(A)')
'The run encountered a problem in an in
649 WRITE(istdo,
'(A)')
'Maximum penetration may be reached'
650 WRITE(istdo,
'(A)')
'You may need to check if contact normals
651 .of tools are oriented toward the blank,'
652 WRITE(iout,
'(A)')
'The run encountered a problem in an in
654 WRITE(iout,
'(A)')
'Maximum penetration may be reached'
655 WRITE(iout,
'(A)')
'You may need to check if contact normals
656 .of tools are oriented toward the blank,'
664 IF(ibag/=0.OR.iadm/=0)
THEN
666 IF(pene(i)/=zero)
THEN
676 rcontact(jg)=
min(rcontact(jg),rcurvi(i))
677#include "lockoff.inc"
684 pcontact(jg)=
max(pcontact(jg),pene(i)/(padm*gapv(i)))
685 acontact(jg)=
min(acontact(jg),anglmi(i))
686#include "lockoff.inc"
693 IF(pene(i)==zero)
GOTO 400
695 ibcs = ibcc - 8 * ibcm
698 CALL ibcoff(ibcs,icodt(ig))
subroutine i21for3(jlt, nin, noint, ibcc, icodt, fsav, gap, stiglo, visc, inacti, mfrot, ifq, ibag, iadm, icurv, stif, gapv, itab, peni, alpha0, ifpen, icontact, rcontact, acontact, pcontact, nsvg, x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4, xi, yi, zi, vxi, vyi, vzi, msi, vxm, vym, vzm, nx, ny, nz, pene, fxt, fyt, fzt, fxn, fyn, fzn, rcurvi, anglmi, padm, cand_n_n, weight, igap, gap0, area0, pmax, irot, xg, mxi, myi, mzi, stri, wxm, wym, wzm, xp, yp, zp, kt, c, ilev, fni, intth, fheat, efrict, qfric, ifric, xfric, tempi, tempm, npc, tf, ix1, ix2, ix3, ix4, dt2t, neltst, ityptst, kinet, nisub, isensint, fsavparit, nft, iftlim, pskidflag, pratio, pmaxskid, interefric, efric_l, fricc, fric_coefs)