31 . NEDGE ,LEDGE ,MARGE ,GAPE ,GAP_E_L ,
32 . IGAP ,X ,IRECT ,PENE ,ADMSR ,
33 . EDG_BISECTOR,VTX_BISECTOR,ITAB,
34 . XREM_EDGE,S1_XREM,S2_XREM,DGAPLOAD)
44#include "implicit_f.inc"
54#include "i25edge_c.inc"
58 INTEGER,
INTENT(IN) :: S1_XREM,S2_XREM
59 my_real,
INTENT(IN) :: XREM_EDGE(S1_XREM,S2_XREM)
60 INTEGER JLT, IGAP0, NEDGE, IGAP
61 INTEGER IRECT(4,*), CAND_S(*), CAND_M(*), LEDGE(NLEDGE,), ADMSR(4,*), ITAB(NUMNOD)
65 . x(3,numnod), gape(*), gap_e_l(*), pene(mvsiz)
66 real*4 edg_bisector(3,4,*), vtx_bisector(3,2,*)
70 INTEGER I, IG,N1,N2,M1,M2,NI,L,J, IE, JE, IL, JL
72 . XXS1(MVSIZ) ,XXS2(MVSIZ) ,XYS1(MVSIZ) ,XYS2(MVSIZ) ,(MVSIZ) ,XZS2(MVSIZ) ,
73 . XXM1(MVSIZ) ,XXM2(MVSIZ) ,XYM1(MVSIZ) ,XYM2(MVSIZ) ,XZM1(MVSIZ) ,XZM2(MVSIZ) ,
74 . xs12,ys12,zs12,xm12,ym12,zm12,xa,xb,
75 . xs2,xm2,xsm,xs2m2,ys2,ym2,ysm,ys2m2,zs2,zm2,zsm,zs2m2,
76 . xx,yy,zz,als,alm,det,gap2,
77 . xmax1,ymax1,zmax1,xmax2,ymax2,zmax2,
78 . xmin1,ymin1,zmin1,xmin2,ymin2,zmin2,gapv(mvsiz),pene_l(mvsiz),vdt(mvsiz),
79 . aaa, dx, dy, dz, dd, ex, ey ,ez, nni, ni2, invcos
87 IF(cand_s(i) <= nedge)
THEN
90 gapv(i)=two*gape(ie)+gape(je)
92 gapv(i)=two*(gape(ie)+gape(je))
95 . gapv(i)=
min(gap_e_l(ie)+gap_e_l(je),gapv(i))
96 gapv(i)=
max(drad,gapv(i)+dgapload)+marge
99 gapv(i)=two*gape(ie)+xrem_edge(e_gap,cand_s(i)-nedge )
101 gapv(i)=two*(gape(ie)+xrem_edge(e_gap,cand_s(i)-nedge ))
104 . gapv(i)=
min(gap_e_l(ie)+xrem_edge(e_gapl,cand_s(i)-nedge),gapv(i))
105 gapv(i)=
max(drad,gapv(i)+dgapload)+marge
137 IF(cand_s(i)<=nedge)
THEN
138 n1 = ledge(5,cand_s(i))
139 n2 = ledge(6,cand_s(i))
148 ni = cand_s(i) - nedge
149 xxs1(i) = xrem_edge(e_x1,ni)
150 xys1(i) = xrem_edge(e_y1,ni)
151 xzs1(i) = xrem_edge(e_z1,ni)
152 xxs2(i) = xrem_edge(e_x2,ni)
153 xys2(i) = xrem_edge(e_y2,ni)
154 xzs2(i) = xrem_edge(e_z2,ni)
157 m1 = ledge(5,cand_m(i))
158 m2 = ledge(6,cand_m(i))
173 xmax1 =
max(xxs1(i),xxs2(i))
174 ymax1 =
max(xys1(i),xys2(i))
175 zmax1 =
max(xzs1(i),xzs2(i))
176 xmax2 =
max(xxm1(i),xxm2(i))
177 ymax2 =
max(xym1(i),xym2(i))
178 zmax2 =
max(xzm1(i),xzm2(i))
179 xmin1 =
min(xxs1(i),xxs2(i))
180 ymin1 =
min(xys1(i),xys2(i))
181 zmin1 =
min(xzs1(i),xzs2(i))
182 xmin2 =
min(xxm1(i),xxm2(i))
183 ymin2 =
min(xym1(i),xym2(i))
184 zmin2 =
min(xzm1(i),xzm2(i))
185 dd =
max(xmin1-xmax2,ymin1-ymax2,zmin1-zmax2,
186 . xmin2-xmax1,ymin2-ymax1,zmin2-zmax1)
194 xm12 = xxm2(i)-xxm1(i)
195 ym12 = xym2(i)-xym1(i)
196 zm12 = xzm2(i)-xzm1(i)
197 xm2 = xm12*xm12 + ym12*ym12 + zm12*zm12
199 xs12 = xxs2(i)-xxs1(i)
200 ys12 = xys2(i)-xys1(i)
201 zs12 = xzs2(i)-xzs1(i)
202 xs2 = xs12*xs12 + ys12*ys12 + zs12*zs12
203 xsm = - (xs12*xm12 + ys12*ym12 + zs12*zm12)
204 xs2m2 = xxm2(i)-xxs2(i)
205 ys2m2 = xym2(i)-xys2(i)
206 zs2m2 = xzm2(i)-xzs2(i)
208 xa = xs12*xs2m2 + ys12*ys2m2 + zs12*zs2m2
209 xb = -xm12*xs2m2 - ym12*ys2m2 - zm12*zs2m2
210 det = xm2*xs2 - xsm*xsm
213 alm = (xa*xsm-xb*xs2) / det
216 alm=
min(one,
max(zero,alm))
217 als = -(xa + alm*xsm) / xs2
218 als=
min(one,
max(zero,als))
219 alm = -(xb + als*xsm) / xm2
220 alm=
min(one,
max(zero,alm))
224 xx = als*xxs1(i) + (one-als)*xxs2(i)
225 . - alm*xxm1(i) - (one-alm)*xxm2(i)
226 yy = als*xys1(i) + (one-als)*xys2(i)
227 . - alm*xym1(i) - (one-alm)*xym2(i)
228 zz = als*xzs1(i) + (one-als)*xzs2(i)
229 . - alm*xzm1(i) - (one-alm)*xzm2(i)
232 pene(i) =
max(zero,gap2- xx*xx - yy*yy - zz*zz)
subroutine i25pen3_edg(jlt, cand_s, cand_m, drad, igap0, nedge, ledge, marge, gape, gap_e_l, igap, x, irect, pene, admsr, edg_bisector, vtx_bisector, itab, xrem_edge, s1_xrem, s2_xrem, dgapload)