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