29 SUBROUTINE inint0_8(X ,IRECT ,NSEG ,LCSEG ,NSV ,
30 1 MSR ,ILOC ,NMN ,NSN ,NRT , NUMNOD )
38#include "implicit_f.inc"
42 INTEGER,
INTENT(IN) :: NMN, NSN, NRT, NUMNOD
43 INTEGER,
INTENT(IN) :: IRECT(4,*), NSEG(*), NSV(*), MSR(*)
44 INTEGER,
INTENT(OUT) :: LCSEG(*), ILOC(*)
49 INTEGER II, I, JJ, J, K, L, N, SEG1
51 . cms, dms,xmax_m,ymax_m,zmax_m,xmax_s,ymax_s,zmax_s,
52 . xmin_m,ymin_m,zmin_m,xmin_s,ymin_s,zmin_s,
53 . xmin,ymin,zmin,xmax,
ymax,zmax,xs,ys,zs,dist,mindist,
55 INTEGER IIX(NSN),IIY(NSN),IIZ(NSN)
56 INTEGER LAST_NOD(NSN),NEXT_NOD(NSN)
57 INTEGER NBX,NBY,NBZ,NE,FOUND
58 INTEGER FIRST,LAST,IX1,IY1,IZ1,NN,IX,IY,IZ,IX2,IY2,IZ2
59 INTEGER,
DIMENSION(:,:,:),
ALLOCATABLE :: VOXEL
60 INTEGER,
DIMENSION(:),
ALLOCATABLE :: KNOD2SEG
61 INTEGER,
DIMENSION(:),
ALLOCATABLE :: NOD2SEG
79 xmax_m=
max(xmax_m,x(1,j))
80 ymax_m=
max(ymax_m,x(2,j))
81 zmax_m=
max(zmax_m,x(3,j))
82 xmin_m=
min(xmin_m,x(1,j))
84 zmin_m=
min(zmin_m,x(3,j))
96 xmin_s=
min(xmin_s,x(1,j))
97 ymin_s=
min(ymin_s,x(2,j))
98 zmin_s=
min(zmin_s,x(3,j))
99 xmax_s=
max(xmax_s,x(1,j))
100 ymax_s=
max(ymax_s,x(2,j))
101 zmax_s=
max(zmax_s,x(3,j))
103 xmin=
min(xmin_m,xmin_s)
104 ymin=
min(ymin_m,ymin_s)
105 zmin=
min(zmin_m,zmin_s)
106 xmax=
max(xmax_m,xmax_s)
108 zmax=
max(zmax_m,zmax_s)
112 . ((xmax-xmin)*(
ymax-ymin)
113 . +(
ymax-ymin)*(zmax-zmin)
114 . +(zmax-zmin)*(xmax-xmin)))
116 aaa = three_over_4*aaa
118 nbx = nint(aaa*(xmax-xmin))
119 nby = nint(aaa*(
ymax-ymin))
120 nbz = nint(aaa*(zmax-zmin))
127 ALLOCATE(voxel(nbx,nby,nbz))
135 iix(i)=int(nbx*(x(1,j)-xmin)/(xmax-xmin))
136 iiy(i)=int(nby*(x(2,j)-ymin)/(
ymax-ymin))
139 iix(i)=
max(1,
min(nbx,iix(i)))
140 iiy(i)=
max(1,
min(nby,iiy(i)))
141 iiz(i)=
max(1,
min(nbz,iiz(i)))
143 first = voxel(iix(i),iiy(i),iiz(i))
146 voxel(iix(i),iiy(i),iiz(i)) = i
149 ELSEIF(last_nod(first) == 0)
THEN
158 last = last_nod(first)
172 ix1=int(nbx*(x1-xmin)/(xmax-xmin))
173 iy1=int(nby*(y1-ymin)/(
ymax-ymin))
174 iz1=int(nbz*(z1-zmin)/(zmax-zmin))
197 dist = (x1-xs)**2+(y1-ys)**2+(z1-zs)**2
198 IF( dist < mindist )
THEN
226 ix1=int(nbx*(x1-mindist-xmin)/(xmax-xmin))
227 iy1=int(nby*(y1-mindist-ymin)/(
ymax-ymin))
228 iz1=int(nbz*(z1-mindist-zmin)/(zmax-zmin))
234 ix2=int(nbx*(x1+mindist-xmin)/(xmax-xmin))
235 iy2=int(nby*(y1+mindist-ymin)/(
ymax-ymin))
236 iz2=int(nbz*(z1+mindist-zmin)/(zmax-zmin))
253 dist = (x1-xs)**2+(y1-ys)**2+(z1-zs)**2
254 IF( dist < mindist )
THEN
268 ALLOCATE(knod2seg(numnod+1))
269 ALLOCATE(nod2seg(4*nrt))
271 knod2seg(1:numnod+1) = 0
275 knod2seg(n) = knod2seg(n) + 1
280 knod2seg(i+1) = knod2seg(i+1) + knod2seg(i)
284 knod2seg(n+1)=knod2seg(n)
291 knod2seg(n) = knod2seg(n) + 1
292 nod2seg(knod2seg(n)) = i
297 knod2seg(n+1)=knod2seg(n)
306 DO j=knod2seg(k)+1,knod2seg(k+1)
309 IF (irect(l,seg1) /= k)
THEN
subroutine inint0_8(x, irect, nseg, lcseg, nsv, msr, iloc, nmn, nsn, nrt, numnod)