29 . DIST,DMIN,DMAX,NOD_X,NOD_Y,NOD_Z,
30 . AX,AY,AZ,BX,BY,BZ,CX,CY,CZ,DX,DY,DZ)
38#include "implicit_f.inc"
42 my_real ,
INTENT(IN) :: dmin,dmax,nod_x,nod_y,nod_z,
43 . ax,ay,az,bx,by,bz,cx,cy,cz,dx,dy,dz
49 my_real :: ABX,ABY,ABZ,ACX,ACY,ACZ,BCX,BCY,BCZ,CDX,CDY,CDZ,DAX,DAY,DAZ,
50 . ux,uy,uz,vx,vy,vz,wx,wy,wz,qx,qy,qz,qa_x,qa_y,qa_z,qb_x,qb_y,qb_z,
51 . qc_x,qc_y,qc_z,mx,my,mz,mpx,mpy,mpz,
52 . amx,amy,amz,bmx,bmy,bmz,cmx,cmy,cmz,dmx,dmy,dmz,
53 . n1x,n1y,n1z,n2x,n2y,n2z,n3x,n3y,n3z,n4x,n4y,n4z,
54 . sx,sy,sz,d,d1,d2,d3,d4,norm1,a1,a2,norm2,norm3,norm4
57 mx = fourth*(ax + bx + cx + dx)
58 my = fourth*(ay + by + cy + dy)
59 mz = fourth*(az + bz + cz + dz)
72 n1x = amy*abz - amz*aby
73 n1y = amz*abx - amx*abz
74 n1z = amx*aby - amy*abx
75 norm1 = sqrt(n1x*n1x + n1y*n1y + n1z*n1z)
76 d1 = abs(n1x*mpx + n1y*mpy + n1z*mpz) / norm1
84 n2x = bmy*bcz - bmz*bcy
85 n2y = bmz*bcx - bmx*bcz
86 n2z = bmx*bcy - bmy*bcx
87 norm2 = sqrt(n2x*n2x + n2y*n2y + n2z*n2z)
88 d2 = abs(n2x*mpx + n2y*mpy + n2z*mpz) / norm2
96 n3x = cmy*cdz - cmz*cdy
97 n3y = cmz*cdx - cmx*cdz
98 n3z = cmx*cdy - cmy*cdx
99 norm3 = sqrt(n3x*n3x + n3y*n3y + n3z*n3z)
100 d3 = abs(n3x*mpx + n3y*mpy + n3z*mpz) / norm3
108 n4x = dmy*daz - dmz*day
109 n4y = dmz*dax - dmx*daz
110 n4z = dmx*day - dmy*dax
111 norm4 = sqrt(n4x*n4x + n4y*n4y + n4z*n4z)
112 d4 = abs(n4x*mpx + n4y*mpy + n4z*mpz) / norm4
117 IF (dist > dmax .or. dist < dmin)
RETURN
123 qx = nod_x - d1*n1x / norm1
124 qy = nod_y - d1*n1y / norm1
125 qz = nod_z - d1*n1z / norm1
127 sx = (qy - my) * (az - mz) - (qz - mz) * (ay - my)
128 sy = (qz - mz) * (ax - mx) - (qx - mx) * (az - mz)
129 sz = (qx - mx) * (ay - my) - (qy - my) * (ax - mx)
130 a1 = sqrt(sx*sx + sy*sy + sz*sz) * half
131 sx = (by - my) * (qz - mz) - (bz - mz) * (qy - my)
132 sy = (bz - mz) * (qx - mx) - (bx - mx) * (qz - mz)
133 sz = (bx - mx) * (qy - my) - (by - my) * (qx - mx)
134 a2 = sqrt(sx*sx + sy*sy + sz*sz) * half
136 IF (a1 + a2 < half * norm1)
THEN
143 qx = nod_x - d2*n2x / norm2
144 qy = nod_y - d2*n2y / norm2
145 qz = nod_z - d2*n2z / norm2
147 sx = (qy - my) * (bz - mz) - (qz - mz) * (by - my)
149 sz = (qx - mx) * (by - my) - (qy - my) * (bx - mx)
150 a1 = sqrt(sx*sx + sy*sy + sz*sz) * half
151 sx = (cy - my) * (qz - mz) - (cz - mz) * (qy - my)
152 sy = (cz - mz) * (qx - mx) - (cx - mx) * (qz - mz)
153 sz = (cx - mx) * (qy - my) - (cy - my) * (qx - mx)
154 a2 = sqrt(sx*sx + sy*sy + sz*sz) * half
155 IF (a1 + a2 < half * norm2)
THEN
162 qx = nod_x - d3*n3x / norm3
163 qy = nod_y - d3*n3y / norm3
164 qz = nod_z - d3*n3z / norm3
166 sx = (qy - my) * (cz - mz) - (qz - mz) * (cy - my)
167 sy = (qz - mz) * (cx - mx) - (qx - mx) * (cz - mz)
168 sz = (qx - mx) * (cy - my) - (qy - my) * (cx - mx)
169 a1 = sqrt(sx*sx + sy*sy + sz*sz) * half
170 sx = (dy - my) * (qz - mz) - (dz - mz) * (qy - my)
171 sy = (dz - mz) * (qx - mx) - (dx - mx) * (qz - mz)
172 sz = (dx - mx) * (qy - my) - (dy - my) * (qx - mx)
173 a2 = sqrt(sx*sx + sy*sy + sz*sz) * half
174 IF (a1 + a2 < half * norm3)
THEN
181 qx = nod_x - d3*n3x / norm4
182 qy = nod_y - d3*n3y / norm4
183 qz = nod_z - d3*n3z / norm4
185 sx = (qy - my) * (dz - mz) - (qz - mz) * (dy - my)
186 sy = (qz - mz) * (dx - mx) - (qx - mx) * (dz - mz)
187 sz = (qx - mx) * (dy - my) - (qy - my) * (dx - mx)
188 a1 = sqrt(sx*sx + sy*sy + sz*sz) * half
189 sx = (ay - my) * (qz - mz) - (az - mz) * (qy - my)
190 sy = (az - mz) * (qx - mx) - (ax - mx) * (qz - mz)
191 sz = (ax - mx) * (qy - my) - (ay - my) * (qx - mx)
192 a2 = sqrt(sx*sx + sy*sy + sz*sz) * half
193 IF (a1 + a2 < half * norm4)
THEN
202 dist = sqrt(mpx**2 + mpy**2 + mpz**2)
203 d1 = sqrt((nod_x - ax)**2 + (nod_y - ay)**2 + (nod_z - az)**2)
204 d2 = sqrt((nod_x - bx)**2 + (nod_y - by)**2 + (nod_z - bz)**2)
205 d3 = sqrt((nod_x - cx)**2 + (nod_y - cy)**2 + (nod_z - cz)**2)
206 d4 = sqrt((nod_x - dx)**2 + (nod_y - dy)**2 + (nod_z - dz)**2)