44 SUBROUTINE fvmesh1(IBUF , ELEM , X , IVOLU, BRIC ,
45 . XB , RVOLU , NEL , NBRIC, TBRIC,
46 . SFAC , DXM , NBA , NELA , NNA ,
47 . TBA , TFACA , TAGELS, IBUFA,
48 . ELEMA, TAGELA, IXS , NNF )
56#include "implicit_f.inc"
67 INTEGER IBUF(*), ELEM(3,*), IVOLU(*), (8,*),
68 . NEL, NBRIC, TBRIC(13,*), NBA, NELA, NNA, TBA(2,*),
69 . TFACA(12,*), TAGELS(*), IBUFA(*), ELEMA(
72 . x(3,*), xb(3,*), rvolu(*), sfac(6,4,*), dxm
76 INTEGER ILVOUT, NLAYER, NFACMAX, NPPMAX, I, J, IEL, N1, N2, N3,
77 . NN1, NN2, NN3, GRBRIC, IAD, , NNS, ITAGB(NBRIC),
78 . NVMAX, NG, INFO, ICUT, NVERTS, NF1, NF2, NF3, NF4, NS,
79 . NSMAX, NV, K, KK, NNP, NPOLMAX, NRPMAX, N, M, MM, NPOLH,
80 . npolb, ity, nn, nphmax, npolhmax, jj, jjj, ii,
81 . nns_old, nnp_old, npa, jmax, imax, jjmax, np, nntr,
82 . npoly_old, ipsurf, ic1, ic2, nhol, nelp, npolh_old,
83 . l, ll, ifv, nns2, npoly2, npl, polc, nspoly, ncpoly,
84 . npolhf, nnb, filen, lenp, lenh, ip, jmin, lenimax,
85 . lenrmax, kkk, nseg, imin, nfac, n4, nn4, ib, ifound,
86 . itagba(nba), ibsa(nba), nall, iii,
87 . nns_anim, nbz, nbnedge, nns3, npoly_new, nnsp, nedge,
88 . ityz, inz, j0, nns1, k0, i1, i2, idep, nstr, nctr, iiz,
92 . volg, x1, y1, z1, x2, y2, z2, x3, y3, z3, x12, y12, z12,
93 . x13, y13, z13, nrx, nry, nrz, area2, elarea(nel),
94 .
norm(3,nel), xbmax, ybmax, zbmax, xbmin, ybmin, zbmin,
95 . xc, yc, zc, xx, yy, zz, pp(3,3), xl7(3), bcenter(3),
96 . bhalfsize(3), xtmax, ytmax, ztmax, xtmin, ytmin, ztmin,
97 . tverts(9), tmptri(3,3), tmpbox(3,8), tmpnorm(3,6), tole,
98 . xg, yg, zg, fv0(3), fv1(3), fv2(3), fu0(3), fu1(3),
99 . fu2(3), quad(3,4), nr(3),
area, nx, ny, nz, nnx,
100 . nny, nnz, x0, y0, z0, lmax2, tole2, dd, vm, volumin,
101 . areamax, volph, areap, areael, vpx, vpy, vpz,
102 . v1x, v1y, v1z, v2x, v2y, v2z, nrm1, vx, vy, vz, ss,
103 . normf(3,4), ksi, eta, vx1, vy1, vz1, vx2, vy2, vz2,
104 . vmin, vtmp, x4, y4, z4, x14, y14, z14, norma(3,nela),
105 . dd2, xn(3), zlmin, zlmax, zl, vnorm, vx3
106 . dz,
alpha, gamai, cpai, cpbi, cpci, rmwi
107 . cvi, rhoi, zl1, zl2, zl3, zlc, val, xxx(3,nnf),
109 CHARACTER CHFVB*7, CHMESH*5, *116
111 INTEGER,
ALLOCATABLE :: FACET(:,:), IPOLY(:,:),
112 . IELNOD(:,:), POLH(:,:), IPOLY_F(:,:),
113 . polh_f(:,:), ifvnod(:), ifvnod_old(:),
114 . redir_poly(:), pseg(:,:), redir(:),
115 . ptri(:,:), redir_polh(:), polb(:),
116 . ipoly_old(:), polh_new(:,:), itagt(:),
117 . tri(:,:), adr(:), adr_old(:), imerged(:),
118 . ipoly_f_old(:,:), inedge(:,:), nref(:,:),
119 . iz(:,:), ledge(:), ifvnod2(:,:), itagn(:)
121 . ,
ALLOCATABLE :: normt(:,:), poly(:,:), rpoly(:,:),
122 . rpoly_f(:,:), volu(:), pnodes(:,:),
123 . pholes(:,:), rpoly_old(:), volusort(:),
124 . volu_old(:), rpoly_f_old(:,:),
125 . rfvnod_old(:,:), xnew(:,:), rnedge(:,:),
126 . aref(:,:), rfvnod2(:,:), xns(:,:),
127 . xns2(:,:), xxxsa(:,:)
129 INTEGER FAC(4,6), FACNOR(4,6), FAC4(3,4)
136 DATA facnor /3,4,5,6,
149 INTEGER,
DIMENSION(:),
POINTER :: IPOLY, IELNOD
150 INTEGER,
DIMENSION(:,:),
POINTER :: NREF
152 . ,
DIMENSION(:),
POINTER :: rpoly
154 . ,
DIMENSION(:,:),
POINTER :: aref
155 TYPE(polygone),
POINTER :: PTR
157 TYPE(polygone),
POINTER :: FIRST, PTR_PREC, PTR_CUR, PTR_TMP,
158 . PTR_OLD, FIRST2, PTR_CUR2, PTR_PREC2,
163 INTEGER,
DIMENSION(:),
POINTER :: POLH
164 TYPE(POLYHEDRE),
POINTER :: PTR
166 TYPE(polyhedre),
POINTER :: PHFIRST, PH_PREC, PH_CUR, PH_TMP
189 ALLOCATE(xxxsa(3,nnsa))
193 i1=
fvspmd(ifv)%IBUF_L(1,i)
194 i2=
fvspmd(ifv)%IBUF_L(2,i)
200 i1=
fvspmd(ifv)%IBUFA_L(1,i)
201 i2=
fvspmd(ifv)%IBUFA_L(2,i)
208 i2=
fvspmd(ifv)%IBUFSA_L(2,i)
216 IF (ispmd/=
fvspmd(ifv)%PMAIN-1)
RETURN
259 area2=sqrt(nrx**2+nry**2+nrz**2)
260 elarea(iel)=half*area2
261 norm(1,iel)=nrx/area2
262 norm(2,iel)=nry/area2
263 norm(3,iel)=nrz/area2
265 volg=volg+one_over_6*(x1*nrx+y1*nry+z1*nrz)
272 IF (tagela(iel)>0)
THEN
282 ELSEIF (tagela(iel)<0)
THEN
302 area2=sqrt(nrx**2+nry**2+nrz**2)
303 norma(1,iel)=nrx/area2
304 norma(2,iel)=nry/area2
305 norma(3,iel)=nrz/area2
326 WRITE(istdo,
'(A25,I10,A23)')
327 .
' ** MONITORED VOLUME ID: ',ivolu(1),
' - BUILDING POLYGONS **'
339 IF (
ALLOCATED(facet))
DEALLOCATE(facet)
340 IF (
ALLOCATED(tri))
DEALLOCATE(tri)
341 IF (
ALLOCATED(normt))
DEALLOCATE(normt)
342 IF (
ALLOCATED(poly))
DEALLOCATE(poly)
343 ALLOCATE(facet(6,1+nfacmax), tri(nfacmax,4),
344 . normt(3,nfacmax), poly(3,nvmax))
386 xl7(1)=pp(1,1)*(xx-xc)+pp(2,1)*(yy-yc)+pp(3,1)*(zz-zc)
387 xl7(2)=pp(1,2)*(xx-xc)+pp(2,2)*(yy-yc)+pp(3,2)*(zz-zc)
388 xl7(3)=pp(1,3)*(xx-xc)+pp(2,3)*(yy-yc)+pp(3,3)*(zz-zc)
400 IF (tagela(iel)>0)
THEN
410 ELSEIF (tagela(iel)<0)
THEN
427 IF (xbmax<xtmin.OR.ybmax<ytmin.OR.zbmax<ztmin.OR.
428 . xbmin>xtmax.OR.ybmin
431 tverts(1)=pp(1,1)*(x1-xc)+pp(2,1)*(y1-yc)+pp(3,1)*(z1-zc)
432 tverts(2)=pp(1,2)*(x1-xc)+pp(2,2)*(y1-yc)+pp(3,2)*(z1-zc)
433 tverts(3)=pp(1,3)*(x1-xc)+pp(2,3)*(y1-yc)+pp(3,3)*(z1-zc)
434 tverts(4)=pp(1,1)*(x2-xc)+pp(2,1)*(y2-yc)+pp(3,1)*(z2-zc)
435 tverts(5)=pp(1,2)*(x2-xc)+pp(2,2)*(y2-yc)+pp(3,2)*(z2-zc)
436 tverts(6)=pp(1,3)*(x2-xc)+pp(2,3)*
437 tverts(7)=pp(1,1)*(x3-xc)+pp(2,1)*(y3-yc)+pp(3,1)*(z3-zc)
438 tverts(8)=pp(1,2)*(x3-xc)+pp(2,2)*(y3-yc)+pp(3,2)*(z3-zc)
439 tverts(9)=pp(1,3)*(x3-xc)+pp(2,3)*(y3-yc)+pp(3,3)*(z3-zc)
441 CALL tribox3(icut, bcenter, bhalfsize, tverts)
449 x1=xg+(one+tole)*(x1-xg)
450 y1=yg+(one+tole)*(y1-yg)
451 z1=zg+(one+tole)*(z1-zg)
452 x2=xg+(one+tole)*(x2-xg)
453 y2=yg+(one+tole)*(y2-yg)
454 z2=zg+(one+tole)*(z2-zg)
455 x3=xg+(one+tole)*(x3-xg)
456 y3=yg+(one+tole)*(y3-yg)
457 z3=zg+(one+tole)*(z3-zg)
459 tverts(1)=pp(1,1)*(x1-xc)+pp(2,1)*(y1-yc)+pp(3,1)*(z1-zc)
460 tverts(2)=pp(1,2)*(x1-xc)+pp(2,2)*(y1-yc)+pp(3,2)*(z1-zc)
461 tverts(3)=pp(1,3)*(x1-xc)+pp(2,3)*(y1-yc)+pp(3,3)*(z1-zc)
462 tverts(4)=pp(1,1)*(x2-xc)+pp(2,1)*(y2-yc)+pp(3,1)*(z2-zc)
463 tverts(5)=pp(1,2)*(x2-xc)+pp(2,2)*(y2-yc)+pp(3,2)*(z2-zc)
464 tverts(6)=pp(1,3)*(x2-xc)+pp(2,3)*(y2-yc)+pp(3
465 tverts(7)=pp(1,1)*(x3-xc)+pp(2,1)*(y3-yc)+pp(3,1)*(z3-zc)
466 tverts(8)=pp(1,2)*(x3-xc)+pp(2,2)*(y3-yc)+pp(3,2)*(z3-zc)
467 tverts(9)=pp(1,3)*(x3-xc)+pp(2,3)*(y3-yc)+pp(3,3)*(z3-zc)
469 CALL tribox3(icut, bcenter, bhalfsize, tverts)
486 tmpbox(1,j)=xb(1,bric(j,i))
487 tmpbox(2,j)=xb(2,bric(j,i))
488 tmpbox(3,j)=xb(3,bric(j,i))
491 tmpnorm(1,j)=-sfac(j,2,i)
492 tmpnorm(2,j)=-sfac(j,3,i)
493 tmpnorm(3,j)=-sfac(j,4,i)
495 CALL itribox(tmptri, tmpbox, tmpnorm, nverts, poly,
499 IF (.NOT.
ASSOCIATED(first))
THEN
504 ptr_prec%PTR => ptr_cur
506 ALLOCATE(ptr_cur%IPOLY(6+nverts),
507 . ptr_cur%IELNOD(nverts),
508 . ptr_cur%RPOLY(4+3*nverts))
510 ptr_cur%IPOLY(2)=nverts
515 ptr_cur%RPOLY(1)=zero
516 ptr_cur%RPOLY(2)=norma(1,iel)
517 ptr_cur%RPOLY(3)=norma(2,iel)
518 ptr_cur%RPOLY(4)=norma(3,iel)
521 ptr_cur%IPOLY(6+j)=nns
522 ptr_cur%IELNOD(j)=iel
523 ptr_cur%RPOLY(4+3*(j-1)+1)=poly(1,j)
524 ptr_cur%RPOLY(4+3*(j-1)+2)=poly(2,j)
525 ptr_cur%RPOLY(4+3*(j-1)+3)=poly(3,j)
536 x1=xg+(one+tole)*(x1-xg)
537 y1=yg+(one+tole)*(y1-yg)
538 z1=zg+(one+tole)*(z1-zg)
539 x2=xg+(one+tole)*(x2-xg)
540 y2=yg+(one+tole)*(y2-yg)
541 z2=zg+(one+tole)*(z2-zg)
542 x3=xg+(one+tole)*(x3-xg)
543 y3=yg+(one+tole)*(y3-yg)
544 z3=zg+(one+tole)*(z3-zg)
570 CALL tritri3(icut, fv0, fv1, fv2, fu0, fu1, fu2)
591 CALL tritri3(icut, fv0, fv1, fv2, fu0, fu1, fu2)
614 IF (npoly_old>0)
THEN
615 ptr_cur => ptr_old%PTR
619 DO j=1,npoly-npoly_old
620 ptr_tmp => ptr_cur%PTR
621 DEALLOCATE(ptr_cur%IPOLY, ptr_cur%RPOLY,
626 IF (npoly_old>0)
THEN
637 IF (tbric(7,i)<=1)
THEN
638 DEALLOCATE(facet, tri, normt, poly)
644 IF (itagb(nv)==1) cycle
645 IF (tbric(7+j,i)==2)
THEN
648 quad(1,k)=xb(1,bric(kk,i))
649 quad(2,k)=xb(2,bric(kk,i))
650 quad(3,k)=xb(3,bric(kk,i))
655 IF (tagela(iel)>0)
THEN
660 ELSEIF (tagela(iel)<0)
THEN
667 normt(1,k)=norma(1,iel)
668 normt(2,k)=norma(2,iel)
669 normt(3,k)=norma(3,iel)
672 normf(1,k)=sfac(facnor(k,j),2,i)
673 normf(2,k)=sfac(facnor(k,j),3,i)
674 normf(3,k)=sfac(facnor(k,j),4,i)
685 IF (
ALLOCATED(ipoly))
DEALLOCATE(ipoly)
686 IF (
ALLOCATED(rpoly))
DEALLOCATE(rpoly)
687 IF (
ALLOCATED(ielnod
DEALLOCATE(ielnod)
688 ALLOCATE(ipoly(6+nppmax+1+npolmax,npolmax),
689 . rpoly(nrpmax+3*npolmax,npolmax),
690 . ielnod(nppmax,npolmax))
692 CALL facepoly(quad, tri, ns, ipoly, rpoly,
693 . nr, normf, normt, nfacmax, nnp,
694 . nrpmax, i, nv, dxm , npolmax,
695 . nppmax, info, ielnod, xxx, elema,
696 . ibuf, nela, i, j, ivolu(1),
697 . ilvout, ibufa, tagela, xxxa )
698 IF (info==1)
GOTO 200
701 IF (ipoly(1,n)==-1) cycle
703 IF (.NOT.
ASSOCIATED(first2))
THEN
708 ptr_prec2%PTR => ptr_cur2
712 ALLOCATE(ptr_cur2%IPOLY(6+nn+1+nhol),
713 . ptr_cur2%IELNOD(nn),
714 . ptr_cur2%RPOLY(4+3*nn+3*nhol))
716 ptr_cur2%IPOLY(m)=ipoly(m,n)
719 ptr_cur2%RPOLY(m)=rpoly(m,n)
723 ptr_cur2%IPOLY(6+m)=nns2
725 ptr_cur2%IELNOD(m)=facet(j,1+mm)
726 ptr_cur2%RPOLY(4+3*(m-1)+1)=rpoly(4+3*(m-1)+1,n)
727 ptr_cur2%RPOLY(4+3*(m-1)+2)=rpoly(4+3*(m-1)+2,n)
728 ptr_cur2%RPOLY(4+3*(m-1)+3)=rpoly(4+3*(m-1)+3,n)
730 ptr_cur2%IPOLY(6+nn+1)=nhol
732 ptr_cur2%IPOLY(6+nn+1+m)=ipoly(6+nn+1+m,n)
733 ptr_cur2%RPOLY(4+3*nn+3*(m-1)+1)=
734 . rpoly(4+3*nn+3*(m-1)+1,n)
735 ptr_cur2%RPOLY(4+3*nn+3*(m-1)+2)=
736 . rpoly(4+3*nn+3*(m-1)+2,n)
737 ptr_cur2%RPOLY(4+3*nn+3*(m-1)+3)=
738 . rpoly(4+3*nn+3*(m-1)+3,n)
740 ptr_prec2 => ptr_cur2
743 DEALLOCATE(ipoly, rpoly, ielnod)
748 DEALLOCATE(facet, tri, normt, poly)
756 ptr_prec%PTR => ptr_cur
758 nhol=ptr_cur2%IPOLY(6+nn+1)
759 ALLOCATE(ptr_cur%IPOLY(6+nn+1+nhol),
760 . ptr_cur%IELNOD(nn),
761 . ptr_cur%RPOLY(4+3*nn+3*nhol))
763 ptr_cur%IPOLY(j)=ptr_cur2%IPOLY(j)
766 ptr_cur%RPOLY(j)=ptr_cur2%RPOLY(j)
769 ptr_cur%IPOLY(6+j)=nns+ptr_cur2%IPOLY(6+j)
770 ptr_cur%IELNOD(j)=ptr_cur2%IELNOD(j)
771 ptr_cur%RPOLY(4+3*(j-1)+1)=ptr_cur2%RPOLY(4+3*(j-1)+1)
772 ptr_cur%RPOLY(4+3*(j-1)+2)=ptr_cur2%RPOLY(4+3*(j-1)+2)
773 ptr_cur%RPOLY(4+3*(j-1)+3)=ptr_cur2%RPOLY(4+3*(j-1)+3)
775 ptr_cur%IPOLY(6+nn+1)=nhol
777 ptr_cur%IPOLY(6+nn+1+j)=ptr_cur2%IPOLY(6+nn+1+j)
778 ptr_cur%RPOLY(4+3*nn+3*(j-1)+1)=
779 . ptr_cur2%RPOLY(4+3*nn+3*(j-1)+1)
780 ptr_cur%RPOLY(4+3*nn+3*(j-1)+2)=
781 . ptr_cur2%RPOLY(4+3*nn+3*(j-1)+2)
782 ptr_cur%RPOLY(4+3*nn+3*(j-1)+3)=
783 . ptr_cur2%RPOLY(4+3*nn+3*(j-1)+3)
785 ptr_tmp2 => ptr_cur2%PTR
786 DEALLOCATE(ptr_cur2%IPOLY, ptr_cur2%RPOLY, ptr_cur2%IELNOD)
801 ptr_cur => ptr_cur%PTR
811 vnorm=sqrt(vx3**2+vy3**2+vz3**2)
815 ss=vx3*vx1+vy3*vy1+vz3*vz1
819 vnorm=sqrt(vx1**2+vy1**2+vz1**2)
855 zl1=(x1-x0)*vx3+(y1-y0)*vy3+(z1-z0)*vz3
856 zl2=(x2-x0)*vx3+(y2-y0)*vy3+(z2-z0)*vz3
857 zl3=(x3-x0)*vx3+(y3-y0)*vy3+(z3-z0)*vz3
870 ALLOCATE(inedge(6,npoly*nppmax), rnedge(6,npoly*nppmax))
876 IF (zlc<zbmin.OR.zlc>zbmax)
THEN
888 DO k=1,ptr_cur%IPOLY(2)
889 xx=ptr_cur%RPOLY(4+3*(k-1)+1)
890 yy=ptr_cur%RPOLY(4+3*(k-1)+2)
891 zz=ptr_cur%RPOLY(4+3*(k-1)+3)
892 zl=(xx-x0)*vx3+(yy-y0)*vy3+(zz-z0)*vz3
896 IF (zlmin*zlmax<zero)
THEN
900 IF (ity==2) nhol=ptr_cur%IPOLY(6+nn+1)
901 ALLOCATE(ipoly(6+2*nn+1+nhol,nn),
902 . rpoly(4+3*2*nn+3*nhol,nn),
904 . nref(2,nn), aref(4,nn),
907 . ipoly, rpoly, ptr_cur%IPOLY, ptr_cur%RPOLY, inedge,
908 . rnedge, nbnedge, vx3, vy3, vz3,
909 . x0, y0, z0, nref, aref,
910 . nn, nhol, iiz, iz, nns3,
911 . nnp , nnsp, ielnod, ptr_cur%IELNOD)
913 ptr_tmp => ptr_cur%PTR
914 npoly_new=npoly_new-1
916 npoly_new=npoly_new+1
918 DEALLOCATE(ptr_cur%IPOLY, ptr_cur%RPOLY,
922 ptr_prec%PTR => ptr_cur
927 ALLOCATE(ptr_cur%IPOLY(6+nn+1+nhol),
928 . ptr_cur%IELNOD(nn),
929 . ptr_cur%RPOLY(4+3*nn+3*nhol))
931 ptr_cur%IPOLY(m)=ipoly(m,n)
934 ptr_cur%RPOLY(m)=rpoly(m,n)
938 ptr_cur%IPOLY(6+m)=mm
939 ptr_cur%IELNOD(m)=ielnod(m,n)
940 ptr_cur%RPOLY(4+3*(m-1)+1)=rpoly(4+3*(m-1)+1,n)
941 ptr_cur%RPOLY(4+3*(m-1)+2)=rpoly(4+3*(m-1)+2,n)
942 ptr_cur%RPOLY(4+3*(m-1)+3)=rpoly(4+3*(m-1)+3,n)
945 ptr_cur%IPOLY(6+nn+1)=nhol
947 ptr_cur%IPOLY(6+nn+1+m)=ipoly(6+nn+1+m,n)
948 ptr_cur%RPOLY(4+3*nn+3*(m-1)+1)=
949 . rpoly(4+3*nn+3*(m-1)+1,n)
950 ptr_cur%RPOLY(4+3*nn+3*(m-1)+2)=
951 . rpoly(4+3*nn+3*(m-1)+2,n)
952 ptr_cur%RPOLY(4+3*nn+3*(m-1)+3)=
953 . rpoly(4+3*nn+3*(m-1)+3,n)
956 ptr_cur%IZ(2)=iz(2,n)
959 ALLOCATE(ptr_cur%NREF(3,nnsp),
960 . ptr_cur%AREF(4,nnsp))
963 ptr_cur%NREF(1,m)=nns3
964 ptr_cur%NREF(2,m)=nref(1,m)
965 ptr_cur%NREF(3,m)=nref(2,m)
966 ptr_cur%AREF(1,m)=aref(1,m)
967 ptr_cur%AREF(2,m)=aref(2,m)
968 ptr_cur%AREF(3,m)=aref(3,m)
969 ptr_cur%AREF(4,m)=aref(4,m)
973 IF (n==nnp) ptr_cur%PTR => ptr_tmp
976 DEALLOCATE(ipoly, rpoly, ielnod, nref, aref, iz)
978 IF (zlmin==zero)
THEN
980 ALLOCATE(nref(2,2*nn), aref(4,2*nn))
982 . ptr_cur%IPOLY, ptr_cur%RPOLY, vx3, vy3, vz3,
983 . nbnedge, inedge, rnedge, x0, y0,
984 . z0, iiz , nns3, nref, aref,
988 ALLOCATE(ptr_cur%NREF(3,nnsp),
989 . ptr_cur%AREF(4,nnsp))
993 ptr_cur%NREF(1,n)=nns3
994 ptr_cur%NREF(2,n)=nref(1,n)
995 ptr_cur%NREF(3,n)=nref(2,n)
996 ptr_cur%AREF(1,n)=aref(1,n)
997 ptr_cur%AREF(2,n)=aref(2,n)
998 ptr_cur%AREF(3,n)=aref(3,n)
999 ptr_cur%AREF(4,n)=aref(4,n)
1002 DEALLOCATE(nref, aref)
1004 IF (zlmin>=zero)
THEN
1007 ELSEIF (iiz==1.AND.zlmax<=zero)
THEN
1013 ptr_cur => ptr_cur%PTR
1022 ALLOCATE(redir(nns))
1028 jj=ptr_cur%IPOLY(6+j)
1034 ptr_cur => ptr_cur%PTR
1042 n1=ptr_cur%NREF(2,j)
1043 n2=ptr_cur%NREF(3,j)
1044 IF (n1>0) ptr_cur%NREF(2,j)=redir(n1)
1045 IF (n2>0) ptr_cur%NREF(3,j)=redir(n2)
1048 ptr_cur => ptr_cur%PTR
1055 ptr_cur => ptr_cur%PTR
1057 ALLOCATE(ledge(nbnedge))
1063 IF (inedge(1,k)==1.AND.inedge(5,k)/=j) cycle
1064 IF (inedge(1,k)==2.AND.inedge(4,k)/=j.AND.
1065 . inedge(5,k)/=j) cycle
1070 ALLOCATE(ipoly(6+2*nedge+1+nedge,nedge),
1071 . rpoly(4+6*nedge+3*nedge,nedge),
1072 . iz(3,nedge), ielnod(nedge,nedge))
1074 CALL horipoly(inedge, rnedge, ledge, nedge, ipoly,
1075 . rpoly, iz, ielnod, nnp, vx3,
1079 IF (ipoly(1,n)==-1) cycle
1082 ptr_prec%PTR => ptr_cur
1084 nhol=ipoly(6+nn+1,n)
1085 ALLOCATE(ptr_cur%IPOLY(6+nn+1+nhol),
1086 . ptr_cur%RPOLY(4+3*nn+3*nhol),
1087 . ptr_cur%IELNOD(nn))
1090 ptr_cur%IPOLY(m)=ipoly(m,n)
1093 ptr_cur%RPOLY(m)=rpoly(m,n)
1096 ptr_cur%IPOLY(6+m)=ipoly(6+m,n)
1097 ptr_cur%IELNOD(m)=ielnod(m,n)
1098 ptr_cur%RPOLY(4+3*(m-1)+1)=rpoly(4+3*(m-1)+1,n)
1099 ptr_cur%RPOLY(4+3*(m-1)+2)=rpoly(4+3*(m-1)+2,n)
1100 ptr_cur%RPOLY(4+3*(m-1)+3)=rpoly(4+3*(m-1)+3,n)
1103 ptr_cur%IPOLY(6+nn+1)=nhol
1105 ptr_cur%IPOLY(6+nn+1+m)=ipoly(6+nn+1+m,n)
1106 ptr_cur%RPOLY(4+3*nn+3*(m-1)+1)=
1107 . rpoly(4+3*nn+3*(m-1)+1,n)
1108 ptr_cur%RPOLY(4+3*nn+3*(m-1)+2)=
1109 . rpoly(4+3*nn+3*(m-1)+2,n)
1110 ptr_cur%RPOLY(4+3*nn+3*(m-1)+3)=
1111 . rpoly(4+3*nn+3*(m-1)+3,n)
1114 ptr_cur%IZ(m)=iz(m,n)
1119 DEALLOCATE(ipoly, rpoly, iz,
1129 ptr_cur => ptr_cur%PTR
1137 IF (ilvout/=0)
WRITE(istdo,
'(A25,I10,A24)')
1138 .
' ** MONITORED VOLUME ID: ',ivolu(1),
' - BUILDING POLYHEDRA **'
1143 IF (tbric(7,i)/=2) cycle
1149 ity=ptr_cur%IPOLY(1)
1150 IF ((ity==1.AND.ptr_cur%IPOLY(4)==i).OR.
1152 . (ptr_cur%IPOLY(3)==i.OR.ptr_cur%IPOLY(4)==i)))
THEN
1154 nppmax=
max(nppmax,ptr_cur%IPOLY(2))
1156 ptr_cur => ptr_cur%PTR
1161 ALLOCATE(polb(npolb), ipoly(6+nppmax,npolb),
1162 . rpoly(nrpmax,npolb), redir(npolb))
1167 ity=ptr_cur%IPOLY(1)
1169 IF (((ity==1.AND.ptr_cur%IPOLY(4)==i).OR.
1170 . (ity==2.AND.(ptr_cur%IPOLY(3)==i.OR.
1171 . ptr_cur%IPOLY(4)==i)))
1173 . ((ityz==1.AND.ptr_cur%IZ(2)==inz).OR.
1174 . (ityz==2.AND.(ptr_cur%IZ(2)==inz.OR.
1175 . ptr_cur%IZ(3)==inz))))
THEN
1180 ipoly(k,npolb)=ptr_cur%IPOLY(k)
1183 rpoly(k,npolb)=ptr_cur%RPOLY(k)
1187 ptr_cur => ptr_cur%PTR
1194 IF (
ALLOCATED(polh))
DEALLOCATE(polh)
1195 ALLOCATE(polh(nphmax+2,npolhmax))
1197 CALL polyhedr(ipoly, rpoly , polb, npolb, polh,
1198 . nnp, nrpmax , nphmax, i, dxm ,
1199 . info , npolhmax, nppmax, rvolu(50))
1200 IF (info==1)
GOTO 300
1204 polc=redir(polb(npl))
1207 ity=ptr_cur%IPOLY(1)
1209 ptr_cur%IPOLY(5)=npolh+ipoly(5,npl)
1210 ELSEIF (ity==2)
THEN
1211 IF (ptr_cur%IPOLY(5)==0)
THEN
1212 ptr_cur%IPOLY(5)=npolh+ipoly(5,npl)
1214 ptr_cur%IPOLY(6)=npolh+ipoly(6,npl)
1217 IF (npl==npolb)
GOTO 350
1219 polc=redir(polb(npl))
1221 ptr_cur => ptr_cur%PTR
1227 IF (.NOT.
ASSOCIATED(phfirst))
THEN
1232 ph_prec%PTR => ph_cur
1235 ALLOCATE(ph_cur%POLH(2+nn))
1237 ph_cur%POLH(1)=polh(1,n)
1238 ph_cur%POLH(2)=polh(2,n)
1240 ph_cur%POLH(2+m)=redir(polh(2+m,n))
1246 DEALLOCATE(ipoly, rpoly, polb, polh, redir)
1261 nns2=nns2+ptr_cur%NNSP
1262 IF (ptr_cur%IPOLY(1)==1)
THEN
1263 lenimax=
max(lenimax,6+nn+1)
1264 lenrmax=
max(lenrmax,4+3*nn)
1265 ELSEIF (ptr_cur%IPOLY(1)==2)
THEN
1266 nhol=ptr_cur%IPOLY(6+nn+1)
1267 lenimax=
max(lenimax,6+nn+1+nhol)
1268 lenrmax=
max(lenrmax,4+3*nn+3*nhol)
1270 ptr_cur => ptr_cur%PTR
1276 nphmax=
max(nphmax,nn)
1277 ph_cur => ph_cur%PTR
1370 ALLOCATE(itagn(nnsa))
1380 n1=
fvspmd(ifv)%ELEMSA(1,iel)
1381 n2=
fvspmd(ifv)%ELEMSA(2,iel)
1382 n3=
fvspmd(ifv)%ELEMSA(3,iel)
1383 IF (n1>0) itagn(n1)=1
1384 IF (n1>0) itagn(n2)=1
1385 IF (n1>0) itagn(n3)=1
1392 ity=tfaca(2*(j-1)+1,i)
1395 nv=tfaca(2*(j-1)+2,i)
1396 IF (itagba(nv)==0)
THEN
1397 lenimax=
max(lenimax,6+3+1)
1398 lenrmax=
max(lenrmax,6+3*3)
1402 ELSEIF (nfac==6)
THEN
1409 ELSEIF (nfac==6)
THEN
1412 ELSEIF (ity==2)
THEN
1418 ELSEIF (nfac==6)
THEN
1423 ELSEIF (ity==3)
THEN
1427 ity=ptr_cur%IPOLY(1)
1429 iel=ptr_cur%IPOLY(3)
1430 IF (-tagela(iel)==i) nnp=nnp+1
1432 ptr_cur => ptr_cur%PTR
1437 nphmax=
max(nphmax,nnp)
1442 jj=
fvspmd(ifv)%IXSA(2*(j-1)+1,i)
1445 ELSEIF (nfac==6)
THEN
1456 ALLOCATE(ipoly_f(lenimax,npoly), rpoly_f(lenrmax,npoly),
1457 . polh_f(2+nphmax,npolh), ifvnod(nns), volu(npolh),
1458 . ifvnod2(2,nns2), rfvnod2(4,nns2), xns(3,nns),
1468 jj=ptr_cur%IPOLY(6+j)
1471 xns(1,nns)=ptr_cur%RPOLY(4+3*(j-1)+1)
1472 xns(2,nns)=ptr_cur%RPOLY(4+3*(j-1)+2)
1473 xns(3,nns)=ptr_cur%RPOLY(4+3*(j-1)+3)
1476 ptr_cur => ptr_cur%PTR
1484 ipoly_f(j,i)=ptr_cur%IPOLY(j)
1487 rpoly_f(j,i)=ptr_cur%RPOLY(j)
1490 jj=ptr_cur%IPOLY(6+j)
1494 ifvnod(nns)=ptr_cur%IELNOD(j)
1499 IF (ptr_cur%IPOLY(1)==1)
THEN
1500 ipoly_f(4,i)=ipoly_f(5,i)
1502 ELSEIF (ptr_cur%IPOLY(1)==2)
THEN
1503 nhol=ptr_cur%IPOLY(6+nn+1)
1504 ipoly_f(6+nn+1,i)=nhol
1506 ipoly_f(6+nn+1+j,i)=ptr_cur%IPOLY(6+nn+1+j)
1507 rpoly_f(4+3*nn+3*(j-1)+1,i)=
1508 . ptr_cur%RPOLY(4+3*nn+3*(j-1)+1)
1509 rpoly_f(4+3*nn+3*(j-1)+2,i)=
1510 . ptr_cur%RPOLY(4+3*nn+3*(j-1)+2)
1511 rpoly_f(4+3*nn+3*(j-1)+3,i)=
1512 . ptr_cur%RPOLY(4+3*nn+3*(j-1)+3)
1518 jj=ptr_cur%NREF(1,j)
1519 ifvnod2(1,jj)=ptr_cur%NREF(2,j)
1520 ifvnod2(2,jj)=ptr_cur%NREF(3,j)
1521 rfvnod2(1,jj)=ptr_cur%AREF(1,j)
1522 rfvnod2(2,jj)=ptr_cur%AREF(2,j)
1523 rfvnod2(3,jj)=ptr_cur%AREF(3,j)
1524 rfvnod2(4,jj)=ptr_cur%AREF(4,j)
1527 ptr_tmp => ptr_cur%PTR
1528 DEALLOCATE(ptr_cur%IPOLY, ptr_cur%RPOLY, ptr_cur%IELNOD)
1529 IF (nnsp>0)
DEALLOCATE(ptr_cur%NREF, ptr_cur%AREF)
1540 IF (ifvnod2(1,ii)/=n2.AND.ifvnod2(2,ii)/=n2)
THEN
1541 WRITE(istdo,*)
'PROBLEM DEPENDANT NODE ',i
1549 IF (ifvnod2(1,ii)/=n1.AND.ifvnod2(2,ii)/=n1)
THEN
1550 WRITE(istdo,*)
'PROBLEM DEPENDANT NODE ',i
1562 val=abs(xns(1,n1)-xns(1,n2))
1564 IF (abs(xns(j,n1)-xns(j,n2))>val)
THEN
1566 val=abs(xns(j,n1)-xns(j,n2))
1569 rfvnod2(1,i)=(rfvnod2(ii+1,i)-xns(ii,n2))/
1570 . (xns(ii,n1)-xns(ii,n2))
1578 polh_f(j,i)=ph_cur%POLH(j)
1580 ph_tmp => ph_cur%PTR
1581 DEALLOCATE(ph_cur%POLH)
1597 ity=tfaca(2*(j-1)+1,i)
1600 nv=tfaca(2*(j-1)+2,i)
1601 IF (itagba(nv)==0)
THEN
1611 ipoly_f(5,npoly)=npolh+i
1612 ipoly_f(6,npoly)=npolh+nv
1613 ipoly_f(6+1,npoly)=nns+1
1614 ipoly_f(6+2,npoly)=nns+2
1615 ipoly_f(6+3,npoly)=nns+3
1616 ipoly_f(6+3+1,npoly)=0
1636 nn1=
fvspmd(ifv)%IXSA(n1,i)
1637 nn2=
fvspmd(ifv)%IXSA(n2,i)
1638 nn3=
fvspmd(ifv)%IXSA(n3,i)
1662 area2=sqrt(nrx**2+nry**2+nrz**2)
1663 rpoly_f(2,npoly)=nrx/area2
1664 rpoly_f(3,npoly)=nry/area2
1665 rpoly_f(4,npoly)=nrz/area2
1666 rpoly_f(4+1,npoly)=x1
1667 rpoly_f(4+2,npoly)=y1
1668 rpoly_f(4+3,npoly)=z1
1669 rpoly_f(4+4,npoly)=x2
1670 rpoly_f(4+5,npoly)=y2
1671 rpoly_f(4+6,npoly)=z2
1672 rpoly_f(4+7,npoly)=x3
1673 rpoly_f(4+8,npoly)=y3
1674 rpoly_f(4+9,npoly)=z3
1677 polh_f(2+nnp,npolh+i)=npoly
1678 ELSEIF (nfac==6)
THEN
1701 nn1=
fvspmd(ifv)%IXSA(n1,i)
1702 nn2=
fvspmd(ifv)%IXSA(n2,i)
1703 nn3=
fvspmd(ifv)%IXSA(n3,i)
1704 nn4=
fvspmd(ifv)%IXSA(n4,i)
1724 ipoly_f(5,npoly)=npolh+i
1725 ipoly_f(6,npoly)=npolh+nv
1726 ipoly_f(6+1,npoly)=nns+1
1727 ipoly_f(6+2,npoly)=nns+2
1728 ipoly_f(6+3,npoly)=nns+3
1729 ipoly_f(6+3+1,npoly)=0
1743 area2=sqrt(nrx**2+nry**2+nrz**2)
1744 rpoly_f(2,npoly)=nrx/area2
1745 rpoly_f(3,npoly)=nry/area2
1746 rpoly_f(4,npoly)=nrz/area2
1747 rpoly_f(4+1,npoly)=x1
1748 rpoly_f(4+2,npoly)=y1
1749 rpoly_f(4+3,npoly)=z1
1750 rpoly_f(4+4,npoly)=x2
1751 rpoly_f(4+5,npoly)=y2
1752 rpoly_f(4+6,npoly)=z2
1753 rpoly_f(4+7,npoly)=x3
1754 rpoly_f(4+8,npoly)=y3
1755 rpoly_f(4+9,npoly)=z3
1758 polh_f(2+nnp,npolh+i)=npoly
1765 ipoly_f(5,npoly)=npolh+i
1766 ipoly_f(6,npoly)=npolh+nv
1767 ipoly_f(6+1,npoly)=nns+1
1768 ipoly_f(6+2,npoly)=nns+2
1769 ipoly_f(6+3,npoly)=nns+3
1770 ipoly_f(6+3+1,npoly)=0
1784 area2=sqrt(nrx**2+nry**2+nrz**2)
1785 rpoly_f(2,npoly)=nrx/area2
1786 rpoly_f(3,npoly)=nry/area2
1787 rpoly_f(4,npoly)=nrz/area2
1788 rpoly_f(4+1,npoly)=x1
1789 rpoly_f(4+2,npoly)=y1
1790 rpoly_f(4+3,npoly)=z1
1791 rpoly_f(4+4,npoly)=x3
1792 rpoly_f(4+5,npoly)=y3
1793 rpoly_f(4+6,npoly)=z3
1794 rpoly_f(4+7,npoly)=x4
1795 rpoly_f(4+8,npoly)=y4
1796 rpoly_f(4+9,npoly)=z4
1799 polh_f(2+nnp,npolh+i)=npoly
1802 DO k=1,polh_f(1,npolh+nv)
1803 kk=polh_f(2+k,npolh+nv)
1804 IF (ipoly_f(1,kk)==2.AND.
1805 . ipoly_f(6,kk)==npolh+i)
THEN
1807 polh_f(2+nnp,npolh+i)=kk
1811 ELSEIF (ity==2)
THEN
1813 ELSEIF (ity==3)
THEN
1819 IF (-tagela(iel)==i)
THEN
1821 polh_f(2+nnp,npolh+i)=k
1827 ipoly_f(6,k)=npolh+i
1833 polh_f(1,npolh+i)=nnp
1834 polh_f(2,npolh+i)=-i
1841 IF (ipoly_f(1,i)==1)
THEN
1843 IF (tagela(iel)>0) ipoly_f(3,i)=tagela(iel)
1848 IF (tagels(iel)>0)
THEN
1852 ipoly_f(3,npoly)=iel
1853 ipoly_f(4,npoly)=npolh_old+tagels(iel)
1856 ipoly_f(7,npoly)=nns+1
1857 ipoly_f(8,npoly)=nns+2
1858 ipoly_f(9,npoly)=nns+3
1884 nn1=
fvspmd(ifv)%ELEMSA(1,iel)
1885 nn2=
fvspmd(ifv)%ELEMSA(2,iel)
1886 nn3=
fvspmd(ifv)%ELEMSA(3,iel)
1891 rpoly_f(1,npoly)=elarea(iel)
1892 rpoly_f(2,npoly)=
norm(1,iel)
1893 rpoly_f(3,npoly)=
norm(2,iel)
1894 rpoly_f(4,npoly)=
norm(3,iel)
1910 rpoly_f(10,npoly)=z2
1911 rpoly_f(11,npoly)=x3
1912 rpoly_f(12,npoly)=y3
1913 rpoly_f(13,npoly)=z3
1915 nnp=polh_f(1,npolh_old+tagels(iel))
1917 polh_f(1,npolh_old+tagels(iel))=nnp
1918 polh_f(2+nnp,npolh_old+tagels(iel))=npoly
1929 IF (ity==2) nhol=ipoly_f(6+nn+1,i)
1941 x2=rpoly_f(4+3*(jj-1)+1,i)
1942 y2=rpoly_f(4+3*(jj-1)+2,i)
1943 z2=rpoly_f(4+3*(jj-1)+3,i)
1944 x3=rpoly_f(4+3*(jjj-1)+1,i)
1945 y3=rpoly_f(4+3*(jjj-1)+2,i)
1946 z3=rpoly_f(4+3*(jjj-1)+3,i)
1961 adr(j)=ipoly_f(6+nn+1+j,i)
1970 x2=rpoly_f(4+3*(jj-1)+1,i)
1971 y2=rpoly_f(4+3*(jj-1)+2,i)
1972 z2=rpoly_f(4+3*(jj-1)+3,i)
1973 x3=rpoly_f(4+3*(jjj-1)+1,i)
1974 y3=rpoly_f(4+3*(jjj-1)+2,i)
1975 z3=rpoly_f(4+3*(jjj-1)+3,i)
1990 x1=rpoly_f(4+3*adr(j)+1,i)
1991 y1=rpoly_f(4+3*adr(j)+2,i)
1992 z1=rpoly_f(4+3*adr(j)+3,i)
1994 DO k=adr(j)+1,adr(j+1)-2
1997 x2=rpoly_f(4+3*(kk-1)+1,i)
1998 y2=rpoly_f(4+3*(kk-1)+2,i)
1999 z2=rpoly_f(4+3*(kk-1)+3,i)
2000 x3=rpoly_f(4+3*(kkk-1)+1,i)
2001 y3=rpoly_f(4+3*(kkk-1)+2,i)
2002 z3=rpoly_f(4+3*(kkk-1)+3,i)
2012 area2=area2+(nnx*nx+nny*ny+nnz*nz)
2018 rpoly_f(1,i)=half*abs(
area)
2033 ELSEIF (ity==2)
THEN
2034 IF (ipoly_f(5,jj)==i)
THEN
2038 ELSEIF (ipoly_f(6,jj)==i)
THEN
2047 volu(i)=volu(i)+third*
area*(x1*nx+y1*ny+z1*nz)
2054 ALLOCATE(ifvnod_old(nns_old), redir(nns_old))
2056 ifvnod_old(i)=ifvnod(i)
2063 nnp_old=ipoly_f(2,i)
2070 x1=rpoly_f(4+3*(j-1)+1,i)
2071 y1=rpoly_f(4+3*(j-1)+2,i)
2072 z1=rpoly_f(4+3*(j-1)+3,i)
2073 lmax2=
max(lmax2,(x1-x0)**2+(y1-y0)**2+(z1-z0)**2)
2081 lmax2=
max(lmax2,(x1-x0)**2+(y1-y0)**2+(z1-z0)**2)
2085 IF (ipoly_f(1,i)==2) nhol=ipoly_f(6+nnp_old+1,i)
2086 ALLOCATE(ipoly_old(nnp_old), rpoly_old(3*nnp_old),
2087 . adr_old(nhol+2), adr(nhol+2))
2089 ipoly_old(j)=ipoly_f(6+j,i)
2092 rpoly_old(j)=rpoly_f(4+j,i)
2099 IF (ipoly_old(1)>0)
THEN
2104 ifvnod(nns)=ifvnod_old(nns_old)
2106 ipoly_f(7,i)=ipoly_old(1)
2112 IF (ipoly_old(j)>0) nns_old=nns_old+1
2113 x1=rpoly_old(3*(j-1)+1)
2114 y1=rpoly_old(3*(j-1)+2)
2115 z1=rpoly_old(3*(j-1)+3)
2116 dd=(x1-x0)**2+(y1-y0)**2+(z1-z0)**2
2119 IF (ipoly_old(j)>0)
THEN
2121 ifvnod(nns)=ifvnod_old(nns_old)
2122 rpoly_f(4+3*(nnp-1)+1,i)=x1
2123 rpoly_f(4+3*(nnp-1)+2,i)=y1
2124 rpoly_f(4+3*(nnp-1)+3,i)=z1
2125 ipoly_f(6+nnp,i)=nns
2127 rpoly_f(4+3*(nnp-1)+1,i)=x1
2128 rpoly_f(4+3*(nnp-1)+2,i)=y1
2129 rpoly_f(4+3*(nnp-1)+3,i)=z1
2130 ipoly_f(6+nnp,i)=ipoly_old(j)
2135 ELSEIF (ipoly_old(j)>0.AND.
2136 . ipoly_old(j0)<0)
THEN
2138 ifvnod(nns)=ifvnod_old(nns_old)
2139 rpoly_f(4+3*(nnp-1)+1,i)=x1
2140 rpoly_f(4+3*(nnp-1)+2,i)=y1
2141 rpoly_f(4+3*(nnp-1)+3,i)=z1
2142 ipoly_f(6+nnp,i)=nns
2144 IF (ipoly_old(j)>0) redir(nns_old
2150 dd=(x1-x0)**2+(y1-y0)**2+(z1-z0)**2
2151 IF (dd<=tole2.AND.ipoly_old(1)>0)
THEN
2155 ELSEIF (dd<=tole2.AND.ipoly_old(1)<0)
THEN
2162 ipoly_f(6+nnp+1,i)=0
2167 adr_old(j+1)=ipoly_f(6+nnp_old+1+j,i)
2169 adr_old(nhol+2)=nnp_old
2171 x0=rpoly_f(4+3*adr(j)+1,i)
2172 y0=rpoly_f(4+3*adr(j)+2,i)
2173 z0=rpoly_f(4+3*adr(j)+3,i)
2174 IF (ipoly_old(adr_old(j)+1)>0)
THEN
2178 ipoly_f(6+adr(j)+1,i)=nns
2179 ifvnod(nns)=ifvnod_old(nns_old)
2181 ipoly_f(6+adr(j)+1,i)=ipoly_old(adr_old(j)+1)
2186 DO k=adr_old(j)+2,adr_old(j+1)
2188 x1=rpoly_old(3*(k-1)+1)
2189 y1=rpoly_old(3*(k-1)+2)
2190 z1=rpoly_old(3*(k-1)+3)
2191 dd=(x1-x0)**2+(y1-y0)**2+(z1-z0)**2
2194 IF (ipoly_old(k)>0)
THEN
2196 ifvnod(nns)=ifvnod_old(nns_old
2197 rpoly_f(4+3*(nnp-1)+1,i)=x1
2198 rpoly_f(4+3*(nnp-1)+2,i)=y1
2199 rpoly_f(4+3*(nnp-1)+3,i)=z1
2200 ipoly_f(6+nnp,i)=nns
2202 rpoly_f(4+3*(nnp-1)+1,i)=x1
2203 rpoly_f(4+3*(nnp-1)+2,i)=y1
2204 rpoly_f(4+3*(nnp-1)+3,i)=z1
2205 ipoly_f(6+nnp,i)=ipoly_old(k)
2210 ELSEIF (ipoly_old(k)>0.AND.
2211 . ipoly_old(k0)<0)
THEN
2213 ifvnod(nns)=ifvnod_old(nns_old)
2214 rpoly_f(4+3*(nnp-1)+1,i)=x1
2215 rpoly_f(4+3*(nnp-1)+2,i)=y1
2216 rpoly_f(4+3*(nnp-1)+3,i)=z1
2217 ipoly_f(6+nnp,i)=nns
2219 IF (ipoly_old(k)>0) redir(nns_old)=nns
2222 x1=rpoly_f(4+3*(adr(j)-1)+1,i)
2223 y1=rpoly_f(4+3*(adr(j)-1)+2,i)
2224 z1=rpoly_f(4+3*(adr(j)-1)+3,i)
2225 dd=(x1-x0)**2+(y1-y0)**2+(z1-z0)**2
2226 IF (dd<=tole2.AND.ipoly_old(adr_old(j)+1)>0)
THEN
2230 ELSEIF (dd<=tole2.AND.
2231 . ipoly_old(adr_old(j)+1)<0)
THEN
2233 rpoly_f(4+3*(adr(j)-1)+1,i)=x0
2234 rpoly_f(4+3*(adr(j)-1)+2,i)=y0
2235 rpoly_f(4+3*(adr(j)-1)+3,i)=z0
2236 ipoly_f(6+adr(j)+1,i)=nns
2240 ipoly_f(6+nnp+1,i)=nhol
2242 ipoly_f(6+nnp+1+j,i)=adr(j+1)
2243 rpoly_f(4+3*nnp+3*(j-1)+1,i)=
2244 . rpoly_f(4+3*nnp_old+3*(j-1)+1,i)
2245 rpoly_f(4+3*nnp+3*(j-1)+2,i)=
2246 . rpoly_f(4+3*nnp_old+3*(j-1)+2,i)
2247 rpoly_f(4+3*nnp+3*(j-1)+3,i)=
2248 . rpoly_f(4+3*nnp_old+3*(j-1)+3,i)
2253 IF (nnp<nnp_old)
THEN
2263 DO j=1,ipoly_f(2,i)-2
2266 x2=rpoly_f(4+3*(jj-1)+1,i)
2267 y2=rpoly_f(4+3*(jj-1)+2,i
2268 z2=rpoly_f(4+3*(jj-1)+3,i)
2269 x3=rpoly_f(4+3*(jjj-1)+1,i)
2270 y3=rpoly_f(4+3*(jjj-1)+2,i)
2271 z3=rpoly_f(4+3*(jjj-1)+3,i)
2290 x2=rpoly_f(4+3*(jj-1)+1,i)
2291 y2=rpoly_f(4+3*(jj-1)+2,i)
2292 z2=rpoly_f(4+3*(jj-1)+3,i)
2293 x3=rpoly_f(4+3*(jjj-1)+1,i)
2294 y3=rpoly_f(4+3*(jjj-1)+2,i)
2295 z3=rpoly_f(4+3*(jjj-1)+3,i)
2310 x1=rpoly_f(4+3*adr(j+1)+1,i)
2311 y1=rpoly_f(4+3*adr(j+1)+2,i)
2312 z1=rpoly_f(4+3*adr(j+1)+3,i)
2313 DO k=adr(j+1)+1,adr(j+2)
2316 x2=rpoly_f(4+3*(kk-1)+1,i)
2317 y2=rpoly_f(4+3*(kk-1)+2,i)
2318 z2=rpoly_f(4+3*(kk-1)+3,i)
2319 x3=rpoly_f(4+3*(kkk-1)+1,i)
2320 y3=rpoly_f(4+3*(kkk-1)+2,i)
2321 z3=rpoly_f(4+3*(kkk-1)+3,i)
2334 rpoly_f(1,i)=half*abs(
area)
2337 DEALLOCATE(ipoly_old, rpoly_old, adr_old, adr)
2344 ifvnod2(1,i)=redir(i1)
2345 ifvnod2(2,i)=redir(i2)
2348 DEALLOCATE(ifvnod_old, redir)
2354 ALLOCATE(volu_old(npolh), rpoly_f_old(lenrmax,npoly),
2355 . ipoly_f_old(lenimax,npoly))
2361 ipoly_f_old(j,i)=ipoly_f(j,i)
2364 rpoly_f_old(j,i)=rpoly_f(j,i)
2367 400
IF (
ALLOCATED(polh_new))
DEALLOCATE(polh_new)
2368 IF (
ALLOCATED(imerged))
DEALLOCATE(imerged)
2369 ALLOCATE(polh_new(2+nphmax,npolh), imerged(npolh))
2377 ipoly_f(j,i)=ipoly_f_old(j,i)
2380 rpoly_f(j,i)=rpoly_f_old(j,i)
2387 DO j=1,2+polh_f(1,i)
2388 polh_new(j,i)=polh_f(j,i)
2393 IF (polh_f(2,i)<0) cycle
2394 IF (volu(i)<zero)
THEN
2407 IF (volu(i)>zero)
THEN
2415 volumin=vm*rvolu(31)
2418 IF (polh_new(2,i)<0)
THEN
2421 IF(ibsa(ii)==0) cycle
2424 IF (volu(i)<=volumin)
THEN
2428 DO j=1,polh_new(1,i)
2433 IF (
area>areamax)
THEN
2434 IF (ipoly_f(5,jj)==i)
THEN
2436 IF (polh_new(2,ii)<0)
THEN
2438 IF (ibsa(iii)==0) cycle
2443 ELSEIF (ipoly_f(6,jj)==i)
THEN
2445 IF (polh_new(2,ii)<0)
THEN
2447 IF (ibsa(iii)==0) cycle
2457 jjmax=polh_new(2+jmax,i)
2458 rpoly_f(1,jjmax)=-one
2461 jjmax=polh_new(2+jmax,i)
2462 ity=ipoly_f(1,jjmax)
2463 IF (ity==2) rpoly_f(1,jjmax)=-one
2467 IF (imerged(imax)==1) imax=polh_new(2,imax)
2469 volu(imax)=volu(imax)+volu(i)
2472 DO j=1,polh_new(1,i)
2475 IF (np>nphmax) info=1
2478 polh_new(2+np,imax)=jj
2481 IF (ipoly_f(5,jj)==i)
THEN
2483 ELSEIF (ipoly_f(6,jj)==i)
THEN
2488 nphmax=
max(nphmax,np)
2493 IF (info==0) polh_new(1,imax)=np
2496 IF (info==1)
GOTO 400
2500 IF (volu(i)<=zero) cycle
2501 IF (volu(i)<vmin)
THEN
2505 DO j=1,polh_new(1,i)
2507 IF (ipoly_f(1,jj)==1.OR.rpoly_f(1,jj)<zero) cycle
2508 IF (ipoly_f(5,jj)==ipoly_f(6,jj)) rpoly_f(1,jj)=-one
2511 DEALLOCATE(volu_old, rpoly_f_old, ipoly_f_old, imerged)
2520 IF (volu(i)>zero)
THEN
2529 IF (ity==1.AND.rpoly_f(1,i)>zero)
THEN
2531 areap=areap+rpoly_f(1,i)
2532 ELSEIF (ity==2.AND.rpoly_f(1,i)>zero)
THEN
2537 areael=areael+elarea(iel)
2542 ALLOCATE(
fvdata(ifv)%IFVNOD(3,nns+nns2),
2543 .
fvdata(ifv)%RFVNOD(2,nns+nns2))
2545 fvdata(ifv)%IFVNOD(1,i)=0
2553 IF (ipoly_f(6+j,i)>0)
THEN
2555 IF (ifvnod(nns)<0)
THEN
2556 fvdata(ifv)%IFVNOD(1,nns)=2
2557 fvdata(ifv)%IFVNOD(2,nns)=-ifvnod(nns)
2560 fvdata(ifv)%IFVNOD(1,nns)=1
2562 fvdata(ifv)%IFVNOD(2,nns)=iel
2563 xx=rpoly_f(4+3*(j-1)+1,i)
2564 yy=rpoly_f(4+3*(j-1)+2,i)
2565 zz=rpoly_f(4+3*(j-1)+3,i)
2570 IF (tagela(iel)>0)
THEN
2580 ELSEIF (tagela(iel)<0)
THEN
2601 CALL coorloc(vpx, vpy, vpz, v1x, v1y,
2602 . v1z, v2x, v2y, v2z, ksi,
2605 fvdata(ifv)%RFVNOD(1,nns)=ksi
2606 fvdata(ifv)%RFVNOD(2,nns)=eta
2609 fvdata(ifv)%IFVNOD(1,nns_old+jj)=3
2610 fvdata(ifv)%IFVNOD(2,nns_old+jj)=ifvnod2(1,jj)
2611 fvdata(ifv)%IFVNOD(3,nns_old+jj)=ifvnod2(2,jj)
2612 fvdata(ifv)%RFVNOD(1,nns_old+jj)=rfvnod2(1,jj)
2617 IF (
fvdata(ifv)%IFVNOD(1,nns+i)==0)
THEN
2618 fvdata(ifv)%IFVNOD(1,nns+i)=3
2619 fvdata(ifv)%IFVNOD(2,nns+i)=1
2620 fvdata(ifv)%IFVNOD(3,nns+i)=2
2621 fvdata(ifv)%RFVNOD(1,nns+i)=one
2632 ALLOCATE(
fvdata(ifv)%IFVTRI(6,nntr),
2633 .
fvdata(ifv)%IFVPOLY(nntr),
2634 .
fvdata(ifv)%IFVTADR(npoly+1))
2639 ALLOCATE(redir_poly(npoly_old))
2646 IF (rpoly_f(1,i)<=zero)
THEN
2648 IF (ipoly_f(6+j,i)>0) nns=nns+1
2656 IF (ipoly_f(1,i)==2) nhol=ipoly_f(6+nnp+1,i)
2657 ALLOCATE(pnodes(2,nnp), pseg(2,nnp), pholes(2,nhol),
2658 . ptri(3,nnp), redir(nnp))
2662 IF (ipoly_f(6+j,i)>0)
THEN
2670 IF (ipoly_f(1,i)==1)
THEN
2674 ELSEIF (ipoly_f(1,i)==2)
THEN
2691 nrm1=sqrt((x1-x0)**2+(y1-y0)**2+(z1-z0)**2)
2703 xx=rpoly_f(4+3*(j-1)+1,i)
2704 yy=rpoly_f(4+3*(j-1)+2,i
2705 zz=rpoly_f(4+3*(j-1)+3,i)
2709 pnodes(1,j)=vx*vx1+vy*vy1+vz*vz1
2710 pnodes(2,j)=vx*vx2+vy*vy2+vz*vz2
2718 ALLOCATE(adr(nhol+1))
2720 adr(j)=ipoly_f(6+nnp+1+j,i)
2725 xx=rpoly_f(4+3*(j-1)+1,i)
2726 yy=rpoly_f(4+3*(j-1)+2,i)
2727 zz=rpoly_f(4+3*(j-1)+3,i)
2731 pnodes(1,j)=vx*vx1+vy*vy1+vz*vz1
2732 pnodes(2,j)=vx*vx2+vy*vy2+vz*vz2
2741 xx=rpoly_f(4+3*adr(j)+1,i)
2742 yy=rpoly_f(4+3*adr(j)+2,i)
2743 zz=rpoly_f(4+3*adr(j)+3,i)
2747 pnodes(1,adr(j)+1)=vx*vx1+vy*vy1+vz*vz1
2748 pnodes(2,adr(j)+1)=vx*vx2+vy*vy2+vz*vz2
2749 DO k=adr(j)+2,adr(j+1)
2750 xx=rpoly_f(4+3*(k-1)+1,i)
2751 yy=rpoly_f(4+3*(k-1)+2,i)
2752 zz=rpoly_f(4+3*(k-1)+3,i)
2756 pnodes(1,k)=vx*vx1+vy*vy1+vz*vz1
2757 pnodes(2,k)=vx*vx2+vy*vy2+vz*vz2
2763 pseg(1,nseg)=adr(j+1)
2764 pseg(2,nseg)=adr(j)+1
2766 xx=rpoly_f(4+3*nnp+3*(j-1)+1,i)
2767 yy=rpoly_f(4+3*nnp+3*(j-1)+2,i)
2768 zz=rpoly_f(4+3*nnp+3*(j-1)+3,i)
2772 pholes(1,j)=vx*vx1+vy*vy1+vz*vz1
2773 pholes(2,j)=vx*vx2+vy*vy2+vz*vz2
2778 CALL c_tricall(pnodes, pseg, pholes, ptri, nnp,
2779 . nseg, nhol, nelp )
2781 fvdata(ifv)%IFVTADR(npoly)=nntr+1
2788 x1=rpoly_f(4+3*(n1-1)+1,i)
2789 y1=rpoly_f(4+3*(n1-1)+2,i)
2790 z1=rpoly_f(4+3*(n1-1)+3,i)
2791 x2=rpoly_f(4+3*(n2-1)+1,i)
2792 y2=rpoly_f(4+3*(n2-1)+2,i)
2793 z2=rpoly_f(4+3*(n2-1)+3,i)
2794 x3=rpoly_f(4+3*(n3-1)+1,i)
2795 y3=rpoly_f(4+3*(n3-1)+2,i)
2796 z3=rpoly_f(4+3*(n3-1)+3,i)
2806 ss=nrx*nx+nry*ny+nrz*nz
2809 fvdata(ifv)%IFVTRI(1,nntr)=redir(n1)
2810 fvdata(ifv)%IFVTRI(2,nntr)=redir(n2)
2811 fvdata(ifv)%IFVTRI(3,nntr)=redir(n3)
2813 fvdata(ifv)%IFVTRI(1,nntr)=redir(n1)
2814 fvdata(ifv)%IFVTRI(2,nntr)=redir(n3)
2815 fvdata(ifv)%IFVTRI(3,nntr)=redir(n2)
2817 fvdata(ifv)%IFVTRI(4,nntr)=ipsurf
2818 fvdata(ifv)%IFVTRI(5,nntr)=ic1
2819 fvdata(ifv)%IFVTRI(6,nntr)=ic2
2820 fvdata(ifv)%IFVPOLY(nntr)=nntr
2823 DEALLOCATE(pnodes, pseg, pholes, ptri, redir)
2825 fvdata(ifv)%IFVTADR(npoly+1)=nntr+1
2829 ALLOCATE(
fvdata(ifv)%IFVPOLH(2*npoly),
2830 .
fvdata(ifv)%IFVPADR(npolh+1),
2831 .
fvdata(ifv)%IDPOLH(npolh),
2832 .
fvdata(ifv)%IBPOLH(npolh))
2836 ALLOCATE(redir_polh(npolh_old))
2842 IF (volu(i)<=zero) cycle
2845 fvdata(ifv)%IFVPADR(npolh)=nnp+1
2846 DO j=1,polh_new(1,i)
2847 jj=redir_poly(polh_new(2+j,i))
2850 fvdata(ifv)%IFVPOLH(nnp)=redir_poly(polh_new(2+j,i))
2853 fvdata(ifv)%IDPOLH(npolh)=npolh
2857 IF (ii<0.AND.ibsa(-ii)==1) ii=-ii
2858 fvdata(ifv)%IBPOLH(npolh)=ii
2860 fvdata(ifv)%IFVPADR(npolh+1)=nnp+1
2863 IF (
fvdata(ifv)%IFVTRI(4,i)==0)
THEN
2864 ic1=
fvdata(ifv)%IFVTRI(5,i)
2865 ic2=
fvdata(ifv)%IFVTRI(6,i)
2866 fvdata(ifv)%IFVTRI(5,i)=redir_polh(ic1)
2867 fvdata(ifv)%IFVTRI(6,i)=redir_polh(ic2)
2883 ALLOCATE(
fvdata(ifv)%MPOLH(npolh),
fvdata(ifv)%QPOLH(3,npolh),
2886 .
fvdata(ifv)%CPAPOLH(npolh),
fvdata(ifv)%CPBPOLH(npolh),
2887 .
fvdata(ifv)%CPCPOLH(npolh),
fvdata(ifv)%RMWPOLH(npolh),
2888 .
fvdata(ifv)%VPOLH_INI(npolh),
fvdata(ifv)%DTPOLH(npolh),
2889 .
fvdata(ifv)%TPOLH(npolh),
fvdata(ifv)%CPDPOLH(npolh),
2890 .
fvdata(ifv)%CPEPOLH(npolh),
fvdata(ifv)%CPFPOLH(npolh))
2895 fvdata(ifv)%VPOLH_INI(ii)=volu(i)
2898 DEALLOCATE(ipoly_f, rpoly_f, polh_f, volu, redir_poly, redir_polh,
2899 . polh_new, ifvnod, ifvnod2, rfvnod2, xns, xns2)
2906 IF (
fvdata(ifv)%IFVTRI(4,i)>0)
THEN
2914 WRITE(istdo,
'(A25,I10,A24)')
2915 .
' ** MONITORED VOLUME ID: ',ivolu(1),
' - FINITE VOLUME MESH **'
2916 WRITE(istdo,
'(A42,I8)')
2917 .
' NUMBER OF SURFACE POLYGONS : ',nspoly
2918 WRITE(istdo,
'(A42,I8)')
2919 .
' NUMBER OF SURFACE TRIANGLES : ',nstr
2920 WRITE(istdo,
'(A42,I8)')
2921 .
' NUMBER OF COMMUNICATION POLYGONS : ',ncpoly
2922 WRITE(istdo,
'(A42,I8)')
2923 .
' NUMBER OF COMMUNICATION TRIANGLES : ',nctr
2924 WRITE(istdo,
'(A42,I8)')
2925 .
' NUMBER OF POLYHEDRA (FINITE VOLUMES): ',npolhf
2926 IF (ilvout>=1)
WRITE(istdo,
'(A29,G16.9,A8,I8,A1)')
2927 .
' MIN. POLYHEDRON VOLUME : ',vmin,
' (POLY. ',imin,
')'
2928 IF (ilvout>=1)
WRITE(istdo,
'(A29,G16.9)')
2929 .
' INITIAL MERGING VOLUME : ',volumin
2930 WRITE(istdo,
'(A29,G16.9,A17,G16.9,A1)')
2931 .
' SUM VOLUME POLYHEDRA : ',volph,
' (VOLUME AIRBAG: ',volg,
')'
2932 WRITE(istdo,
'(A29,G16.9,A17,G16.9,A1)')
2933 .
' SUM AREA SURF. POLYGONS: ',areap,
2934 .
' (AREA AIRBAG : ',areael,
')'
2937 WRITE(iout,
'(A25,I10,A24)')
2938 .' ** monitored volume
id:
',IVOLU(1),' - finite volume mesh **
'
2939 WRITE(IOUT,'(a42,i8)
')
2940 . ' number of surface polygons :
',NSPOLY
2941 WRITE(IOUT,'(a42,i8)
')
2942 . ' number of communication polygons :
',NCPOLY
2943 WRITE(IOUT,'(a42,i8)
')
2944 . ' number of polyhedra(finite volumes):
',NPOLHF
2945 IF (ILVOUT>=1) WRITE(IOUT,'(a29,g16.9,a8,i8,a1)
')
2946 . ' min. polyhedron volume :
',VMIN,' (poly.
',IMIN,')
'
2947 IF (ILVOUT>=1) WRITE(IOUT,'(a29,g16.9)
')
2948 . ' initial merging volume :
',VOLUMIN
2949 WRITE(IOUT,'(a29,g16.9,a17,g16.9,a1)
')
2950 .' sum volume polyhedra :
',VOLPH,' (volume airbag:
',VOLG,')
'
2951 WRITE(IOUT,'(a29,g16.9,a17,g16.9,a1)
')
2952 .' sum
area surf. polygons:
',AREAP,
2953 . ' (
area airbag :
',AREAEL,')
'
2958 FVDATA(IFV)%NPOLH_ANIM=NPOLH
2959 LENP=FVDATA(IFV)%IFVTADR(NPOLY+1)
2960 LENH=FVDATA(IFV)%IFVPADR(NPOLH+1)
2961 ALLOCATE(FVDATA(IFV)%IFVPOLY_ANIM(LENP),
2962 . FVDATA(IFV)%IFVTADR_ANIM(NPOLY+1),
2963 . FVDATA(IFV)%IFVPOLH_ANIM(LENH),
2964 . FVDATA(IFV)%IFVPADR_ANIM(NPOLH+1),
2965 . FVDATA(IFV)%IFVTRI_ANIM(6,NNTR),
2966 . FVDATA(IFV)%REDIR_ANIM(NNS+NNS2),
2967 . FVDATA(IFV)%NOD_ANIM(3,NNS+NNS2),
2968 . REDIR(NNS+NNS2), ITAGT(NNTR))
2970 FVDATA(IFV)%IFVPOLY_ANIM(I)=FVDATA(IFV)%IFVPOLY(I)
2973 FVDATA(IFV)%IFVTADR_ANIM(I)=FVDATA(IFV)%IFVTADR(I)
2976 FVDATA(IFV)%IFVPOLH_ANIM(I)=FVDATA(IFV)%IFVPOLH(I)
2979 FVDATA(IFV)%IFVPADR_ANIM(I)=FVDATA(IFV)%IFVPADR(I)
2982 TOLE=EM05*FAC_LENGTH
2985 IF (ILVOUT/=0) WRITE(ISTDO,'(a25,i10,a39)
')
2986 . ' ** monitored volume
id:
',IVOLU(1),
2987 . ' - merging coincident nodes
for anim **
'
2988 ALLOCATE(PNODES(3,NNS+NNS2))
2990 IF (FVDATA(IFV)%IFVNOD(1,I)==1) THEN
2991 IEL=FVDATA(IFV)%IFVNOD(2,I)
2992 KSI=FVDATA(IFV)%RFVNOD(1,I)
2993 ETA=FVDATA(IFV)%RFVNOD(2,I)
2997 IF (TAGELA(IEL)>0) THEN
3007 ELSEIF (TAGELA(IEL)<0) THEN
3018 PNODES(1,I)=(ONE-KSI-ETA)*X1+KSI*X2+ETA*X3
3019 PNODES(2,I)=(ONE-KSI-ETA)*Y1+KSI*Y2+ETA*Y3
3020 PNODES(3,I)=(ONE-KSI-ETA)*Z1+KSI*Z2+ETA*Z3
3021 ELSEIF (FVDATA(IFV)%IFVNOD(1,I)==2) THEN
3028 II=FVDATA(IFV)%IFVNOD(2,I)
3029 PNODES(1,I)=XXXSA(1,II)
3030 PNODES(2,I)=XXXSA(2,II)
3031 PNODES(3,I)=XXXSA(3,II)
3037 I1=FVDATA(IFV)%IFVNOD(2,II)
3038 I2=FVDATA(IFV)%IFVNOD(3,II)
3039 ALPHA=FVDATA(IFV)%RFVNOD(1,II)
3040 PNODES(1,II)=ALPHA*PNODES(1,I1)+(ONE-ALPHA)*PNODES(1,I2)
3041 PNODES(2,II)=ALPHA*PNODES(2,I1)+(ONE-ALPHA)*PNODES(2,I2)
3042 PNODES(3,II)=ALPHA*PNODES(3,I1)+(ONE-ALPHA)*PNODES(3,I2)
3045 IF (ILVOUT<0) CALL PROGBAR_C(I,NNS+NNS2)
3052 XN(1)=FVDATA(IFV)%NOD_ANIM(1,J)
3053 XN(2)=FVDATA(IFV)%NOD_ANIM(2,J)
3054 XN(3)=FVDATA(IFV)%NOD_ANIM(3,J)
3055 DD2=(XX-XN(1))**2+(YY-XN(2))**2+(ZZ-XN(3))**2
3056 IF (DD2<=TOLE2) THEN
3064 FVDATA(IFV)%REDIR_ANIM(NNS_ANIM)=I
3065 FVDATA(IFV)%NOD_ANIM(1,NNS_ANIM)=XX
3066 FVDATA(IFV)%NOD_ANIM(2,NNS_ANIM)=YY
3067 FVDATA(IFV)%NOD_ANIM(3,NNS_ANIM)=ZZ
3072 FVDATA(IFV)%NNS_ANIM=NNS_ANIM
3073 FVDATA(IFV)%ID=IVOLU(1)
3076 N1=FVDATA(IFV)%IFVTRI(1,I)
3077 N2=FVDATA(IFV)%IFVTRI(2,I)
3078 N3=FVDATA(IFV)%IFVTRI(3,I)
3079 FVDATA(IFV)%IFVTRI_ANIM(1,I)=REDIR(N1)
3080 FVDATA(IFV)%IFVTRI_ANIM(2,I)=REDIR(N2)
3081 FVDATA(IFV)%IFVTRI_ANIM(3,I)=REDIR(N3)
3082 FVDATA(IFV)%IFVTRI_ANIM(4,I)=
3083 . FVDATA(IFV)%IFVTRI(4,I)
3084 FVDATA(IFV)%IFVTRI_ANIM(5,I)=
3085 . FVDATA(IFV)%IFVTRI(5,I)
3086 FVDATA(IFV)%IFVTRI_ANIM(6,I)=
3087 . FVDATA(IFV)%IFVTRI(6,I)
3091 DEALLOCATE(REDIR, ITAGT)