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(), IX4(MVSIZ), NISUB,
88 . ISENSINT(*),NFT,PSKIDFLAG
89 INTEGER ,
INTENT(IN) :: INTEREFRIC
91 . STIGLO, PENI(*), FSAV(*), TF(*),
92 . ALPHA0, GAP, VISC,,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,dydx,
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, J1, IG, J, JG , K0,NBINTER,K1S,K,IL,IE, NN, NI,
123 . FXI(MVSIZ), FYI(MVSIZ), FZI(MVSIZ),
125 . VX(MVSIZ), VY(MVSIZ), VZ(MVSIZ), VN(MVSIZ), (MVSIZ),
126 . VNX, VNY, VNZ, AA, S2,
127 . V2, FF, ALPHA, BETA,
128 . FX, FY, FZ, FT, FN, FMAX, FTN,
129 . ECONTT, ECONVT, FS2,ECONTDT,
130 . fsav1, fsav2, fsav3, fsav4, fsav5, fsav6, fsav7, fsav8,
131 . fsav9, fsav10, fsav11, fsav12, fsav13, fsav14, fsav15,fsav25,
132 . vv,ax1,ax2,ay1,ay2,az1,az2,ax,ay,az,
area,p,vv1,vv2,dmu,
133 . dt1inv, vis, pa, plin, fs, qfrict, dti,dti2,dtmi0, mas2,beta1
137 . st1(mvsiz),st2(mvsiz),st3(mvsiz),st4(mvsiz),stv(mvsiz),
138 . penx(mvsiz),stif0(mvsiz),frict(mvsiz)
140 . impx,impy,impz,xx,yy,zz,th
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(i) )
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
412 xmu(i) =
max(xmu(i),em30)
418 aa = nx(i)*vx(i) + ny(i)*vy(i) + nz(i)*vz(i)
419 v2 = (vx(i) - nx(i)*aa)**2
420 . + (vy(i) - ny(i)*aa)**2
421 . + (vz(i) - nz(i)*aa)**2
422 vv = sqrt(
max(em30,v2))
428 . + fric_coefs(i,1)*exp(fric_coefs(i,2)*vv)*p*p
429 . + fric_coefs(i,3)*exp(fric_coefs(i,4)*vv)*p
430 . + fric_coefs(i,5)*exp(fric_coefs(i,6)*vv)
431 xmu(i) =
max(xmu(i),em30)
433 ELSEIF (mfrot==3)
THEN
437 aa = nx(i)*vx(i) + ny(i)*vy(i) + nz(i)*vz(i)
438 v2 = (vx(i) - nx(i)*aa)**2
439 . + (vy(i) - ny(i)*aa)**2
440 . + (vz(i) - nz(i)*aa)**2
441 vv = sqrt(
max(em30,v2))
442 IF(vv>=0.AND.vv<=fric_coefs(i,5))
THEN
443 dmu = fric_coefs(i,3)-fric_coefs(i,1)
444 vv1 = vv / fric_coefs(i,5)
445 xmu(i) = fric_coefs(i,1)+ dmu*vv1*(two-vv1)
446 ELSEIF(vv>fric_coefs(i,5).AND.vv<fric_coefs(i,6))
THEN
447 dmu = fric_coefs(i,4)-fric_coefs(i,3)
448 vv1 = (vv - fric_coefs(i,5))/(fric_coefs(i,6)-fric_coefs(i,5))
449 xmu(i) = fric_coefs(i,3)+ dmu * (three-two*vv1)*vv1**2
451 dmu = fric_coefs(i,2)-fric_coefs(i,4)
452 vv2 = (vv - fric_coefs(i,6))**2
453 xmu(i) = fric_coefs(i,2) - dmu / (one + dmu*vv2)
455 xmu(i) =
max(xmu(i),em30)
460 aa = nx(i)*vx(i) + ny(i)*vy(i) + nz(i)*vz(i)
461 v2 = (vx(i) - nx(i)*aa)**2
462 . + (vy(i) - ny(i)*aa)**2
463 . + (vz(i) - nz(i)*aa)**2
464 vv = sqrt(
max(em30,v2))
465 xmu(i) = fric_coefs(i,1)
466 . + (fric_coefs(i,1)-fricc(i))*exp(-fric_coefs(i,2)*vv)
467 xmu(i) =
max(xmu(i),em30)
485 alpha =
max(one,alpha0*dt12)
489 IF(iftlim == 0 )
THEN
495 fx = stif0(i)*vx(i)*dt12
496 fy = stif0(i)*vy(i)*dt12
497 fz = stif0(i)*vz(i)*dt12
499 fx = fxt(i) + alpha*fx
500 fy = fyt(i) + alpha*fy
501 fz = fzt(i) + alpha*fz
503 ftn = fx*nx(i) + fy*ny(i) + fz*nz(i)
509 ft = fx*fx + fy*fy + fz*fz
518 beta =
min(one,beta1)
522 fs = ftmax/sqrt(three)*
area
523 beta =
min(beta,fs/ft)
524 IF(pskidflag >0)
THEN
525 beta1 =
min(beta1,fs/ft)
526 IF(beta1 <= one)
THEN
527 fs2 = pmaxskid/sqrt(three)*
area
528 pratio(i) =
min(one,beta*ft/fs2)
536 fxi(i)=fxn(i) + fxt(i)
537 fyi(i)=fyn(i) + fyt(i)
538 fzi(i)=fzn(i) + fzt(i)
543 efric_l(i) = dt1*(vx(i)*fxt(i)+vy(i)*fyt(i)+vz(i)*fzt(i))
545 econvt = econvt + efric_l(i)
547 IF( intth > 0 .AND.beta/=zero)
THEN
548 efrict(i) = (fx-fxt(i))*fxt(i) + (fy-fyt(i))*fyt(i) +
550 efrict(i) = efrict(i)/stif0(i)
551 qfrict = qfrict + efrict(i)
557 impx=fxt(i)*dt12*weight(ig)
558 impy=fyt(i)*dt12*weight(ig)
559 impz=fzt(i)*dt12*weight(ig)
566 fsav12=fsav12+abs(impx)
567 fsav13=fsav13+abs(impy)
568 fsav14=fsav14+abs(impz)
569 fsav15=fsav15+sqrt(impx*impx+impy*impy+impz*impz)
573 fsav(4) = fsav(4) + fsav4
574 fsav(5) = fsav(5) + fsav5
575 fsav(6) = fsav(6) + fsav6
576 fsav(12) = fsav(12) + fsav12
577 fsav(13) = fsav(13) + fsav13
578 fsav(14) = fsav(14) + fsav14
579 fsav(15) = fsav(15) + fsav15
580 fsav(25) = fsav(25) + fheat*qfrict
581 fsav(26) = fsav(26) + econtt
582 fsav(27) = fsav(27) + econvt- fheat*qfrict
583 fsav(28) = fsav(28) + econtdt
584#include "lockoff.inc"
586 IF(isensint(1)/=0)
THEN
589 fsavparit(1,4,i+nft) = fxt(i)*weight(ig)
590 fsavparit(1,5,i+nft) = fyt(i)*weight(ig)
591 fsavparit(1,6,i+nft) = fzt(i)*weight(ig)
596 econtv = econtv + econvt
597 econt = econt + econtt
598 econtd = econtd + econtdt
600 qfric = qfric + fheat*qfrict
601 econtv = econtv - fheat*qfrict
603#include "lockoff.inc"
610 mxi(i) =yy*fzi(i)-zz*fyi(i)
611 myi(i) =zz*fxi(i)-xx*fzi(i)
612 mzi(i) =xx*fyi(i)-yy*fxi(i)
613 stri(i)= stif(i)*(xx*xx+yy*yy+zz*zz)
620 IF(idtmin(10)==1)
THEN
626 IF(mas2>zero.AND.stif(i)>zero.AND.
627 . irb(kinet(jg))==0.AND.irb2(kinet(jg))==0)
THEN
628 dtmi(i) =
min(dtmi(i),dtfac1(10)*sqrt(mas2/stif(i)))
630 dtmi0 =
min(dtmi0,dtmi(i))
633 IF(dtmi0<=dtmin1(10))
THEN
635 IF(dtmi(i)<=dtmin1(10))
THEN
638 IF(idtmin(10)==1)
THEN
640 WRITE(iout,
'(A,E12.4,A,I10,A,E12.4,A)')
641 .
' **WARNING MINIMUM TIME STEP ',dtmi(i),
642 .
' IN INTERFACE ',noint,
'(DTMIN =',dtmin1(10),
')'
643 WRITE(iout,
'(A,I10)')
' SECONDARY NODE : ',ni
646#include "lockoff.inc"
648 IF ( istamping == 1)
THEN
649 WRITE(istdo,
'(A)')
'The run encountered a problem in an in
651 WRITE(istdo,
'(A)')
'Maximum penetration may be reached'
652 WRITE(istdo,
'(A)')
'You may need to check if contact normals
653 .of tools are oriented toward the blank,'
654 WRITE(iout,
'(A)')
'The run encountered a problem in an in
656 WRITE(iout,
'(A)')
'Maximum penetration may be reached'
657 WRITE(iout,
'(A)')
'You may need to check if contact normals
658 .of tools are oriented toward the blank,'
666 IF(ibag/=0.OR.iadm/=0)
THEN
668 IF(pene(i)/=zero)
THEN
678 rcontact(jg)=
min(rcontact(jg),rcurvi(i))
679#include
"lockoff.inc"
686 pcontact(jg)=
max(pcontact(jg),pene(i)/(padm*gapv(i)))
687 acontact(jg)=
min(acontact(jg),anglmi(i))
688#include "lockoff.inc"
695 IF(pene(i)==zero)
GOTO 400
697 ibcs = ibcc - 8 * ibcm
700 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)