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