28 SUBROUTINE cutcon(ITYP,X0,VN,XYZ0,IXS,D,
29 . NUMTOT,NUMEL,NC,NVOIS,NA,XYZ,AL,NODCUT)
45#include "implicit_f.inc"
54 . x0(3),vn(3),xyz0(3,*),xyz(3,*),d(3,*),al(*)
55 INTEGER IXS(NIXS,*),NUMTOT,NUMEL,NUMCON,NC(5,*),NVOIS(2,*),NA(*),
60 INTEGER IARETE(2,12),NEWL,NUMNEW,I,J,K,L,I1,I2,N1,N2,N3,KK,
61 . nodel,nvc(2,24),nac(24),nca(24),ncb(24),lmin,kb
64 . unm,distmin,distmax,dist0,tol,dist(8),
65 . xc(24),yc(24),zc(24),alc(24),tet(24),dis,xm,ym,zm,
66 . x1,y1,z1,v1,xi,yi,zi,vi,xi1,yi1,zi1,csi,ssi,tetmin,
67 . x12,y12,z12,x23,y23,z23,v12,x2,y2,z2
68 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/
75 dist0=vn(1)*x0(1)+vn(2)*x0(2)+vn(3)*x0(3)
80 x1=abs(xyz0(1,i1)-xyz0(1,i2))+abs(xyz0(2,i1)-xyz0(2,i2))
81 & +abs(xyz0(3,i1)-xyz0(3,i2))
82 209 distmin=
min(distmin,abs(x1))
99 dist(j)=xi*vn(1)+yi*vn(2)+zi*vn(3)
100 dist(j)=dist(j)-dist0
101 distmin=
min(dist(j),distmin)
102 110 distmax=
max(dist(j),distmax)
104 IF(distmin*distmax> zero)goto100
111 IF(dist(n1)*dist(n2)> zero)
GOTO 120
112 x1 = xyz0(1,ixs(n1+1,i))
113 y1 = xyz0(2,ixs(n1+1,i))
114 z1 = xyz0(3,ixs(n1+1,i))
115 x2 = xyz0(1,ixs(n2+1,i))
116 y2 = xyz0(2,ixs(n2+1,i))
117 z2 = xyz0(3,ixs(n2+1,i))
119 x1 =x1 - d(1,ixs(n1+1,i))
120 y1 =y1 - d(2,ixs(n1+1,i))
121 z1 =z1 - d(3,ixs(n1+1,i))
122 x2 =x2 - d(1,ixs(n2+1,i))
123 y2 =y2 - d(2,ixs(n2+1,i))
124 z2 =z2 - d(3,ixs(n2+1,i))
126 IF(abs(dist(n1)-dist(n2))<tol)
THEN
131 nvc(1,nodel)=ixs(n1+1,i)
132 nvc(2,nodel)=ixs(n1+1,i)
138 nvc(1,nodel)=ixs(n2+1,i)
139 nvc(2,nodel)=ixs(n2+1,i)
143 alc(nodel)=dist(n1)/(dist(n1)-dist(n2))
144 nvc(1,nodel)=ixs(n1+1,i)
145 nvc(2,nodel)=ixs(n2+1,i)
146 xc(nodel) = alc(nodel) *x2
148 yc(nodel) = alc(nodel) *y2
150 zc(nodel) = alc(nodel) *z2
163 dis=abs(xc(l)-xc(j))+
179 nvc(1,nac(l))=nvc(1,l)
180 nvc(2,nac(l))=nvc(2,l)
194 xm=xm+xc(k)/float(nodel)
195 ym=ym+yc(k)/float(nodel)
196 130 zm=zm+zc(k)/float(nodel)
201 v1=sqrt(x1**2+y1**2+z1**2)
212 vi=sqrt(xi**2+yi**2+zi**2)
217 csi=x1*xi+y1*yi+z1*zi
224 ssi=xi1*vn(1)+yi1*vn(2)+zi1*vn(3)
227 140 tet(k)=atan2(ssi,csi)
232 IF(tet(l)<tetmin)
THEN
250 IF(k<nodel)n3=nca(k+1)
258 v12=sqrt(x12**2+y12**2+z12**2)*sqrt(x23**2+y23**2+z23**2)
259 xi1=(y12*z23-y23*z12)/v12
260 yi1=(z12*x23-z23*x12)/v12
261 zi1=(x12*y23-x23*y12)/v12
262 ssi=xi1*vn(1)+yi1*vn(2)+zi1*vn(3)
271 ncb(kb)=nca(k)+numnew
276 IF(kb==3.OR.kb==7)
THEN
286 nc(2,newl)= ncb(kk+1)
287 nc(3,newl)= ncb(kk+2)
288 nc(4,newl)= ncb(kk+3)
298 xc(k)=alc(k)*xyz0(1,n2)+(1-alc(k))*xyz0(1,n1)
299 yc(k)=alc(k)*xyz0(2,n2)+(1-alc(k))*xyz0(2,n1)
300 zc(k)=alc(k)*xyz0(3,n2)+(1-alc(k))*xyz0(3,n1)
304 xyz(1,numnew+k)=xc(k)
305 xyz(2,numnew+k)=yc(k)
306 xyz(3,numnew+k)=zc(k)
308 nvois(1,numnew+k)=nvc(1,k)
309 nvois(2,numnew+k)=nvc(2,k)
323 dis=abs(xyz(1,i)-xyz(1,j))+
324 & abs(xyz(2,i)-xyz(2,j))+
325 & abs(xyz(3,i)-xyz(3,j))
339 nvois(1,na(i))=nvois(1,i)
340 nvois(2,na(i))=nvois(2,i)
341 xyz(1,na(i))=xyz(1,i)
342 xyz(2,na(i))=xyz(2,i)
343 xyz(3,na(i))=xyz(3,i)
346 nc(1,k)=na(nc(1,k))+nodcut
347 nc(2,k)=na(nc(2,k))+nodcut
348 nc(3,k)=na(nc(3,k))+nodcut
349 nc(4,k)=na(nc(4,k))+nodcut
360 x2= vn(2)*z1-vn(3)*y1
373 xyz(1,numtot)=x0(1)-x1-x2
374 xyz(2,numtot)=x0(2)-y1-y2
375 xyz(3,numtot)=x0(3)-z1-z2
376 nc(1,1)=numtot+nodcut
381 xyz(1,numtot)=x0(1)+x1-x2
382 xyz(2,numtot)=x0(2)+y1-y2
383 xyz(3,numtot)=x0(3)+z1-z2
384 nc(2,1)=numtot+nodcut
389 xyz(1,numtot)=x0(1)+x1+x2
390 xyz(2,numtot)=x0(2)+y1+y2
391 xyz(3,numtot)=x0(3)+z1+z2
392 nc(3,1)=numtot+nodcut
397 xyz(1,numtot)=x0(1)-x1+x2
398 xyz(2,numtot)=x0(2)-y1+y2
399 xyz(3,numtot)=x0(3)-z1+z2
400 nc(4,1)=numtot+nodcut