34
35
36
37
39
40
41
42#include "implicit_f.inc"
43
44
45
46#include "mvsiz_p.inc"
47
48
49
50#include "param_c.inc"
51
52
53
54 INTEGER JLT, IGAP0, NEDGE, IGAP
55 INTEGER IRECT(4,*), CAND_S(*), CAND_M(*), LEDGE(NLEDGE,*), ADMSR(4,*), ITAB(*)
57 . drad, marge
58 my_real ,
INTENT(IN) :: dgapload
60 . x(3,*), gape(*), gap_e_l(*), pene(mvsiz)
61 real*4 edg_bisector(3,4,*), vtx_bisector(3,2,*)
62
63
64
65 INTEGER I, IG,N1,N2,M1,M2,NI,L,J, IE, JE, IL, JL
67 . xxs1(mvsiz) ,xxs2(mvsiz) ,xys1(mvsiz) ,xys2(mvsiz) ,xzs1(mvsiz) ,xzs2(mvsiz) ,
68 . xxm1(mvsiz) ,xxm2(mvsiz) ,xym1(mvsiz) ,xym2(mvsiz) ,xzm1(mvsiz) ,xzm2(mvsiz) ,
69 . xs12,ys12,zs12,xm12,ym12,zm12,xa,xb,
70 . xs2,xm2,xsm,xs2m2,ys2,ym2,ysm,ys2m2,zs2,zm2,zsm,zs2m2,
71 . xx,yy,zz,als,alm,det,gap2,
72 . xmax1,ymax1,zmax1,xmax2,ymax2,zmax2,
73 . xmin1,ymin1,zmin1,xmin2,ymin2,zmin2,gapv(mvsiz),
74 . aaa, dx, dy, dz, dd, ex, ey ,ez, nni, ni2, invcos
76 . maxgapv
77
78 DO i=1,jlt
79 ie = cand_m(i)
80
81 IF(cand_s(i) <= nedge) THEN
82 je = cand_s(i)
83 gapv(i)=gape(ie)+gape(je)
84
85 IF(igap0 == 0) THEN
86 gapv(i)=two*gape(ie)+gape(je)
87 ELSE
88 gapv(i)=two*(gape(ie)+gape(je))
89 END IF
90
91 IF(igap == 3)
92 . gapv(i)=
min(gap_e_l(ie)+gap_e_l(je),gapv(i))
93
94 gapv(i)=
max(drad,gapv(i)+dgapload )+marge
95 ENDIF
96 ENDDO
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131 DO i=1,jlt
132 IF(cand_s(i)<=nedge) THEN
133 n1 = ledge(5,cand_s(i))
134 n2 = ledge(6,cand_s(i))
135
136 xxs1(i) = x(1,n1)
137 xys1(i) = x(2,n1)
138 xzs1(i) = x(3,n1)
139 xxs2(i) = x(1,n2)
140 xys2(i) = x(2,n2)
141 xzs2(i) = x(3,n2)
142
143 END IF
144
145 m1 = ledge(5,cand_m(i))
146 m2 = ledge(6,cand_m(i))
147
148 xxm1(i) = x(1,m1)
149 xym1(i) = x(2,m1)
150 xzm1(i) = x(3,m1)
151 xxm2(i) = x(1,m2)
152 xym2(i) = x(2,m2)
153 xzm2(i) = x(3,m2)
154
155 END DO
156
157
158
159
160 DO i=1,jlt
161 xmax1 =
max(xxs1(i),xxs2(i))
162 ymax1 =
max(xys1(i),xys2(i))
163 zmax1 =
max(xzs1(i),xzs2(i))
164 xmax2 =
max(xxm1(i),xxm2(i))
165 ymax2 =
max(xym1(i),xym2(i))
166 zmax2 =
max(xzm1(i),xzm2(i))
167 xmin1 =
min(xxs1(i),xxs2(i))
168 ymin1 =
min(xys1(i),xys2(i))
169 zmin1 =
min(xzs1(i),xzs2(i))
170 xmin2 =
min(xxm1(i),xxm2(i))
171 ymin2 =
min(xym1(i),xym2(i))
172 zmin2 =
min(xzm1(i),xzm2(i))
173 dd =
max(xmin1-xmax2,ymin1-ymax2,zmin1-zmax2,
174 . xmin2-xmax1,ymin2-ymax1,zmin2-zmax1)
175 IF(dd > gapv(i))THEN
176 pene(i) = zero
177 cycle
178 ENDIF
179
180
181
182 xm12 = xxm2(i)-xxm1(i)
183 ym12 = xym2(i)-xym1(i)
184 zm12 = xzm2(i)-xzm1(i)
185 xm2 = xm12*xm12 + ym12*ym12 + zm12*zm12
186
187 xs12 = xxs2(i)-xxs1(i)
188 ys12 = xys2(i)-xys1(i)
189 zs12 = xzs2(i)-xzs1(i)
190 xs2 = xs12*xs12 + ys12*ys12 + zs12*zs12
191 xsm = - (xs12*xm12 + ys12*ym12 + zs12*zm12)
192 xs2m2 = xxm2(i)-xxs2(i)
193 ys2m2 = xym2(i)-xys2(i)
194 zs2m2 = xzm2(i)-xzs2(i)
195
196 xa = xs12*xs2m2 + ys12*ys2m2 + zs12*zs2m2
197 xb = -xm12*xs2m2 - ym12*ys2m2 - zm12*zs2m2
198 det = xm2*xs2 - xsm*xsm
200
201 alm = (xa*xsm-xb*xs2) / det
204 alm=
min(one,
max(zero,alm))
205 als = -(xa + alm*xsm) / xs2
206 als=
min(one,
max(zero,als))
207 alm = -(xb + als*xsm) / xm2
208 alm=
min(one,
max(zero,alm))
209
210
211
212 xx = als*xxs1(i) + (one-als)*xxs2(i)
213 . - alm*xxm1(i) - (one-alm)*xxm2(i)
214 yy = als*xys1(i) + (one-als)*xys2(i)
215 . - alm*xym1(i) - (one-alm)*xym2(i)
216 zz = als*xzs1(i) + (one-als)*xzs2(i)
217 . - alm*xzm1(i) - (one-alm)*xzm2(i)
218
219 gap2=gapv(i)*gapv(i)
220 pene(i) =
max(zero,gap2- xx*xx - yy*yy - zz*zz)
221
222 END DO
223
224 RETURN