42
43
44
46
47
48
49#include "implicit_f.inc"
50
51
52
53#include "mvsiz_p.inc"
54#include "comlock.inc"
55
56
57
58 INTEGER JLT, NIN, NSN, INACTI, IVIS2, ISHARP, ITAB(*),
59 . CAND_N(*),CAND_E(*),
60 . MVOISN(MVSIZ,4),IBOUND(4,*)
61 INTEGER NSVG(MVSIZ), KINI(MVSIZ), CN_LOC(MVSIZ), CE_LOC(),
62 . (MVSIZ), IX2(MVSIZ), IX3(MVSIZ), IX4(MVSIZ), SUBTRIA(*), IRTLM(4,*),
63 . IF_ADH(*), IFADHI(MVSIZ)
65 . penmin, eps, pene_old(5,*)
67 . n1(mvsiz), n2(mvsiz), n3(mvsiz),
68 . h1(mvsiz), h2(mvsiz), h3(mvsiz), h4(mvsiz),
69 . xx(mvsiz,5), yy(mvsiz,5), zz(mvsiz,5),
70 . xi(mvsiz), yi(mvsiz), zi(mvsiz), stif(mvsiz),
71 . nnx(mvsiz,5), nny(mvsiz,5), nnz(mvsiz,5),
72 . lb(mvsiz), lc(mvsiz), gap_nm(4,mvsiz), gaps(mvsiz),
73 . pene(mvsiz), gapmxl(mvsiz), gapv(mvsiz), base_adh(mvsiz)
74 real*4 vtx_bisector(3,2,*)
75 my_real ,
INTENT(INOUT) :: dist(mvsiz)
77
78
79
80 INTEGER I, J, K, L, N, I1, I2, JG, IT, ITRIA(2,4), I3, I4,
81 . IB1, IB2, IB3, IBX, IX, IY, IZ, NBORD, KBORD(MVSIZ)
83 . aaa, nni, ni2, h0, pene_shft,
84 . nn, nne(mvsiz), xh(mvsiz), yh(mvsiz
85 . bb(mvsiz), la(mvsiz)
87 . nx(mvsiz), ny(mvsiz), nz(mvsiz),
88 . nn1(mvsiz), nn2(mvsiz), nn3(mvsiz), dd, s,
89 . epseg, ax, bx, cx, gap_mm(mvsiz),
90 . lbs(mvsiz), lcs(mvsiz), xp(mvsiz), yp(mvsiz), zp(mvsiz),
91 . x0n(mvsiz,4), y0n(mvsiz,4), z0n(mvsiz,4),
92 . n1x,n1y,n1z,n1n,
93 . n2x,n2y,n2z,n2n,
94 . linterp, lbm, lcm, lam, xl, yl, zl,
95 . pn, vx, vy, vz,
96 . nne1,nne2,nne4
97 DATA itria/1,2,2,3,3,4,4,1/
98
99
100 epseg = (two+half)/hundred
101
102 DO i=1,jlt
103
104 x0n(i,1) = xx(i,1) - xx(i,5)
105 y0n(i,1) = yy(i,1) - yy(i,5)
106 z0n(i,1) = zz(i,1) - zz(i,5)
107
108 x0n(i,2) = xx(i,2) - xx(i,5)
109 y0n(i,2) = yy(i,2) - yy(i,5)
110 z0n(i,2) = zz(i,2) - zz(i,5)
111
112 x0n(i,3) = xx(i,3) - xx(i,5)
113 y0n(i,3) = yy(i,3) - yy(i,5)
114 z0n(i,3) = zz(i,3) - zz(i,5)
115
116 x0n(i,4) = xx(i,4) - xx(i,5)
117 y0n(i,4) = yy(i,4) - yy(i,5)
118 z0n(i,4) = zz(i,4) - zz(i,5)
119
120 IF(ix3(i)/=ix4(i))THEN
121 gap_mm(i)=fourth*(gap_nm(1,i)+gap_nm(2,i)+gap_nm(3,i)+gap_nm(4,i))
122 ELSE
123 gap_mm(i)=gap_nm(3,i)
124 END IF
125
126 ENDDO
127
128
129
130 DO i=1,jlt
131
132 it = subtria(i)
133 i1=itria(1,it)
134 i2=itria(2,it)
135
136 nx(i) = y0n(i,i1)*z0n(i,i2) - z0n(i,i1)*y0n(i,i2)
137 ny(i) = z0n(i,i1)*x0n(i,i2) - x0n(i,i1)*z0n(i,i2)
138 nz(i) = x0n(i,i1)*y0n(i,i2) - y0n(i,i1)*x0n(i,i2)
139
140 nn=one/
max(em30,sqrt(nx(i)*nx(i)+ ny(i)*ny(i)+ nz(i)*nz(i)))
141 nx(i)=nx(i)*nn
142 ny(i)=ny(i)*nn
143 nz(i)=nz(i)*nn
144
145 ENDDO
146
147
148
149 DO i=1,jlt
150
151 it = subtria(i)
152 i1=itria(1,it)
153 i2=itria(2,it)
154
155 la(i)=one-lb(i)-lc(i)
156
157 gapv(i)=
min(gaps(i)+la(i)*gap_mm(i)+lb(i)*gap_nm(i1,i)+lc(i)*gap_nm(i2,i),gapmxl(i))
158 bb(i) = (xx(i,5)-xi(i))*nx(i)+(yy(i,5)-yi(i))*ny(i)+(zz(i,5)-zi(i))*nz(i)
159
160 IF(ix3(i)/=ix4(i))THEN
161
162 IF(bb(i) <= zero)THEN
163
164 xp(i) =la(i)*xx(i,5)+lb(i)*xx(i,i1
165 yp(i) =la(i)*yy(i,5)+lb(i)*yy(i,i1)+lc(i)*yy(i,i2)
166 zp(i) =la(i)*zz(i,5)+lb(i)*zz(i,i1)+lc(i)*zz(i,i2)
167 nn1(i) =xi(i)-xp(i)
168 nn2(i) =yi(i)-yp(i)
169 nn3(i) =zi(i)-zp(i)
170 dd = sqrt(nn1(i)*nn1(i)+ nn2(i)*nn2(i)+ nn3(i)*nn3(i))
171 IF(dd > em03) THEN
172 nn = one/dd
173 n1(i) = nn1(i)*nn
174 n2(i) = nn2(i)*nn
175 n3(i) = nn3(i)*nn
176 ELSE
177 n1(i) = nx(i)
178 n2(i) = ny(i)
179 n3(i) = nz(i)
180 END IF
181 pene(i)=
max(zero,gapv(i)-dd)
182 dist(i)=dd
183 ELSE
184
185 IF(bb(i) > zero .AND. la(i) < epseg .AND. mvoisn(i,it)/=0)THEN
186
187
188
189
190 nn1(i)=nnx(i,it)
191 nn2(i)=nny(i,it)
192 nn3(i)=nnz(i,it)
193
194 nni = nx(i)*nn1(i) + ny(i)*nn2(i) + nz(i)*nn3(i)
195 ni2 = nn1(i)*nn1(i) + nn2(i)*nn2(i) + nn3(i)*nn3(i)
196 IF(nni < zero .OR. two*nni*nni < ni2)THEN
197
198 aaa = sqrt(
max(zero,ni2-nni*nni)) - nni
199 nn1(i) = nn1(i) + aaa*nx(i)
200 nn2(i) = nn2(i) + aaa*ny(i)
201 nn3(i) = nn3(i) + aaa*nz(i)
202 ENDIF
203 nn = one/
204 .
max(em30,sqrt(nn1(i)*nn1(i)+ nn2(i)*nn2(i)+ nn3(i)*nn3(i
205 nn1(i)=nn1(i)*nn
206 nn2(i)=nn2(i)*nn
207 nn3(i)=nn3(i)*nn
208
209 s = la(i)/epseg
210
211
212 nn1(i)=(one-s)*nn1(i)+s*nx(i)
213 nn2(i)=(one-s)*nn2(i)+s*ny(i)
214 nn3(i)=(one-s)*nn3(i)+s*nz(i)
215 nn = one/
216 .
max(em30,sqrt(nn1(i)*nn1(i)+ nn2(i)*nn2(i)+ nn3(i)*nn3(i)))
217 nn1(i)=nn1(i)*nn
218 nn2(i)=nn2(i)*nn
219 nn3(i)=nn3(i)*nn
220
221 n1(i) = nn1(i)
222 n2(i) = nn2(i)
223 n3(i) = nn3(i)
224
225 xp(i) =la(i)*xx(i,5)+lb(i)*xx(i,i1)+lc(i)*xx(i,i2)
226 yp(i) =la(i)*yy(i,5)+lb(i)*yy(i,i1)+lc(i)*yy(i,i2)
227 zp(i) =la(i)*zz(i,5)+lb(i)*zz(i,i1)+lc(i)*zz(i,i2)
228
229
230 pene(i)=
max(zero,gapv(i)+bb(i))
231
232 dist(i)=bb(i)
233 ELSE
234
235
236 n1(i) = nx(i)
237 n2(i) = ny(i)
238 n3(i) = nz(i)
239 pene(i)=
max(zero,gapv(i)+bb(i))
240 dist(i)=bb(i)
241 END IF
242
243 END IF
244
245 ELSEIF(ix3(i)==ix4(i))THEN
246
247 IF(bb(i) <= zero)THEN
248
249 xp(i) =la(i)*xx(i,5)+lb(i)*xx(i,i1)+lc(i)*xx(i,i2)
250 yp(i) =la(i)*yy(i,5)+lb(i)*yy(i,i1)+lc(i)*yy(i,i2)
251 zp(i) =la(i)*zz(i,5)+lb
252 nn1(i) =xi(i)-xp(i)
253 nn2(i) =yi(i)-yp(i)
254 nn3(i) =zi(i)-zp(i)
255 dd = sqrt(nn1(i)*nn1(i)+ nn2(i)*nn2(i)+ nn3(i)*nn3(i))
256 IF(dd > em03) THEN
257 nn = one/dd
258 n1(i) = nn1(i)*nn
259 n2(i) = nn2(i)*nn
260 n3(i) = nn3(i)*nn
261 ELSE
262 n1(i) = nx(i)
263 n2(i) = ny(i)
264 n3(i) = nz(i)
265 END IF
266 pene(i)=
max(zero,gapv(i)-dd)
267 dist(i)=dd
268
269 ELSEIF(bb(i) > zero .AND. ((la(i) < epseg .AND. mvoisn(i,1)/=0).OR.
270 . (lb(i) < epseg .AND. mvoisn(i,2)/=0).OR.
271 . (lc(i) < epseg .AND. mvoisn(i,4)/=0)))THEN
272
273
274 IF(la(i) < epseg .AND. mvoisn(i,1)/=0)THEN
275 aaa=lb(i)+lc(i)
276 ax=zero
277 bx=lb(i)/aaa
278 cx=lc(i)/aaa
279 s = la(i)/epseg
280 ELSEIF(lb(i) < epseg .AND. mvoisn(i,2)/=0)THEN
281 aaa=la(i)+lc(i)
282 ax=la(i)/aaa
283 bx=zero
284 cx=lc(i)/aaa
285 s = lb(i)/epseg
286 ELSEIF(lc(i) < epseg .AND. mvoisn(i,4)/=0)THEN
287 aaa=la(i)+lb(i)
288 ax=la(i)/aaa
289 bx=lb(i)/aaa
290 cx=zero
291 s = lc(i)/epseg
292 END IF
293 nn1(i)=(bx+cx-ax)*nnx(i,i1)+(ax+cx-bx)*nnx(i,i2)+(ax+bx-cx)*nnx(i,5)
294 nn2(i)=(bx+cx-ax)*nny(i,i1)+(ax+cx-bx)*nny(i,i2)+(ax+bx-cx)*nny(i,5)
295 nn3(i)=(bx+cx-ax)*nnz(i,i1)+(ax+cx-bx)*nnz(i,i2)+(ax+bx-cx)*nnz(i,5)
296
297 nni = nx(i)*nn1(i) + ny(i)*nn2(i) + nz(i)*nn3(i)
298 ni2 = nn1(i)*nn1(i) + nn2(i)*nn2(i) + nn3(i)*nn3(i)
299 IF(nni < zero .OR. two*nni*nni < ni2)THEN
300
301 aaa = sqrt(
max(zero,ni2-nni*nni)) - nni
302 nn1(i) = nn1(i) + aaa*nx(i)
303 nn2(i) = nn2(i) + aaa*ny(i)
304 nn3(i) = nn3(i) + aaa*nz(i)
305 ENDIF
306 nn = one/
307 .
max(em30,sqrt(nn1(i)*nn1(i)+ nn2(i)*nn2(i)+ nn3(i)*nn3(i)))
308 nn1(i)=nn1(i)*nn
309 nn2(i)=nn2(i)*nn
310 nn3(i)=nn3(i)*nn
311
312
313 nn1(i)=(one-s)*nn1(i)+s*nx(i)
314 nn2(i)=(one-s)*nn2(i)+s*ny(i)
315 nn3(i)=(one-s)*nn3(i)+s*nz(i)
316 nn = one/
317 .
max(em30,sqrt(nn1(i)*nn1(i)+ nn2(i)*nn2(i)+ nn3(i)*nn3(i)))
318 nn1(i)=nn1(i)*nn
319 nn2(i)=nn2(i)*nn
320 nn3(i)=nn3(i)*nn
321
322 n1(i) = nn1(i)
323 n2(i) = nn2(i)
324 n3(i) = nn3(i)
325
326 xp(i) =la(i)*xx(i,5)+lb(i)*xx(i,i1)+lc(i)*xx(i,i2)
327 yp(i) =la(i)*yy(i,5)+lb(i)*yy(i,i1)+lc(i)*yy(i,i2)
328 zp(i) =la(i)*zz(i,5)+lb(i)*zz(i,i1)+lc(i)*zz(i,i2)
329
330
331 pene(i)=
max(zero,gapv(i)+bb(i))
332 dist(i)=bb(i)
333
334 ELSE
335
336
337 n1(i) = nx(i)
338 n2(i) = ny(i)
339 n3(i) = nz(i)
340 pene(i)=
max(zero,gapv(i)+bb(i))
341 dist(i)=bb(i)
342
343 END IF
344
345
346 END IF
347
348
349
350
351
352
353
354
355
356
357 END DO
358
359
360
361 nbord = 0
362 DO i=1,jlt
363
364 it = subtria(i)
365 i1=itria(1,it)
366 i2=itria(2,it)
367
368 IF(ix3(i)/=ix4(i))THEN
369
370 ib1=ibound(i1,i)
371 ib2=ibound(i2,i)
372
373
374 xh(i)=xi(i)+bb(i)*nx(i)
375 yh(i)=yi(i)+bb(i)*ny(i)
376 zh(i)=zi(i)+bb(i)*nz(i)
377
378 IF(mvoisn(i,it)==0)THEN
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393 nn1(i)=nnx(i,it)
394 nn2(i)=nny(i,it)
395 nn3(i)=nnz(i,it)
396 nne(i)= (xh(i)-xx(i,i1))*nn1(i)+ (yh(i)-yy(i,i1))*nn2(i)+ (zh(i)-zz(i,i1))*nn3(i)
397
398 nbord=nbord+1
399 kbord(nbord)=i
400
401 ELSEIF((ib1/=0.AND.ib2==0).OR.
402 . (ib2/=0.AND.ib1==0))THEN
403
405 IF(ib1/=0)THEN
406 ix =i1
407 ELSE
408 ix =i2
409 END IF
410
411 IF(vtx_bisector(1,1,ibx)/=zero.OR.
412 . vtx_bisector(2,1,ibx)/=zero.OR.
413 . vtx_bisector(3,1,ibx)/=zero.OR.
414 . vtx_bisector(1,2,ibx)/=zero.OR.
415 . vtx_bisector(2,2,ibx)/=zero.OR.
416 . vtx_bisector(3,2,ibx)/=zero)THEN
417
418 p1 = (xh(i)-xx(i,ix))* vtx_bisector(1,1,ibx)+
419 . (yh(i)-yy(i,ix))* vtx_bisector(2,1,ibx)+
420 . (zh(i)-zz(i,ix))* vtx_bisector(3,1,ibx)
421 p2 = (xh(i)-xx(i,ix))* vtx_bisector(1,2,ibx)+
422 . (yh(i)-yy(i,ix))* vtx_bisector(2,2,ibx)+
423 . (zh(i)-zz(i,ix))* vtx_bisector(3,2,ibx)
424
425 IF(p1 < gaps(i) .AND. p2 < gaps(i))THEN
426
427 nn1(i)=vtx_bisector(1,1,ibx)+vtx_bisector(1,2,ibx)
428 nn2(i)=vtx_bisector(2,1,ibx)+vtx_bisector(2,2,ibx)
429 nn3(i)=vtx_bisector(3,1,ibx)+vtx_bisector(3,2,ibx)
430
431 nn=sqrt(nn1(i)*nn1(i)+nn2(i)*nn2(i)+nn3(i)*nn3(i))
432 nn = one/
max(em30,nn)
433 nn1(i)=nn1(i)*nn
434 nn2(i)=nn2(i)*nn
435 nn3(i)=nn3(i)*nn
436
437 nne(i)= (xh(i)-xx(i,ix))*nn1(i)+ (yh(i)-yy(i,ix))*nn2(i)+ (zh(i)-zz(i,ix))*nn3(i)
438
439 nbord=nbord+1
440 kbord(nbord)=i
441
442 ELSEIF(p1 < gaps(i))THEN
443
444 nn1(i)= vtx_bisector(1,1,ibx)
445 nn2(i)= vtx_bisector(2,1,ibx)
446 nn3(i)= vtx_bisector(3,1,ibx)
447 nne(i)= (xh(i)-xx(i,ix))*nn1(i)+ (yh(i)-yy(i,ix))*nn2(i)+ (zh(i)-zz(i,ix))*nn3(i)
448
449 nbord=nbord+1
450 kbord(nbord)=i
451
452 ELSEIF(p2 < gaps(i))THEN
453
454 nn1(i)= vtx_bisector(1,2,ibx)
455 nn2(i)= vtx_bisector(2,2,ibx)
456 nn3(i)= vtx_bisector(3,2,ibx)
457 nne(i)= (xh(i)-xx(i,ix))*nn1(i)+ (yh(i)-yy(i,ix))*nn2(i)+ (zh(i)-zz(i,ix))*nn3(i)
458
459 nbord=nbord+1
460 kbord(nbord)=i
461
462 ELSE
463
464
465
466
467
468
469
470
471
472 END IF
473
474 ELSE
475
476 vx = x0n(i,ix)
477 vy = y0n(i,ix)
478 vz = z0n(i,ix)
479 nn = one/
max(em20,sqrt(vx*vx+vy*vy+vz*vz))
480 pn = ((xh(i)-xx(i,ix))*vx+(yh(i)-yy(i,ix))*vy+(zh(i)-zz(i,ix))*vz)*nn
481 IF(pn < gaps(i))THEN
482
483 nn1(i)= vx*nn
484 nn2(i)= vy*nn
485 nn3(i)= vz*nn
486 nne(i)= (xh(i)-xx(i,ix))*nn1(i)+ (yh(i)-yy(i,ix))*nn2(i)+ (zh(i)-zz(i,ix))*nn3(i)
487
488 nbord=nbord+1
489 kbord(nbord)=i
490
491 ELSE
492
493
494
495
496
497
498
499
500
501 END IF
502
503 END IF
504
505 END IF
506
507 ELSEIF(ix3(i)==ix4(i))THEN
508
509 ib1=ibound(1,i)
510 ib2=ibound(2,i)
511 ib3=ibound(3,i)
512
513
514 xh(i)=xi(i)+bb(i)*nx(i)
515 yh(i)=yi(i)+bb(i)*ny(i)
516 zh(i)=zi(i)+bb(i)*nz(i)
517
518 IF(mvoisn(i,1)==0.OR.
519 . mvoisn(i,2)==0.OR.
520 . mvoisn(i,4)==0)THEN
521
522 nne(i)=gaps(i)
523 nne1 = (xh(i)-xx(i,i1))*nnx(i,i1)+(yh(i)-yy(i,i1))*nny(i,i1)+(zh(i)-zz(i,i1))*nnz(i,i1)
524 nne2 = (xh(i)-xx(i,i2))*nnx(i,i2)+(yh(i)-yy(i,i2))*nny(i,i2)+(zh(i)-zz(i,i2))*nnz(i,i2)
525 nne4 = (xh(i)-xx(i,5))*nnx(i,5)+(yh(i)-yy(i,5))*nny(i,5)+(zh(i)-zz(i,5))*nnz(i,5)
526
527
528 IF((mvoisn(i,1)==0 .AND. nne1 < nne(i)) .OR.
529 . (mvoisn(i,2)==0 .AND. nne2 < nne(i)) .OR.
530 . (mvoisn(i,4)==0 .AND. nne4 < nne(i))) THEN
531
532 nbord=nbord+1
533 kbord(nbord)=i
534
535 IF(mvoisn(i,1) == 0 .AND. nne1 < nne(i)) THEN
536 nne(i)=nne1
537 nn1(i)=nnx(i,i1)
538 nn2(i)=nny(i,i1)
539 nn3(i)=nnz(i,i1)
540 ENDIF
541 IF(mvoisn(i,2) == 0 .AND. nne2 < nne(i))THEN
542
543 nne(i)=nne2
544 nn1(i)=nnx(i,i2)
545 nn2(i)=nny(i,i2)
546 nn3(i)=nnz(i,i2)
547 ENDIF
548 IF(mvoisn(i,4) == 0 .AND. nne4 < nne(i)) THEN
549 nne(i)=nne4
550 nn1(i)=nnx(i,5)
551 nn2(i)=nny(i,5)
552 nn3(i)=nnz(i,5)
553 END IF
554 ENDIF
555
556 ELSEIF((ib1/=0 .AND. ib2==0 .AND. ib3==0).OR.
557 . (ib2/=0 .AND. ib3==0 .AND. ib1==0).OR.
558 . (ib3/=0 .AND. ib1==0 .AND. ib2==0))THEN
559
561 IF(ib1/=0)THEN
562 ix =1
563 iy =2
564 iz =3
565 ELSEIF(ib2/=0)THEN
566 ix =2
567 iy =3
568 iz =1
569 ELSE
570 ix =3
571 iy =1
572 iz =2
573 END IF
574
575 IF(vtx_bisector(1,1,ibx)/=zero.OR.
576 . vtx_bisector(2,1,ibx)/=zero.OR.
577 . vtx_bisector(3,1,ibx)/=zero.OR.
578 . vtx_bisector(1,2,ibx)/=zero.OR.
579 . vtx_bisector(2,2,ibx)/=zero.OR.
580 . vtx_bisector(3,2,ibx)/=zero)THEN
581 p1 = (xh(i)-xx(i,ix))* vtx_bisector(1,1,ibx)+
582 . (yh(i)-yy(i,ix))* vtx_bisector(2,1,ibx)+
583 . (zh(i)-zz(i,ix))* vtx_bisector(3,1,ibx)
584 p2 = (xh(i)-xx(i,ix))* vtx_bisector(1,2,ibx)+
585 . (yh(i)-yy(i,ix))* vtx_bisector(2,2,ibx)+
586 . (zh(i)-zz(i,ix))* vtx_bisector(3,2,ibx)
587
588 IF(p1 < gaps(i) .AND. p2 < gaps(i))THEN
589
590 nn1(i)=vtx_bisector(1,1,ibx)+vtx_bisector(1,2,ibx)
591 nn2(i)=vtx_bisector(2,1,ibx)+vtx_bisector(2,2,ibx)
592 nn3(i)=vtx_bisector(3,1,ibx)+vtx_bisector(3,2,ibx)
593
594 nn=sqrt(nn1(i)*nn1(i)+nn2(i)*nn2(i)+nn3(i)*nn3(i))
595 nn = one/
max(em30,nn)
596 nn1(i)=nn1(i)*nn
597 nn2(i)=nn2(i)*nn
598 nn3(i)=nn3(i)*nn
599
600 nne(i)= (xh(i)-xx(i,ix))*nn1(i)+ (yh(i)-yy(i,ix))*nn2(i)+ (zh(i)-zz(i,ix))*nn3(i)
601
602 nbord=nbord+1
603 kbord(nbord)=i
604
605 ELSEIF(p1 < gaps(i))THEN
606
607 nn1(i)= vtx_bisector(1,1,ibx)
608 nn2(i)= vtx_bisector(2,1,ibx)
609 nn3(i)= vtx_bisector(3,1,ibx)
610 nne(i)= (xh(i)-xx(i,ix))*nn1(i)+ (yh(i)-yy(i,ix))*nn2(i)+ (zh(i)-zz(i,ix))*nn3(i)
611
612 nbord=nbord+1
613 kbord(nbord)=i
614
615 ELSEIF(p2 < gaps(i))THEN
616
617 nn1(i)= vtx_bisector(1,2,ibx)
618 nn2(i)= vtx_bisector(2,2,ibx)
619 nn3(i)= vtx_bisector(3,2,ibx)
620 nne(i)= (xh(i)-xx(i,ix))*nn1(i)+ (yh(i)-yy(i,ix))*nn2(i)+ (zh(i)-zz(i,ix))*nn3(i)
621
622 nbord=nbord+1
623 kbord(nbord)=i
624
625 ELSE
626
627
628
629
630
631
632
633
634
635 END IF
636
637 ELSE
638
639 vx = two*xx(i,ix)-(xx(i,iy)+xx(i,iz))
640 vy = two*yy(i,ix)-(yy(i,iy)+yy(i,iz))
641 vz = two*zz(i,ix)-(zz(i,iy)+zz(i,iz))
642 nn = one/
max(em20,sqrt(vx*vx+vy*vy+vz*vz))
643 pn = ((xh(i)-xx(i,ix))*vx+(yh(i)-yy(i,ix))*vy+(zh(i)-zz(i,ix))*vz)*nn
644
645 IF(pn < gaps(i))THEN
646
647 nn1(i)= vx*nn
648 nn2(i)= vy*nn
649 nn3(i)= vz*nn
650 nne(i)= (xh(i)-xx(i,ix))*nn1(i)+ (yh(i)-yy(i,ix))*nn2(i)+ (zh(i)-zz(i,ix))*nn3(i)
651
652 nbord=nbord+1
653 kbord(nbord)=i
654
655 ELSE
656
657
658
659
660
661
662
663
664
665 END IF
666
667 END IF
668
669 END IF
670
671 END IF
672
673 END DO
674
675 IF(isharp==3)THEN
676
677 DO k=1,nbord
678 i=kbord(k)
679
680 IF(nne(i) > zero)THEN
681 pene(i)=zero
682 END IF
683
684 END DO
685 ELSEIF(isharp==1)THEN
686
687 DO k=1,nbord
688 i=kbord(k)
689
690 gapm = gapv(i)-gaps(i)
691 IF(nne(i) > zero .AND. bb(i)+gapm < zero)THEN
692
693
694
695
696
697
698
699
700
701
702
703
704 xc=xp(i)+gapm*nx(i)
705 yc=yp(i)+gapm*ny(i)
706 zc=zp(i)+gapm*nz(i)
707 n1(i) =xi(i)-xc
708 n2(i) =yi(i)-yc
709 n3(i) =zi(i)-zc
710 dc = sqrt(n1(i)*n1(i)+ n2(i)*n2(i)+ n3(i)*n3(i))
711
712 IF(dc > em04) THEN
713 nn = one/dc
714 n1(i) = n1(i)*nn
715 n2(i) = n2(i)*nn
716 n3(i) = n3(i)*nn
717 pene(i)=
max(zero,gaps(i)-dc)
718 ELSE
719
720 nne(i)=nne(i)-gaps(i)
721 IF(-bb(i) < gapv(i)+nne(i))THEN
722
723
724 n1(i) = nn1(i)
725 n2(i) = nn2(i)
726 n3(i) = nn3(i)
727
728 pene(i)=
max(zero,-nne(i))
729
730 ELSE
731
732
733 n1(i) = nx(i)
734 n2(i) = ny(i)
735 n3(i) = nz(i)
736
737 pene(i)=
max(zero,gapv(i)+bb(i))
738 END IF
739 END IF
740
741 ELSE
742
743 nne(i)=nne(i)-gaps(i)
744 IF(nne(i) >= zero)THEN
745
746
747
748
749
750
751
752
753
754
755 pene(i)=zero
756 cycle
757
758 END IF
759
760 IF(gapv(i)+nne(i) > zero)THEN
761
762 IF(-bb(i) < gapv(i)+nne(i))THEN
763
764
765 n1(i) = nn1(i)
766 n2(i) = nn2(i)
767 n3(i) = nn3(i)
768
769 pene(i)=-nne(i)
770
771 ELSE
772
773
774 n1(i) = nx(i)
775 n2(i) = ny(i)
776 n3(i) = nz(i)
777
778 pene(i)=
max(zero,gapv(i
779 END IF
780
781 END IF
782
783 END IF
784
785
786
787
788
789 END DO
790
791 ELSEIF(isharp==2)THEN
792
793 DO k=1,nbord
794 i=kbord(k)
795
796 nne(i)=nne(i)-gaps(i)
797 IF(nne(i) >= zero)THEN
798
799
800
801
802
803
804
805
806
807
808 cycle
809
810 END IF
811
812 IF(bb(i) > zero)THEN
813
814 IF(-bb(i) < gapv(i)+nne(i))THEN
815
816
817 n1(i) = nn1(i)
818 n2(i) = nn2(i)
819 n3(i) = nn3(i)
820
821 pene(i)=-nne(i)
822
823 ELSE
824
825
826 n1(i) = nx(i)
827 n2(i) = ny(i)
828 n3(i) = nz(i)
829
830 pene(i)=
max(zero,gapv(i)+bb(i))
831 END IF
832
833 ELSEIF(gapv(i)+nne(i) > zero)THEN
834
835
836 xc =xh(i)-(gapv(i)+nne(i))*nn1(i)
837 yc =yh(i)-(gapv(i)+nne(i))*nn2(i)
838 zc =zh(i)-(gapv(i)+nne(i))*nn3(i)
839 nn1(i) =xi(i)-xc
840 nn2(i) =yi(i)-yc
841 nn3(i) =zi(i)-zc
842 dc = sqrt(nn1(i)*nn1(i)+ nn2(i)*nn2(i)+ nn3(i)*nn3(i))
843 IF(dc > em04) THEN
844 nn = one/dc
845 n1(i) = nn1(i)*nn
846 n2(i) = nn2(i)*nn
847 n3(i) = nn3(i)*nn
848 pene(i)=
max(zero,gapv(i)-dc)
849 ELSE
850
851
852 END IF
853
854 END IF
855
856
857
858
859
860 ENDDO
861 END IF
862
863
864
865 DO i=1,jlt
866
867 ce_loc(i) = cand_e(i)
868 cn_loc(i) = cand_n(i)
869
870 it = subtria(i)
871
872 IF(ix3(i)/=ix4(i))THEN
873
874 h0 = fourth * la(i)
875 IF(it==1)THEN
876 h1(i) = h0 + lb(i)
877 h2(i) = h0 + lc(i)
878 h3(i) = h0
879 h4(i) = h0
880 ELSEIF(it==2)THEN
881 h1(i) = h0
882 h2(i) = h0 + lb(i)
883 h3(i) = h0 + lc(i)
884 h4(i) = h0
885 ELSEIF(it==3)THEN
886 h1(i) = h0
887 h2(i) = h0
888 h3(i) = h0 + lb(i)
889 h4(i) = h0 + lc(i)
890 ELSEIF(it==4)THEN
891 h1(i) = h0 + lc(i)
892 h2(i) = h0
893 h3(i) = h0
894 h4(i) = h0 + lb(i)
895 END IF
896
897 ELSE
898
899 h1(i) = lb(i)
900 h2(i) = lc(i)
901 h3(i) = la(i)
902 h4(i) = zero
903
904 END IF
905
906 END DO
907
908
909
910
911 IF (time==zero) THEN
912 IF (inacti==5.AND.ivis2/=-1) THEN
913 DO i=1,jlt
914 IF (pene(i) == zero) cycle
915 jg = nsvg(i)
916 n = cand_n(i)
917 IF(jg > 0)THEN
918 IF(irtlm(1,n) > 0)THEN
919 pene_old(5,n)=
max(pene(i),pene_old(5,n))
920 END IF
921 ELSE
922 jg = -jg
925 END IF
926 END IF
927 END DO
929 END IF
930 IF(ivis2/=-1) THEN
931
932 DO i=1,jlt
933
934 IF(pene(i) == zero)cycle
935
936 jg = nsvg(i)
937 n = cand_n(i)
938 IF(jg > 0)THEN
939 IF(irtlm(1,n) < 0)THEN
940 pene_old(5,n)=pene(i)
941 END IF
942 pene_shft =
max(zero,pene(i)-pene_old(5,n))
943 ELSE
944 jg = -jg
947 END IF
949
950 ENDIF
951 pene(i) = pene_shft
952 ENDDO
953
954
955 ELSE
956 DO i=1,jlt
957 IF(pene(i) == zero)cycle
958 jg = nsvg(i)
959 n = cand_n(i)
960 IF(jg > 0)THEN
961 IF(irtlm(1,n) < 0)THEN
962 pene_old(5,n)=
max(zero,pene(i)-half*gapv(i))
963 ENDIF
964 IF(pene(i)>=half*gapv(i)) if_adh(n) = 1
965 base_adh(i) = pene_old(5,n) + half*gapv(i)
966 ifadhi(i) = if_adh(n)
967 ELSE
968 jg = -jg
971 ENDIF
972 IF(pene(i)>=half*gapv(i))
if_adhfi(nin)%P(jg) = 1
973 base_adh(i) =
pene_oldfi(nin)%P(5,jg) + half*gapv(i)
975 ENDIF
976 ENDDO
977 ENDIF
978
979 RETURN
if(complex_arithmetic) id
type(int_pointer2), dimension(:), allocatable irtlm_fi
type(real_pointer2), dimension(:), allocatable pene_oldfi
type(int_pointer), dimension(:), allocatable if_adhfi