34 character*81 tieset(3,*),slavset,set(*),noset,setname
36 character*132 jobnamef(*)
38 integer ntie,ifree,nasym,icutb,ne0,
39 & itietri(2,ntie),ipkon(*),kon(*),koncont(4,*),ne,node,
40 & neigh(1),iflag,kneigh,i,j,k,l,isol,iset,idummy,
41 & itri,ll,kflag,n,nx(*),ny(*),istep,iinc,mi(*),
42 & nz(*),nstart,ielmat(mi(3),*),imat,ifaceq(8,6),ifacet(6,4),
43 & ifacew1(4,5),ifacew2(8,5),nelem,jface,indexe,iit,
44 & nface,nope,nodef(9),ncmat_,ntmat_,index1,indexel,
45 & nmethod,iteller,ifaces,jfaces,irelslavface,number(4),lenset,
46 & imastop(3,*), itriangle(100),ntriangle,ntriangle_,itriold,
47 & itrinew,id,nslavnode(*),islavnode(*),islavsurf(2,*),
48 & itiefac(2,*),iponoels(*),inoels(2,*),konl(26),nelems,m,
49 & mint2d,nopes,ipos,nset,istartset(*),iendset(*),
52 real*8 cg(3,*),straight(16,*),co(3,*),vold(0:mi(2),*),p(3),
53 &
dist,xo(*),yo(*),zo(*),x(*),y(*),z(*),c0coef,
54 & beta,c0,elcon(0:ncmat_,ntmat_,*),weight,
55 & areaslav(*),springarea(2,*),xl2(3,9),area,xi,et,shp2(7,9),
56 & xs2(3,2),xsj2(3),adjust,tietol(3,*),reltime,
57 & clear,ratio(9),pl(3,9),
58 & pproj(3),al(3),xn(3),xm(3),dm,xnoels(*)
62 data ifaceq /4,3,2,1,11,10,9,12,
63 & 5,6,7,8,13,14,15,16,
65 & 2,3,7,6,10,19,14,18,
66 & 3,4,8,7,11,20,15,19,
67 & 4,1,5,8,12,17,16,20/
71 data ifacet /1,3,2,7,6,5,
78 data ifacew1 /1,3,2,0,
86 data ifacew2 /1,3,2,9,8,7,0,0,
103 if(filab(1)(3:3).eq.
'C')
then 107 if(jobnamef(1)(i:i).eq.
' ')
exit 110 cfile=jobnamef(1)(1:i)//
'.cel' 111 open(27,file=cfile,status=
'unknown',position=
'append')
113 setname(1:15)=
'contactelements' 119 if(number(4).le.0) number(4)=1
121 setname(lenset+1:lenset+1)=
'_' 123 setname(lenset+2:lenset+3)=
'st' 125 setname(lenset+2:lenset+3)=
'in' 127 setname(lenset+2:lenset+3)=
'at' 129 setname(lenset+2:lenset+3)=
'it' 131 if(number(i).lt.10)
then 132 write(setname(lenset+4:lenset+4),
'(i1)') number(i)
134 elseif(number(i).lt.100)
then 135 write(setname(lenset+4:lenset+5),
'(i2)') number(i)
137 elseif(number(i).lt.1000)
then 138 write(setname(lenset+4:lenset+6),
'(i3)') number(i)
141 write(*,*)
'*ERROR in gencontelem_f2f: no more than 1000' 142 write(*,*)
' steps/increments/cutbacks/iterations' 143 write(*,*)
' allowed (for output in ' 144 write(*,*)
' contactelements.inp)' 151 if(tieset(1,i)(81:81).ne.
'C') cycle
154 imat=int(tietol(2,i))
155 c0coef=elcon(4,1,imat)
161 if((istep.eq.1).and.(iit.lt.0))
then 163 if(tieset(1,i)(1:1).ne.
' ')
then 164 noset(1:80)=tieset(1,i)(1:80)
166 ipos=index(noset,
' ')
169 if(set(iset).eq.noset)
exit 172 call isortii(ialset(istartset(iset)),idummy,
173 & iendset(iset)-istartset(iset)+1,kflag)
179 do l = itiefac(1,i), itiefac(2,i)
180 ifaces = islavsurf(1,l)
181 nelems = int(ifaces/10)
182 jfaces = ifaces - nelems*10
186 if(lakon(nelems)(4:5).eq.
'8R')
then 190 elseif(lakon(nelems)(4:4).eq.
'8')
then 194 elseif(lakon(nelems)(4:6).eq.
'20R')
then 198 elseif(lakon(nelems)(4:5).eq.
'20')
then 202 elseif(lakon(nelems)(4:5).eq.
'10')
then 206 elseif(lakon(nelems)(4:4).eq.
'4')
then 213 elseif(lakon(nelems)(4:4).eq.
'6')
then 221 elseif(lakon(nelems)(4:5).eq.
'15')
then 236 konl(j)=kon(ipkon(nelems)+j)
239 if((nope.eq.20).or.(nope.eq.8))
then 242 xl2(j,m)=co(j,konl(ifaceq(m,jfaces)))+
243 & vold(j,konl(ifaceq(m,jfaces)))
246 elseif((nope.eq.10).or.(nope.eq.4))
then 249 xl2(j,m)=co(j,konl(ifacet(m,jfaces)))+
250 & vold(j,konl(ifacet(m,jfaces)))
253 elseif(nope.eq.15)
then 256 xl2(j,m)=co(j,konl(ifacew2(m,jfaces)))+
257 & vold(j,konl(ifacew2(m,jfaces)))
263 xl2(j,m)=co(j,konl(ifacew1(m,jfaces)))+
264 & vold(j,konl(ifacew1(m,jfaces)))
273 if((lakon(nelems)(4:5).eq.
'8R').or.
274 & ((lakon(nelems)(4:4).eq.
'6').and.(nopes.eq.4)))
then 278 elseif((lakon(nelems)(4:4).eq.
'8').or.
279 & (lakon(nelems)(4:6).eq.
'20R').or.
280 & ((lakon(nelems)(4:5).eq.
'15').and.
281 & (nopes.eq.8)))
then 285 elseif(lakon(nelems)(4:4).eq.
'2')
then 289 elseif((lakon(nelems)(4:5).eq.
'10').or.
290 & ((lakon(nelems)(4:5).eq.
'15').and.
291 & (nopes.eq.6)))
then 295 elseif((lakon(nelems)(4:4).eq.
'4').or.
296 & ((lakon(nelems)(4:4).eq.
'6').and.
297 & (nopes.eq.3)))
then 304 call shape9q(xi,et,xl2,xsj2,xs2,shp2,iflag)
305 elseif(nopes.eq.8)
then 306 call shape8q(xi,et,xl2,xsj2,xs2,shp2,iflag)
307 elseif(nopes.eq.4)
then 308 call shape4q(xi,et,xl2,xsj2,xs2,shp2,iflag)
309 elseif(nopes.eq.6)
then 310 call shape6tri(xi,et,xl2,xsj2,xs2,shp2,iflag)
311 elseif(nopes.eq.7)
then 312 call shape7tri(xi,et,xl2,xsj2,xs2,shp2,iflag)
314 call shape3tri(xi,et,xl2,xsj2,xs2,shp2,iflag)
316 area=area+weight*dsqrt(xsj2(1)**2+xsj2(2)**2+
325 nstart=itietri(1,i)-1
326 n=itietri(2,i)-nstart
327 if(n.lt.kneigh) kneigh=n
340 call dsort(x,nx,n,kflag)
341 call dsort(y,ny,n,kflag)
342 call dsort(z,nz,n,kflag)
344 do j=nslavnode(i)+1,nslavnode(i+1)
345 if(iit.le.0) springarea(2,j)=0.d0
353 index1=iponoels(node)
356 irelslavface=inoels(1,index1)
357 if((itiefac(1,i).le.irelslavface).and.
358 & (irelslavface.le.itiefac(2,i)))
then 359 area=area+areaslav(irelslavface)*
362 index1=inoels(2,index1)
366 p(k)=co(k,node)+vold(k,node)
372 call near3d(xo,yo,zo,x,y,z,nx,ny,nz,p(1),p(2),p(3),
378 itri=neigh(1)+itietri(1,i)-1
385 dist=straight(ll,itri)*p(1)+
386 & straight(ll+1,itri)*p(2)+
387 & straight(ll+2,itri)*p(3)+
388 & straight(ll+3,itri)
395 if(
dist.gt.1.d-3*dsqrt(area))
then 396 itrinew=imastop(l,itri)
397 if(itrinew.eq.0)
then 400 elseif((itrinew.lt.itietri(1,i)).or.
401 & (itrinew.gt.itietri(2,i)))
then 404 elseif(itrinew.eq.itriold)
then 409 call nident(itriangle,itrinew,ntriangle,id)
411 if(itriangle(id).eq.itrinew)
then 416 ntriangle=ntriangle+1
417 if(ntriangle.gt.ntriangle_)
then 421 do k=ntriangle,id+2,-1
422 itriangle(k)=itriangle(k-1)
424 itriangle(id+1)=itrinew
447 nelem=int(koncont(4,itri)/10.d0)
448 jface=koncont(4,itri)-10*nelem
451 if(lakon(nelem)(4:5).eq.
'20')
then 454 elseif(lakon(nelem)(4:4).eq.
'8')
then 457 elseif(lakon(nelem)(4:5).eq.
'10')
then 460 elseif(lakon(nelem)(4:4).eq.
'4')
then 463 elseif(lakon(nelem)(4:5).eq.
'15')
then 471 elseif(lakon(nelem)(4:4).eq.
'6')
then 487 nodef(k)=kon(indexe+ifacet(k,jface))
489 elseif(nface.eq.5)
then 492 nodef(k)=kon(indexe+ifacew1(k,jface))
494 elseif(nope.eq.15)
then 496 nodef(k)=kon(indexe+ifacew2(k,jface))
499 elseif(nface.eq.6)
then 501 nodef(k)=kon(indexe+ifaceq(k,jface))
509 pl(l,k)=co(l,nodef(k))+vold(l,nodef(k))
525 call shape9q(xi,et,pl,xm,xs2,shp2,iflag)
526 elseif(nopes.eq.8)
then 527 call shape8q(xi,et,pl,xm,xs2,shp2,iflag)
528 elseif(nopes.eq.4)
then 529 call shape4q(xi,et,pl,xm,xs2,shp2,iflag)
530 elseif(nopes.eq.6)
then 531 call shape6tri(xi,et,pl,xm,xs2,shp2,iflag)
532 elseif(nopes.eq.7)
then 533 call shape7tri(xi,et,pl,xm,xs2,shp2,iflag)
535 call shape3tri(xi,et,pl,xm,xs2,shp2,iflag)
540 dm=dsqrt(xm(1)*xm(1)+xm(2)*xm(2)+xm(3)*xm(3))
547 clear=al(1)*xn(1)+al(2)*xn(2)+al(3)*xn(3)
548 if((istep.eq.1).and.(iit.lt.0.d0))
then 549 if(clear.lt.0.d0)
then 550 springarea(2,j)=clear
553 if(nmethod.eq.1)
then 554 clear=clear-springarea(2,j)*(1.d0-reltime)
560 if((istep.eq.1).and.(iit.lt.0))
then 566 call nident(ialset(istartset(iset)),node,
567 & iendset(iset)-istartset(iset)+1,id)
569 if(ialset(istartset(iset)+id-1).eq.node)
then 571 co(k,node)=co(k,node)-
572 & clear*straight(12+k,itri)
577 elseif(dabs(tietol(1,i)).ge.2.d0)
then 581 adjust=dabs(tietol(1,i))-2.d0
582 if(clear.le.adjust)
then 584 co(k,node)=co(k,node)-
585 & clear*straight(12+k,itri)
592 if(int(elcon(3,1,imat)).eq.1)
then 602 if(dabs(area).gt.0.d0)
then 603 c0=c0coef*dsqrt(area)
629 if(elcon(6,1,imat).gt.0)
then 634 if(elcon(8,1,imat).gt.0)
then 656 kon(ifree+k)=nodef(k)
663 write(lakon(ne)(8:8),
'(i1)') nopes
667 if((nopes.eq.3).or.(nopes.eq.6))
then 668 if(filab(1)(3:3).eq.
'C')
then 669 write(27,100) setname(1:lenset)
670 100
format(
'*ELEMENT,TYPE=C3D4,ELSET=',a)
671 write(27,*) ne0+indexel,
',',nodef(1),
',',
672 & nodef(2),
',',nodef(3),
',',node
675 if(filab(1)(3:3).eq.
'C')
then 676 write(27,101) setname(1:lenset)
677 101
format(
'*ELEMENT,TYPE=C3D6,ELSET=',a)
678 write(27,*) ne0+indexel,
',',nodef(2),
',',node,
680 & nodef(3),
',',nodef(1),
',',node,
',',nodef(4)
690 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
subroutine isortii(ix, iy, n, kflag)
Definition: isortii.f:6
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