45 SUBROUTINE fvmesh1(IBUF , ELEM , X , IVOLU, BRIC ,
46 . XB , RVOLU , NEL , NBRIC, TBRIC,
47 . SFAC , DXM , NBA , NELA , NNA ,
48 . TBA , TFACA , TAGELS, IBUFA,
49 . ELEMA, TAGELA, IXS , NNF )
54 use element_mod ,
only : nixs
58#include "implicit_f.inc"
69 INTEGER IBUF(*), ELEM(3,*), IVOLU(*), BRIC(8,*),
70 . NEL, NBRIC, TBRIC(13,*), NBA, NELA, NNA, TBA(2,*),
71 . TFACA(12,*), TAGELS(*), IBUFA(*), ELEMA(3,*), TAGELA(*),
74 . x(3,*), xb(3,*), rvolu(*), sfac(6,4,*), dxm
78 INTEGER ILVOUT, NLAYER, NFACMAX, NPPMAX, I, J, IEL, N1, N2, N3,
79 . NN1, NN2, NN3, GRBRIC, IAD, NPOLY, NNS, ITAGB(NBRIC),
80 . NVMAX, NG, INFO, ICUT, NVERTS, NF1, NF2, NF3, NF4, NS,
81 . NSMAX, NV, K, KK, NNP, NPOLMAX, NRPMAX, N, M, , NPOLH,
82 . npolb, ity, nn, nphmax, npolhmax, jj, jjj, ii,
83 . nns_old, nnp_old, npa, jmax, imax, jjmax, np, nntr,
84 . npoly_old, ipsurf, ic1, ic2, nhol, nelp, npolh_old,
85 . l, ll, ifv, nns2, npoly2, npl, polc, nspoly, ncpoly,
86 . npolhf, nnb, filen, lenp, lenh, ip, jmin, lenimax,
87 . lenrmax, kkk, nseg, imin, nfac, n4, nn4, ib, ifound,
88 . itagba(nba), ibsa(nba), nall, iii,
89 . nns_anim, nbz, nbnedge, nns3, npoly_new, nnsp, nedge,
90 . ityz, inz, j0, nns1, k0, i1, i2, idep, nstr, nctr, iiz,
94 . volg, x1, y1, z1, x2, y2, z2, x3, y3, z3, x12, y12, z12,
95 . x13, y13, z13, nrx, nry, nrz, area2, elarea(nel),
96 .
norm(3,nel), xbmax, ybmax, zbmax, xbmin, ybmin, zbmin,
97 . xc, yc, zc, xx, yy, zz, pp(3,3), xl7(3), bcenter(3
98 . bhalfsize(3), xtmax, ytmax, ztmax, xtmin, ytmin, ztmin,
99 . tverts(9), tmptri(3,3), tmpbox(3,8), tmpnorm(3,6), tole,
100 . xg, yg, zg, fv0(3), fv1(3), fv2(3), fu0(3), fu1(3),
101 . fu2(3), quad(3,4), nr(3),
area, nx, ny, nz, nnx,
102 . nny, nnz, x0, y0, z0, lmax2, tole2, dd, vm, volumin,
103 . areamax, volph, areap, areael, vpx, vpy, vpz,
104 . v1x, v1y, v1z, v2x, v2y, v2z, nrm1, vx, vy, vz, ss,
105 . normf(3,4), ksi, eta, vx1, vy1, vz1, vx2, vy2, vz2,
106 . vmin, vtmp, x4, y4, z4, x14, y14, z14, norma(3,nela),
107 . dd2, xn(3), zlmin, zlmax, zl, vnorm, vx3, vy3, vz3, lz,
108 . dz,
alpha, gamai, cpai, cpbi, cpci, rmwi, pini, ti, cpi,
109 . cvi, rhoi, zl1, zl2, zl3, zlc, val, xxx(3,nnf),
111 CHARACTER CHFVB*7, CHMESH*5, FILNAM*116
113 INTEGER,
ALLOCATABLE :: FACET(:,:), IPOLY(:,:),
114 . IELNOD(:,:), POLH(:,:), IPOLY_F(:,:),
115 . polh_f(:,:), ifvnod(:), ifvnod_old(:),
116 . redir_poly(:), pseg(:,:), redir(:),
117 . ptri(:,:), redir_polh(:), polb(:),
118 . ipoly_old(:), polh_new(:,:), itagt(:),
119 . tri(:,:), adr(:), adr_old(:), imerged(:),
120 . ipoly_f_old(:,:), inedge(:,:), nref(:,:),
121 . iz(:,:), ledge(:), ifvnod2(:,:), itagn(:)
123 . ,
ALLOCATABLE :: normt(:,:), poly(:,:), rpoly(:,:),
124 . rpoly_f(:,:), volu(:), pnodes(:,:),
125 . pholes(:,:), rpoly_old(:), volusort(:),
126 . volu_old(:), rpoly_f_old(:,:),
127 . rfvnod_old(:,:), xnew(:,:), rnedge(:,:),
128 . aref(:,:), rfvnod2(:,:), xns(:,:),
129 . xns2(:,:), xxxsa(:,:)
131 INTEGER FAC(4,6), FACNOR(4,6), FAC4(3,4)
138 DATA facnor /3,4,5,6,
151 INTEGER,
DIMENSION(:),
POINTER :: IPOLY, IELNOD
152 INTEGER,
DIMENSION(:,:),
POINTER :: NREF
154 . ,
DIMENSION(:),
POINTER :: rpoly
156 . ,
DIMENSION(:,:),
POINTER :: aref
157 TYPE(polygone),
POINTER :: PTR
159 TYPE(polygone),
POINTER :: FIRST, PTR_PREC, PTR_CUR, PTR_TMP,
160 . PTR_OLD, FIRST2, PTR_CUR2, PTR_PREC2,
165 INTEGER,
DIMENSION(:),
POINTER :: POLH
166 TYPE(POLYHEDRE),
POINTER :: PTR
168 TYPE(polyhedre),
POINTER :: , PH_PREC, PH_CUR, PH_TMP
191 ALLOCATE(xxxsa(3,nnsa))
195 i1=
fvspmd(ifv)%IBUF_L(1,i)
196 i2=
fvspmd(ifv)%IBUF_L(2,i)
202 i1=
fvspmd(ifv)%IBUFA_L(1,i)
203 i2=
fvspmd(ifv)%IBUFA_L(2,i)
209 i1=
fvspmd(ifv)%IBUFSA_L(1,i)
210 i2=
fvspmd(ifv)%IBUFSA_L(2,i)
218 IF (ispmd/=
fvspmd(ifv)%PMAIN-1)
RETURN
261 area2=sqrt(nrx**2+nry**2+nrz**2)
262 elarea(iel)=half*area2
263 norm(1,iel)=nrx/area2
264 norm(2,iel)=nry/area2
265 norm(3,iel)=nrz/area2
267 volg=volg+one_over_6*(x1*nrx+y1*nry+z1*nrz)
274 IF (tagela(iel)>0)
THEN
284 ELSEIF (tagela(iel)<0)
THEN
304 area2=sqrt(nrx**2+nry**2+nrz**2)
305 norma(1,iel)=nrx/area2
306 norma(2,iel)=nry/area2
307 norma(3,iel)=nrz/area2
328 WRITE(istdo,
'(A25,I10,A23)')
329 .
' ** MONITORED VOLUME ID: ',ivolu(1),
' - BUILDING POLYGONS **'
341 IF (
ALLOCATED(facet))
DEALLOCATE(facet)
342 IF (
ALLOCATED(tri))
DEALLOCATE(tri)
343 IF (
ALLOCATED(normt))
DEALLOCATE(normt)
344 IF (
ALLOCATED(poly))
DEALLOCATE(poly)
345 ALLOCATE(facet(6,1+nfacmax), tri(nfacmax,4),
346 . normt(3,nfacmax), poly(3,nvmax))
388 xl7(1)=pp(1,1)*(xx-xc)+pp(2,1)*(yy-yc)+pp(3,1)*(zz-zc)
389 xl7(2)=pp(1,2)*(xx-xc)+pp(2,2)*(yy-yc)+pp(3,2)*(zz-zc)
390 xl7(3)=pp(1,3)*(xx-xc)+pp(2,3)*(yy-yc)+pp(3,3)*(zz-zc)
402 IF (tagela(iel)>0)
THEN
412 ELSEIF (tagela(iel)<0)
THEN
429 IF (xbmax<xtmin.OR.ybmax<ytmin.OR.zbmax<ztmin.OR.
430 . xbmin>xtmax.OR.ybmin>ytmax.OR.zbmin>ztmax)
433 tverts(1)=pp(1,1)*(x1-xc)+pp(2,1)*(y1-yc)+pp(3,1)*(z1-zc)
434 tverts(2)=pp(1,2)*(x1-xc)+pp(2,2)*(y1-yc)+pp(3,2)*(z1-zc)
435 tverts(3)=pp(1,3)*(x1-xc)+pp(2,3)*(y1-yc)+pp(3,3)*(z1-zc)
436 tverts(4)=pp(1,1)*(x2-xc)+pp(2,1)*(y2-yc)+pp(3,1)*(z2-zc)
437 tverts(5)=pp(1,2)*(x2-xc)+pp(2,2)*(y2-yc)+pp(3,2)*(z2-zc)
438 tverts(6)=pp(1,3)*(x2-xc)+pp(2,3)*(y2-yc)+pp(3,3)*(z2-zc)
439 tverts(7)=pp(1,1)*(x3-xc)+pp(2,1)*(y3-yc)+pp(3,1)*(z3-zc)
440 tverts(8)=pp(1,2)*(x3-xc)+pp(2,2)*(y3-yc)+pp(3,2)*(z3-zc)
441 tverts(9)=pp(1,3)*(x3-xc)+pp(2,3)*(y3-yc)+pp(3,3)*(z3-zc)
443 CALL tribox3(icut, bcenter, bhalfsize, tverts)
451 x1=xg+(one+tole)*(x1-xg)
452 y1=yg+(one+tole)*(y1-yg)
453 z1=zg+(one+tole)*(z1-zg)
454 x2=xg+(one+tole)*(x2-xg)
455 y2=yg+(one+tole)*(y2-yg)
456 z2=zg+(one+tole)*(z2-zg)
457 x3=xg+(one+tole)*(x3-xg)
458 y3=yg+(one+tole)*(y3-yg)
459 z3=zg+(one+tole)*(z3-zg)
461 tverts(1)=pp(1,1)*(x1-xc)+pp(2,1)*(y1-yc)+pp(3,1)*(z1-zc)
462 tverts(2)=pp(1,2)*(x1-xc)+pp(2,2)*(y1-yc)+pp(3,2)*(z1-zc)
463 tverts(3)=pp(1,3)*(x1-xc)+pp(2,3)*(y1-yc)+pp(3,3)*(z1-zc)
464 tverts(4)=pp(1,1)*(x2-xc)+pp(2,1)*(y2-yc)+pp(3,1)*(z2-zc)
465 tverts(5)=pp(1,2)*(x2-xc)+pp(2,2)*(y2-yc)+pp(3,2)*(z2-zc)
466 tverts(6)=pp(1,3)*(x2-xc)+pp(2,3)*(y2-yc)+pp(3,3)*(z2-zc)
467 tverts(7)=pp(1,1)*(x3-xc)+pp(2,1)*(y3-yc)+pp(3,1)*(z3-zc)
468 tverts(8)=pp(1,2)*(x3-xc)+pp(2,2)*(y3-yc)+pp(3,2)*(z3-zc)
469 tverts(9)=pp(1,3)*(x3-xc)+pp(2,3)*(y3-yc)+pp(3,3)*(z3-zc)
471 CALL tribox3(icut, bcenter, bhalfsize, tverts)
488 tmpbox(1,j)=xb(1,bric(j,i))
489 tmpbox(2,j)=xb(2,bric(j,i))
493 tmpnorm(1,j)=-sfac(j,2,i)
494 tmpnorm(2,j)=-sfac(j,3,i)
495 tmpnorm(3,j)=-sfac(j,4,i)
497 CALL itribox(tmptri, tmpbox, tmpnorm, nverts, poly,
501 IF (.NOT.
ASSOCIATED(first))
THEN
506 ptr_prec%PTR => ptr_cur
508 ALLOCATE(ptr_cur%IPOLY(6+nverts),
509 . ptr_cur%IELNOD(nverts),
510 . ptr_cur%RPOLY(4+3*nverts))
512 ptr_cur%IPOLY(2)=nverts
517 ptr_cur%RPOLY(1)=zero
518 ptr_cur%RPOLY(2)=norma(1,iel)
519 ptr_cur%RPOLY(3)=norma(2,iel)
520 ptr_cur%RPOLY(4)=norma(3,iel)
523 ptr_cur%IPOLY(6+j)=nns
524 ptr_cur%IELNOD(j)=iel
525 ptr_cur%RPOLY(4+3*(j-1)+1)=poly(1,j)
526 ptr_cur%RPOLY(4+3*(j-1)+2)=poly(2,j)
527 ptr_cur%RPOLY(4+3*(j-1)+3)=poly(3,j)
538 x1=xg+(one+tole)*(x1-xg)
539 y1=yg+(one+tole)*(y1-yg)
540 z1=zg+(one+tole)*(z1-zg)
541 x2=xg+(one+tole)*(x2-xg)
542 y2=yg+(one+tole)*(y2-yg)
543 z2=zg+(one+tole)*(z2-zg)
544 x3=xg+(one+tole)*(x3-xg)
545 y3=yg+(one+tole)*(y3-yg)
546 z3=zg+(one+tole)*(z3-zg)
572 CALL tritri3(icut, fv0, fv1, fv2, fu0, fu1, fu2)
593 CALL tritri3(icut, fv0, fv1, fv2, fu0, fu1, fu2)
612 nsmax=
max(nsmax,facet(j,1))
616 IF (npoly_old>0)
THEN
617 ptr_cur => ptr_old%PTR
621 DO j=1,npoly-npoly_old
622 ptr_tmp => ptr_cur%PTR
623 DEALLOCATE(ptr_cur%IPOLY, ptr_cur%RPOLY,
628 IF (npoly_old>0)
THEN
639 IF (tbric(7,i)<=1)
THEN
640 DEALLOCATE(facet, tri, normt, poly)
646 IF (itagb(nv)==1) cycle
647 IF (tbric(7+j,i)==2)
THEN
650 quad(1,k)=xb(1,bric(kk,i))
651 quad(2,k)=xb(2,bric(kk,i))
652 quad(3,k)=xb(3,bric(kk,i))
657 IF (tagela(iel)>0)
THEN
662 ELSEIF (tagela(iel)<0)
THEN
669 normt(1,k)=norma(1,iel)
670 normt(2,k)=norma(2,iel)
671 normt(3,k)=norma(3,iel)
674 normf(1,k)=sfac(facnor(k,j),2,i)
675 normf(2,k)=sfac(facnor(k,j),3,i)
676 normf(3,k)=sfac(facnor(k,j),4,i)
687 IF (
ALLOCATED(ipoly))
DEALLOCATE(ipoly)
688 IF (
ALLOCATED(rpoly))
DEALLOCATE(rpoly)
689 IF (
ALLOCATED(ielnod))
DEALLOCATE(ielnod)
690 ALLOCATE(ipoly(6+nppmax+1+npolmax,npolmax),
691 . rpoly(nrpmax+3*npolmax,npolmax),
692 . ielnod(nppmax,npolmax))
694 CALL facepoly(quad, tri, ns, ipoly, rpoly,
695 . nr, normf, normt, nfacmax, nnp,
696 . nrpmax, i, nv, dxm , npolmax,
697 . nppmax, info, ielnod, xxx, elema,
698 . ibuf, nela, i, j, ivolu(1),
699 . ilvout, ibufa, tagela, xxxa )
700 IF (info==1)
GOTO 200
703 IF (ipoly(1,n)==-1) cycle
705 IF (.NOT.
ASSOCIATED(first2))
THEN
710 ptr_prec2%PTR => ptr_cur2
714 ALLOCATE(ptr_cur2%IPOLY(6+nn+1+nhol),
715 . ptr_cur2%IELNOD(nn),
716 . ptr_cur2%RPOLY(4+3*nn+3*nhol))
718 ptr_cur2%IPOLY(m)=ipoly(m,n)
721 ptr_cur2%RPOLY(m)=rpoly(m,n)
725 ptr_cur2%IPOLY(6+m)=nns2
727 ptr_cur2%IELNOD(m)=facet(j,1+mm)
728 ptr_cur2%RPOLY(4+3*(m-1)+1)=rpoly(4+3*(m-1)+1,n)
729 ptr_cur2%RPOLY(4+3*(m-1)+2)=rpoly(4+3*(m-1)+2,n)
730 ptr_cur2%RPOLY(4+3*(m-1)+3)=rpoly(4+3*(m-1)+3,n)
732 ptr_cur2%IPOLY(6+nn+1)=nhol
734 ptr_cur2%IPOLY(6+nn+1+m)=ipoly(6+nn+1+m,n)
735 ptr_cur2%RPOLY(4+3*nn+3*(m-1)+1)=
736 . rpoly(4+3*nn+3*(m-1)+1,n)
737 ptr_cur2%RPOLY(4+3*nn+3*(m-1)+2)=
738 . rpoly(4+3*nn+3*(m-1)+2,n)
739 ptr_cur2%RPOLY(4+3*nn+3*(m-1)+3)=
740 . rpoly(4+3*nn+3*(m-1)+3,n)
742 ptr_prec2 => ptr_cur2
745 DEALLOCATE(ipoly, rpoly, ielnod)
750 DEALLOCATE(facet, tri, normt, poly)
758 ptr_prec%PTR => ptr_cur
760 nhol=ptr_cur2%IPOLY(6+nn+1)
761 ALLOCATE(ptr_cur%IPOLY(6+nn+1+nhol),
762 . ptr_cur%IELNOD(nn),
763 . ptr_cur%RPOLY(4+3*nn+3*nhol))
765 ptr_cur%IPOLY(j)=ptr_cur2%IPOLY(j)
768 ptr_cur%RPOLY(j)=ptr_cur2%RPOLY(j)
771 ptr_cur%IPOLY(6+j)=nns+ptr_cur2%IPOLY(6+j)
772 ptr_cur%IELNOD(j)=ptr_cur2%IELNOD(j)
773 ptr_cur%RPOLY(4+3*(j-1)+1)=ptr_cur2%RPOLY(4+3*(j-1)+1)
774 ptr_cur%RPOLY(4+3*(j-1)+2)=ptr_cur2%RPOLY(4+3*(j-1)+2)
775 ptr_cur%RPOLY(4+3*(j-1)+3)=ptr_cur2%RPOLY(4+3*(j-1)+3)
777 ptr_cur%IPOLY(6+nn+1)=nhol
779 ptr_cur%IPOLY(6+nn+1+j)=ptr_cur2%IPOLY(6+nn+1+j)
780 ptr_cur%RPOLY(4+3*nn+3*(j-1)+1)=
781 . ptr_cur2%RPOLY(4+3*nn+3*(j-1)+1)
782 ptr_cur%RPOLY(4+3*nn+3*(j-1)+2)=
783 . ptr_cur2%RPOLY(4+3*nn+3*(j-1)+2)
784 ptr_cur%RPOLY(4+3*nn+3*(j-1)+3)=
785 . ptr_cur2%RPOLY(4+3*nn+3*(j-1)+3)
787 ptr_tmp2 => ptr_cur2%PTR
788 DEALLOCATE(ptr_cur2%IPOLY, ptr_cur2%RPOLY, ptr_cur2%IELNOD)
803 ptr_cur => ptr_cur%PTR
813 vnorm=sqrt(vx3**2+vy3**2+vz3**2)
817 ss=vx3*vx1+vy3*vy1+vz3*vz1
821 vnorm=sqrt(vx1**2+vy1**2+vz1**2)
857 zl1=(x1-x0)*vx3+(y1-y0)*vy3+(z1-z0)*vz3
858 zl2=(x2-x0)*vx3+(y2-y0)*vy3+(z2-z0)*vz3
859 zl3=(x3-x0)*vx3+(y3-y0)*vy3+(z3-z0)*vz3
872 ALLOCATE(inedge(6,npoly*nppmax), rnedge(6,npoly*nppmax))
878 IF (zlc<zbmin.OR.zlc>zbmax)
THEN
890 DO k=1,ptr_cur%IPOLY(2)
891 xx=ptr_cur%RPOLY(4+3*(k-1)+1)
892 yy=ptr_cur%RPOLY(4+3*(k-1)+2)
893 zz=ptr_cur%RPOLY(4+3*(k-1)+3)
894 zl=(xx-x0)*vx3+(yy-y0)*vy3+(zz-z0)*vz3
898 IF (zlmin*zlmax<zero)
THEN
902 IF (ity==2) nhol=ptr_cur%IPOLY(6+nn+1)
903 ALLOCATE(ipoly(6+2*nn+1+nhol,nn),
904 . rpoly(4+3*2*nn+3*nhol,nn),
906 . nref(2,nn), aref(4,nn),
909 . ipoly, rpoly, ptr_cur%IPOLY, ptr_cur%RPOLY, inedge,
910 . rnedge, nbnedge, vx3, vy3, vz3,
911 . x0, y0, z0, nref, aref,
912 . nn, nhol, iiz, iz, nns3,
913 . nnp , nnsp, ielnod, ptr_cur%IELNOD)
915 ptr_tmp => ptr_cur%PTR
916 npoly_new=npoly_new-1
918 npoly_new=npoly_new+1
920 DEALLOCATE(ptr_cur%IPOLY, ptr_cur%RPOLY,
924 ptr_prec%PTR => ptr_cur
929 ALLOCATE(ptr_cur%IPOLY(6+nn+1+nhol),
930 . ptr_cur%IELNOD(nn),
931 . ptr_cur%RPOLY(4+3*nn+3*nhol))
933 ptr_cur%IPOLY(m)=ipoly(m,n)
936 ptr_cur%RPOLY(m)=rpoly(m,n)
940 ptr_cur%IPOLY(6+m)=mm
941 ptr_cur%IELNOD(m)=ielnod(m,n)
942 ptr_cur%RPOLY(4+3*(m-1)+1)=rpoly(4+3*(m-1)+1,n)
943 ptr_cur%RPOLY(4+3*(m-1)+2)=rpoly(4+3*(m-1)+2,n)
944 ptr_cur%RPOLY(4+3*(m-1)+3)=rpoly(4+3*(m-1)+3,n)
947 ptr_cur%IPOLY(6+nn+1)=nhol
949 ptr_cur%IPOLY(6+nn+1+m)=ipoly(6+nn+1+m,n)
950 ptr_cur%RPOLY(4+3*nn+3*(m-1)+1)=
951 . rpoly(4+3*nn+3*(m-1)+1,n)
952 ptr_cur%RPOLY(4+3*nn+3*(m-1)+2)=
953 . rpoly(4+3*nn+3*(m-1)+2,n)
954 ptr_cur%RPOLY(4+3*nn+3*(m-1)+3)=
955 . rpoly(4+3*nn+3*(m-1)+3,n)
958 ptr_cur%IZ(2)=iz(2,n)
961 ALLOCATE(ptr_cur%NREF(3,nnsp),
962 . ptr_cur%AREF(4,nnsp))
965 ptr_cur%NREF(1,m)=nns3
966 ptr_cur%NREF(2,m)=nref(1,m)
967 ptr_cur%NREF(3,m)=nref(2,m)
968 ptr_cur%AREF(1,m)=aref(1,m)
970 ptr_cur%AREF(3,m)=aref(3,m)
971 ptr_cur%AREF(4,m)=aref(4,m)
975 IF (n==nnp) ptr_cur%PTR => ptr_tmp
978 DEALLOCATE(ipoly, rpoly, ielnod, nref, aref, iz)
980 IF (zlmin==zero)
THEN
982 ALLOCATE(nref(2,2*nn), aref(4,2*nn))
984 . ptr_cur%IPOLY, ptr_cur%RPOLY, vx3, vy3, vz3,
985 . nbnedge, inedge, rnedge, x0, y0,
986 . z0, iiz , nns3, nref, aref,
990 ALLOCATE(ptr_cur%NREF(3,nnsp),
991 . ptr_cur%AREF(4,nnsp))
995 ptr_cur%NREF(1,n)=nns3
996 ptr_cur%NREF(2,n)=nref(1,n)
997 ptr_cur%NREF(3,n)=nref(2,n)
998 ptr_cur%AREF(1,n)=aref(1,n)
999 ptr_cur%AREF(2,n)=aref(2,n)
1000 ptr_cur%AREF(3,n)=aref(3,n)
1001 ptr_cur%AREF(4,n)=aref(4,n)
1004 DEALLOCATE(nref, aref)
1006 IF (zlmin>=zero)
THEN
1009 ELSEIF (iiz==1.AND.zlmax<=zero)
THEN
1015 ptr_cur => ptr_cur%PTR
1024 ALLOCATE(redir(nns))
1030 jj=ptr_cur%IPOLY(6+j)
1036 ptr_cur => ptr_cur%PTR
1044 n1=ptr_cur%NREF(2,j)
1045 n2=ptr_cur%NREF(3,j)
1046 IF (n1>0) ptr_cur%NREF(2,j)=redir(n1)
1047 IF (n2>0) ptr_cur%NREF(3,j)=redir(n2)
1050 ptr_cur => ptr_cur%PTR
1057 ptr_cur => ptr_cur%PTR
1059 ALLOCATE(ledge(nbnedge))
1064 IF (inedge(6,k)/=i) cycle
1065 IF (inedge(1,k)==1.AND.inedge(5,k)/=j) cycle
1066 IF (inedge(1,k)==2.AND.inedge(4,k)/=j.AND.
1067 . inedge(5,k)/=j) cycle
1072 ALLOCATE(ipoly(6+2*nedge+1+nedge,nedge),
1073 . rpoly(4+6*nedge+3*nedge,nedge),
1074 . iz(3,nedge), ielnod(nedge,nedge))
1076 CALL horipoly(inedge, rnedge, ledge, nedge, ipoly,
1077 . rpoly, iz, ielnod, nnp, vx3,
1081 IF (ipoly(1,n)==-1) cycle
1084 ptr_prec%PTR => ptr_cur
1086 nhol=ipoly(6+nn+1,n)
1087 ALLOCATE(ptr_cur%IPOLY(6+nn+1+nhol),
1088 . ptr_cur%RPOLY(4+3*nn+3*nhol),
1089 . ptr_cur%IELNOD(nn))
1092 ptr_cur%IPOLY(m)=ipoly(m,n)
1095 ptr_cur%RPOLY(m)=rpoly(m,n)
1098 ptr_cur%IPOLY(6+m)=ipoly(6+m,n)
1099 ptr_cur%IELNOD(m)=ielnod(m,n)
1100 ptr_cur%RPOLY(4+3*(m-1)+1)=rpoly(4+3*(m-1)+1,n)
1101 ptr_cur%RPOLY(4+3*(m-1)+2)=rpoly(4+3*(m-1)+2,n)
1102 ptr_cur%RPOLY(4+3*(m-1)+3)=rpoly(4+3*(m-1)+3,n)
1104 nhol=ipoly(6+nn+1,n)
1105 ptr_cur%IPOLY(6+nn+1)=nhol
1107 ptr_cur%IPOLY(6+nn+1+m)=ipoly(6+nn+1+m,n)
1108 ptr_cur%RPOLY(4+3*nn+3*(m-1)+1)=
1109 . rpoly(4+3*nn+3*(m-1)+1,n)
1110 ptr_cur%RPOLY(4+3*nn+3*(m-1)+2)=
1111 . rpoly(4+3*nn+3*(m-1)+
1112 ptr_cur%RPOLY(4+3*nn+3*(m-1)+3)=
1113 . rpoly(4+3*nn+3*(m-1)+3,n)
1116 ptr_cur%IZ(m)=iz(m,n)
1121 DEALLOCATE(ipoly, rpoly, iz, ielnod)
1131 ptr_cur => ptr_cur%PTR
1139 IF (ilvout/=0)
WRITE(istdo,
'(A25,I10,A24)')
1140 .
' ** MONITORED VOLUME ID: ',ivolu(1),
' - BUILDING POLYHEDRA **'
1145 IF (tbric(7,i)/=2) cycle
1151 ity=ptr_cur%IPOLY(1)
1152 IF ((ity==1.AND.ptr_cur%IPOLY(4)==i).OR.
1154 . (ptr_cur%IPOLY(3)==i.OR.ptr_cur%IPOLY(4)==i)))
THEN
1156 nppmax=
max(nppmax,ptr_cur%IPOLY(2))
1158 ptr_cur => ptr_cur%PTR
1163 ALLOCATE(polb(npolb), ipoly(
1164 . rpoly(nrpmax,npolb), redir(npolb))
1169 ity=ptr_cur%IPOLY(1)
1171 IF (((ity==1.AND.ptr_cur%IPOLY(4)==i).OR.
1172 . (ity==2.AND.(ptr_cur%IPOLY(3)==i.OR.
1173 . ptr_cur%IPOLY(4)==i)))
1175 . ((ityz==1.AND.ptr_cur%IZ(2)==inz).OR.
1176 . (ityz==2.AND.(ptr_cur%IZ(2)==inz.OR.
1177 . ptr_cur%IZ(3)==inz))))
THEN
1182 ipoly(k,npolb)=ptr_cur%IPOLY(k)
1185 rpoly(k,npolb)=ptr_cur%RPOLY(k)
1189 ptr_cur => ptr_cur%PTR
1196 IF (
ALLOCATED(polh))
DEALLOCATE(polh)
1197 ALLOCATE(polh(nphmax+2,npolhmax))
1199 CALL polyhedr(ipoly, rpoly , polb, npolb, polh,
1200 . nnp, nrpmax , nphmax, i, dxm ,
1201 . info , npolhmax, nppmax, rvolu(50))
1202 IF (info==1)
GOTO 300
1206 polc=redir(polb(npl))
1209 ity=ptr_cur%IPOLY(1)
1211 ptr_cur%IPOLY(5)=npolh+ipoly(5,npl)
1212 ELSEIF (ity==2)
THEN
1213 IF (ptr_cur%IPOLY(5)==0)
THEN
1214 ptr_cur%IPOLY(5)=npolh+ipoly(5,npl)
1216 ptr_cur%IPOLY(6)=npolh+ipoly(6,npl)
1219 IF (npl==npolb)
GOTO 350
1221 polc=redir(polb(npl))
1223 ptr_cur => ptr_cur%PTR
1229 IF (.NOT.
ASSOCIATED(phfirst))
THEN
1234 ph_prec%PTR => ph_cur
1237 ALLOCATE(ph_cur%POLH(2+nn))
1239 ph_cur%POLH(1)=polh(1,n)
1240 ph_cur%POLH(2)=polh(2,n)
1242 ph_cur%POLH(2+m)=redir(polh(2+m,n))
1248 DEALLOCATE(ipoly, rpoly, polb, polh, redir)
1263 nns2=nns2+ptr_cur%NNSP
1264 IF (ptr_cur%IPOLY(1)==1)
THEN
1265 lenimax=
max(lenimax,6+nn+1)
1266 lenrmax=
max(lenrmax,4+3*nn)
1267 ELSEIF (ptr_cur%IPOLY(1)==2)
THEN
1268 nhol=ptr_cur%IPOLY(6+nn+1)
1269 lenimax=
max(lenimax,6+nn+1+nhol)
1270 lenrmax=
max(lenrmax,4+3*nn+3*nhol)
1272 ptr_cur => ptr_cur%PTR
1278 nphmax=
max(nphmax,nn)
1279 ph_cur => ph_cur%PTR
1372 ALLOCATE(itagn(nnsa))
1382 n1=
fvspmd(ifv)%ELEMSA(1,iel)
1383 n2=
fvspmd(ifv)%ELEMSA(2,iel)
1384 n3=
fvspmd(ifv)%ELEMSA(3,iel)
1385 IF (n1>0) itagn(n1)=1
1386 IF (n1>0) itagn(n2)=1
1387 IF (n1>0) itagn(n3)=1
1394 ity=tfaca(2*(j-1)+1,i)
1397 nv=tfaca(2*(j-1)+2,i)
1398 IF (itagba(nv)==0)
THEN
1399 lenimax=
max(lenimax,6+3+1)
1400 lenrmax=
max(lenrmax,6+3*3)
1404 ELSEIF (nfac==6)
THEN
1411 ELSEIF (nfac==6)
THEN
1414 ELSEIF (ity==2)
THEN
1420 ELSEIF (nfac==6)
THEN
1425 ELSEIF (ity==3)
THEN
1429 ity=ptr_cur%IPOLY(1)
1431 iel=ptr_cur%IPOLY(3)
1432 IF (-tagela(iel)==i) nnp=nnp+1
1434 ptr_cur => ptr_cur%PTR
1439 nphmax=
max(nphmax,nnp)
1444 jj=
fvspmd(ifv)%IXSA(2*(j-1)+1,i)
1447 ELSEIF (nfac==6)
THEN
1458 ALLOCATE(ipoly_f(lenimax,npoly), rpoly_f(lenrmax,npoly),
1459 . polh_f(2+nphmax,npolh), ifvnod
1460 . ifvnod2(2,nns2), rfvnod2(4,nns2), xns(3,nns),
1470 jj=ptr_cur%IPOLY(6+j)
1473 xns(1,nns)=ptr_cur%RPOLY(4+3*(j-1)+1)
1474 xns(2,nns)=ptr_cur%RPOLY(4+3*(j-1)+2)
1475 xns(3,nns)=ptr_cur%RPOLY(4+3*(j-1)+3)
1478 ptr_cur => ptr_cur%PTR
1486 ipoly_f(j,i)=ptr_cur%IPOLY(j)
1489 rpoly_f(j,i)=ptr_cur%RPOLY(j)
1492 jj=ptr_cur%IPOLY(6+j)
1496 ifvnod(nns)=ptr_cur%IELNOD(j)
1501 IF (ptr_cur%IPOLY(1)==1)
THEN
1502 ipoly_f(4,i)=ipoly_f(5,i)
1504 ELSEIF (ptr_cur%IPOLY(1)==2)
THEN
1505 nhol=ptr_cur%IPOLY(6+nn+1)
1506 ipoly_f(6+nn+1,i)=nhol
1508 ipoly_f(6+nn+1+j,i)=ptr_cur%IPOLY(6+nn+1+j)
1509 rpoly_f(4+3*nn+3*(j-1)+1,i)=
1510 . ptr_cur%RPOLY(4+3*nn+3*(j-1)+1)
1511 rpoly_f(4+3*nn+3*(j-1)+2,i)=
1512 . ptr_cur%RPOLY(4+3*nn+3*(j-1)+2)
1513 rpoly_f(4+3*nn+3*(j-1)+3,i)=
1514 . ptr_cur%RPOLY(4+3*nn+3*(j-1)+3)
1520 jj=ptr_cur%NREF(1,j)
1521 ifvnod2(1,jj)=ptr_cur%NREF(2,j)
1522 ifvnod2(2,jj)=ptr_cur%NREF(3,j)
1523 rfvnod2(1,jj)=ptr_cur%AREF(1,j)
1524 rfvnod2(2,jj)=ptr_cur%AREF(2,j)
1525 rfvnod2(3,jj)=ptr_cur%AREF(3,j)
1526 rfvnod2(4,jj)=ptr_cur%AREF(4,j)
1529 ptr_tmp => ptr_cur%PTR
1530 DEALLOCATE(ptr_cur%IPOLY, ptr_cur%RPOLY, ptr_cur%IELNOD)
1531 IF (nnsp>0)
DEALLOCATE(ptr_cur%NREF, ptr_cur%AREF)
1542 IF (ifvnod2(1,ii)/=n2.AND.ifvnod2(2,ii)/=n2)
THEN
1543 WRITE(istdo,*)
'PROBLEM DEPENDANT NODE ',i
1551 IF (ifvnod2(1,ii)/=n1.AND.ifvnod2(2,ii)/=n1)
THEN
1552 WRITE(istdo,*)
'PROBLEM DEPENDANT NODE ',i
1564 val=abs(xns(1,n1)-xns(1,n2))
1566 IF (abs(xns(j,n1)-xns(j,n2))>val)
THEN
1568 val=abs(xns(j,n1)-xns(j,n2))
1571 rfvnod2(1,i)=(rfvnod2(ii+1,i)-xns(ii,n2))/
1572 . (xns(ii,n1)-xns(ii,n2))
1580 polh_f(j,i)=ph_cur%POLH(j)
1582 ph_tmp => ph_cur%PTR
1583 DEALLOCATE(ph_cur%POLH)
1599 ity=tfaca(2*(j-1)+1,i)
1602 nv=tfaca(2*(j-1)+2,i)
1603 IF (itagba(nv)==0)
THEN
1613 ipoly_f(5,npoly)=npolh+i
1614 ipoly_f(6,npoly)=npolh+nv
1615 ipoly_f(6+1,npoly)=nns+1
1616 ipoly_f(6+2,npoly)=nns+2
1617 ipoly_f(6+3,npoly)=nns+3
1618 ipoly_f(6+3+1,npoly)=0
1638 nn1=
fvspmd(ifv)%IXSA(n1,i)
1639 nn2=
fvspmd(ifv)%IXSA(n2,i)
1640 nn3=
fvspmd(ifv)%IXSA(n3,i)
1664 area2=sqrt(nrx**2+nry**2+nrz**2)
1665 rpoly_f(2,npoly)=nrx/area2
1666 rpoly_f(3,npoly)=nry/area2
1667 rpoly_f(4,npoly)=nrz/area2
1668 rpoly_f(4+1,npoly)=x1
1669 rpoly_f(4+2,npoly)=y1
1670 rpoly_f(4+3,npoly)=z1
1671 rpoly_f(4+4,npoly)=x2
1672 rpoly_f(4+5,npoly)=y2
1673 rpoly_f(4+6,npoly)=z2
1674 rpoly_f(4+7,npoly)=x3
1675 rpoly_f(4+8,npoly)=y3
1676 rpoly_f(4+9,npoly)=z3
1679 polh_f(2+nnp,npolh+i)=npoly
1680 ELSEIF (nfac==6)
THEN
1703 nn1=
fvspmd(ifv)%IXSA(n1,i)
1704 nn2=
fvspmd(ifv)%IXSA(n2,i)
1705 nn3=
fvspmd(ifv)%IXSA(n3,i)
1706 nn4=
fvspmd(ifv)%IXSA(n4,i)
1726 ipoly_f(5,npoly)=npolh+i
1727 ipoly_f(6,npoly)=npolh+nv
1728 ipoly_f(6+1,npoly)=nns+1
1729 ipoly_f(6+2,npoly)=nns+2
1730 ipoly_f(6+3,npoly)=nns+3
1731 ipoly_f(6+3+1,npoly)=0
1745 area2=sqrt(nrx**2+nry**2+nrz**2)
1746 rpoly_f(2,npoly)=nrx/area2
1747 rpoly_f(3,npoly)=nry/area2
1748 rpoly_f(4,npoly)=nrz/area2
1749 rpoly_f(4+1,npoly)=x1
1750 rpoly_f(4+2,npoly)=y1
1751 rpoly_f(4+3,npoly)=z1
1752 rpoly_f(4+4,npoly)=x2
1753 rpoly_f(4+5,npoly)=y2
1754 rpoly_f(4+6,npoly)=z2
1755 rpoly_f(4+7,npoly)=x3
1756 rpoly_f(4+8,npoly)=y3
1757 rpoly_f(4+9,npoly)=z3
1760 polh_f(2+nnp,npolh+i)=npoly
1767 ipoly_f(5,npoly)=npolh+i
1768 ipoly_f(6,npoly)=npolh+nv
1769 ipoly_f(6+1,npoly)=nns+1
1770 ipoly_f(6+2,npoly)=nns+2
1771 ipoly_f(6+3,npoly)=nns+3
1772 ipoly_f(6+3+1,npoly)=0
1786 area2=sqrt(nrx**2+nry**2+nrz**2)
1787 rpoly_f(2,npoly)=nrx/area2
1788 rpoly_f(3,npoly)=nry/area2
1789 rpoly_f(4,npoly)=nrz/area2
1790 rpoly_f(4+1,npoly)=x1
1791 rpoly_f(4+2,npoly)=y1
1792 rpoly_f(4+3,npoly)=z1
1793 rpoly_f(4+4,npoly)=x3
1794 rpoly_f(4+5,npoly)=y3
1795 rpoly_f(4+6,npoly)=z3
1796 rpoly_f(4+7,npoly)=x4
1797 rpoly_f(4+8,npoly)=y4
1798 rpoly_f(4+9,npoly)=z4
1801 polh_f(2+nnp,npolh+i)=npoly
1804 DO k=1,polh_f(1,npolh+nv)
1805 kk=polh_f(2+k,npolh+nv)
1806 IF (ipoly_f(1,kk)==2.AND.
1807 . ipoly_f(6,kk)==npolh+i)
THEN
1809 polh_f(2+nnp,npolh+i)=kk
1813 ELSEIF (ity==2)
THEN
1815 ELSEIF (ity==3)
THEN
1821 IF (-tagela(iel)==i)
THEN
1823 polh_f(2+nnp,npolh+i)=k
1829 ipoly_f(6,k)=npolh+i
1835 polh_f(1,npolh+i)=nnp
1836 polh_f(2,npolh+i)=-i
1843 IF (ipoly_f(1,i)==1)
THEN
1845 IF (tagela(iel)>0) ipoly_f(3,i)=tagela(iel)
1850 IF (tagels(iel)>0)
THEN
1854 ipoly_f(3,npoly)=iel
1855 ipoly_f(4,npoly)=npolh_old+tagels(iel)
1858 ipoly_f(7,npoly)=nns+1
1859 ipoly_f(8,npoly)=nns+2
1860 ipoly_f(9,npoly)=nns+3
1886 nn1=
fvspmd(ifv)%ELEMSA(1,iel)
1887 nn2=
fvspmd(ifv)%ELEMSA(2,iel)
1888 nn3=
fvspmd(ifv)%ELEMSA(3,iel)
1893 rpoly_f(1,npoly)=elarea(iel)
1894 rpoly_f(2,npoly)=
norm(1,iel)
1895 rpoly_f(3,npoly)=
norm(2,iel)
1896 rpoly_f(4,npoly)=
norm(3,iel)
1912 rpoly_f(10,npoly)=z2
1913 rpoly_f(11,npoly)=x3
1914 rpoly_f(12,npoly)=y3
1915 rpoly_f(13,npoly)=z3
1917 nnp=polh_f(1,npolh_old+tagels(iel))
1919 polh_f(1,npolh_old+tagels(iel))=nnp
1920 polh_f(2+nnp,npolh_old+tagels(iel))=npoly
1931 IF (ity==2) nhol=ipoly_f(6+nn+1,i)
1943 x2=rpoly_f(4+3*(jj-1)+1,i)
1944 y2=rpoly_f(4+3*(jj-1)+2,i)
1945 z2=rpoly_f(4+3*(jj-1)+3,i)
1946 x3=rpoly_f(4+3*(jjj-1)+1,i)
1947 y3=rpoly_f(4+3*(jjj-1)+2,i)
1948 z3=rpoly_f(4+3*(jjj-1)+3,i)
1963 adr(j)=ipoly_f(6+nn+1+j,i)
1972 x2=rpoly_f(4+3*(jj-1)+1,i)
1973 y2=rpoly_f(4+3*(jj-1)+2,i)
1974 z2=rpoly_f(4+3*(jj-1)+3,i)
1975 x3=rpoly_f(4+3*(jjj-1)+1,i)
1976 y3=rpoly_f(4+3*(jjj-1)+2,i)
1977 z3=rpoly_f(4+3*(jjj-1)+3,i)
1992 x1=rpoly_f(4+3*adr(j)+1,i)
1993 y1=rpoly_f(4+3*adr(j)+2,i)
1994 z1=rpoly_f(4+3*adr(j)+3,i)
1996 DO k=adr(j)+1,adr(j+1)-2
1999 x2=rpoly_f(4+3*(kk-1)+1,i)
2000 y2=rpoly_f(4+3*(kk-1)+2,i)
2001 z2=rpoly_f(4+3*(kk-1)+3,i)
2002 x3=rpoly_f(4+3*(kkk-1)+1,i)
2003 y3=rpoly_f(4+3*(kkk-1)+2,i)
2004 z3=rpoly_f(4+3*(kkk-1)+3,i)
2014 area2=area2+(nnx*nx+nny*ny+nnz*nz)
2020 rpoly_f(1,i)=half*abs(
area)
2035 ELSEIF (ity==2)
THEN
2036 IF (ipoly_f(5,jj)==i)
THEN
2040 ELSEIF (ipoly_f(6,jj)==i)
THEN
2049 volu(i)=volu(i)+third*
area*(x1*nx+y1*ny+z1*nz)
2056 ALLOCATE(ifvnod_old(nns_old), redir(nns_old))
2058 ifvnod_old(i)=ifvnod(i)
2065 nnp_old=ipoly_f(2,i)
2072 x1=rpoly_f(4+3*(j-1)+1,i)
2073 y1=rpoly_f(4+3*(j-1)+2,i)
2074 z1=rpoly_f(4+3*(j-1)+3,i)
2075 lmax2=
max(lmax2,(x1-x0)**2+(y1-y0)**2+(z1-z0)**2)
2083 lmax2=
max(lmax2,(x1-x0)**2+(y1-y0)**2+(z1-z0)**2)
2087 IF (ipoly_f(1,i)==2) nhol=ipoly_f(6+nnp_old+1,i)
2088 ALLOCATE(ipoly_old(nnp_old), rpoly_old(3*nnp_old),
2089 . adr_old(nhol+2), adr(nhol+2))
2091 ipoly_old(j)=ipoly_f(6+j,i)
2094 rpoly_old(j)=rpoly_f(4+j,i)
2101 IF (ipoly_old(1)>0)
THEN
2106 ifvnod(nns)=ifvnod_old(nns_old)
2108 ipoly_f(7,i)=ipoly_old(1)
2114 IF (ipoly_old(j)>0) nns_old=nns_old+1
2115 x1=rpoly_old(3*(j-1)+1)
2116 y1=rpoly_old(3*(j-1)+2)
2117 z1=rpoly_old(3*(j-1)+3)
2118 dd=(x1-x0)**2+(y1-y0)**2+(z1-z0)**2
2121 IF (ipoly_old(j)>0)
THEN
2123 ifvnod(nns)=ifvnod_old(nns_old)
2124 rpoly_f(4+3*(nnp-1)+1,i)=x1
2125 rpoly_f(4+3*(nnp-1)+2,i)=y1
2126 rpoly_f(4+3*(nnp-1)+3,i)=z1
2127 ipoly_f(6+nnp,i)=nns
2129 rpoly_f(4+3*(nnp-1)+1,i)=x1
2130 rpoly_f(4+3*(nnp-1)+2,i)=y1
2131 rpoly_f(4+3*(nnp-1)+3,i)=z1
2132 ipoly_f(6+nnp,i)=ipoly_old(j)
2137 ELSEIF (ipoly_old(j)>0.AND.
2138 . ipoly_old(j0)<0)
THEN
2140 ifvnod(nns)=ifvnod_old(nns_old)
2141 rpoly_f(4+3*(nnp-1)+1,i)=x1
2142 rpoly_f(4+3*(nnp-1)+2,i)=y1
2143 rpoly_f(4+3*(nnp-1)+3,i)=z1
2144 ipoly_f(6+nnp,i)=nns
2146 IF (ipoly_old(j)>0) redir(nns_old)=nns
2152 dd=(x1-x0)**2+(y1-y0)**2+(z1-z0)**2
2153 IF (dd<=tole2.AND.ipoly_old(1)>0)
THEN
2157 ELSEIF (dd<=tole2.AND.ipoly_old(1)<0)
THEN
2164 ipoly_f(6+nnp+1,i)=0
2169 adr_old(j+1)=ipoly_f(6+nnp_old+1+j,i)
2171 adr_old(nhol+2)=nnp_old
2173 x0=rpoly_f(4+3*adr(j)+1,i)
2174 y0=rpoly_f(4+3*adr(j)+2,i)
2175 z0=rpoly_f(4+3*adr(j)+3,i)
2176 IF (ipoly_old(adr_old(j)+1)>0)
THEN
2180 ipoly_f(6+adr(j)+1,i)=nns
2181 ifvnod(nns)=ifvnod_old(nns_old)
2183 ipoly_f(6+adr(j)+1,i)=ipoly_old(adr_old(j)+1)
2188 DO k=adr_old(j)+2,adr_old(j+1)
2190 x1=rpoly_old(3*(k-1)+1)
2191 y1=rpoly_old(3*(k-1)+2)
2192 z1=rpoly_old(3*(k-1)+3)
2193 dd=(x1-x0)**2+(y1-y0)**2+(z1-z0)**2
2196 IF (ipoly_old(k)>0)
THEN
2198 ifvnod(nns)=ifvnod_old(nns_old)
2199 rpoly_f(4+3*(nnp-1)+1,i)=x1
2200 rpoly_f(4+3*(nnp-1)+2,i)=y1
2201 rpoly_f(4+3*(nnp-1)+3,i)=z1
2202 ipoly_f(6+nnp,i)=nns
2204 rpoly_f(4+3*(nnp-1)+1,i)=x1
2205 rpoly_f(4+3*(nnp-1)+2,i)=y1
2206 rpoly_f(4+3*(nnp-1)+3,i)=z1
2207 ipoly_f(6+nnp,i)=ipoly_old(k)
2212 ELSEIF (ipoly_old(k)>0.AND.
2213 . ipoly_old(k0)<0)
THEN
2215 ifvnod(nns)=ifvnod_old(nns_old)
2216 rpoly_f(4+3*(nnp-1)+1,i)=x1
2217 rpoly_f(4+3*(nnp-1)+2,i)=y1
2218 rpoly_f(4+3*(nnp-1)+3,i)=z1
2219 ipoly_f(6+nnp,i)=nns
2221 IF (ipoly_old(k)>0) redir(nns_old)=nns
2224 x1=rpoly_f(4+3*(adr(j)-1)+1,i)
2225 y1=rpoly_f(4+3*(adr(j)-1)+2,i)
2226 z1=rpoly_f(4+3*(adr(j)-1)+3,i)
2227 dd=(x1-x0)**2+(y1-y0)**2+(z1-z0)**2
2228 IF (dd<=tole2.AND.ipoly_old(adr_old(j)+1)>0)
THEN
2232 ELSEIF (dd<=tole2.AND.
2233 . ipoly_old(adr_old(j)+1)<0)
THEN
2235 rpoly_f(4+3*(adr(j)-1)+1,i)=x0
2236 rpoly_f(4+3*(adr(j)-1)+2,i)=y0
2237 rpoly_f(4+3*(adr(j)-1)+3,i)=z0
2238 ipoly_f(6+adr(j)+1,i)=nns
2242 ipoly_f(6+nnp+1,i)=nhol
2244 ipoly_f(6+nnp+1+j,i)=adr(j+1)
2245 rpoly_f(4+3*nnp+3*(j-1)+1,i)=
2246 . rpoly_f(4+3*nnp_old+3*(j-1)+1,i)
2247 rpoly_f(4+3*nnp+3*(j-1)+2,i)=
2248 . rpoly_f(4+3*nnp_old+3*(j-1)+2,i)
2249 rpoly_f(4+3*nnp+3*(j-1)+3,i)=
2250 . rpoly_f(4+3*nnp_old+3*(j-1)+3,i)
2255 IF (nnp<nnp_old)
THEN
2265 DO j=1,ipoly_f(2,i)-2
2268 x2=rpoly_f(4+3*(jj-1)+1,i)
2269 y2=rpoly_f(4+3*(jj-1)+2,i)
2270 z2=rpoly_f(4+3*(jj-1)+3,i)
2271 x3=rpoly_f(4+3*(jjj-1)+1,i)
2272 y3=rpoly_f(4+3*(jjj-1)+2,i)
2273 z3=rpoly_f(4+3*(jjj-1)+3,i)
2292 x2=rpoly_f(4+3*(jj-1)+1,i)
2293 y2=rpoly_f(4+3*(jj-1)+2,i)
2294 z2=rpoly_f(4+3*(jj-1)+3,i)
2295 x3=rpoly_f(4+3*(jjj-1)+1,i)
2296 y3=rpoly_f(4+3*(jjj-1)+2,i)
2297 z3=rpoly_f(4+3*(jjj-1)+3,i)
2312 x1=rpoly_f(4+3*adr(j+1)+1,i)
2313 y1=rpoly_f(4+3*adr(j+1)+2,i)
2314 z1=rpoly_f(4+3*adr(j+1)+3,i)
2315 DO k=adr(j+1)+1,adr(j+2)
2318 x2=rpoly_f(4+3*(kk-1)+1,i)
2319 y2=rpoly_f(4+3*(kk-1)+2,i)
2320 z2=rpoly_f(4+3*(kk-1)+3,i)
2321 x3=rpoly_f(4+3*(kkk-1)+1,i)
2322 y3=rpoly_f(4+3*(kkk-1)+2,i)
2323 z3=rpoly_f(4+3*(kkk-1)+3,i)
2336 rpoly_f(1,i)=half*abs(
area)
2339 DEALLOCATE(ipoly_old, rpoly_old, adr_old, adr)
2346 ifvnod2(1,i)=redir(i1)
2347 ifvnod2(2,i)=redir(i2)
2350 DEALLOCATE(ifvnod_old, redir)
2356 ALLOCATE(volu_old(npolh), rpoly_f_old(lenrmax,npoly),
2357 . ipoly_f_old(lenimax,npoly))
2363 ipoly_f_old(j,i)=ipoly_f(j,i)
2366 rpoly_f_old(j,i)=rpoly_f(j,i)
2369 400
IF (
ALLOCATED(polh_new))
DEALLOCATE(polh_new)
2370 IF (
ALLOCATED(imerged))
DEALLOCATE(imerged)
2371 ALLOCATE(polh_new(2+nphmax,npolh), imerged(npolh))
2379 ipoly_f(j,i)=ipoly_f_old(j,i)
2382 rpoly_f(j,i)=rpoly_f_old(j,i)
2389 DO j=1,2+polh_f(1,i)
2390 polh_new(j,i)=polh_f(j,i)
2395 IF (polh_f(2,i)<0) cycle
2396 IF (volu(i)<zero)
THEN
2409 IF (volu(i)>zero)
THEN
2417 volumin=vm*rvolu(31)
2420 IF (polh_new(2,i)<0)
THEN
2423 IF(ibsa(ii)==0) cycle
2426 IF (volu(i)<=volumin)
THEN
2430 DO j=1,polh_new(1,i)
2435 IF (
area>areamax)
THEN
2436 IF (ipoly_f(5,jj)==i)
THEN
2438 IF (polh_new(2,ii)<0)
THEN
2440 IF (ibsa(iii)==0) cycle
2445 ELSEIF (ipoly_f(6,jj)==i)
THEN
2447 IF (polh_new(2,ii)<0)
THEN
2449 IF (ibsa(iii)==0) cycle
2459 jjmax=polh_new(2+jmax,i)
2460 rpoly_f(1,jjmax)=-one
2463 jjmax=polh_new(2+jmax,i)
2464 ity=ipoly_f(1,jjmax)
2465 IF (ity==2) rpoly_f(1,jjmax)=-one
2469 IF (imerged(imax)==1) imax=polh_new(2,imax)
2471 volu(imax)=volu(imax)+volu(i)
2474 DO j=1,polh_new(1,i)
2477 IF (np>nphmax) info=1
2480 polh_new(2+np,imax)=jj
2483 IF (ipoly_f(5,jj)==i)
THEN
2485 ELSEIF (ipoly_f(6,jj)==i)
THEN
2490 nphmax=
max(nphmax,np)
2495 IF (info==0) polh_new(1,imax)=np
2498 IF (info==1)
GOTO 400
2502 IF (volu(i)<=zero) cycle
2503 IF (volu(i)<vmin)
THEN
2507 DO j=1,polh_new(1,i)
2509 IF (ipoly_f(1,jj)==1.OR.rpoly_f(1,jj)<zero) cycle
2510 IF (ipoly_f(5,jj)==ipoly_f(6,jj)) rpoly_f(1,jj)=-one
2513 DEALLOCATE(volu_old, rpoly_f_old, ipoly_f_old, imerged)
2522 IF (volu(i)>zero)
THEN
2531 IF (ity==1.AND.rpoly_f(1,i)>zero)
THEN
2533 areap=areap+rpoly_f(1,i)
2534 ELSEIF (ity==2.AND.rpoly_f(1,i)>zero)
THEN
2539 areael=areael+elarea(iel)
2544 ALLOCATE(
fvdata(ifv)%IFVNOD(3,nns+nns2),
2545 .
fvdata(ifv)%RFVNOD(2,nns+nns2))
2547 fvdata(ifv)%IFVNOD(1,i)=0
2555 IF (ipoly_f(6+j,i)>0)
THEN
2557 IF (ifvnod(nns)<0)
THEN
2558 fvdata(ifv)%IFVNOD(1,nns)=2
2559 fvdata(ifv)%IFVNOD(2,nns)=-ifvnod(nns)
2562 fvdata(ifv)%IFVNOD(1,nns)=1
2564 fvdata(ifv)%IFVNOD(2,nns)=iel
2565 xx=rpoly_f(4+3*(j-1)+1,i)
2566 yy=rpoly_f(4+3*(j-1)+2,i)
2567 zz=rpoly_f(4+3*(j-1)+3,i)
2572 IF (tagela(iel)>0)
THEN
2582 ELSEIF (tagela(iel)<0)
THEN
2603 CALL coorloc(vpx, vpy, vpz, v1x, v1y,
2604 . v1z, v2x, v2y, v2z, ksi,
2607 fvdata(ifv)%RFVNOD(1,nns)=ksi
2608 fvdata(ifv)%RFVNOD(2,nns)=eta
2611 fvdata(ifv)%IFVNOD(1,nns_old+jj)=3
2612 fvdata(ifv)%IFVNOD(2,nns_old+jj)=ifvnod2(1,jj)
2613 fvdata(ifv)%IFVNOD(3,nns_old+jj)=ifvnod2(2,jj)
2614 fvdata(ifv)%RFVNOD(1,nns_old+jj)=rfvnod2(1,jj)
2619 IF (
fvdata(ifv)%IFVNOD(1,nns+i)==0)
THEN
2620 fvdata(ifv)%IFVNOD(1,nns+i)=3
2621 fvdata(ifv)%IFVNOD(2,nns+i)=1
2622 fvdata(ifv)%IFVNOD(3,nns+i)=2
2623 fvdata(ifv)%RFVNOD(1,nns+i)=one
2634 ALLOCATE(
fvdata(ifv)%IFVTRI(6,nntr),
2635 .
fvdata(ifv)%IFVPOLY(nntr),
2636 .
fvdata(ifv)%IFVTADR(npoly+1))
2641 ALLOCATE(redir_poly(npoly_old))
2648 IF (rpoly_f(1,i)<=zero)
THEN
2650 IF (ipoly_f(6+j,i)>0) nns=nns+1
2658 IF (ipoly_f(1,i)==2) nhol=ipoly_f(6+nnp+1,i)
2659 ALLOCATE(pnodes(2,nnp), pseg(2,nnp), pholes(2,nhol),
2660 . ptri(3,nnp), redir(nnp))
2664 IF (ipoly_f(6+j,i)>0)
THEN
2672 IF (ipoly_f(1,i)==1)
THEN
2676 ELSEIF (ipoly_f(1,i)==2)
THEN
2693 nrm1=sqrt((x1-x0)**2+(y1-y0)**2+(z1-z0)**2)
2705 xx=rpoly_f(4+3*(j-1)+1,i)
2706 yy=rpoly_f(4+3*(j-1)+2,i)
2707 zz=rpoly_f(4+3*(j-1)+3,i)
2711 pnodes(1,j)=vx*vx1+vy*vy1+vz*vz1
2712 pnodes(2,j)=vx*vx2+vy*vy2+vz*vz2
2720 ALLOCATE(adr(nhol+1))
2722 adr(j)=ipoly_f(6+nnp+1+j,i)
2727 xx=rpoly_f(4+3*(j-1)+1,i)
2728 yy=rpoly_f(4+3*(j-1)+2,i)
2729 zz=rpoly_f(4+3*(j-1)+3,i)
2733 pnodes(1,j)=vx*vx1+vy*vy1+vz*vz1
2734 pnodes(2,j)=vx*vx2+vy*vy2+vz*vz2
2743 xx=rpoly_f(4+3*adr(j)+1,i)
2744 yy=rpoly_f(4+3*adr(j)+2,i)
2745 zz=rpoly_f(4+3*adr(j)+3,i)
2749 pnodes(1,adr(j)+1)=vx*vx1+vy*vy1+vz*vz1
2750 pnodes(2,adr(j)+1)=vx*vx2+vy*vy2+vz*vz2
2751 DO k=adr(j)+2,adr(j+1)
2752 xx=rpoly_f(4+3*(k-1)+1,i)
2753 yy=rpoly_f(4+3*(k-1)+2,i)
2754 zz=rpoly_f(4+3*(k-1)+3,i)
2758 pnodes(1,k)=vx*vx1+vy*vy1+vz*vz1
2759 pnodes(2,k)=vx*vx2+vy*vy2+vz*vz2
2765 pseg(1,nseg)=adr(j+1)
2766 pseg(2,nseg)=adr(j)+1
2768 xx=rpoly_f(4+3*nnp+3*(j-1)+1,i)
2769 yy=rpoly_f(4+3*nnp+3*(j-1)+2,i)
2770 zz=rpoly_f(4+3*nnp+3*(j-1)+3,i)
2774 pholes(1,j)=vx*vx1+vy*vy1+vz*vz1
2775 pholes(2,j)=vx*vx2+vy*vy2+vz*vz2
2780 CALL c_tricall(pnodes, pseg, pholes, ptri, nnp,
2781 . nseg, nhol, nelp )
2783 fvdata(ifv)%IFVTADR(npoly)=nntr+1
2790 x1=rpoly_f(4+3*(n1-1)+1,i)
2791 y1=rpoly_f(4+3*(n1-1)+2,i)
2792 z1=rpoly_f(4+3*(n1-1)+3,i)
2793 x2=rpoly_f(4+3*(n2-1)+1,i)
2794 y2=rpoly_f(4+3*(n2-1)+2,i)
2795 z2=rpoly_f(4+3*(n2-1)+3,i)
2796 x3=rpoly_f(4+3*(n3-1)+1,i)
2797 y3=rpoly_f(4+3*(n3-1)+2,i)
2798 z3=rpoly_f(4+3*(n3-1)+3,i)
2808 ss=nrx*nx+nry*ny+nrz*nz
2811 fvdata(ifv)%IFVTRI(1,nntr)=redir(n1)
2812 fvdata(ifv)%IFVTRI(2,nntr)=redir(n2)
2813 fvdata(ifv)%IFVTRI(3,nntr)=redir(n3)
2815 fvdata(ifv)%IFVTRI(1,nntr)=redir(n1)
2816 fvdata(ifv)%IFVTRI(2,nntr)=redir(n3)
2817 fvdata(ifv)%IFVTRI(3,nntr)=redir(n2)
2819 fvdata(ifv)%IFVTRI(4,nntr)=ipsurf
2820 fvdata(ifv)%IFVTRI(5,nntr)=ic1
2821 fvdata(ifv)%IFVTRI(6,nntr)=ic2
2822 fvdata(ifv)%IFVPOLY(nntr)=nntr
2825 DEALLOCATE(pnodes, pseg, pholes, ptri, redir)
2827 fvdata(ifv)%IFVTADR(npoly+1)=nntr+1
2831 ALLOCATE(
fvdata(ifv)%IFVPOLH(2*npoly),
2832 .
fvdata(ifv)%IFVPADR(npolh+1),
2833 .
fvdata(ifv)%IDPOLH(npolh),
2834 .
fvdata(ifv)%IBPOLH(npolh))
2838 ALLOCATE(redir_polh(npolh_old))
2844 IF (volu(i)<=zero) cycle
2847 fvdata(ifv)%IFVPADR(npolh)=nnp+1
2848 DO j=1,polh_new(1,i)
2849 jj=redir_poly(polh_new(2+j,i))
2852 fvdata(ifv)%IFVPOLH(nnp)=redir_poly(polh_new(2+j,i))
2855 fvdata(ifv)%IDPOLH(npolh)=npolh
2859 IF (ii<0.AND.ibsa(-ii)==1) ii=-ii
2860 fvdata(ifv)%IBPOLH(npolh)=ii
2862 fvdata(ifv)%IFVPADR(npolh+1)=nnp+1
2865 IF (
fvdata(ifv)%IFVTRI(4,i
THEN
2866 ic1=
fvdata(ifv)%IFVTRI(5,i)
2867 ic2=
fvdata(ifv)%IFVTRI(6,i)
2868 fvdata(ifv)%IFVTRI(5,i)=redir_polh(ic1)
2869 fvdata(ifv)%IFVTRI(6,i)=redir_polh(ic2)
2885 ALLOCATE(
fvdata(ifv)%MPOLH(npolh),
fvdata(ifv)%QPOLH(3,npolh),
2888 .
fvdata(ifv)%CPAPOLH(npolh),
fvdata(ifv)%CPBPOLH(npolh),
2889 .
fvdata(ifv)%CPCPOLH(npolh),
fvdata(ifv)%RMWPOLH(npolh),
2890 .
fvdata(ifv)%VPOLH_INI(npolh),
fvdata(ifv)%DTPOLH(npolh),
2891 .
fvdata(ifv)%TPOLH(npolh),
fvdata(ifv)%CPDPOLH(npolh),
2892 .
fvdata(ifv)%CPEPOLH(npolh),
fvdata(ifv)%CPFPOLH(npolh))
2897 fvdata(ifv)%VPOLH_INI(ii)=volu(i)
2900 DEALLOCATE(ipoly_f, rpoly_f, polh_f, volu, redir_poly, redir_polh,
2901 . polh_new, ifvnod, ifvnod2, rfvnod2, xns, xns2)
2908 IF (
fvdata(ifv)%IFVTRI(4,i)>0)
THEN
2916 WRITE(istdo,
'(A25,I10,A24)')
2917 .
' ** MONITORED VOLUME ID: ',ivolu(1),
' - FINITE VOLUME MESH **'
2918 WRITE(istdo,
'(A42,I8)')
2919 .
' NUMBER OF SURFACE POLYGONS : ',nspoly
2920 WRITE(istdo,
'(A42,I8)')
2921 .
' NUMBER OF SURFACE TRIANGLES : ',nstr
2922 WRITE(istdo,
'(A42,I8)')
2923 .
' NUMBER OF COMMUNICATION POLYGONS : ',ncpoly
2924 WRITE(istdo,
'(A42,I8)')
2925 .
' NUMBER OF COMMUNICATION TRIANGLES : ',nctr
2926 WRITE(istdo,
'(A42,I8)')
2927 .
' NUMBER OF POLYHEDRA (FINITE VOLUMES): ',npolhf
2928 IF (ilvout>=1)
WRITE(istdo,
'(A29,G16.9,A8,I8,A1)')
2929 .
' MIN. POLYHEDRON VOLUME : ',vmin,
' (POLY. ',imin,
')'
2930 IF (ilvout>=1)
WRITE(istdo,'(a29,g16.9)
')
2931 . ' initial merging volume :
',VOLUMIN
2932 WRITE(ISTDO,'(a29,g16.9,a17,g16.9,a1)
')
2933 .' sum volume polyhedra :
',VOLPH,' (volume airbag:
',VOLG,')
'
2934 WRITE(ISTDO,'(a29,g16.9,a17,g16.9,a1)
')
2935 .' sum
area surf. polygons:
',AREAP,
2936 . ' (
area airbag :
',AREAEL,')
'
2939 WRITE(IOUT,'(a25,i10,a24)
')
2940 .' ** monitored volume
id:
',IVOLU(1),' - finite volume mesh **
'
2941 WRITE(IOUT,'(a42,i8)
')
2942 . ' number of surface polygons :
',NSPOLY
2943 WRITE(IOUT,'(a42,i8)
')
2944 . ' number of communication polygons :
',NCPOLY
2945 WRITE(IOUT,'(a42,i8)
')
2946 . ' number of polyhedra(finite volumes):
',NPOLHF
2947 IF (ILVOUT>=1) WRITE(IOUT,'(a29,g16.9,a8,i8,a1)
')
2948 . ' min. polyhedron volume :
',VMIN,' (poly.
',IMIN,')
'
2949 IF (ILVOUT>=1) WRITE(IOUT,'(a29,g16.9)
')
2950 . ' initial merging volume :
',VOLUMIN
2951 WRITE(IOUT,'(a29,g16.9,a17,g16.9,a1)
')
2952 .' sum volume polyhedra :
',VOLPH,' (volume airbag:
',VOLG,')
'
2953 WRITE(IOUT,'(a29,g16.9,a17,g16.9,a1)
')
2954 .' sum
area surf. polygons:
',AREAP,
2955 . ' (
area airbag :
',AREAEL,')
'
2960 FVDATA(IFV)%NPOLH_ANIM=NPOLH
2961 LENP=FVDATA(IFV)%IFVTADR(NPOLY+1)
2962 LENH=FVDATA(IFV)%IFVPADR(NPOLH+1)
2963 ALLOCATE(FVDATA(IFV)%IFVPOLY_ANIM(LENP),
2964 . FVDATA(IFV)%IFVTADR_ANIM(NPOLY+1),
2965 . FVDATA(IFV)%IFVPOLH_ANIM(LENH),
2966 . FVDATA(IFV)%IFVPADR_ANIM(NPOLH+1),
2967 . FVDATA(IFV)%IFVTRI_ANIM(6,NNTR),
2968 . FVDATA(IFV)%REDIR_ANIM(NNS+NNS2),
2969 . FVDATA(IFV)%NOD_ANIM(3,NNS+NNS2),
2970 . REDIR(NNS+NNS2), ITAGT(NNTR))
2972 FVDATA(IFV)%IFVPOLY_ANIM(I)=FVDATA(IFV)%IFVPOLY(I)
2975 FVDATA(IFV)%IFVTADR_ANIM(I)=FVDATA(IFV)%IFVTADR(I)
2978 FVDATA(IFV)%IFVPOLH_ANIM(I)=FVDATA(IFV)%IFVPOLH(I)
2981 FVDATA(IFV)%IFVPADR_ANIM(I)=FVDATA(IFV)%IFVPADR(I)
2984 TOLE=EM05*FAC_LENGTH
2987 IF (ILVOUT/=0) WRITE(ISTDO,'(a25,i10,a39)
')
2988 . ' ** monitored volume
id:
',IVOLU(1),
2989 . ' - merging coincident nodes
for anim **
'
2990 ALLOCATE(PNODES(3,NNS+NNS2))
2992 IF (FVDATA(IFV)%IFVNOD(1,I)==1) THEN
2993 IEL=FVDATA(IFV)%IFVNOD(2,I)
2994 KSI=FVDATA(IFV)%RFVNOD(1,I)
2995 ETA=FVDATA(IFV)%RFVNOD(2,I)
2999 IF (TAGELA(IEL)>0) THEN
3009 ELSEIF (TAGELA(IEL)<0) THEN
3020 PNODES(1,I)=(ONE-KSI-ETA)*X1+KSI*X2+ETA*X3
3021 PNODES(2,I)=(ONE-KSI-ETA)*Y1+KSI*Y2+ETA*Y3
3022 PNODES(3,I)=(ONE-KSI-ETA)*Z1+KSI*Z2+ETA*Z3
3023 ELSEIF (FVDATA(IFV)%IFVNOD(1,I)==2) THEN
3030 II=FVDATA(IFV)%IFVNOD(2,I)
3031 PNODES(1,I)=XXXSA(1,II)
3032 PNODES(2,I)=XXXSA(2,II)
3033 PNODES(3,I)=XXXSA(3,II)
3039 I1=FVDATA(IFV)%IFVNOD(2,II)
3040 I2=FVDATA(IFV)%IFVNOD(3,II)
3041 ALPHA=FVDATA(IFV)%RFVNOD(1,II)
3042 PNODES(1,II)=ALPHA*PNODES(1,I1)+(ONE-ALPHA)*PNODES(1,I2)
3043 PNODES(2,II)=ALPHA*PNODES(2,I1)+(ONE-ALPHA)*PNODES(2,I2)
3044 PNODES(3,II)=ALPHA*PNODES(3,I1)+(ONE-ALPHA)*PNODES(3,I2)
3047 IF (ILVOUT<0) CALL PROGBAR_C(I,NNS+NNS2)
3054 XN(1)=FVDATA(IFV)%NOD_ANIM(1,J)
3055 XN(2)=FVDATA(IFV)%NOD_ANIM(2,J)
3056 XN(3)=FVDATA(IFV)%NOD_ANIM(3,J)
3057 DD2=(XX-XN(1))**2+(YY-XN(2))**2+(ZZ-XN(3))**2
3058 IF (DD2<=TOLE2) THEN
3066 FVDATA(IFV)%REDIR_ANIM(NNS_ANIM)=I
3067 FVDATA(IFV)%NOD_ANIM(1,NNS_ANIM)=XX
3068 FVDATA(IFV)%NOD_ANIM(2,NNS_ANIM)=YY
3069 FVDATA(IFV)%NOD_ANIM(3,NNS_ANIM)=ZZ
3074 FVDATA(IFV)%NNS_ANIM=NNS_ANIM
3075 FVDATA(IFV)%ID=IVOLU(1)
3078 N1=FVDATA(IFV)%IFVTRI(1,I)
3079 N2=FVDATA(IFV)%IFVTRI(2,I)
3080 N3=FVDATA(IFV)%IFVTRI(3,I)
3081 FVDATA(IFV)%IFVTRI_ANIM(1,I)=REDIR(N1)
3082 FVDATA(IFV)%IFVTRI_ANIM(2,I)=REDIR(N2)
3083 FVDATA(IFV)%IFVTRI_ANIM(3,I)=REDIR(N3)
3084 FVDATA(IFV)%IFVTRI_ANIM(4,I)=
3085 . FVDATA(IFV)%IFVTRI(4,I)
3086 FVDATA(IFV)%IFVTRI_ANIM(5,I)=
3087 . FVDATA(IFV)%IFVTRI(5,I)
3088 FVDATA(IFV)%IFVTRI_ANIM(6,I)=
3089 . FVDATA(IFV)%IFVTRI(6,I)
3093 DEALLOCATE(REDIR, ITAGT)