35
36
37
38
39
41
42
43
44#include "implicit_f.inc"
45
46
47
48#include "mvsiz_p.inc"
49
50
51
52#include "com04_c.inc"
53#include "param_c.inc"
54#include "i25edge_c.inc"
55
56
57
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,NEDGE), ADMSR(4,*), ITAB(NUMNOD)
62 my_real ,
INTENT(IN) :: dgapload ,drad
64 . marge,
65 . x(3,numnod), gape(*), gap_e_l(*), pene(mvsiz)
66 real*4 edg_bisector(3,4,*), vtx_bisector(3,2,*)
67
68
69
70 INTEGER I, IG,N1,N2,M1,M2,NI,L,J, IE, JE, IL, JL
72 . xxs1(mvsiz) ,xxs2(mvsiz) ,xys1(mvsiz) ,xys2(mvsiz) ,xzs1(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
81 . maxgapv
82
83
84 DO i=1,jlt
85 ie = cand_m(i)
86
87 IF(cand_s(i) <= nedge) THEN
88 je = cand_s(i)
89 IF(igap0 == 0) THEN
90 gapv(i)=two*gape(ie)+gape(je)
91 ELSE
92 gapv(i)=two*(gape(ie)+gape(je))
93 END IF
94 IF(igap == 3)
95 . gapv(i)=
min(gap_e_l(ie)+gap_e_l(je),gapv(i))
96 gapv(i)=
max(drad,gapv(i)+dgapload)+marge
97 ELSE
98 IF(igap0 == 0) THEN
99 gapv(i)=two*gape(ie)+xrem_edge(e_gap,cand_s(i)-nedge )
100 ELSE
101 gapv(i)=two*(gape(ie)+xrem_edge(e_gap,cand_s(i)-nedge ))
102 END IF
103 IF(igap == 3)
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
106 ENDIF
107 ENDDO
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136 DO i=1,jlt
137 IF(cand_s(i)<=nedge) THEN
138 n1 = ledge(5,cand_s(i))
139 n2 = ledge(6,cand_s(i))
140
141 xxs1(i) = x(1,n1)
142 xys1(i) = x(2,n1)
143 xzs1(i) = x(3,n1)
144 xxs2(i) = x(1,n2)
145 xys2(i) = x(2,n2)
146 xzs2(i) = x(3,n2)
147 ELSE
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)
155 END IF
156
157 m1 = ledge(5,cand_m(i))
158 m2 = ledge(6,cand_m(i))
159
160 xxm1(i) = x(1,m1)
161 xym1(i) = x(2,m1)
162 xzm1(i) = x(3,m1)
163 xxm2(i) = x(1,m2)
164 xym2(i) = x(2,m2)
165 xzm2(i) = x(3,m2)
166 END DO
167
168
169
170
171
172 DO i=1,jlt
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)
187 IF(dd > gapv(i))THEN
188 pene(i) = zero
189 cycle
190 ENDIF
191
192
193
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
198
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)
207
208 xa = xs12*xs2m2 + ys12*ys2m2 + zs12*zs2m2
209 xb = -xm12*xs2m2 - ym12*ys2m2 - zm12*zs2m2
210 det = xm2*xs2 - xsm*xsm
212
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))
221
222
223
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)
230
231 gap2=gapv(i)*gapv(i)
232 pene(i) =
max(zero,gap2- xx*xx - yy*yy - zz*zz)
233
234 END DO
235
236 RETURN