33
34
35
36#include "implicit_f.inc"
37
38
39
40#include "mvsiz_p.inc"
41
42
43
44 INTEGER JLT,JLT_NEW,IGAP
45 INTEGER IRECTS(2,*), IRECTM(2,*),CAND_S(*),CAND_M(*),
46 . N1(*),N2(*),M1(*),M2(*)
47 my_real ,
INTENT(IN) :: dgapload
49 . gap,drad,
50 . nx(*),ny(*),nz(*),x(3,*),gap_s(*),gap_m(*), gapv2(*),
51 . gap_s_l(*),gap_m_l(*)
52
53
54
55 INTEGER I
57 . xs12,ys12,zs12,xm12,ym12,zm12,xa,xb,
58 . xs2,xm2,xsm,xs2m2,ys2,ym2,ysm,ys2m2,zs2,zm2,zsm,zs2m2,
59 . xx,yy,zz,als,alm,det,h1s,h2s,h1m,h2m,
60 . gap2,drad2,
61 . pene2(mvsiz)
62
63 gap2=(gap+dgapload)*(gap+dgapload)
64 drad2=drad*drad
65
66 IF(igap==0)THEN
67 DO i=1,jlt
68 gapv2(i)=gap2
69 ENDDO
70 ELSE
71 DO i=1,jlt
72 gapv2(i)=gap_s(cand_s(i))+gap_m(cand_m(i))
73 IF(igap == 3)
74 . gapv2(i)=
min(gap_s_l(cand_s(i))+gap_m_l(cand_m(i)),gapv2(i))+dgapload
75 gapv2(i)=
max(gapv2(i)*gapv2(i),gap2)
76 ENDDO
77 ENDIF
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105 DO i=1,jlt
106 n1(i)=irects(1,cand_s(i))
107 n2(i)=irects(2,cand_s(i))
108 m1(i)=irectm(1,cand_m(i))
109 m2(i)=irectm(2,cand_m(i))
110 xs12 = x(1,n2(i))-x(1,n1(i))
111 ys12 = x(2,n2(i))-x(2,n1(i))
112 zs12 = x(3,n2(i))-x(3,n1(i))
113 xs2 = xs12*xs12 + ys12*ys12 + zs12*zs12
114 xm12 = x(1,m2(i))-x(1,m1(i))
115 ym12 = x(2,m2(i))-x(2,m1(i))
116 zm12 = x(3,m2(i))-x(3,m1(i))
117 xm2 = xm12*xm12 + ym12*ym12 + zm12*zm12
118 xsm = - (xs12*xm12 + ys12*ym12 + zs12*zm12)
119 xs2m2 = x(1,m2(i))-x(1,n2(i))
120 ys2m2 = x(2,m2(i))-x(2,n2(i))
121 zs2m2 = x(3,m2(i))-x(3,n2(i))
122 xa = xs12*xs2m2 + ys12*ys2m2 + zs12*zs2m2
123 xb = -xm12*xs2m2 - ym12*ys2m2 - zm12*zs2m2
124 det = xm2*xs2 - xsm*xsm
126
127 h1m = (xa*xsm-xb*xs2) / det
128
131 h1m=
min(one,
max(zero,h1m))
132 h1s = -(xa + h1m*xsm) / xs2
133 h1s=
min(one,
max(zero,h1s))
134 h1m = -(xb + h1s*xsm) / xm2
135 h1m=
min(one,
max(zero,h1m))
136
137 h2s = one - h1s
138 h2m = one - h1m
139
140
141
142 nx(i) = h1s*x(1,n1(i)) + h2s*x(1,n2(i))
143 . - h1m*x(1,m1(i)) - h2m*x(1,m2(i))
144 ny(i) = h1s*x(2,n1(i)) + h2s*x(2,n2(i))
145 . - h1m*x(2,m1(i)) - h2m*x(2,m2(i))
146 nz(i) = h1s*x(3,n1(i)) + h2s*x(3,n2(i))
147 . - h1m*x(3,m1(i)) - h2m*x(3,m2(i))
148 pene2(i) =
max(gapv2(i),drad2) - nx(i)*nx(i) - ny(i)*ny(i) - nz(i)*nz(i)
149 pene2(i) =
max(zero,pene2(i))
150
151 ENDDO
152 DO i=1,jlt
153 IF(pene2(i)/=zero)THEN
154 jlt_new = jlt_new + 1
155 cand_s(jlt_new) = cand_s(i)
156 cand_m(jlt_new) = cand_m(i)
157 n1(jlt_new) = n1(i)
158 n2(jlt_new) = n2(i)
159 m1(jlt_new) = m1(i)
160 m2(jlt_new) = m2(i)
161 nx(jlt_new) = nx(i)
162 ny(jlt_new) = ny(i)
163 nz(jlt_new) = nz(i)
164 gapv2(jlt_new) = gapv2(i)
165 ENDIF
166 ENDDO
167
168 RETURN