53
54
55
57
58
59
60#include "implicit_f.inc"
61
62
63
64#include "mvsiz_p.inc"
65#include "task_c.inc"
66#include "comlock.inc"
67
68
69
70 INTEGER JLT, NIN, NSN, INACTI,
71 . (*),CAND_E(*),NSVG(MVSIZ), ISHEL(MVSIZ)
72 INTEGER IX1(MVSIZ), IX2(MVSIZ), IX3(MVSIZ), IX4(MVSIZ),
73 . INTTH,MSEGLO(*),IRTLM(4,NSN), SUBTRIA(MVSIZ),
74 . MVOISA(MVSIZ,4), MVOISB(MVSIZ,4),IBOUNDA(4,MVSIZ),IBOUNDB(4,MVSIZ)
75 my_real ,
INTENT(IN) :: dgapload ,drad
77 . time_s(2,nsn), gaps(*), gapm(*),
78 . pene_old(5,*),stif_old(2,nsn), penmin, eps0, marge
80 . xx(mvsiz,5),yy(mvsiz,5),zz(mvsiz,5),
81 . xi(mvsiz), yi(mvsiz), zi(mvsiz), stif(mvsiz),
82 . vx1(mvsiz),vx2(mvsiz),vx3(mvsiz),vx4(mvsiz),vy1(mvsiz),
83 . vy2(mvsiz),vy3(mvsiz),vy4(mvsiz),vz1(mvsiz),vz2(mvsiz),
84 . vz3(mvsiz),vz4(mvsiz),vxi(mvsiz),vyi(mvsiz),vzi(mvsiz),
85 . nax(mvsiz,5), nay(mvsiz,5), naz(mvsiz,5),
86 . nbx(mvsiz,5), nby(mvsiz,5), nbz(mvsiz,5),
87 . pent(mvsiz),
88 . lbs(mvsiz), lcs(mvsiz), lbp(mvsiz,4), lcp(mvsiz,4),
89 . gap_nm(4,mvsiz), gapmxl(mvsiz)
90 INTEGER IRECT(4,*),ITAB(*),ICONT_I(*), FAR(MVSIZ)
91 real*4 vtx_bisector(3,2,*)
92
93
94
95#include "com08_c.inc"
96
97
98
99 INTEGER I, J, K, L, N, IT, I1, I2, ITRIA(2,4),
100 . N4N, MGLOB, ITPERM(4), IA, IB, IB1, IB2, IB3, IBX, IX, IY, IZ
101 INTEGER I4N(MVSIZ), INTERSECTA(MVSIZ), INTERSECTB(MVSIZ),
102 . INTERSECA, INTERSECB, IKEEP,
103 . FARA(MVSIZ,4), FARB(MVSIZ,4), INGAPA(MVSIZ,4), INGAPB(MVSIZ,4),
104 . SUBTRIB(MVSIZ), SUBTRIX(MVSIZ), ICONT_R(MVSIZ)
106 . xij(mvsiz,4), xi0v(mvsiz), xi5, xoi5,
107 . yij(mvsiz,4), yi0v(mvsiz), yi5, yoi5,
108 . zij(mvsiz,4), zi0v(mvsiz), zi5, zoi5,
109 . x51, x52, x53, x54,
110 . y51, y52, y53, y54,
111 . z51, z52, z53, z54,
112 . xo1, xo2, xo3, xo4, xo5, xoi,
113 . yo1, yo2, yo3, yo4, yo5, yoi,
114 . zo1, zo2, zo3, zo4, zo5, zoi,
115 . vo12, vo23, vo34, vo41, pene, penax, penbx
117 . gap_mm(mvsiz), gap, gap21,gap22,gap23,gap24,
118 . xp, yp, zp,
119 . dx, dy, dz, lx, ld, lax, lbx, lcx, dmin, pmin,
120 . dd(mvsiz,4),
121 . lap, hla, hlb(mvsiz,4), hlc(mvsiz,4),
122 . lap1,lap2,lap3,lap4,
123 . al(mvsiz,4)
125 . unp,zerom,eps,unpt,zeromt,aaa,
126 . pena(mvsiz,4), penb(mvsiz,4), bb(mvsiz,4),
127 . sx1,sx2,sx3,sx4,sy1,sy2,sy3,sy4,sz1,sz2,sz3,sz4,
128 . x0n(mvsiz,4), y0n(mvsiz,4), z0n(mvsiz,4),
129 . xn(mvsiz,4),yn(mvsiz,4),zn(mvsiz,4),hh,
130 . lb(mvsiz,4), lc(mvsiz,4),
131 . sida(mvsiz,4), sidb(mvsiz,4),
132 . x12, y12, z12,
133 . px, py, pz, pp, p1, p2, xh, yh, zh, d1, d2, d3, vx, vy, vz,
134 . dist(mvsiz),ll,nn,pn,
135 . v12,v23,v34,v41,
136 . nx1, nx2, nx3, nx4,
137 . ny1, ny2, ny3, ny4,
138 . nz1, nz2, nz3, nz4,
139 . sox125,sox235,sox345,sox415,
140 . soy125,soy235,soy345,soy415,
141 . soz125,soz235,soz345,soz415,
142 . n1x,n1y,n1z,n1n,
143 . n2x,n2y,n2z,n2n,eps02,tole
144 DATA itria/1,2,2,3,3,4,4,1/,
145 . itperm/1,4,3,2/
146 LOGICAL :: ANY_TRIANGLE
147
148C
149 unp = one + em4
150 zerom = zero - em4
151 eps = (two+half)/hundred
152 unpt = one + eps
153 zeromt = zero - eps
154 eps02=em3*em3
155
156
157 fara(1:jlt,1:4) = 0
158 farb(1:jlt,1:4) = 0
159 pena(1:jlt,1:4) = zero
160 penb(1:jlt,1:4) = zero
161 dd(1:jlt,1:4) = zero
162
163 any_triangle = .false.
164 DO i=1,jlt
165 IF(ix3(i)==ix4(i)) THEN
166 any_triangle = .true.
167 ENDIF
168 ENDDO
169
170 DO i=1,jlt
171
172
173
174
175
176 x0n(i,1) = xx(i,1) - xx(i,5)
177 y0n(i,1) = yy(i,1) - yy(i,5)
178 z0n(i,1) = zz(i,1) - zz(i,5)
179
180 x0n(i,2) = xx(i,2) - xx(i,5)
181 y0n(i,2) = yy(i,2) - yy(i,5)
182 z0n(i,2) = zz(i,2) - zz(i,5)
183
184 x0n(i,3) = xx(i,3) - xx(i,5)
185 y0n(i,3) = yy(i,3) - yy(i,5)
186 z0n(i,3) = zz(i,3) - zz(i,5)
187
188 x0n(i,4) = xx(i,4) - xx(i,5)
189 y0n(i,4) = yy(i,4) - yy(i,5)
190 z0n(i,4) = zz(i,4) - zz(i,5)
191
192 gap_mm(i)=fourth*(gap_nm(1,i)+gap_nm(2,i)+gap_nm(3,i)+gap_nm(4,i))
193 ENDDO
194
195 IF (any_triangle) THEN
196 DO i=1,jlt
197 IF(ix3(i)==ix4(i)) THEN
198 gap_mm(i)=gap_nm(3,i)
199 END IF
200 ENDDO
201 ENDIF
202
203
204
205
206
207
208 DO i=1,jlt
209
210
211
212 xn(i,1) = y0n(i,1)*z0n(i,2) - z0n(i,1)*y0n(i,2)
213 yn(i,1) = z0n(i,1)*x0n(i,2) - x0n(i,1)*z0n(i,2)
214 zn(i,1) = x0n(i,1)*y0n(i,2) - y0n(i,1)*x0n(i,2)
215
216 xn(i,2) = y0n(i,2)*z0n(i,3) - z0n(i,2)*y0n(i,3)
217 yn(i,2) = z0n(i,2)*x0n(i,3) - x0n(i,2)*z0n(i,3)
218 zn(i,2) = x0n(i,2)*y0n(i,3) - y0n(i,2)*x0n(i,3)
219
220 xn(i,3) = y0n(i,3)*z0n(i,4) - z0n(i,3)*y0n(i,4)
221 yn(i,3) = z0n(i,3)*x0n(i,4) - x0n(i,3)*z0n(i,4)
222 zn(i,3) = x0n(i,3)*y0n(i,4) - y0n(i,3)*x0n(i,4)
223
224 xn(i,4) = y0n(i,4)*z0n(i,1) - z0n(i,4)*y0n(i,1)
225 yn(i,4) = z0n(i,4)*x0n(i,1) - x0n(i,4)*z0n(i,1)
226 zn(i,4) = x0n(i,4)*y0n(i,1) - y0n(i,4)*x0n(i,1)
227
228 ENDDO
229
230
231
232
233
234 intersecta(1:jlt) = 0
235 intersectb(1:jlt) = 0
236
237 ingapa(1:jlt,1:4) = 0
238 ingapb(1:jlt,1:4) = 0
239
240 icont_r(1:jlt) = 0
241
242 DO i=1,jlt
243
244
245 xi5 = xx(i,5) - xi(i)
246 yi5 = yy(i,5) - yi(i)
247 zi5 = zz(i,5) - zi(i)
248
249 v12 = xn(i,1)*xi5 + yn(i,1)*yi5 + zn(i,1)*zi5
250 v23 = xn(i,2)*xi5 + yn(i,2)*yi5 + zn(i,2)*zi5
251 v34 = xn(i,3)*xi5 + yn(i,3)*yi5 + zn(i,3)*zi5
252 v41 = xn(i,4)*xi5 + yn(i,4)*yi5 + zn(i,4)*zi5
253
254 IF(ishel(i)==0)THEN
255 IF(v12 < zero .and. v23 < zero .and.
256 . v34 < zero .and. v41 < zero ) THEN
257
258 cycle
259 ENDIF
260 END IF
261
262
263
264
265
266
267 xo1 = xx(i,1) - dt1*vx1(i)
268 yo1 = yy(i,1) - dt1*vy1(i)
269 zo1 = zz(i,1) - dt1*vz1(i)
270
271 xo2 = xx(i,2) - dt1*vx2(i)
272 yo2 = yy(i,2) - dt1*vy2(i)
273 zo2 = zz(i,2) - dt1*vz2(i)
274
275 xo3 = xx(i,3) - dt1*vx3(i)
276 yo3 = yy(i,3) - dt1*vy3(i)
277 zo3 = zz(i,3) - dt1*vz3(i)
278
279 xo4 = xx(i,4) - dt1*vx4(i)
280 yo4 = yy(i,4) - dt1*vy4(i)
281 zo4 = zz(i,4) - dt1*vz4(i)
282
283 xoi = xi(i) - dt1*vxi(i)
284 yoi = yi(i) - dt1*vyi(i)
285 zoi = zi(i) - dt1*vzi(i)
286
287 IF(ix3(i) /= ix4(i))THEN
288 xo5 = fourth*(xo1+xo2+xo3+xo4)
289 yo5 = fourth*(yo1+yo2+yo3+yo4)
290 zo5 = fourth*(zo1+zo2+zo3+zo4)
291 ELSE
292 xo5 = xo3
293 yo5 = yo3
294 zo5 = zo3
295 ENDIF
296
297
298
299 x51 = xo1 - xo5
300 y51 = yo1 - yo5
301 z51 = zo1 - zo5
302
303 x52 = xo2 - xo5
304 y52 = yo2 - yo5
305 z52 = zo2 - zo5
306
307 x53 = xo3 - xo5
308 y53 = yo3 - yo5
309 z53 = zo3 - zo5
310
311 x54 = xo4 - xo5
312 y54 = yo4 - yo5
313 z54 = zo4 - zo5
314
315 xoi5 = xo5 - xoi
316 yoi5 = yo5 - yoi
317 zoi5 = zo5 - zoi
318
319 sox125 = y51*z52 - z51*y52
320 soy125 = z51*x52 - x51*z52
321 soz125 = x51*y52 - y51*x52
322 vo12 = sox125*xoi5 + soy125*yoi5 + soz125*zoi5
323
324 sox235 = y52*z53 - z52*y53
325 soy235 = z52*x53 - x52*z53
326 soz235 = x52*y53 - y52*x53
327 vo23 = sox235*xoi5 + soy235*yoi5 + soz235*zoi5
328
329 sox345 = y53*z54 - z53*y54
330 soy345 = z53*x54 - x53*z54
331 soz345 = x53*y54 - y53*x54
332 vo34 = sox345*xoi5 + soy345*yoi5 + soz345*zoi5
333
334 sox415 = y54*z51 - z54*y51
335 soy415 = z54*x51 - x54*z51
336 soz415 = x54*y51 - y54*x51
337 vo41 = sox415*xoi5 + soy415*yoi5 + soz415*zoi5
338
339
340
341
342 IF(ishel(i)==0)THEN
344 1 ix3(i) ,ix4(i),interseca,
345 1 v12 ,v23 ,v34 ,v41 ,
346 2 vo12 ,vo23 ,vo34 ,vo41 ,xx(i,1),
347 3 yy(i,1) ,zz(i,1),xx(i,2),yy(i,2),zz(i,2),
348 4 xx(i,3) ,yy(i,3),zz(i,3),xx(i,4),yy(i,4),
349 5 zz(i,4) ,xx(i,5),yy(i,5),zz(i,5),
350 6 vxi(i) ,vyi(i) ,vzi(i) ,xo1 ,xo2 ,
351 7 xo3 ,xo4 ,xo5 ,yo1 ,yo2 ,
352 8 yo3 ,yo4 ,yo5 ,zo1 ,zo2 ,
353 9 zo3 ,zo4 ,zo5 ,xi(i) ,yi(i) ,
354 a zi(i) ,xoi ,yoi ,zoi ,zerom ,
355 b unp ,zeromt,unpt )
356
357 ikeep = 1
358 n = cand_n(i)
359 IF(n <= nsn) THEN
360 IF(icont_i(n) < 0) ikeep = 0
361 ELSE
363 ENDIF
364
365 IF(ikeep == 1.AND.interseca == 0)THEN
367 1 ix3(i) ,ix4(i) , interseca,
368 1 v12 ,v23 ,v34 ,v41 ,
369 2 vo12 ,vo23 ,vo34 ,vo41 ,xx(i,1),
370 3 yy(i,1) ,zz(i,1),xx(i,2),yy(i,2),zz(i,2),
371 4 xx(i,3) ,yy(i,3),zz(i,3),xx(i,4),yy(i,4),
372 5 zz(i,4) ,xx(i,5),yy(i,5),zz(i,5),
373 6 xoi ,yoi ,zoi ,xo1 ,xo2 ,
374 7 xo3 ,xo4 ,xo5 ,yo1 ,yo2 ,
375 8 yo3 ,yo4 ,yo5 ,zo1 ,zo2 ,
376 9 zo3 ,zo4 ,zo5 ,xi(i) ,yi(i) ,
377 a zi(i) ,zerom , unp )
378 icont_r(i) = interseca
379 ENDIF
380
381 intersecta(i)=interseca
382 ELSE
384 1 ix3(i) ,ix4(i),interseca,intersecb,
385 1 v12 ,v23 ,v34 ,v41 ,
386 2 vo12 ,vo23 ,vo34 ,vo41
387 3 yy(i,1) ,zz(i,1),xx(i,2),yy(i,2),zz(i,2),
388 4 xx(i,3) ,yy(i,3),zz(i,3),xx(i,4),yy(i,4),
389 5 zz(i,4) ,xx(i,5),yy(i,5),zz(i,5),
390 6 vxi(i) ,vyi(i) ,vzi(i) ,xo1 ,xo2 ,
391 7 xo3 ,xo4 ,xo5 ,yo1 ,yo2 ,
392 8 yo3 ,yo4 ,yo5 ,zo1 ,zo2 ,
393 9 zo3 ,zo4 ,zo5 ,xi(i) ,yi(i) ,
394 a zi(i) ,xoi ,yoi ,zoi ,zerom ,
395 b unp ,zeromt,unpt )
396 intersecta(i)=interseca
397 intersectb(i)=intersecb
398 END IF
399
400 ENDDO
401
402
403 DO i=1,jlt
404
405
406
407 xi0v(i) = xx(i,5) - xi(i)
408 yi0v(i) = yy(i,5) - yi(i)
409 zi0v(i) = zz(i,5) - zi(i)
410
411 xij(i,1) = xx(i,1) - xi(i)
412 yij(i,1) = yy(i,1) - yi(i)
413 zij(i,1) = zz(i,1) - zi(i)
414
415 xij(i,2) = xx(i,2) - xi(i)
416 yij(i,2) = yy(i,2) - yi(i)
417 zij(i,2) = zz(i,2) - zi(i)
418
419 xij(i,3) = xx(i,3) - xi(i)
420 yij(i,3) = yy(i,3) - yi(i)
421 zij(i,3) = zz(i,3) - zi(i)
422
423 xij(i,4) = xx(i,4) - xi(i)
424 yij(i,4) = yy(i,4) - yi(i)
425 zij(i,4) = zz(i,4) - zi(i)
426
427 sx1 = yi0v(i)*zij(i,1) - zi0v(i)*yij(i,1)
428 sy1 = zi0v(i)*xij(i,1) - xi0v(i)*zij(i,1)
429 sz1 = xi0v(i)*yij(i,1) - yi0v(i)*xij(i,1)
430
431 sx2 = yi0v(i)*zij(i,2) - zi0v(i)*yij(i,2)
432 sy2 = zi0v(i)*xij(i,2) - xi0v(i)*zij(i,2)
433 sz2 = xi0v(i)*yij(i,2) - yi0v(i)*xij(i,2)
434
435 sx3 = yi0v(i)*zij(i,3) - zi0v(i)*yij(i,3)
436 sy3 = zi0v(i)*xij(i,3) - xi0v(i)*zij(i,3)
437 sz3 = xi0v(i)*yij(i,3) - yi0v(i)*xij(i,3)
438
439 sx4 = yi0v(i)*zij(i,4) - zi0v(i)*yij(i,4)
440 sy4 = zi0v(i)*xij(i,4) - xi0v(i)*zij(i,4)
441 sz4 = xi0v(i)*yij(i,4) - yi0v(i)*xij(i,4)
442
443 nn = one/
444 .
max(em30,sqrt(xn(i,1)*xn(i,1)+ yn(i,1)*yn(i,1)+ zn(i,1)*zn(i,1)))
445 xn(i,1)=xn(i,1)*nn
446 yn(i,1)=yn(i,1)*nn
447 zn(i,1)=zn(i,1)*nn
448 lb(i,1) = -(xn(i,1)*sx2 + yn(i,1)*sy2 + zn(i,1)*sz2)*nn
449 lc(i,1) = (xn(i,1)*sx1 + yn(i,1)*sy1 + zn(i,1)*sz1)*nn
450
451 nn = one/
452 .
max(em30,sqrt(xn(i,2)*xn(i,2)+ yn(i,2)*yn(i,2)+ zn(i,2)*zn(i,2)))
453 xn(i,2)=xn(i,2)*nn
454 yn(i,2)=yn(i,2)*nn
455 zn(i,2)=zn(i,2)*nn
456 lb(i,2) = -(xn(i,2)*sx3 + yn(i,2)*sy3 + zn(i,2)*sz3)*nn
457 lc(i,2) = (xn(i,2)*sx2 + yn(i,2)*sy2 + zn(i,2)*sz2)*nn
458
459 nn = one/
460 .
max(em30,sqrt(xn(i,3)*xn(i,3)+ yn(i,3)*yn(i,3)+ zn(i,3)*zn(i,3)))
461 xn(i,3)=xn(i,3)*nn
462 yn(i,3)=yn(i,3)*nn
463 zn(i,3)=zn(i,3)*nn
464 lb(i,3) = -(xn(i,3)*sx4 + yn(i,3)*sy4 + zn(i,3)*sz4)*nn
465 lc(i,3) = (xn(i,3)*sx3 + yn(i,3)*sy3 + zn(i,3)*sz3)*nn
466
467 nn = one/
468 .
max(em30,sqrt(xn(i,4)*xn(i,4)+ yn(i,4)*yn(i,4)+ zn(i,4)*zn(i,4)))
469 xn(i,4)=xn(i,4)*nn
470 yn(i,4)=yn(i,4)*nn
471 zn(i,4)=zn(i,4)*nn
472 lb(i,4) = -(xn(i,4)*sx1 + yn(i,4)*sy1 + zn(i,4)*sz1)*nn
473 lc(i,4) = (xn(i,4)*sx4 + yn(i,4)*sy4 + zn(i,4)*sz4)*nn
474
475 END DO
476
477
478
479 DO i=1,jlt
480
481
482
483 aaa = one/
max(em30,x0n(i,1)*x0n(i,1)+y0n(i,1)*y0n(i,1)+z0n(i,1)*z0n(i,1))
484 hlc(i,1) = lc(i,1)*abs(lc(i,1))*aaa
485 hlb(i,4) = lb(i,4)*abs(lb(i,4))*aaa
486 al(i,1) = -(xi0v(i)*x0n(i,1)+yi0v(i)*y0n(i,1)+zi0v(i)*z0n(i,1))*aaa
487 al(i,1) =
max(zero,
min(one,al(i,1)))
488 aaa = one/
max(em30,x0n(i,2)*x0n(i,2)+y0n(i,2)*y0n(i,2)+z0n(i,2)*z0n(i,2))
489 hlc(i,2) = lc(i,2)*abs(lc(i,2))*aaa
490 hlb(i,1) = lb(i,1)*abs(lb(i,1))*aaa
491 al(i,2) = -(xi0v(i)*x0n(i,2)+yi0v(i)*y0n(i,2)+zi0v(i)*z0n(i,2))*aaa
492 al(i,2) =
max(zero,
min(one,al(i,2)))
493 aaa = one/
max(em30,x0n(i,3)*x0n(i,3)+y0n(i,3)*y0n(i,3)+z0n(i,3)*z0n(i,3))
494 hlc(i,3) = lc(i,3)*abs(lc(i,3))*aaa
495 hlb(i,2) = lb(i,2)*abs(lb(i,2))*aaa
496 al(i,3) = -(xi0v(i)*x0n(i,3)+yi0v(i)*y0n(i,3)+zi0v(i)*z0n(i,3))*aaa
497 al(i,3) =
max(zero,
min(one,al(i,3)))
498 aaa = one/
max(em30,x0n(i,4)*x0n(i,4)+y0n(i,4)*y0n(i,4)+z0n(i,4)*z0n(i,4))
499 hlc(i,4) = lc(i,4)*abs(lc(i,4))*aaa
500 hlb(i,3) = lb(i,3)*abs(lb(i,3))*aaa
501 al(i,4) = -(xi0v(i)*x0n(i,4)+yi0v(i)*y0n(i,4)+zi0v(i)*z0n(i,4))*aaa
502 al(i,4) =
max(zero,
min(one,al(i,4)))
503
504 END DO
505
506 DO i=1,jlt
507
508 IF(lb(i,1) < -em03 .OR. lc(i,1) < -em03 .OR.
509 . lb(i,1)+lc(i,1) > one+em03) THEN
510 fara(i,1)=1
511 farb(i,1)=1
512 END IF
513 x12 = xx(i,2) - xx(i,1)
514 y12 = yy(i,2) - yy(i,1)
515 z12 = zz(i,2) - zz(i,1)
516 lbp(i,1) = lb(i,1)
517 lcp(i,1) = lc(i,1)
518 lap = one-lbp(i,1)-lcp(i,1)
519 aaa = one /
max(em20,x12*x12+y12*y12+z12*z12)
520 hla= lap*abs(lap) * aaa
521 IF(lap<zero.AND.
522 + hla<=hlb(i,1).AND.hla<=hlc(i,1))THEN
523 lbp(i,1) = (xij(i,2)*x12+yij(i,2)*y12+zij(i,2)*z12) * aaa
524 lbp(i,1) =
max(zero,
min(one,lbp(i,1)))
525 lcp(i,1) = one - lbp(i,1)
526 ELSEIF(lbp(i,1)<zero.AND.
527 + hlb(i,1)<=hlc(i,1).AND.hlb(i,1)<=hla)THEN
528 lbp(i,1) = zero
529 lcp(i,1) = al(i,2)
530 ELSEIF(lcp(i,1)<zero.AND.
531 + hlc(i,1)<=hla.AND.hlc(i,1)<=hlb(i,1))THEN
532 lcp(i,1) = zero
533 lbp(i,1) = al(i,1)
534 ENDIF
535
536 IF(lb(i,2) < -em03 .OR. lc(i,2) < -em03 .OR.
537 . lb(i,2)+lc(i,2) > one+em03) THEN
538 fara(i,2)=1
539 farb(i,2)=1
540 ENDIF
541 x12 = xx(i,3) - xx(i,2)
542 y12 = yy(i,3) - yy(i,2)
543 z12 = zz(i,3) - zz(i,2)
544 lbp(i,2) = lb(i,2)
545 lcp(i,2) = lc(i,2)
546 lap = one-lbp(i,2)-lcp(i,2)
547 aaa = one /
max(em20,x12*x12+y12*y12+z12*z12)
548 hla= lap*abs(lap) * aaa
549 IF(lap<zero.AND.
550 + hla<=hlb(i,2).AND.hla<=hlc(i,2))THEN
551 lbp(i,2) = (xij(i,3)*x12+yij(i,3)*y12+zij(i,3)*z12) * aaa
552 lbp(i,2) =
max(zero,
min(one,lbp(i,2)))
553 lcp(i,2) = one - lbp(i,2)
554 ELSEIF(lbp(i,2)<zero.AND.
555 + hlb(i,2)<=hlc(i,2).AND.hlb(i,2)<=hla)THEN
556 lbp(i,2) = zero
557 lcp(i,2) = al(i,3)
558 ELSEIF(lcp(i,2)<zero.AND.
559 + hlc(i,2)<=hla.AND.hlc(i,2)<=hlb(i,2))THEN
560 lcp(i,2) = zero
561 lbp(i,2) = al(i,2)
562 END IF
563
564 IF(lb(i,3) < -em03 .OR. lc(i,3) < -em03 .OR.
565 . lb(i,3)+lc(i,3) > one+em03) THEN
566 fara(i,3)=1
567 farb(i,3)=1
568 END IF
569 x12 = xx(i,4) - xx(i,3)
570 y12 = yy(i,4) - yy(i,3)
571 z12 = zz(i,4) - zz(i,3)
572 lbp(i,3) = lb(i,3)
573 lcp(i,3) = lc(i,3)
574 lap = one-lbp(i,3)-lcp(i,3)
575 aaa = one /
max(em20,x12*x12+y12*y12+z12*z12)
576 hla= lap*abs(lap) * aaa
577 IF(lap<zero.AND.
578 + hla<=hlb(i,3).AND.hla<=hlc(i,3))THEN
579 lbp(i,3) = (xij(i,4)*x12+yij(i,4)*y12+zij(i,4)*z12) * aaa
580 lbp(i,3) =
max(zero,
min(one,lbp(i,3)))
581 lcp(i,3) = one - lbp(i,3)
582 ELSEIF(lbp(i,3)<zero.AND.
583 + hlb(i,3)<=hlc(i,3).AND.hlb(i,3)<=hla)THEN
584 lbp(i,3) = zero
585 lcp(i,3) = al(i,4)
586 ELSEIF(lcp(i,3)<zero.AND.
587 + hlc(i,3)<=hla.AND.hlc(i,3)<=hlb(i,3))THEN
588 lcp(i,3) = zero
589 lbp(i,3) = al(i,3)
590 ENDIF
591
592 IF(lb(i,4) < -em03 .OR. lc(i,4) < -em03 .OR.
593 . lb(i,4)+lc(i,4) > one+em03) THEN
594 fara(i,4)=1
595 farb(i,4)=1
596 END IF
597 x12 = xx(i,1) - xx(i,4)
598 y12 = yy(i,1) - yy(i,4)
599 z12 = zz(i,1) - zz(i,4)
600 lbp(i,4) = lb(i,4)
601 lcp(i,4) = lc(i,4)
602 lap = one-lbp(i,4)-lcp(i,4)
603 aaa = one /
max(em20,x12*x12+y12*y12+z12*z12)
604 hla= lap*abs(lap) * aaa
605 IF(lap<zero.AND.
606 + hla<=hlb(i,4).AND.hla<=hlc(i,4))THEN
607 lbp(i,4) = (xij(i,1)*x12+yij(i,1)*y12+zij(i,1)*z12) * aaa
608 lbp(i,4) =
max(zero,
min(one,lbp(i,4)))
609 lcp(i,4) = one - lbp(i,4)
610 ELSEIF(lbp(i,4)<zero.AND.
611 + hlb(i,4)<=hlc(i,4).AND.hlb(i,4)<=hla)THEN
612 lbp(i,4) = zero
613 lcp(i,4) = al(i,1)
614 ELSEIF(lcp(i,4)<zero.AND.
615 + hlc(i,4)<=hla.AND.hlc(i,4)<=hlb(i,4))THEN
616 lcp(i,4) = zero
617 lbp(i,4) = al(i,4)
618 ENDIF
619 ENDDO
620
621
622 DO i = 1,jlt
623
624 lap1 = one-lbp(i,1)-lcp(i,1)
625 xp =lap1*xx(i,5)+lbp(i,1)*xx(i,1) + lcp(i,1)*xx(i,2)
626 yp =lap1*yy(i,5)+lbp(i,1)*yy(i,1) + lcp(i,1)*yy(i,2)
627 zp =lap1*zz(i,5)+lbp(i,1)*zz(i,1) + lcp(i,1)*zz(i,2)
628 dx =xi(i)-xp
629 dy =yi(i)-yp
630 dz =zi(i)-zp
631 dd(i,1) =dx*dx+dy*dy+dz*dz
632
633 lap2 = one-lbp(i,2)-lcp(i,2)
634 xp =lap2*xx(i,5)+lbp(i,2)*xx(i,2) + lcp(i,2)*xx(i,3)
635 yp =lap2*yy(i,5)+lbp(i,2)*yy(i,2) + lcp(i,2)*yy(i,3)
636 zp =lap2*zz(i,5)+lbp(i,2)*zz(i,2) + lcp(i,2)*zz(i,3)
637 dx =xi(i)-xp
638 dy =yi(i)-yp
639 dz =zi(i)-zp
640 dd(i,2) =dx*dx+dy*dy+dz*dz
641
642 lap3 = one-lbp(i,3)-lcp(i,3)
643 xp =lap3*xx(i,5)+lbp(i,3)*xx(i,3) + lcp(i,3)*xx(i,4)
644 yp =lap3*yy(i,5)+lbp(i,3)*yy(i,3) + lcp(i,3)*yy(i,4)
645 zp =lap3*zz(i,5)+lbp(i,3)*zz(i,3) + lcp(i,3)*zz(i,4)
646 dx =xi(i)-xp
647 dy =yi(i)-yp
648 dz =zi(i)-zp
649 dd(i,3) =dx*dx+dy*dy+dz*dz
650
651 lap4 = one-lbp(i,4)-lcp(i,4)
652 xp =lap4*xx(i,5)+lbp(i,4)*xx(i,4) + lcp(i,4)*xx(i,1)
653 yp =lap4*yy(i,5)+lbp(i,4)*yy(i,4) + lcp(i,4)*yy(i,1)
654 zp =lap4*zz(i,5)+lbp(i,4)*zz(i,4) + lcp(i,4)*zz(i,1)
655 dx =xi(i)-xp
656 dy =yi(i)-yp
657 dz =zi(i)-zp
658 dd(i,4) =dx*dx+dy*dy+dz*dz
659
660
661 gap =
min(
max(drad,gaps(i)+lap1*gap_mm(i)+lbp(i,1)*gap_nm(1,i)+lcp(i,1)*gap_nm(2,i)+dgapload),
662 .
max(drad,gapmxl(i)+dgapload))
663 gap21 = gap**2
664 bb(i,1) =((xx(i,5)-xi(i))*xn(i,1)+(yy(i,5)-yi(i))*yn(i,1)+(zz(i,5)-zi(i))*zn(i,1))
665
666 gap =
min(
max(drad,gaps(i)+lap2*gap_mm(i)+lbp(i,2)*gap_nm(2,i)+lcp(i,2)*gap_nm(3,i)+dgapload),
667 .
max(drad,gapmxl(i)+dgapload))
668 gap22 =gap**2
669 bb(i,2) =((xx(i,5)-xi(i))*xn(i,2)+(yy(i,5)-yi(i))*yn(i,2)+(zz(i,5)-zi(i))*zn(i,2))
670
671 gap =
min(
max(drad,gaps(i)+lap3*gap_mm(i)+lbp(i,3)*gap_nm(3,i)+lcp(i,3)*gap_nm(4,i)+dgapload),
672 .
max(drad,gapmxl(i)+dgapload))
673 gap23 =gap**2
674 bb(i,3) =((xx(i,5)-xi(i))*xn(i,3)+(yy(i,5)-yi
675
676 gap =
min(
max(drad,gaps(i)+lap4*gap_mm(i)+lbp(i,4)*gap_nm(4,i)+lcp(i,4)*gap_nm(1,i)+dgapload),
677 .
max(drad,gapmxl(i)+dgapload))
678 gap24 =gap**2
679 bb(i,4) =((xx(i,5)-xi(i))*xn(i,4)+(yy(i,5)-yi(i))*yn(i,4)+(zz(i,5)-zi(i))*zn(i,4))
680
681 IF(dd(i,1) <=THEN
682 IF(bb(i,1) <= zero .AND. intersecta(i) /= 1)THEN
683 ingapa(i,1)=1
684 END IF
685 IF(bb(i,1) >= zero .AND. intersectb(i) /= 1)THEN
686 ingapb(i,1)=1
687 END IF
688 ENDIF
689 IF(dd(i,2) <= gap22) THEN
690 IF(bb(i,2) <= zero .AND. intersecta(i) /= 1)THEN
691 ingapa(i,2)=1
692 END IF
693 IF(bb(i,2) >= zero .AND. intersectb(i) /= 1)THEN
694 ingapb(i,2)=1
695 END IF
696 ENDIF
697 IF(dd(i,3) <= gap23) THEN
698 IF(bb(i,3) <= zero .AND. intersecta(i) /= 1)THEN
699 ingapa(i,3)=1
700 END IF
701 IF(bb(i,3) >= zero .AND. intersectb(i) /= 1)THEN
702 ingapb(i,3)=1
703 END IF
704 ENDIF
705 IF(dd(i,4) <= gap24) THEN
706 IF(bb(i,4) <= zero .AND. intersecta(i) /= 1)THEN
707 ingapa(i,4)=1
708 END IF
709 IF(bb(i,4) >= zero .AND. intersectb(i) /= 1)THEN
710 ingapb(i,4)=1
711 END IF
712 END IF
713
714 END DO
715
716
717
718 subtria(1:jlt)=0
719 subtrib(1:jlt)=0
720 subtrix(1:jlt)=0
721 DO i=1,jlt
722
723 IF(stif(i) <= zero)cycle
724
725 IF(ix3(i)/=ix4(i))THEN
726
727 dmin
728 ld=ep20
729 DO it=1,4
730 IF(dd(i,it) <= onep03*dmin)THEN
731 lbx = lb(i,it)
732 lcx = lc(i,it)
733 lax = one-lb(i,it)-lc(i,it)
734
735
736 IF(lbx >= zero .AND. lcx >= zero)THEN
737 lx=zero
738 ELSE
739
740 lx =
max(zero,dd(i,it)-bb(i,it)*bb(i,it))
741 END IF
742
743 IF(lx < ld) THEN
744 subtrix(i)= it
745 ld = lx
746 END IF
747 END IF
748 END DO
749
750
751 it=subtrix(i)
752 IF(it > 0) THEN
753 IF(intersecta(i)/=0.OR.ingapa(i,it)/=0)subtria(i
754 IF (ishel(i) /= 0)THEN
755 IF(intersectb(i)/=0.OR.ingapb(i,it)/=0)subtrib(i)=it
756 END IF
757 ENDIF
758 ELSE
759
760 IF(intersecta(i)/=0.OR.ingapa(i,1)/=0)THEN
761 subtria(i)= 1
762 END IF
763
764 IF (ishel(i) /= 0)THEN
765 IF(intersectb(i)/=0.OR.ingapb(i,1)/=0)THEN
766 subtrib(i)= 1
767 END IF
768 END IF
769
770 END IF
771
772 END DO
773
774
775
776#include "vectorize.inc"
777 DO i =1,jlt
778
779
780
781 it=subtria(i)
782 IF(it==0)cycle
783
784 i1=itria(1,it)
785 i2=itria(2,it)
786
787 lap = one-lbp(i,it)-lcp(i,it)
788 gap =
min(
max(drad,gaps(i)+lap*gap_mm(i)+lbp(i,it)*gap_nm(i1,i)+lcp(i,it)*gap_nm(i2,i))+dgapload,
789 .
max(drad,gapmxl(i)+dgapload))
790
791 IF(bb(i,it) > zero)THEN
792
793
794 pena(i,it)=
max(zero,gap+bb(i,it))
795 ELSE
796 pena(i,it)=
max(zero,gap-sqrt(dd(i,it)))
797 END IF
798
799
800 IF(icont_r(i) >0)THEN
801 aaa =
max(em30,x0n(i,it)*x0n(i,1)+y0n(i,it)*y0n(i,it)+z0n(i,it)*z0n(i,it))
802 tole =eps02*aaa
803 IF (gap >zero) tole =
min(tole,gap*gap)
804 IF(pena(i,it)*pena(i,it) > tole) THEN
805 pena(i,it) = zero
806 END IF
808
809
810 ENDDO
811
812
813
814#include "vectorize.inc"
815 DO i =1,jlt
816
817
818
819 it=subtria(i)
820 IF(it==0)cycle
821
822 IF(pena(i,it)==zero) cycle
823
824 i1=itria(1,it)
825 i2=itria(2,it)
826
827 xh=xi(i)+bb(i,it)*xn(i,it)
828 yh=yi(i)+bb(i,it)*yn(i,it)
829 zh=zi(i)+bb(i,it)*zn(i,it)
830
831 IF(ix3(i) /= ix4(i))THEN
832
833 ib1=ibounda(i1,i)
834 ib2=ibounda(i2,i)
835 IF(mvoisa(i,it)==0)THEN
836
837 IF( (xh-xx(i,i1))* nax(i,it)+
838 . (yh-yy(i,i1))* nay(i,it)+
839 . (zh-zz(i,i1))* naz(i,it) >= gaps(i)) fara(i,it) =3
840
841 ELSEIF((ib1 /= 0 .AND. ib2 == 0).OR.
842 . (ib2 /= 0 .AND. ib1 == 0))THEN
843
845
847 IF(ib1/=0)THEN
848 ix =i1
849 ELSEIF(ib2/=0)THEN
850 ix =i2
851 END IF
852
853 xh=xi(i)+bb(i,it)*xn(i,it)
854 yh=yi(i)+bb(i,it)*yn(i,it)
855 zh=zi(i)+bb(i,it)*zn(i,it)
856
857 IF(vtx_bisector(1,1,ibx)/=zero.OR.
858 . vtx_bisector(2,1,ibx)/=zero.OR.
859 . vtx_bisector(3,1,ibx)/=zero.OR.
860 . vtx_bisector(1,2,ibx)/=zero.OR.
861 . vtx_bisector(2,2,ibx)/=zero.OR.
862 . vtx_bisector(3,2,ibx)/=zero)THEN
863 p1 = (xh-xx(i,ix))* vtx_bisector(1,1,ibx)+
864 . (yh-yy(i,ix))* vtx_bisector(2,1,ibx)+
865 . (zh-zz(i,ix))* vtx_bisector(3,1,ibx)
866 p2 = (xh-xx(i,ix))* vtx_bisector(1,2,ibx)+
867 . (yh-yy(i,ix))* vtx_bisector(2,2,ibx)+
868 . (zh-zz(i,ix))* vtx_bisector(3,2,ibx)
869 IF(p1 >= gaps(i) .AND. p2 >= gaps(i)) fara(i,it) =3
870 ELSE
871 vx = x0n(i,ix)
872 vy = y0n(i,ix)
873 vz = z0n(i,ix)
874 nn = one/
max(em20,sqrt(vx*vx+vy*vy+vz*vz))
875 pn = ((xh-xx(i,ix))*vx+(yh-yy(i,ix))*vy+(zh-zz(i,ix))*vz
876 IF(pn >= gaps(i)) fara(i,it) =3
877 END IF
878
879 END IF
880
881
882 IF(ingapa(i,it) == 1 .AND. (fara(i,it)==1 .OR. bb(i,it) <= zero))THEN
883
884
885 x12=xx(i,i2)-xx(i,i1)
886 y12=yy(i,i2)-yy(i,i1)
887 z12=zz(i,i2)-zz(i,i1)
888
889
890 px = z12*nay(i,it)-y12*naz(i,it)
891 py = x12*naz(i,it)-z12*nax(i,it)
892 pz = y12*nax(i,it)-x12*nay(i,it)
893 pp = px*px+py*py+pz*pz
894
895 ll = xij(i,i1)*xij(i,i1)+yij(i,i1)*yij(i,i1)+zij(i,i1)*zij(i,i1)
896
897 sida(i,it)=-(xij(i,i1)*px+yij(i,i1)*py+zij(i,i1)*pz)*sqrt(one/
max(em30,ll*pp))
898 IF(sida(i,it) < -zep01) fara(i,it) =2
899
900 END IF
901 ELSE
902 ib1=ibounda(1,i)
903 ib2=ibounda(2,i)
904 ib3=ibounda(3,i)
905
906 d1=(xh-xx(i,1))* nax(i,1)+
907 . (yh-yy(i,1))* nay(i,1)+
908 . (zh-zz(i,1))* naz(i,1)
909 d2=(xh-xx(i,2))* nax(i,2)+
910 . (yh-yy(i,2))* nay(i,2)+
911 . (zh-zz(i,2))* naz(i,2)
912 d3=(xh-xx(i,3))* nax(i,4)+
913 . (yh-yy(i,3))* nay(i,4)+
914 . (zh-zz(i,3))* naz(i,4)
915
916 IF( (mvoisa(i,1) == 0 .AND. d1 >= gaps(i)).OR.
917 . (mvoisa(i,2) == 0 .AND. d2 >= gaps(i)).OR.
918 . (mvoisa(i,4) == 0 .AND. d3 >= gaps(i)) )THEN
919
920 fara(i,it) =3
921
922 ELSEIF((ib1/=0 .AND. ib2==0 .AND. ib3==0).OR.
923 . (ib2/=0 .AND. ib3==0 .AND. ib1==0).OR.
924 . (ib3/=0 .AND. ib1==0 .AND. ib2==0))THEN
925
927 IF(ib1/=0)THEN
928 ix =1
929 iy =2
930 iz =3
931 ELSEIF(ib2/=0)THEN
932 ix =2
933 iy =3
934 iz =1
935 ELSEIF(ib3/=0)THEN
936 ix =3
937 iy =1
938 iz =2
939 END IF
940
941 IF(vtx_bisector(1,1,ibx)/=zero.OR.
942 . vtx_bisector(2,1,ibx)/=zero.OR.
943 . vtx_bisector(3,1,ibx)/=zero.OR.
944 . vtx_bisector(1,2,ibx)/=zero.OR.
945 . vtx_bisector(2,2,ibx)/=zero.OR.
946 . vtx_bisector(3,2,ibx)/=zero)THEN
947 p1 = (xh-xx(i,ix))* vtx_bisector(1,1,ibx)+
948 . (yh-yy(i,ix))* vtx_bisector(2,1,ibx)+
949 . (zh-zz(i,ix))* vtx_bisector(3,1,ibx)
950 p2 = (xh-xx(i,ix))* vtx_bisector(1,2,ibx)+
951 . (yh-yy(i,ix))* vtx_bisector(2,2,ibx)+
952 . (zh-zz(i,ix))* vtx_bisector(3,2,ibx)
953 IF(p1 >= gaps(i) .AND. p2 >= gaps(i)) fara(i,it) =3
954 ELSE
955 vx = two*xx(i,ix)-(xx(i,iy)+xx(i,iz))
956 vy = two*yy(i,ix)-(yy(i,iy)+yy(i,iz))
957 vz = two*zz(i,ix)-(zz(i,iy)+zz(i,iz))
958 nn = one/
max(em20,sqrt(vx*vx+vy*vy+vz*vz))
959 pn = ((xh-xx(i,ix))*vx+(yh-yy(i,ix))*vy+(zh-zz(i,ix))*vz)*nn
960 IF(pn >= gaps(i)) fara(i,it) =3
961 END IF
962
963 END IF
964
965 IF(ingapa(i,it) == 1 .AND. (fara(i,it)==1 .OR. bb(i,it) <= zero))THEN
966
967
968
969 IF( mvoisa(i,1) /= 0 )THEN
970
971 x12=xx(i,2)-xx(i,1)
972 y12=yy(i,2)-yy(i,1)
973 z12=zz(i,2)-zz(i,1)
974
975
976 px = z12*nay(i,1)-y12*naz(i,1)
977 py = x12*naz(i,1)-z12*nax(i,1)
978 pz = y12*nax(i,1)-x12*nay(i,1)
979 pp = px*px+py*py+pz*pz
980
981 ll = xij(i,1)*xij(i,1)+yij(i,1)*yij(i,1)+zij(i,1)*zij(i,1)
982
983 sida(i,1)=-(xij(i,1)*px+yij(i,1)*py+zij(i,1)*pz)*sqrt(one/
max(em30,ll*pp))
984 IF(sida(i,1) < -zep01) fara(i,it) =2
985
986 END IF
987
988 IF( mvoisa(i,2) /= 0 )THEN
989
990
991
992 x12=xx(i,3)-xx(i,2)
993 y12=yy(i,3)-yy(i,2)
994 z12=zz(i,3)-zz(i,2)
995
996
997 px = z12*nay(i,2)-y12*naz(i,2)
998 py = x12*naz(i,2)-z12*nax(i,2)
999 pz = y12*nax(i,2)-x12*nay(i,2)
1000 pp = px*px+py*py+pz*pz
1001
1002 ll = xij(i,2)*xij(i,2)+yij(i,2)*yij(i,2)+zij(i,2)*zij(i,2)
1003
1004 sida(i,2)=-(xij(i,2)*px+yij(i,2)*py+zij(i,2)*pz)*sqrt(one/
max(em30,ll*pp))
1005 IF(sida(i,2) < -zep01) fara(i,it) =2
1006
1007 END IF
1008
1009 IF( mvoisa(i,4) /= 0 )THEN
1010
1011
1012 x12=xx(i,1)-xx(i,3)
1013 y12=yy(i,1)-yy(i,3)
1014 z12=zz(i,1)-zz(i,3)
1015
1016
1017 px = z12*nay(i,4)-y12*naz(i,4)
1018 py = x12*naz(i,4)-z12*nax(i,4)
1019 pz = y12*nax(i,4)-x12*nay(i,4)
1020 pp = px*px+py*py+pz*pz
1021
1022 ll = xij(i,3)*xij(i,3)+yij(i,3)*yij(i,3)+zij(i,3)*zij(i,3)
1023
1024 sida(i,4)=-(xij(i,3)*px+yij(i,3)*py+zij(i,3)*pz)*sqrt(one/
max(em30,ll*pp))
1025 IF(sida(i,4) < -zep01) fara(i,it) =2
1026
1027 END IF
1028 END IF
1029 END IF
1030
1031 IF(fara(i,it)==2 .AND. intersecta(i)==0) pena(i,it)=zero
1032 IF(fara(i,it)==3) pena(i,it)=zero
1033
1034 ENDDO
1035
1036
1037
1038#include "vectorize.inc"
1039 DO i =1,jlt
1040
1041
1042
1043 it=subtrib(i)
1044 IF(it==0)cycle
1045
1046 i1=itria(1,it)
1047 i2=itria(2,it)
1048
1049 lap = one-lbp(i,it)-lcp(i,it)
1050 gap =
min(
max(drad,gaps(i)+lap*gap_mm(i)+lbp(i,it)*gap_nm(i1,i)+lcp(i,it)*gap_nm(i2,i)+dgapload),
1051 .
max(drad,gapmxl(i)+dgapload))
1052
1053 IF(bb(i,it) < zero)THEN
1054
1055
1056 penb(i,it)=
max(zero,gap-bb(i,it))
1057 ELSE
1058 penb(i,it)=
max(zero,gap-sqrt(dd(i,it)))
1059 END IF
1060
1061 ENDDO
1062
1063
1064
1065#include "vectorize.inc"
1066 DO i =1,jlt
1067
1068
1069
1070 it=subtrib(i)
1071 IF(it==0)cycle
1072
1073 IF(penb(i,it)==zero) cycle
1074
1075 i1=itria(1,it)
1076 i2=itria(2,it)
1077
1078 xh=xi(i)+bb(i,it)*xn(i,it)
1079 yh=yi(i)+bb(i,it)*yn(i,it)
1080 zh=zi(i)+bb(i,it)*zn(i,it)
1081
1082 IF(ix3(i) /= ix4(i))THEN
1083
1084
1085 ib1=iboundb(i1,i)
1086 ib2=iboundb(i2,i)
1087 IF(mvoisb(i,it)==0)THEN
1088
1089 IF( (xh-xx(i,i1))* nbx(i,it)+
1090 . (yh-yy(i,i1))* nby(i,it)+
1091 . (zh-zz(i,i1))* nbz(i,it) >= gaps(i)) farb(i,it) =3
1092
1093 ELSEIF((ib1 /= 0 .AND. ib2 == 0).OR.
1094 . (ib2 /= 0 .AND. ib1 == 0))THEN
1095
1097 IF(ib1/=0)THEN
1098 ix =i1
1099 ELSEIF(ib2/=0)THEN
1100 ix =i2
1101 END IF
1102
1103 xh=xi(i)+bb(i,it)*xn(i,it)
1104 yh=yi(i)+bb(i,it)*yn(i,it)
1105 zh=zi(i)+bb(i,it)*zn(i,it)
1106
1107 IF(vtx_bisector(1,1,ibx)/=zero.OR.
1108 . vtx_bisector(2,1,ibx)/=zero.OR.
1109 . vtx_bisector(3,1,ibx)/=zero.OR.
1110 . vtx_bisector(1,2,ibx)/=zero.OR.
1111 . vtx_bisector(2,2,ibx)/=zero.OR.
1112 . vtx_bisector(3,2,ibx)/=zero)THEN
1113 p1 = (xh-xx(i,ix))* vtx_bisector(1,1,ibx)+
1114 . (yh-yy(i,ix))* vtx_bisector(2,1,ibx)+
1115 . (zh-zz(i,ix))* vtx_bisector(3,1,ibx)
1116 p2 = (xh-xx(i,ix))* vtx_bisector(1,2,ibx)+
1117 . (yh-yy(i,ix))* vtx_bisector(2,2,ibx)+
1118 . (zh-zz(i,ix))* vtx_bisector(3,2,ibx)
1119 IF(p1 >= gaps(i) .AND. p2 >= gaps(i)) farb(i,it) =3
1120 ELSE
1121 vx = x0n(i,ix)
1122 vy = y0n(i,ix)
1123 vz = z0n(i,ix)
1124 nn = one/
max(em20,sqrt(vx*vx+vy*vy+vz*vz))
1125 pn = ((xh-xx(i,ix))*vx+(yh-yy(i,ix))*vy+(zh-zz(i,ix))*vz)*nn
1126 IF(pn >= gaps(i)) farb(i,it) =3
1127 END IF
1128
1129 END IF
1130
1131
1132 IF(ingapb(i,it) == 1 .AND. (farb(i,it)==1 .OR. bb(i,it) >= zero))THEN
1133
1134
1135
1136 x12=xx(i,i2)-xx(i,i1)
1137 y12=yy(i,i2)-yy(i,i1)
1138 z12=zz(i,i2)-zz(i,i1)
1139
1140
1141 px = z12*nby(i,it)-y12*nbz(i,it)
1142 py = x12*nbz(i,it)-z12*nbx(i,it)
1143 pz = y12*nbx(i,it)-x12*nby(i,it)
1144 pp = px*px+py*py+pz*pz
1145
1146 ll = xij(i,i1)*xij(i,i1)+yij(i,i1)*yij(i,i1)+zij(i,i1)*zij(i,i1)
1147
1148 sidb(i,it)= (xij(i,i1)*px+yij(i,i1)*py+zij(i,i1)*pz)*sqrt(one/
max(em30,ll*pp))
1149 IF(sidb(i,it) < -zep01) farb(i,it) =2
1150
1151 END IF
1152 ELSE
1153 ib1=iboundb(1,i)
1154 ib2=iboundb(2,i)
1155 ib3=iboundb(3,i)
1156
1157 d1=(xh-xx(i,1))* nbx(i,1)+
1158 . (yh-yy(i,1))* nby(i,1)+
1159 . (zh-zz(i,1))* nbz(i,1)
1160 d2=(xh-xx(i,2))* nbx(i,2)+
1161 . (yh-yy(i,2))* nby(i,2)+
1162 . (zh-zz(i,2))* nbz(i,2)
1163 d3=(xh-xx(i,3))* nbx(i,4)+
1164 . (yh-yy(i,3))* nby(i,4)+
1165 . (zh-zz(i,3))* nbz(i,4)
1166
1167 IF( (mvoisb(i,1) == 0 .AND. d1 >= gaps(i)).OR.
1168 . (mvoisb(i,2) == 0 .AND. d2 >= gaps(i)).OR.
1169 . (mvoisb(i,4) == 0 .AND. d3 >= gaps(i)) )THEN
1170
1171 farb(i,it) =3
1172
1173 ELSEIF((ib1/=0 .AND. ib2==0 .AND. ib3==0).OR.
1174 . (ib2/=0 .AND. ib3==0 .AND. ib1==0).OR.
1175 . (ib3/=0 .AND. ib1==0 .AND. ib2==0))THEN
1176
1177 ibx=
max(ib1,ib2,ib3)
1178 IF(ib1/=0)THEN
1179 ix =1
1180 iy =2
1181 iz =3
1182 ELSEIF(ib2/=0)THEN
1183 ix =2
1184 iy =3
1185 iz =1
1186 ELSEIF(ib3/=0)THEN
1187 ix =3
1188 iy =1
1189 iz =2
1190 END IF
1191
1192 IF(vtx_bisector(1,1,ibx)/=zero.OR.
1193 . vtx_bisector(2,1,ibx)/=zero.OR.
1194 . vtx_bisector(3,1,ibx)/=zero.OR.
1195 . vtx_bisector(1,2,ibx)/=zero.OR.
1196 . vtx_bisector(2,2,ibx)/=zero.OR.
1197 . vtx_bisector(3,2,ibx)/=zero)THEN
1198 p1 = (xh-xx(i,ix))* vtx_bisector(1,1,ibx)+
1199 . (yh-yy(i,ix))* vtx_bisector(2,1,ibx)+
1200 . (zh-zz(i,ix))* vtx_bisector(3,1,ibx)
1201 p2 = (xh-xx(i,ix))* vtx_bisector(1,2,ibx)+
1202 . (yh-yy(i,ix))* vtx_bisector(2,2,ibx)+
1203 . (zh-zz
1204 IF(p1 >= gaps(i) .AND. p2 >= gaps(i)) farb(i,it) =3
1205 ELSE
1206 vx = two*xx(i,ix)-(xx(i,iy)+xx(i,iz))
1207 vy = two*yy(i,ix)-(yy(i,iy)+yy(i,iz))
1208 vz = two*zz(i,ix)-(zz(i,iy)+zz(i,iz))
1209 nn = one/
max(em20,sqrt(vx*vx+vy*vy+vz*vz))
1210 pn = ((xh-xx(i,ix))*vx+(yh-yy(i,ix))*vy+(zh-zz(i,ix))*vz)*nn
1211 IF(pn >= gaps(i)) farb(i,it) =3
1212 END IF
1213
1214 END IF
1215
1216 IF(ingapb(i,it) == 1 .AND. (farb(i,it)==1 .OR. bb(i,it) >= zero))THEN
1217
1218
1219
1220 IF( mvoisb(i,1) /= 0 )THEN
1221
1222 x12=xx(i,2)-xx(i,1)
1223 y12=yy(i,2)-yy(i,1)
1224 z12=zz(i,2)-zz(i,1)
1225
1226
1227 px = z12*nby(i,1)-y12*nbz(i,1)
1228 py = x12*nbz(i,1)-z12*nbx(i,1)
1229 pz = y12*nbx(i,1)-x12*nby(i,1)
1230 pp = px*px+py*py+pz*pz
1231
1232 ll = xij(i,1)*xij(i,1)+yij(i,1)*yij(i,1)+zij(i,1)*zij(i,1)
1233
1234 sidb(i,1)= (xij(i,1)*px+yij(i,1)*py+zij(i,1)*pz)*sqrt(one/
max(em30,ll*pp))
1235 IF(sidb(i,1) < -zep01) farb(i,it) =2
1236
1237 END IF
1238
1239 IF( mvoisb(i,2) /= 0 )THEN
1240
1241 x12=xx(i,3)-xx(i,2)
1242 y12=yy(i,3)-yy(i,2)
1243 z12=zz(i,3)-zz(i,2)
1244
1245
1246 px = z12*nby(i,2)-y12*nbz(i,2)
1247 py = x12*nbz(i,2)-z12*nbx(i,2)
1248 pz = y12*nbx(i,2)-x12*nby(i,2)
1249 pp = px*px+py*py+pz*pz
1250
1251 ll = xij(i,2)*xij(i,2)+yij(i,2)*yij(i,2)+zij(i,2)*zij(i,2)
1252
1253 sidb(i,2)= (xij(i,2)*px+yij(i,2)*py+zij(i,2)*pz)*sqrt(one/
max(em30,ll*pp))
1254 IF(sidb(i,2) < -zep01) farb(i,it) =2
1255
1256 END IF
1257
1258 IF( mvoisb(i,4) /= 0 )THEN
1259
1260 x12=xx(i,1)-xx(i,3)
1261 y12=yy(i,1)-yy(i,3)
1262 z12=zz(i,1)-zz(i,3)
1263
1264
1265 px = z12*nby(i,4)-y12*nbz(i,4)
1266 py = x12*nbz(i,4)-z12*nbx(i,4)
1267 pz = y12*nbx(i,4)-x12*nby(i,4)
1268 pp = px*px+py*py+pz*pz
1269
1270 ll = xij(i,3)*xij(i,3)+yij(i,3)*yij(i,3)+zij(i,3)*zij(i,3)
1271
1272 sidb(i,4)= (xij(i,3)*px+yij(i,3)*py+zij(i,3)*pz)*sqrt(one/
max(em30,ll*pp))
1273 IF(sidb(i,4) < -zep01) farb(i,it) =2
1274
1275 END IF
1276 END IF
1277 END IF
1278
1279 IF(farb(i,it)==2 .AND. intersectb(i)==0) penb(i,it)=zero
1280 IF(farb(i,it)==3) penb(i,it)=zero
1281
1282 ENDDO
1283
1284 DO i=1,jlt
1285
1286 IF(stif(i) <= zero)cycle
1287
1288 ia = subtria(i)
1289 penax = zero
1290 IF(ia/=0)penax=pena(i,ia)
1291
1292 ib = subtrib(i)
1293 penbx = zero
1294 IF(ib/=0)penbx=penb(i,ib)
1295
1296 IF(penax > penbx .AND. ia > 0)THEN
1297 l = cand_e(i)
1298 it = ia
1299 pent(i)= penax
1300
1301 lbs(i)=lbp(i,it)
1302 lcs(i)=lcp(i,it)
1303 far(i)=fara(i,it)
1304
1305 ELSEIF(penbx > penax .AND. ib > 0)THEN
1306 l = ishel(i)
1307 cand_e(i) = l
1308
1309 it = ib
1310 pent(i) = penbx
1311
1312 lbs(i)=lcp(i,it)
1313 lcs(i)=lbp(i,it)
1314 far(i)=farb(i,it)
1315
1316 subtria(i)=itperm(it)
1317 it = subtria(i)
1318
1319 ELSE
1320 it=0
1321 subtria(i) = 0
1322 pent(i) = zero
1323 END IF
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333 IF(it == 0)cycle
1334 pene = pent(i)
1335
1336 n = cand_n(i)
1337
1338 mglob=mseglo(l)
1339
1340 IF(n<=nsn)THEN
1341#include "lockon.inc"
1342
1343 IF( time_s(1,n) < pene .OR.
1344 * (time_s(1,n) == pene .AND. -irtlm(1,n) < mglob ))THEN
1345 irtlm(1,n) = -mglob
1346 irtlm(2,n) = it
1347 irtlm(3,n) = cand_e(i)
1348 irtlm(4,n) = ispmd+1
1349 time_s(1,n)= pene
1350
1351
1352 END IF
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365#include "lockoff.inc"
1366 ELSE
1367#include "lockon.inc"
1368 IF(
time_sfi(nin)%P(2*(n-nsn-1)+1) < pene .OR.
1369 * (
time_sfi(nin)%P(2*(n-nsn-1)+1) == pene .AND. -
irtlm_fi(nin)%P(1,n-nsn) < mglob ))
THEN
1372 irtlm_fi(nin)%P(3,n-nsn) = cand_e(i)
1374 time_sfi(nin)%P(2*(n-nsn-1)+1) = pene
1375
1376
1377 END IF
1378
1379
1380
1381
1382
1383#include "lockoff.inc"
1384 END IF
1385 END DO
1386
1387 RETURN
if(complex_arithmetic) id
subroutine intersecb_25(ixx3, ixx4, interseca, intersecb, v12, v23, v34, v41, vo12, vo23, vo34, vo41, xx1, yy1, zz1, xx2, yy2, zz2, xx3, yy3, zz3, xx4, yy4, zz4, xx5, yy5, zz5, vxi, vyi, vzi, xo1, xo2, xo3, xo4, xo5, yo1, yo2, yo3, yo4, yo5, zo1, zo2, zo3, zo4, zo5, xi, yi, zi, xoi, yoi, zoi, zerom, unp, zeromt, unpt)
subroutine intersecv0_25(ixx3, ixx4, intersect, v12, v23, v34, v41, vo12, vo23, vo34, vo41, xx1, yy1, zz1, xx2, yy2, zz2, xx3, yy3, zz3, xx4, yy4, zz4, xx5, yy5, zz5, xoi, yoi, zoi, xo1, xo2, xo3, xo4, xo5, yo1, yo2, yo3, yo4, yo5, zo1, zo2, zo3, zo4, zo5, xi, yi, zi, zeromt, unpt)
subroutine interseca_25(ixx3, ixx4, interseca, v12, v23, v34, v41, vo12, vo23, vo34, vo41, xx1, yy1, zz1, xx2, yy2, zz2, xx3, yy3, zz3, xx4, yy4, zz4, xx5, yy5, zz5, vxi, vyi, vzi, xo1, xo2, xo3, xo4, xo5, yo1, yo2, yo3, yo4, yo5, zo1, zo2, zo3, zo4, zo5, xi, yi, zi, xoi, yoi, zoi, zerom, unp, zeromt, unpt)
type(real_pointer), dimension(:), allocatable time_sfi
type(int_pointer2), dimension(:), allocatable irtlm_fi
type(int_pointer), dimension(:), allocatable icont_i_fi