30 SUBROUTINE cutcon(ITYP,X0,VN,XYZ0,IXS,D,
31 . NUMTOT,NUMEL,NC,NVOIS,NA,XYZ,AL,NODCUT)
32 use element_mod ,
only : nixs
48#include "implicit_f.inc"
57 . x0(3),vn(3),xyz0(3,*),xyz(3,*),d(3,*),al(*)
58 INTEGER IXS(NIXS,*),NUMTOT,NUMEL,NUMCON,NC(5,*),NVOIS(2,*),NA(*),
63 INTEGER IARETE(2,12),NEWL,NUMNEW,I,J,K,L,I1,I2,N1,N2,N3,KK,
64 . nodel,nvc(2,24),nac(24),nca(24),ncb(24),lmin,kb
67 . unm,distmin,distmax,dist0,tol,dist(8),
68 . xc(24),yc(24),zc(24),alc(24),tet(24),dis,xm,ym,zm,
69 . x1,y1,z1,v1,xi,yi,zi,vi,xi1,yi1,zi1,csi,ssi,tetmin,
70 . x12,y12,z12,x23,y23,z23,v12,x2,y2,z2
71 DATA iarete/1,2,2,3,3,4,4,1,1,5,2,6,3,7,4,8,5,6,6,7,7,8,8,5/
78 dist0=vn(1)*x0(1)+vn(2)*x0(2)+vn(3)*x0(3)
83 x1=abs(xyz0(1,i1)-xyz0(1,i2))+abs(xyz0(2,i1)-xyz0(2,i2))
84 & +abs(xyz0(3,i1)-xyz0(3,i2))
85 209 distmin=
min(distmin,abs(x1))
102 dist(j)=xi*vn(1)+yi*vn(2)+zi*vn(3)
103 dist(j)=dist(j)-dist0
104 distmin=
min(dist(j),distmin)
105 110 distmax=
max(dist(j),distmax)
107 IF(distmin*distmax> zero)goto100
114 IF(dist(n1)*dist(n2)> zero)
GOTO 120
115 x1 = xyz0(1,ixs(n1+1,i))
116 y1 = xyz0(2,ixs(n1+1,i))
117 z1 = xyz0(3,ixs(n1+1,i))
118 x2 = xyz0(1,ixs(n2+1,i))
119 y2 = xyz0(2,ixs(n2+1,i))
120 z2 = xyz0(3,ixs(n2+1,i))
122 x1 =x1 - d(1,ixs(n1+1,i))
123 y1 =y1 - d(2,ixs(n1+1,i))
124 z1 =z1 - d(3,ixs(n1+1,i))
125 x2 =x2 - d(1,ixs(n2+1,i))
126 y2 =y2 - d(2,ixs(n2+1,i))
127 z2 =z2 - d(3,ixs(n2+1,i))
129 IF(abs(dist(n1)-dist(n2))<tol)
THEN
134 nvc(1,nodel)=ixs(n1+1,i)
135 nvc(2,nodel)=ixs(n1+1,i)
141 nvc(1,nodel)=ixs(n2+1,i)
142 nvc(2,nodel)=ixs(n2+1,i)
146 alc(nodel)=dist(n1)/(dist(n1)-dist(n2))
147 nvc(1,nodel)=ixs(n1+1,i)
148 nvc(2,nodel)=ixs(n2+1,i)
149 xc(nodel) = alc(nodel) *x2
151 yc(nodel) = alc(nodel) *y2
153 zc(nodel) = alc(nodel) *z2
166 dis=abs(xc(l)-xc(j))+
182 nvc(1,nac(l))=nvc(1,l)
183 nvc(2,nac(l))=nvc(2,l)
197 xm=xm+xc(k)/float(nodel)
198 ym=ym+yc(k)/float(nodel)
199 130 zm=zm+zc(k)/float(nodel)
204 v1=sqrt(x1**2+y1**2+z1**2)
215 vi=sqrt(xi**2+yi**2+zi**2)
220 csi=x1*xi+y1*yi+z1*zi
227 ssi=xi1*vn(1)+yi1*vn(2)+zi1*vn(3)
230 140 tet(k)=atan2(ssi,csi)
235 IF(tet(l)<tetmin)
THEN
253 IF(k<nodel)n3=nca(k+1)
261 v12=sqrt(x12**2+y12**2+z12**2)*sqrt(x23**2+y23**2+z23**2)
262 xi1=(y12*z23-y23*z12)/v12
263 yi1=(z12*x23-z23*x12)/v12
264 zi1=(x12*y23-x23*y12)/v12
265 ssi=xi1*vn(1)+yi1*vn(2)+zi1*vn(3)
274 ncb(kb)=nca(k)+numnew
279 IF(kb==3.OR.kb==7)
THEN
289 nc(2,newl)= ncb(kk+1)
290 nc(3,newl)= ncb(kk+2)
291 nc(4,newl)= ncb(kk+3)
301 xc(k)=alc(k)*xyz0(1,n2)+(1-alc(k))*xyz0(1,n1)
302 yc(k)=alc(k)*xyz0(2,n2)+(1-alc(k))*xyz0(2,n1)
303 zc(k)=alc(k)*xyz0(3,n2)+(1-alc(k))*xyz0(3,n1)
307 xyz(1,numnew+k)=xc(k)
308 xyz(2,numnew+k)=yc(k)
309 xyz(3,numnew+k)=zc(k)
311 nvois(1,numnew+k)=nvc(1,k)
312 nvois(2,numnew+k)=nvc(2,k)
326 dis=abs(xyz(1,i)-xyz(1,j))+
327 & abs(xyz(2,i)-xyz(2,j))+
328 & abs(xyz(3,i)-xyz(3,j))
342 nvois(1,na(i))=nvois(1,i)
343 nvois(2,na(i))=nvois(2,i)
344 xyz(1,na(i))=xyz(1,i)
345 xyz(2,na(i))=xyz(2,i)
346 xyz(3,na(i))=xyz(3,i)
349 nc(1,k)=na(nc(1,k))+nodcut
350 nc(2,k)=na(nc(2,k))+nodcut
351 nc(3,k)=na(nc(3,k))+nodcut
352 nc(4,k)=na(nc(4,k))+nodcut
363 x2= vn(2)*z1-vn(3)*y1
376 xyz(1,numtot)=x0(1)-x1-x2
377 xyz(2,numtot)=x0(2)-y1-y2
378 xyz(3,numtot)=x0(3)-z1-z2
379 nc(1,1)=numtot+nodcut
384 xyz(1,numtot)=x0(1)+x1-x2
385 xyz(2,numtot)=x0(2)+y1-y2
386 xyz(3,numtot)=x0(3)+z1-z2
387 nc(2,1)=numtot+nodcut
392 xyz(1,numtot)=x0(1)+x1+x2
393 xyz(2,numtot)=x0(2)+y1+y2
394 xyz(3,numtot)=x0(3)+z1+z2
395 nc(3,1)=numtot+nodcut
400 xyz(1,numtot)=x0(1)-x1+x2
401 xyz(2,numtot)=x0(2)-y1+y2
402 xyz(3,numtot)=x0(3)-z1+z2
403 nc(4,1)=numtot+nodcut