31 1 JLT ,CAND_N ,CAND_E ,CN_LOC ,CE_LOC ,
32 2 IRTLM ,XX ,YY ,ZZ ,GAP_NM ,
33 3 XI ,YI ,ZI ,GAPS ,GAPMXL ,
34 4 ISHARP ,NNX ,NNY ,NNZ ,
35 5 N1 ,N2 ,N3 ,H1 ,H2 ,
36 5 H3 ,H4 ,NIN ,NSN ,IX1 ,
37 6 IX2 ,IX3 ,IX4 ,NSVG ,STIF ,
38 7 INACTI ,KINI ,ITAB ,LB ,LC ,
39 8 PENMIN ,EPS ,PENE ,PENE_OLD ,SUBTRIA ,
40 9 GAPV ,IVIS2 ,IF_ADH ,IFADHI ,BASE_ADH ,
41 A MVOISN ,IBOUND ,VTX_BISECTOR,DIST ,TIME )
49#include "implicit_f.inc"
58 INTEGER , NIN, NSN, INACTI, , ISHARP, ITAB(*),
59 . CAND_N(*),CAND_E(*),
60 . MVOISN(MVSIZ,4),IBOUND(4,*)
61 INTEGER NSVG(MVSIZ), KINI(MVSIZ), CN_LOC(MVSIZ), CE_LOC(MVSIZ),
62 . IX1(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)
76 my_real ,
INTENT(IN) :: time
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), ZH(MVSIZ), XC, YC, ZC, DC, P1, P2, GAPM,
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),
94 . linterp, lbm, lcm, lam, xl, yl, zl,
97 DATA itria/1,2,2,3,3,4,4,1/
100 epseg = (two+half)/hundred
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)
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)
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)
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)
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))
123 gap_mm(i)=gap_nm(3,i)
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)
140 nn=one/
max(em30,sqrt(nx(i)*nx(i)+ ny(i)*ny(i)+ nz(i)*nz(i)))
155 la(i)=one-lb(i)-lc(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)
160 IF(ix3(i)/=ix4(i))
THEN
162 IF(bb(i) <= zero)
THEN
164 xp(i) =la(i)*xx(i,5)+lb(i)*xx(i,i1)+lc(i)*xx(i,i2)
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)
170 dd = sqrt(nn1(i)*nn1(i)+ nn2(i)*nn2(i)+ nn3(i)*nn3(i))
181 pene(i)=
max(zero,gapv(i)-dd)
185 IF(bb(i) > zero .AND. la(i) < epseg .AND. mvoisn(i,it)/=0)
THEN
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
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)
204 .
max(em30,sqrt(nn1(i)*nn1(i)+ nn2(i)*nn2(i)+ nn3(i)*nn3(i)))
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)
216 .
max(em30,sqrt(nn1(i)*nn1(i)+ nn2(i)*nn2(i)+ nn3(i)*nn3(i)))
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)
239 pene(i)=
max(zero,gapv(i)+bb(i))
245 ELSEIF(ix3(i)==ix4(i))
THEN
247 IF(bb(i) <= zero)
THEN
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(i)*zz(i,i1)+lc(i)*zz(i,i2)
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
274 IF(la(i) < epseg .AND. mvoisn(i,1)/=0)
THEN
280 ELSEIF(lb(i) < epseg .AND. mvoisn(i,2)/=0)
THEN
286 ELSEIF(lc(i) < epseg .AND. mvoisn(i,4)/=0)
THEN
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)
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
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)
307 .
max(em30,sqrt(nn1(i)*nn1(i)+ nn2(i)*nn2(i)+ nn3(i)*nn3(i)))
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)
317 .
max(em30,sqrt(nn1(i)*nn1(i)+ nn2(i)*nn2(i)+ nn3(i)*nn3(i)))
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)
331 pene(i)=
max(zero,gapv(i)+bb(i))
340 pene(i)=
max(zero,gapv(i)+bb(i))
368 IF(ix3(i)/=ix4(i))
THEN
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)
378 IF(mvoisn(i,it)==0)
THEN
396 nne(i)= (xh(i)-xx(i,i1))*nn1(i)+ (yh(i)-yy(i,i1))*nn2(i)+ (zh(i)-zz(i,i1))*nn3(i)
401 ELSEIF((ib1/=0.AND.ib2==0).OR.
402 . (ib2/=0.AND.ib1==0))
THEN
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
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)
425 IF(p1 < gaps(i) .AND. p2 < gaps(i))
THEN
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)
431 nn=sqrt(nn1(i)*nn1(i)+nn2(i)*nn2(i)+nn3(i)*nn3(i))
432 nn = one/
max(em30,nn)
437 nne(i)= (xh(i)-xx(i,ix))*nn1(i)+ (yh(i)-yy(i,ix))*nn2(i)+ (zh(i)-zz(i,ix))*nn3(i)
442 ELSEIF(p1 < gaps(i))
THEN
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)
452 ELSEIF(p2 < gaps(i))
THEN
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)
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
486 nne(i)= (xh(i)-xx(i,ix))*nn1(i)+ (yh(i)-yy(i,ix))*nn2(i)+ (zh(i)-zz(i,ix))*nn3(i)
507 ELSEIF(ix3(i)==ix4(i))
THEN
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)
518 IF(mvoisn(i,1)==0.OR.
520 . mvoisn(i,4)==0)
THEN
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)
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
535 IF(mvoisn(i,1) == 0 .AND. nne1 < nne(i))
THEN
541 IF(mvoisn(i,2) == 0 .AND. nne2 < nne(i))
THEN
548 IF(mvoisn(i,4) == 0 .AND. nne4 < nne(i))
THEN
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
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)
588 IF(p1 < gaps(i) .AND. p2 < gaps(i))
THEN
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)
594 nn=sqrt(nn1(i)*nn1(i)+nn2(i)*nn2(i)+nn3(i)*nn3(i))
595 nn = one/
max(em30,nn)
600 nne(i)= (xh(i)-xx(i,ix))*nn1(i)+ (yh(i)-yy(i,ix))*nn2(i)+ (zh(i)-zz(i,ix))*nn3(i)
605 ELSEIF(p1 < gaps(i))
THEN
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)
615 ELSEIF(p2 < gaps(i))
THEN
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)
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
650 nne(i)= (xh(i)-xx(i,ix))*nn1(i)+ (yh(i)-yy(i,ix))*nn2(i)+ (zh(i)-zz(i,ix))*nn3(i)
680 IF(nne(i) > zero)
THEN
685 ELSEIF(isharp==1)
THEN
690 gapm = gapv(i)-gaps(i)
691 IF(nne(i) > zero .AND. bb(i)+gapm < zero)
THEN
710 dc = sqrt(n1(i)*n1(i)+ n2(i)*n2(i)+ n3(i)*n3(i))
717 pene(i)=
max(zero,gaps(i)-dc)
720 nne(i)=nne(i)-gaps(i)
721 IF(-bb(i) < gapv(i)+nne(i))
THEN
728 pene(i)=
max(zero,-nne(i))
737 pene(i)=
max(zero,gapv(i)+bb(i))
743 nne(i)=nne(i)-gaps(i)
744 IF(nne(i) >= zero)
THEN
760 IF(gapv(i)+nne(i) > zero)
THEN
762 IF(-bb(i) < gapv(i)+nne(i))
THEN
778 pene(i)=
max(zero,gapv(i)+bb(i))
791 ELSEIF(isharp==2)
THEN
796 nne(i)=nne(i)-gaps(i)
797 IF(nne(i) >= zero)
THEN
814 IF(-bb(i) < gapv(i)+nne(i))
THEN
830 pene(i)=
max(zero,gapv(i)+bb(i))
833 ELSEIF(gapv(i)+nne(i) > zero)
THEN
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)
842 dc = sqrt(nn1(i)*nn1(i)+ nn2(i)*nn2(i)+ nn3(i)*nn3(i))
848 pene(i)=
max(zero,gapv(i)-dc)
867 ce_loc(i) = cand_e(i)
868 cn_loc(i) = cand_n(i)
872 IF(ix3(i)/=ix4(i))
THEN
912 IF (inacti==5.AND.ivis2/=-1)
THEN
914 IF (pene(i) == zero) cycle
918 IF(irtlm(1,n) > 0)
THEN
919 pene_old(5,n)=
max(pene(i),pene_old(5,n))
934 IF(pene(i) == zero)cycle
939 IF(irtlm(1,n) < 0)
THEN
940 pene_old(5,n)=pene(i)
942 pene_shft =
max(zero,pene(i)-pene_old(5,n))
945 IF(irtlm_fi(nin)%P(1,jg) < 0)
THEN
946 pene_oldfi(nin)%P(5,jg)=pene(i)
948 pene_shft=
max(zero,pene(i)-pene_oldfi(nin)%P(5,jg))
957 IF(pene(i) == zero)cycle
961 IF(irtlm(1,n) < 0)
THEN
962 pene_old(5,n)=
max(zero,pene(i)-half*gapv(i))
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)
969 IF(irtlm_fi(nin)%P(1,jg) < 0)
THEN
970 pene_oldfi(nin)%P(5,jg)=
max(zero,pene(i)-half*gapv(i))
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)
974 ifadhi(i) = if_adhfi(nin)%P(jg)