32 character*81 tieset(3,*),setname
34 character*132 jobnamef(*)
36 integer ntie,ifree,nasym,nstate_,ne0,
37 & itietri(2,ntie),ipkon(*),kon(*),koncont(4,*),ne,
38 & neigh(1),iflag,kneigh,i,j,k,l,jj,nn,isol,icutb,
39 & itri,ll,kflag,n,nx(*),ny(*),istep,iinc,mi(*),
40 & nz(*),nstart,ielmat(mi(3),*),imat,ifaceq(8,6),ifacet(6,4),
41 & ifacew1(4,5),ifacew2(8,5),nelemm,jfacem,indexe,iit,
42 & nface,nope,nodefm(9),ncmat_,ntmat_,number(4),lenset,
43 & iteller,ifaces,jfaces,ifacem,indexel,iloop,iprev,iact,
44 & imastop(3,*), itriangle(100),ntriangle,ntriangle_,itriold,
45 & itrinew,id,islavsurf(2,*),itiefac(2,*),nelems,m,mint2d,nopes,
46 & iloc,nopem,nodefs(9),indexf,ialeatoric,nmethod
48 real*8 cg(3,*),straight(16,*),co(3,*),vold(0:mi(2),*),p(3),
49 &
dist,xo(*),yo(*),zo(*),x(*),y(*),z(*),clearini(3,9,*),
50 & elcon(0:ncmat_,ntmat_,*),weight,theta,harvest,
51 & springarea(2,*),xl2(3,9),area,xi,et,shp2(7,9),
52 & xs2(3,2),xsj2(3),tietol(3,*),reltime,xstate(nstate_,mi(1),*),
53 & clear,ratio(9),pl(3,9),xstateini(nstate_,mi(1),*),
54 & pproj(3),al(3),xn(3),xm(3),dm,pslavsurf(3,*),pmastsurf(6,*)
58 data ifaceq /4,3,2,1,11,10,9,12,
59 & 5,6,7,8,13,14,15,16,
61 & 2,3,7,6,10,19,14,18,
62 & 3,4,8,7,11,20,15,19,
63 & 4,1,5,8,12,17,16,20/
67 data ifacet /1,3,2,7,6,5,
74 data ifacew1 /1,3,2,0,
82 data ifacew2 /1,3,2,9,8,7,0,0,
97 if((iinc.eq.1).and.(iit.le.0))
call random_seed()
101 if(filab(1)(3:3).eq.
'C')
then 105 if(jobnamef(1)(i:i).eq.
' ')
exit 108 cfile=jobnamef(1)(1:i)//
'.cel' 109 open(27,file=cfile,status=
'unknown',position=
'append')
111 setname(1:15)=
'contactelements' 117 if(number(4).le.0) number(4)=1
119 setname(lenset+1:lenset+1)=
'_' 121 setname(lenset+2:lenset+3)=
'st' 123 setname(lenset+2:lenset+3)=
'in' 125 setname(lenset+2:lenset+3)=
'at' 127 setname(lenset+2:lenset+3)=
'it' 129 if(number(i).lt.10)
then 130 write(setname(lenset+4:lenset+4),
'(i1)') number(i)
132 elseif(number(i).lt.100)
then 133 write(setname(lenset+4:lenset+5),
'(i2)') number(i)
135 elseif(number(i).lt.1000)
then 136 write(setname(lenset+4:lenset+6),
'(i3)') number(i)
139 write(*,*)
'*ERROR in gencontelem_f2f: no more than 1000' 140 write(*,*)
' steps/increments/cutbacks/iterations' 141 write(*,*)
' allowed (for output in ' 142 write(*,*)
' contactelements.inp)' 153 if(tieset(1,i)(81:81).ne.
'C') cycle
154 imat=int(tietol(2,i))
163 nstart=itietri(1,i)-1
164 n=itietri(2,i)-nstart
165 if(n.lt.kneigh) kneigh=n
178 call dsort(x,nx,n,kflag)
179 call dsort(y,ny,n,kflag)
180 call dsort(z,nz,n,kflag)
193 do jj=itiefac(1,i), itiefac(2,i)
194 ifaces=islavsurf(1,jj)
195 nelems=int(ifaces/10)
196 jfaces=ifaces-nelems*10
198 if(lakon(nelems)(4:5).eq.
'8R')
then 202 elseif(lakon(nelems)(4:4).eq.
'8')
then 206 elseif(lakon(nelems)(4:6).eq.
'20R')
then 210 elseif(lakon(nelems)(4:5).eq.
'20')
then 214 elseif(lakon(nelems)(4:5).eq.
'10')
then 218 elseif(lakon(nelems)(4:4).eq.
'4')
then 225 elseif(lakon(nelems)(4:4).eq.
'6')
then 233 elseif(lakon(nelems)(4:5).eq.
'15')
then 247 if((nope.eq.20).or.(nope.eq.8))
then 249 nodefs(m)=kon(ipkon(nelems)+ifaceq(m,jfaces))
251 xl2(j,m)=co(j,nodefs(m))+clearini(j,m,jj)
252 & *reltime+vold(j,nodefs(m))
255 elseif((nope.eq.10).or.(nope.eq.4))
then 257 nodefs(m)=kon(ipkon(nelems)+ifacet(m,jfaces))
259 xl2(j,m)=co(j,nodefs(m))+clearini(j,m,jj)
260 & *reltime+vold(j,nodefs(m))
263 elseif(nope.eq.15)
then 265 nodefs(m)=kon(ipkon(nelems)+ifacew2(m,jfaces))
267 xl2(j,m)=co(j,nodefs(m))+clearini(j,m,jj)
268 & *reltime+vold(j,nodefs(m))
273 nodefs(m)=kon(ipkon(nelems)+ifacew1(m,jfaces))
275 xl2(j,m)=co(j,nodefs(m))+clearini(j,m,jj)
276 & *reltime+vold(j,nodefs(m))
295 mint2d=islavsurf(2,jj+1)-islavsurf(2,jj)
296 if(mint2d.eq.0) cycle
297 indexf=islavsurf(2,jj)
301 xi=pslavsurf(1,indexf+m)
302 et=pslavsurf(2,indexf+m)
303 weight=pslavsurf(3,indexf+m)
306 call shape9q(xi,et,xl2,xsj2,xs2,shp2,iflag)
307 elseif(nopes.eq.8)
then 308 call shape8q(xi,et,xl2,xsj2,xs2,shp2,iflag)
309 elseif(nopes.eq.4)
then 310 call shape4q(xi,et,xl2,xsj2,xs2,shp2,iflag)
311 elseif(nopes.eq.6)
then 312 call shape6tri(xi,et,xl2,xsj2,xs2,shp2,iflag)
313 elseif(nopes.eq.7)
then 314 call shape7tri(xi,et,xl2,xsj2,xs2,shp2,iflag)
316 call shape3tri(xi,et,xl2,xsj2,xs2,shp2,iflag)
319 area=dsqrt(xsj2(1)**2+xsj2(2)**2+xsj2(3)**2)*weight
328 p(k)=p(k)+shp2(4,j)*xl2(k,j)
332 if(int(pmastsurf(3,iloc)).eq.0)
then 342 call near3d(xo,yo,zo,x,y,z,nx,ny,nz,p(1),p(2),p(3),
348 itri=neigh(1)+itietri(1,i)-1
355 dist=straight(ll,itri)*p(1)+
356 & straight(ll+1,itri)*p(2)+
357 & straight(ll+2,itri)*p(3)+
358 & straight(ll+3,itri)
365 if(
dist.gt.1.d-3*dsqrt(area))
then 366 itrinew=imastop(l,itri)
367 if(itrinew.eq.0)
then 370 elseif((itrinew.lt.itietri(1,i)).or.
371 & (itrinew.gt.itietri(2,i)))
then 374 elseif(itrinew.eq.itriold)
then 379 call nident(itriangle,itrinew,
382 if(itriangle(id).eq.itrinew)
then 387 ntriangle=ntriangle+1
388 if(ntriangle.gt.ntriangle_)
then 392 do k=ntriangle,id+2,-1
393 itriangle(k)=itriangle(k-1)
395 itriangle(id+1)=itrinew
414 pmastsurf(3,iloc)=0.5d0
424 springarea(1,iloc)=area
425 springarea(2,iloc)=0.d0
426 ifacem=koncont(4,itri)
427 pmastsurf(3,iloc)=ifacem+0.5d0
429 ifacem=int(pmastsurf(3,iloc))
431 nelemm=int(ifacem/10.d0)
432 jfacem=ifacem-10*nelemm
435 if(lakon(nelemm)(4:5).eq.
'20')
then 438 elseif(lakon(nelemm)(4:4).eq.
'8')
then 441 elseif(lakon(nelemm)(4:5).eq.
'10')
then 444 elseif(lakon(nelemm)(4:4).eq.
'4')
then 447 elseif(lakon(nelemm)(4:5).eq.
'15')
then 455 elseif(lakon(nelemm)(4:4).eq.
'6')
then 471 nodefm(k)=kon(indexe+ifacet(k,jfacem))
473 elseif(nface.eq.5)
then 476 nodefm(k)=kon(indexe+ifacew1(k,jfacem))
478 elseif(nope.eq.15)
then 480 nodefm(k)=kon(indexe+ifacew2(k,jfacem))
483 elseif(nface.eq.6)
then 485 nodefm(k)=kon(indexe+ifaceq(k,jfacem))
498 pl(nn,k)=co(nn,nodefm(k))+vold(nn,nodefm(k))
507 pmastsurf(1,indexf+m)=xi
508 pmastsurf(2,indexf+m)=et
510 xi=pmastsurf(1,indexf+m)
511 et=pmastsurf(2,indexf+m)
515 call shape9q(xi,et,pl,xm,xs2,shp2,iflag)
516 elseif(nopem.eq.8)
then 517 call shape8q(xi,et,pl,xm,xs2,shp2,iflag)
518 elseif(nopem.eq.4)
then 519 call shape4q(xi,et,pl,xm,xs2,shp2,iflag)
520 elseif(nopem.eq.6)
then 521 call shape6tri(xi,et,pl,xm,xs2,shp2,iflag)
522 elseif(nopem.eq.7)
then 523 call shape7tri(xi,et,pl,xm,xs2,shp2,iflag)
525 call shape3tri(xi,et,pl,xm,xs2,shp2,iflag)
532 pproj(nn)=pproj(nn)+shp2(4,k)*pl(nn,k)
538 al(nn)=p(nn)-pproj(nn)
544 dm=dsqrt(xm(1)*xm(1)+xm(2)*xm(2)+xm(3)*xm(3))
548 pmastsurf(4,iloc)=xn(1)
549 pmastsurf(5,iloc)=xn(2)
550 pmastsurf(6,iloc)=xn(3)
552 xn(1)=pmastsurf(4,iloc)
553 xn(2)=pmastsurf(5,iloc)
554 xn(3)=pmastsurf(6,iloc)
559 clear=al(1)*xn(1)+al(2)*xn(2)+al(3)*xn(3)
561 if((nmethod.eq.4).or.(nmethod.eq.2))
then 566 if((clear.gt.0.d0).and.
567 & (int(elcon(3,1,imat)).ne.4))
then 575 if((istep.eq.1).and.(iit.le.0.d0))
then 576 if(clear.lt.0.d0)
then 577 springarea(2,iloc)=clear/(1.d0-theta)
578 elseif(clear.lt.1.d0/elcon(2,1,imat))
then 582 clear=clear-springarea(2,iloc)*(1.d0-reltime)
592 if((isol.ne.0).and.(int(elcon(3,1,imat)).ne.4))
594 if(((istep.gt.1).or.(iinc.gt.1)).and.
595 & (iit.le.0).and.(ncmat_.ge.7).and.
596 & (elcon(6,1,imat).gt.0.d0))
then 597 if(dsqrt(xstateini(4,1,ne0+iloc)**2+
598 & xstateini(5,1,ne0+iloc)**2+
599 & xstateini(6,1,ne0+iloc)**2)
600 & .ge.1.d-30) iprev=iprev+1
606 if(ialeatoric.eq.1)
then 607 call random_number(harvest)
608 if(harvest.gt.0.9) isol=0
612 if((icutb.eq.0).or.(ncmat_.lt.7).or.
613 & (elcon(6,1,imat).le.0.))
then 620 if(clear.gt.0.d0)
then 631 if((dsqrt(xstateini(4,1,ne0+iloc)**2+
632 & xstateini(5,1,ne0+iloc)**2+
633 & xstateini(6,1,ne0+iloc)**2)
634 & .lt.1.d-30).and.(clear.gt.0.d0))
652 if((isol.ne.0).and.(int(elcon(3,1,imat)).ne.4))
654 if(dsqrt(xstateini(4,1,ne0+iloc)**2+
655 & xstateini(5,1,ne0+iloc)**2+
656 & xstateini(6,1,ne0+iloc)**2)
680 if((elcon(6,1,imat).gt.0).and.
681 & (int(elcon(3,1,imat)).ne.4))
then 686 if(elcon(8,1,imat).gt.0)
then 691 kon(ifree+1)=nopes+nopem
695 kon(ifree+k)=nodefm(k)
699 kon(ifree+k)=nodefs(k)
704 kon(ifree+3)=indexf+m
708 write(lakon(ne)(8:8),
'(i1)') nopem
712 if((nopem.eq.4).or.(nopem.eq.8))
then 713 if((nopes.eq.4).or.(nopes.eq.8))
then 714 if(filab(1)(3:3).eq.
'C')
then 715 write(27,100) setname(1:lenset)
716 100
format(
'*ELEMENT,TYPE=C3D8,ELSET=',a)
717 write(27,*) ne0+indexel,
',',nodefm(1),
',',
718 & nodefm(2),
',',nodefm(3),
',',nodefm(4),
719 &
',',nodefs(2),
',',nodefs(1),
',',
720 & nodefs(4),
',',nodefs(3)
723 if((nopes.eq.3).or.(nopes.eq.6))
then 724 if(filab(1)(3:3).eq.
'C')
then 725 write(27,101) setname(1:lenset)
726 101
format(
'*ELEMENT,TYPE=C3D8,ELSET=',a)
727 write(27,*) ne0+indexel,
',',nodefm(1),
',',
728 & nodefm(2),
',',nodefm(3),
',',nodefm(4),
729 &
',',nodefs(2),
',',nodefs(1),
',',
730 & nodefs(3),
',',nodefs(3)
734 if((nopem.eq.3).or.(nopem.eq.6))
then 735 if((nopes.eq.4).or.(nopes.eq.8))
then 736 if(filab(1)(3:3).eq.
'C')
then 737 write(27,102) setname(1:lenset)
738 102
format(
'*ELEMENT,TYPE=C3D8,ELSET=',a)
739 write(27,*) ne0+indexel,
',',nodefm(1),
',',
740 & nodefm(2),
',',nodefm(3),
',',nodefm(3),
741 &
',',nodefs(2),
',',nodefs(1),
',',
742 & nodefs(4),
',',nodefs(3)
745 if((nopes.eq.3).or.(nopes.eq.6))
then 746 if(filab(1)(3:3).eq.
'C')
then 747 write(27,103) setname(1:lenset)
748 103
format(
'*ELEMENT,TYPE=C3D6,ELSET=',a)
749 write(27,*) ne0+indexel,
',',nodefm(1),
',',
750 & nodefm(2),
',',nodefm(3),
',',nodefs(2),
751 &
',',nodefs(1),
',',nodefs(3)
765 xstate(k,1,ne0+iloc)=0.d0
773 if((iact.ne.0).or.(iprev.eq.0).or.(nmethod.eq.4))
exit 774 write(*,*)
'*INFO in gencontelem_f2f: contact lost at the' 775 write(*,*)
' start of a new increment; contact' 776 write(*,*)
' elements from end of previous increment' 777 write(*,*)
' are kept.' 778 write(*,*)
' number of previous contact elements:',iprev
779 write(*,*)
' number of actual contact elements:',iact
785 if(filab(1)(3:3).eq.
'C')
then subroutine near3d(xo, yo, zo, x, y, z, nx, ny, nz, xp, yp, zp, n, neighbor, k)
Definition: near3d.f:20
subroutine shape9q(xi, et, xl, xsj, xs, shp, iflag)
Definition: shape9q.f:20
subroutine shape8q(xi, et, xl, xsj, xs, shp, iflag)
Definition: shape8q.f:20
subroutine shape3tri(xi, et, xl, xsj, xs, shp, iflag)
Definition: shape3tri.f:20
subroutine shape7tri(xi, et, xl, xsj, xs, shp, iflag)
Definition: shape7tri.f:20
subroutine stop()
Definition: stop.f:20
static double * dist
Definition: radflowload.c:42
subroutine shape4q(xi, et, xl, xsj, xs, shp, iflag)
Definition: shape4q.f:20
subroutine nident(x, px, n, id)
Definition: nident.f:26
subroutine dsort(dx, iy, n, kflag)
Definition: dsort.f:6
subroutine shape6tri(xi, et, xl, xsj, xs, shp, iflag)
Definition: shape6tri.f:20
subroutine attach(pneigh, pnode, nterms, ratio, dist, xil, etl)
Definition: attach.f:20