48 SUBROUTINE fvmesh1(IBUF , ELEM , X , IVOLU, BRIC ,
49 . XB , RVOLU , NEL , NELI, NBRIC, TBRIC,
50 . SFAC , DXM , NBA , NELA ,
51 . TBA , TFACA , TAGELS, IBUFA,
52 . ELEMA, TAGELA, IXS ,ID ,TITR, NB_NODE, ITYP)
64#include "implicit_f.inc"
73 INTEGER IBUF(*), ELEM(3,*), IVOLU(*), BRIC(8,*),
74 . NEL, NELI, NBRIC, TBRIC(13,*), NBA, NELA, TBA(2,*),
75 . TFACA(12,*), TAGELS(*), IBUFA(*), ELEMA(3,*), TAGELA(*),
76 . IXS(NIXS,*), NB_NODE, ITYP
77 my_real x(3,*), xb(3,*), rvolu(*), sfac(6,4,*), dxm
79 CHARACTER(len=nchartitle) :: TITR
83 INTEGER ILVOUT, NLAYER, NFACMAX, NPPMAX, I, J, IEL, N1, N2, N3,
84 . NN1, NN2, NN3, IAD, NPOLY, NNS, ITAGB(NBRIC),
85 . NVMAX, INFO, ICUT, NVERTS, NF1, NF2, NF3, NF4, NS,
86 . NSMAX, NV, K, KK, NNP, NPOLMAX, NRPMAX, N, M, MM, NPOLH,
87 . npolb, ity, nn, nphmax, npolhmax, jj, jjj, ii,
88 . nns_old, nnp_old, npa, jmax, imax, jjmax, np, nntr,
89 . npoly_old, ipsurf, ic1, ic2, nhol, nelp, npolh_old,
90 . l, ll, ifv, nns2, npoly2, npl, polc, nspoly, ncpoly,
91 . npolhf, lenp, lenh, ip, lenimax,
92 . lenrmax, kkk, nseg, imin, nfac, n4, nn4,
93 . itagba(nba), ibsa(nba), itagn(nb_node), nall,
94 . nns_anim, nbz, nbnedge, nns3, npoly_new, nnsp, nedge,
95 . ityz, inz, j0, nns1, k0, i1, i2, idep, nstr, nctr, iiz,
96 . nns_old_save,ityzint,iad1, iad2, itmp1
97 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IFLAG
99 my_real x1, y1, z1, x2, y2, z2, x3, y3, z3, x12, y12, z12,
100 . x13, y13, z13, nrx, nry, nrz, area2, elarea(nel+neli),
101 .
norm(3,nel+neli), xbmax, ybmax, zbmax, xbmin, ybmin, zbmin,
102 . xc, yc, zc, xx, yy, zz, pp(3,3), xl7(3), bcenter(3),
103 . bhalfsize(3), xtmax, ytmax, ztmax, xtmin, ytmin, ztmin,
104 . tverts(9), tmptri(3,3), tmpbox(3,8), tmpnorm(3,6), tole,
105 . xg, yg, zg, fv0(3), fv1(3), fv2(3), fu0(3), fu1(3),
106 . fu2(3), quad(3,4), nr(3),
area, nx, ny, nz, nnx,
107 . nny, nnz, x0, y0, z0, lmax2, tole2, dd, vm, volumin,
108 . areamax, volph, areap, areael, vpx, vpy, vpz,
109 . v1x, v1y, v1z, v2x, v2y, v2z, nrm1, vx, vy, vz, ss,
110 . normf(3,4), ksi, eta, vx1, vy1, vz1, vx2, vy2, vz2,
111 . vmin, x4, y4, z4, norma(3,nela),
112 . dd2, xn(3), zlmin, zlmax, zl, vnorm, vx3, vy3, vz3, lz,
113 . dz,
alpha, gamai, cpai, cpbi, cpci, rmwi, pini, ti, cpi,
114 . cvi, rhoi, zl1, zl2, zl3, zlc, val,
tmass,
115 . ti2, cpdi, cpei, cpfi, r1
116 INTEGER :: COUNT_ELEM_INT, COUNT_ELEM_EXT, COUNT_TRIA_INTERNE
117 INTEGER :: COUNT_ELEM_INT_OLD, COUNT_ELEM_EXT_OLD, COUNT_TRIA_INTERNE_OLD
118 INTEGER,
ALLOCATABLE :: FACET(:,:), IPOLY(:,:),
119 . IELNOD(:,:), POLH(:,:), IPOLY_F(:,:),
120 . polh_f(:,:), ifvnod(:), ifvnod_old(:),
121 . redir_poly(:), pseg(:,:), redir(:),
122 . ptri(:,:), redir_polh(:), polb(:),
123 . ipoly_old(:), polh_new(:,:), itagt(:),
124 . tri(:,:), adr(:), adr_old(:), imerged(:),
125 . ipoly_f_old(:,:), inedge(:,:), nref(:,:),
126 . iz(:,:), ledge(:), ifvnod2(:,:)
127 my_real,
ALLOCATABLE :: normt(:,:), poly(:,:), rpoly(:,:),
128 . rpoly_f(:,:), volu(:), pnodes(:,:),
129 . pholes(:,:), rpoly_old(:),
130 . volu_old(:), rpoly_f_old(:,:),
132 . aref(:,:), rfvnod2(:,:), xns(:,:),
133 . xns2(:,:), areatr(:)
135 INTEGER FAC(4,6), FACNOR(4,6), FAC4(3,4), FAC6(4,5)
136 INTEGER FAC5(4,5), NFACE(4), NTYPE, IQUAD
143 DATA facnor /3,4,5,6,
168 INTEGER,
DIMENSION(:),
POINTER :: IPOLY, IELNOD
169 INTEGER,
DIMENSION(:,:),
POINTER :: NREF
170 my_real,
DIMENSION(:),
POINTER :: rpoly
171 my_real,
DIMENSION(:,:),
POINTER :: aref
172 TYPE(polygone),
POINTER :: PTR
174 TYPE(polygone),
POINTER :: FIRST, PTR_PREC, PTR_CUR, PTR_TMP,
175 . ptr_old, first2, ptr_cur2, ptr_prec2,
177 TYPE(polygone),
TARGET :: NOTHING
181 INTEGER,
DIMENSION(:),
POINTER :: POLH
182 TYPE(POLYHEDRE),
POINTER :: PTR
184 TYPE(polyhedre),
POINTER :: PHFIRST, PH_PREC, PH_CUR, PH_TMP
186 my_real,
DIMENSION(:),
ALLOCATABLE :: radius
187 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IDX
209 nothing%PTR => nothing
222 IF (ilvout >=1.AND.nba == 0)
WRITE(istdo,
'(A19,I10)')
223 .
' --> FVMBAG ID: ',ivolu(1)
245 CALL fvnormal(x,nn1,nn2,nn3,0,nrx,nry,nrz)
246 area2=sqrt(nrx**2+nry**2+nrz**2)
247 elarea(iel)=half*area2
248 norm(1,iel)=nrx/area2
249 norm(2,iel)=nry/area2
250 norm(3,iel)=nrz/area2
257 IF (tagela(iel) > 0)
THEN
261 ELSEIF (tagela(iel) < 0)
THEN
266 CALL fvnormal(x,nn1,nn2,nn3,0,nrx,nry,nrz)
267 area2=sqrt(nrx**2+nry**2+nrz**2)
268 norma(1,iel)=nrx/area2
269 norma(2,iel)=nry/area2
270 norma(3,iel)=nrz/area2
291 IF (ilvout >=1)
WRITE(istdo,
'(8X,A)')
'BUILDING POLYGONS'
301 ALLOCATE(facet(6,1+nfacmax), tri(nfacmax,5),
302 . normt(3,nfacmax), poly(3,nvmax))
344 xl7(1)=pp(1,1)*(xx-xc)+pp(2,1)*(yy-yc)+pp(3,1)*(zz-zc)
345 xl7(2)=pp(1,2)*(xx-xc)+pp(2,2)*(yy-yc)+pp(3,2)*(zz-zc)
346 xl7(3)=pp(1,3)*(xx-xc)+pp(2,3)*(yy-yc)+pp(3,3)*(zz-zc)
358 IF (tagela(iel) > 0)
THEN
362 ELSEIF (tagela(iel) < 0)
THEN
382 IF (xbmax < xtmin.OR.ybmax < ytmin.OR.zbmax < ztmin.OR.
383 . xbmin > xtmax.OR.ybmin > ytmax.OR.zbmin > ztmax)
386 tverts(1)=pp(1,1)*(x1-xc)+pp(2,1)*(y1-yc)+pp(3,1)*(z1-zc)
387 tverts(2)=pp(1,2)*(x1-xc)+pp(2,2)*(y1-yc)+pp(3,2)*(z1-zc)
388 tverts(3)=pp(1,3)*(x1-xc)+pp(2,3)*(y1-yc)+pp(3,3)*(z1-zc)
389 tverts(4)=pp(1,1)*(x2-xc)+pp(2,1)*(y2-yc)+pp(3,1)*(z2-zc)
390 tverts(5)=pp(1,2)*(x2-xc)+pp(2,2)*(y2-yc)+pp(3,2)*(z2-zc)
391 tverts(6)=pp(1,3)*(x2-xc)+pp(2,3)*(y2-yc)+pp(3,3)*(z2-zc)
392 tverts(7)=pp(1,1)*(x3-xc)+pp(2,1)*(y3-yc)+pp(3,1)*(z3-zc)
393 tverts(8)=pp(1,2)*(x3-xc)+pp(2,2)*(y3-yc)+pp(3,2)*(z3-zc)
394 tverts(9)=pp(1,3)*(x3-xc)+pp(2,3)*(y3-yc)+pp(3,3)*(z3-zc)
396 CALL tribox3(icut, bcenter, bhalfsize, tverts)
404 x1=xg+(one+tole)*(x1-xg)
405 y1=yg+(one+tole)*(y1-yg)
406 z1=zg+(one+tole)*(z1-zg)
407 x2=xg+(one+tole)*(x2-xg)
408 y2=yg+(one+tole)*(y2-yg)
409 z2=zg+(one+tole)*(z2-zg)
410 x3=xg+(one+tole)*(x3-xg)
411 y3=yg+(one+tole)*(y3-yg)
412 z3=zg+(one+tole)*(z3-zg)
414 tverts(1)=pp(1,1)*(x1-xc)+pp(2,1)*(y1-yc)+pp(3,1)*(z1-zc)
415 tverts(2)=pp(1,2)*(x1-xc)+pp(2,2)*(y1-yc)+pp(3,2)*(z1-zc)
416 tverts(3)=pp(1,3)*(x1-xc)+pp(2,3)*(y1-yc)+pp(3,3)*(z1-zc)
417 tverts(4)=pp(1,1)*(x2-xc)+pp(2,1)*(y2-yc)+pp(3,1)*(z2-zc)
418 tverts(5)=pp(1,2)*(x2-xc)+pp(2,2)*(y2-yc)+pp(3,2)*(z2-zc)
419 tverts(6)=pp(1,3)*(x2-xc)+pp(2,3)*(y2-yc)+pp(3,3)*(z2-zc)
420 tverts(7)=pp(1,1)*(x3-xc)+pp(2,1)*(y3-yc)+pp(3,1)*(z3-zc)
421 tverts(8)=pp(1,2)*(x3-xc)+pp(2,2)*(y3-yc)+pp(3,2)*(z3-zc)
422 tverts(9)=pp(1,3)*(x3-xc)+pp(2,3)*(y3-yc)+pp(3,3)*(z3-zc)
424 CALL tribox3(icut, bcenter, bhalfsize, tverts)
425 IF (icut == 1) icut=2
441 tmpbox(1,j)=xb(1,bric(j,i))
442 tmpbox(2,j)=xb(2,bric(j,i))
443 tmpbox(3,j)=xb(3,bric(j,i))
446 tmpnorm(1,j)=-sfac(j,2,i)
447 tmpnorm(2,j)=-sfac(j,3,i)
448 tmpnorm(3,j)=-sfac(j,4,i)
450 CALL itribox(tmptri, tmpbox, tmpnorm, nverts, poly,
454 IF (.NOT.
ASSOCIATED(first))
THEN
459 ptr_prec%PTR => ptr_cur
461 ALLOCATE(ptr_cur%IPOLY(6+nverts),
462 . ptr_cur%IELNOD(nverts),
463 . ptr_cur%RPOLY(4+3*nverts))
465 ptr_cur%IPOLY(2)=nverts
470 ptr_cur%RPOLY(1)=zero
471 ptr_cur%RPOLY(2)=norma(1,iel)
472 ptr_cur%RPOLY(3)=norma(2,iel)
473 ptr_cur%RPOLY(4)=norma(3,iel)
476 ptr_cur%IPOLY(6+j)=nns
477 ptr_cur%IELNOD(j)=iel
478 ptr_cur%RPOLY(4+3*(j-1)+1)=poly(1,j)
479 ptr_cur%RPOLY(4+3*(j-1)+2)=poly(2,j)
480 ptr_cur%RPOLY(4+3*(j-1)+3)=poly(3,j)
491 x1=xg+(one+tole)*(x1-xg)
492 y1=yg+(one+tole)*(y1-yg)
493 z1=zg+(one+tole)*(z1-zg)
494 x2=xg+(one+tole)*(x2-xg)
495 y2=yg+(one+tole)*(y2-yg)
496 z2=zg+(one+tole)*(z2-zg)
497 x3=xg+(one+tole)*(x3-xg)
498 y3=yg+(one+tole)*(y3-yg)
499 z3=zg+(one+tole)*(z3-zg)
525 CALL tritri3(icut, fv0, fv1, fv2, fu0, fu1, fu2)
531 IF (ns > nfacmax)
THEN
546 CALL tritri3(icut, fv0, fv1, fv2, fu0, fu1, fu2)
552 IF (ns > nfacmax)
THEN
565 nsmax=
max(nsmax,facet(j,1))
568 IF(ilvout >=1)
WRITE(iout,
'(A,I10,A,I10)')
569 .
' MONITORED VOLUME ID: ',ivolu(1),
570 .
' NFACMAX IS RESET TO ',nsmax
572 IF (npoly_old > 0)
THEN
573 ptr_cur => ptr_old%PTR
577 DO j=1,npoly-npoly_old
578 ptr_tmp => ptr_cur%PTR
579 DEALLOCATE(ptr_cur%IPOLY, ptr_cur%RPOLY,
584 IF (npoly_old > 0)
THEN
593 DEALLOCATE(facet, tri, normt, poly)
598 DEALLOCATE(facet, tri, normt, poly)
605 IF (itagb(nv) == 1) cycle
606 IF (tbric(7+j,i) == 2)
THEN
609 quad(1,k)=xb(1,bric(kk,i))
610 quad(2,k)=xb(2,bric(kk,i))
611 quad(3,k)=xb(3,bric(kk,i))
616 IF (tagela(iel) > 0)
THEN
618 ll=ibuf(elema(l,iel))
621 IF(tagela(iel) <= nel)
THEN
628 ELSEIF (tagela(iel) < 0)
THEN
631 ll=ibufa(elema(l,iel))
637 normt(1,k)=norma(1,iel)
638 normt(2,k)=norma(2,iel)
639 normt(3,k)=norma(3,iel)
642 normf(1,k)=sfac(facnor(k,j),2,i)
643 normf(2,k)=sfac(facnor(k,j),3,i)
644 normf(3,k)=sfac(facnor(k,j),4,i)
655 ALLOCATE(ipoly(6+nppmax+1+npolmax,npolmax),
656 . rpoly(nrpmax+3*npolmax,npolmax),
657 . ielnod(nppmax,npolmax))
659 CALL facepoly(quad, tri, ns, ipoly, rpoly,
660 . nr, normf, normt, nfacmax, nnp,
661 . nrpmax, i, nv, dxm, npolmax,
662 . nppmax, info, ielnod, x, j,
665 DEALLOCATE(ipoly, rpoly, ielnod)
670 IF (ipoly(1,n) == -1) cycle
672 IF (.NOT.
ASSOCIATED(first2))
THEN
677 ptr_prec2%PTR => ptr_cur2
681 ALLOCATE(ptr_cur2%IPOLY(6+nn+1+nhol),
682 . ptr_cur2%IELNOD(nn),
683 . ptr_cur2%RPOLY(4+3*nn+3*nhol))
685 ptr_cur2%IPOLY(m)=ipoly(m,n)
688 ptr_cur2%RPOLY(m)=rpoly(m,n)
692 ptr_cur2%IPOLY(6+m)=nns2
694 ptr_cur2%IELNOD(m)=facet(j,1+mm)
695 ptr_cur2%RPOLY(4+3*(m-1)+1)=rpoly(4+3*(m
696 ptr_cur2%RPOLY(4+3*(m-1)+2)=rpoly(4+3*(m-1)+2,n)
697 ptr_cur2%RPOLY(4+3*(m-1)+3)=rpoly(4+3*(m-1)+3,n)
699 ptr_cur2%IPOLY(6+nn+1)=nhol
701 ptr_cur2%IPOLY(6+nn+1+m)=ipoly(6+nn+1+m,n)
702 ptr_cur2%RPOLY(4+3*nn+3*(m-1)+1)=
703 . rpoly(4+3*nn+3*(m-1)+1,n)
704 ptr_cur2%RPOLY(4+3*nn+3*(m-1)+2)=
705 . rpoly(4+3*nn+3*(m-1)+2,n)
707 . rpoly(4+3*nn+3*(m-1)+3,n
709 ptr_prec2 => ptr_cur2
712 DEALLOCATE(ipoly, rpoly, ielnod)
718 DEALLOCATE(facet, tri, normt, poly)
729 ptr_prec%PTR => ptr_cur
731 nhol=ptr_cur2%IPOLY(6+nn+1)
732 ALLOCATE(ptr_cur%IPOLY(6+nn+1+nhol),
733 . ptr_cur%IELNOD(nn),
734 . ptr_cur%RPOLY(4+3*nn+3*nhol))
736 ptr_cur%IPOLY(j)=ptr_cur2%IPOLY(j)
739 ptr_cur%RPOLY(j)=ptr_cur2%RPOLY(j)
742 ptr_cur%IPOLY(6+j)=nns+ptr_cur2%IPOLY(6+j)
743 ptr_cur%IELNOD(j)=ptr_cur2%IELNOD(j)
744 ptr_cur%RPOLY(4+3*(j-1)+1)=ptr_cur2%RPOLY(4+3*(j-1)+1)
745 ptr_cur%RPOLY(4+3*(j-1)+2)=ptr_cur2%RPOLY(4+3*(j-1)+2)
746 ptr_cur%RPOLY(4+3*(j-1)+3)=ptr_cur2%RPOLY(4+3*(j-1)+3)
748 ptr_cur%IPOLY(6+nn+1)=nhol
750 ptr_cur%IPOLY(6+nn+1+j)=ptr_cur2%IPOLY(6+nn+1+j)
751 ptr_cur%RPOLY(4+3*nn+3*(j-1)+1)=
752 . ptr_cur2%RPOLY(4+3*nn+3*(j-1)+1)
753 ptr_cur%RPOLY(4+3*nn+3*(j-1)+2)=
754 . ptr_cur2%RPOLY(4+3*nn+3*(j-1)+2)
755 ptr_cur%RPOLY(4+3*nn+3*(j-1)+3)=
756 . ptr_cur2%RPOLY(4+3*nn+3*(j-1)+3)
758 ptr_tmp2 => ptr_cur2%PTR
759 DEALLOCATE(ptr_cur2%IPOLY, ptr_cur2%RPOLY, ptr_cur2%IELNOD)
774 ptr_cur => ptr_cur%PTR
784 vnorm=sqrt(vx3**2+vy3**2+vz3**2)
788 ss=vx3*vx1+vy3*vy1+vz3*vz1
792 vnorm=sqrt(vx1**2+vy1**2+vz1**2)
831 zl1=(x1-x0)*vx3+(y1-y0)*vy3+(z1-z0)*vz3
832 zl2=(x2-x0)*vx3+(y2-y0)*vy3+(z2-z0)*vz3
833 zl3=(x3-x0)*vx3+(y3-y0)*vy3+(z3-z0)*vz3
846 ALLOCATE(inedge(6,npoly*nppmax), rnedge(6,npoly*nppmax))
852 IF (zlc < zbmin.OR.zlc > zbmax)
THEN
864 DO k=1,ptr_cur%IPOLY(2)
865 xx=ptr_cur%RPOLY(4+3*(k-1)+1)
866 yy=ptr_cur%RPOLY(4+3*(k-1)+2)
867 zz=ptr_cur%RPOLY(4+3*(k-1)+3)
868 zl=(xx-x0)*vx3+(yy-y0)*vy3+(zz-z0)*vz3
873 IF (zlmin*zlmax < zero)
THEN
877 IF (ity == 2) nhol=ptr_cur%IPOLY(6+nn+1)
878 ALLOCATE(ipoly(6+2*nn+1+nhol,nn),
879 . rpoly(4+3*2*nn+3*nhol,nn),
881 . nref(2,nn), aref(4,nn),
884 . ipoly, rpoly, ptr_cur%IPOLY, ptr_cur%RPOLY, inedge,
885 . rnedge, nbnedge, vx3, vy3, vz3,
886 . x0, y0, z0, nref, aref,
887 . nn, nhol, iiz, iz, nns3,
888 . nnp , nnsp, ielnod, ptr_cur%IELNOD)
891 ptr_tmp => ptr_cur%PTR
892 npoly_new=npoly_new-1
894 npoly_new=npoly_new+1
896 DEALLOCATE(ptr_cur%IPOLY, ptr_cur%RPOLY,
900 ptr_prec%PTR => ptr_cur
905 ALLOCATE(ptr_cur%IPOLY(6+nn+1+nhol),
906 . ptr_cur%IELNOD(nn),
907 . ptr_cur%RPOLY(4+3*nn+3*nhol))
909 ptr_cur%IPOLY(m)=ipoly(m,n)
912 ptr_cur%RPOLY(m)=rpoly(m,n)
916 ptr_cur%IPOLY(6+m)=mm
917 ptr_cur%IELNOD(m)=ielnod(m,n)
918 ptr_cur%RPOLY(4+3*(m-1)+1)=rpoly(4+3*(m-1)+1,n)
919 ptr_cur%RPOLY(4+3*(m-1)+2)=rpoly(4+3*(m-1)+2,n
920 ptr_cur%RPOLY(4+3*(m-1)+3)=rpoly(4+3*(m-1)+3,n)
923 ptr_cur%IPOLY(6+nn+1)=nhol
925 ptr_cur%IPOLY(6+nn+1+m)=ipoly(6+nn+1+m,n)
926 ptr_cur%RPOLY(4+3*nn+3*(m-1)+1)=
927 . rpoly(4+3*nn+3*(m-1)+1,n)
928 ptr_cur%RPOLY(4+3*nn+3*(m-1)+2)=
929 . rpoly(4+3*nn+3*(m-1)+2,n)
930 ptr_cur%RPOLY(4+3*nn+3*(m-1)+3)=
931 . rpoly(4+3*nn+3*(m-1)+3,n)
934 ptr_cur%IZ(2)=iz(2,n)
937 ALLOCATE(ptr_cur%NREF(3,nnsp),
938 . ptr_cur%AREF(4,nnsp))
941 ptr_cur%NREF(1,m)=nns3
942 ptr_cur%NREF(2,m)=nref(1,m)
943 ptr_cur%NREF(3,m)=nref(2,m)
944 ptr_cur%AREF(1,m)=aref(1,m)
945 ptr_cur%AREF(2,m)=aref(
946 ptr_cur%AREF(3,m)=aref(3,m)
947 ptr_cur%AREF(4,m)=aref(4,m)
951 IF (n == nnp) ptr_cur%PTR
955 DEALLOCATE(ipoly, rpoly, ielnod, nref, aref, iz)
958 IF (zlmin == zero.AND.zlmax > zero)
THEN
960 ALLOCATE(nref(2,2*nn), aref(
962 . ptr_cur%IPOLY, ptr_cur%RPOLY, vx3, vy3, vz3,
963 . nbnedge, inedge, rnedge, x0, y0,
964 . z0, iiz , nns3, nref, aref,
968 ALLOCATE(ptr_cur%NREF(3,nnsp),
969 . ptr_cur%AREF(4,nnsp))
973 ptr_cur%NREF(1,n)=nns3
974 ptr_cur%NREF(2,n)=nref(1,n)
975 ptr_cur%NREF(3,n)=nref(2,n)
976 ptr_cur%AREF(1,n)=aref(1,n)
977 ptr_cur%AREF(2,n)=aref(2,n)
978 ptr_cur%AREF(3,n)=aref(3,n)
979 ptr_cur%AREF(4,n)=aref(4,n)
982 DEALLOCATE(nref, aref)
985 IF (zlmin >= zero)
THEN
988 ELSEIF (iiz == 1.AND.zlmax <= zero)
THEN
994 ptr_cur => ptr_cur%PTR
1003 ALLOCATE(redir(nns))
1009 jj=ptr_cur%IPOLY(6+j)
1015 ptr_cur => ptr_cur%PTR
1023 n1=ptr_cur%NREF(2,j)
1024 n2=ptr_cur%NREF(3,j)
1025 IF (n1 > 0) ptr_cur%NREF(2,j)=redir(n1
1026 IF (n2 > 0) ptr_cur%NREF(3,j)=redir(n2)
1029 ptr_cur => ptr_cur%PTR
1036 ptr_cur => ptr_cur%PTR
1039 ALLOCATE(ledge(nbnedge))
1044 IF (inedge(6,k) /= i) cycle
1045 IF (inedge(1,k) == 1.AND.inedge(5,k) /= j) cycle
1046 IF (inedge(1,k) == 2.AND.inedge
1047 . inedge(5,k) /= j) cycle
1051 IF (nedge == 0) cycle
1052 ALLOCATE(ipoly(6+2*nedge+1+nedge,nedge),
1053 . rpoly(4+6*nedge+3*nedge,nedge),
1054 . iz(3,nedge), ielnod(nedge,nedge))
1056 CALL horipoly(inedge, rnedge, ledge, nedge, ipoly,
1057 . rpoly, iz, ielnod, nnp, vx3,
1058 . vy3, vz3, i , j , nel,
1062 IF (ipoly(1,n) == -1) cycle
1065 ptr_prec%PTR => ptr_cur
1067 nhol=ipoly(6+nn+1,n)
1068 ALLOCATE(ptr_cur%IPOLY(6+nn+1+nhol),
1069 . ptr_cur%RPOLY(4+3*nn+3*nhol),
1070 . ptr_cur%IELNOD(nn))
1073 ptr_cur%IPOLY(m)=ipoly(m,n)
1076 ptr_cur%RPOLY(m)=rpoly(m,n)
1079 ptr_cur%IPOLY(6+m)=ipoly(6+m,n)
1080 ptr_cur%IELNOD(m)=ielnod(m,n)
1081 ptr_cur%RPOLY(4+3*(m-1)+1)=rpoly(4+3*(m-1)+1,n)
1082 ptr_cur%RPOLY(4+3*(m-1)+2)=rpoly(4+3*(m-1)+2,n)
1083 ptr_cur%RPOLY(4+3*(m-1)+3)=rpoly(4+3*(m-1)+3,n)
1085 nhol=ipoly(6+nn+1,n)
1086 ptr_cur%IPOLY(6+nn+1)=nhol
1088 ptr_cur%IPOLY(6+nn+1+m)=ipoly(6+nn+1+m,n)
1089 ptr_cur%RPOLY(4+3*nn+3*(m-1)+1)=
1090 . rpoly(4+3*nn+3*(m-1)+1,n)
1091 ptr_cur%RPOLY(4+3*nn+3*(m-1)+2)=
1092 . rpoly(4+3*nn+3*(m-1)+2,n)
1093 ptr_cur%RPOLY(4+3*nn+3*(m-1)+3)=
1094 . rpoly(4+3*nn+3*(m-1)+3,n)
1097 ptr_cur%IZ(m)=iz(m,n)
1102 DEALLOCATE(ipoly, rpoly, iz, ielnod)
1112 ptr_cur => ptr_cur%PTR
1122 IF (ilvout >=1)
WRITE(istdo,
'(8X,A)')
'BUILDING FINITE VOLUMES'
1126 IF (tbric(7,i) /= 2) cycle
1132 ity=ptr_cur%IPOLY(1)
1133 IF ((ity == 1.AND.ptr_cur%IPOLY(4) == i).OR.
1135 . (ptr_cur%IPOLY(3) == i.OR.ptr_cur%IPOLY(4) == i)))
THEN
1137 nppmax=
max(nppmax,ptr_cur%IPOLY(2))
1139 ptr_cur => ptr_cur%PTR
1141 IF (npolb == 0) cycle
1144 ALLOCATE(polb(npolb), ipoly(6+nppmax,npolb),
1145 . rpoly(nrpmax,npolb), redir(npolb))
1151 ity=ptr_cur%IPOLY(1)
1153 IF (((ity == 1.AND.ptr_cur%IPOLY(4) == i).OR.
1154 . (ity == 2.AND.(ptr_cur%IPOLY(3) == i.OR.
1155 . ptr_cur%IPOLY(4) == i)))
1157 . ((ityz == 1.AND.ptr_cur%IZ(2) == inz).OR.
1158 . (ityz == 2.AND.(ptr_cur%IZ(2) == inz.OR.
1159 . ptr_cur%IZ(3) == inz))))
THEN
1163 IF(ity==1.AND.ityzint==0)
THEN
1164 iel=ptr_cur%IPOLY(3)
1165 IF(tagela(iel) > nel) ityzint=1
1168 ipoly(k,npolb)=ptr_cur%IPOLY(k)
1171 rpoly(k,npolb)=ptr_cur%RPOLY(k)
1175 ptr_cur => ptr_cur%PTR
1177 IF (npolb == 0) cycle
1183 IF (
ALLOCATED(polh))
DEALLOCATE(polh)
1184 ALLOCATE(polh(nphmax+2,npolhmax))
1187 CALL polyhedr(ipoly, rpoly , polb, npolb, polh,
1188 . nnp, nrpmax , nphmax, i, dxm ,
1189 . info , npolhmax, nppmax )
1191 CALL polyhedr1(ipoly, rpoly , polb, npolb, polh,
1192 . nnp, nrpmax , nphmax, i, dxm ,
1193 . info , npolhmax, nppmax, nel , inz ,
1196 IF (info == 1)
GOTO 300
1200 polc=redir(polb(npl))
1203 ity=ptr_cur%IPOLY(1)
1205 ptr_cur%IPOLY(5)=npolh+ipoly(5,npl)
1206 iel=ptr_cur%IPOLY(3)
1207 IF(tagela(iel) > nel)
THEN
1208 ptr_cur%IPOLY(6)=npolh+ipoly(6,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
1228 IF (.NOT.
ASSOCIATED(phfirst))
THEN
1233 ph_prec%PTR => ph_cur
1236 ALLOCATE(ph_cur%POLH(2+nn))
1238 ph_cur%POLH(1)=polh(1,n)
1239 ph_cur%POLH(2)=polh(2,n)
1241 ph_cur%POLH(2+m)=redir(polh(2+m,n))
1247 DEALLOCATE(ipoly, rpoly, polb, polh, redir)
1262 nns2=nns2+ptr_cur%NNSP
1263 IF (ptr_cur%IPOLY(1) == 1)
THEN
1264 lenimax=
max(lenimax,6+nn+1)
1265 lenrmax=
max(lenrmax,4+3*nn)
1266 ELSEIF (ptr_cur%IPOLY(1) == 2)
THEN
1267 nhol=ptr_cur%IPOLY(6+nn+1)
1268 lenimax=
max(lenimax,6+nn+1+nhol)
1269 lenrmax=
max(lenrmax,4+3*nn+3*nhol)
1271 ptr_cur => ptr_cur%PTR
1278 nphmax=
max(nphmax,nn)
1279 ph_cur => ph_cur%PTR
1297 n1=ibuf(elem(1,iel))
1298 n2=ibuf(elem(2,iel))
1299 n3=ibuf(elem(3,iel))
1305 count_elem_int_old = 0
1306 count_elem_ext_old = 0
1307 count_tria_interne_old = 0
1313 ity=tfaca(2*(j-1)+1,i)
1314 IF (ity == 1 .OR. ity == -2)
THEN
1316 nv=tfaca(2*(j-1)+2,i)
1317 IF (itagba(nv) == 0)
THEN
1318 IF (ity == 1) count_tria_interne_old = count_tria_interne_old + 1
1319 IF (ity == -2) count_elem_int_old = count_elem_int_old + 1
1320 lenimax=
max(lenimax,6+3+1)
1321 lenrmax=
max(lenrmax,6+3*3)
1325 ELSEIF (ntype==3)
THEN
1333 ELSEIF (ntype==4)
THEN
1341 ELSEIF (ntype==1)
THEN
1349 ELSEIF (ntype==3)
THEN
1355 ELSEIF (ntype==4)
THEN
1361 ELSEIF (ntype==1)
THEN
1365 ELSEIF (ity == 2)
THEN
1367 count_elem_ext_old = count_elem_ext_old + 1
1372 ELSEIF (ntype==3)
THEN
1382 ELSEIF (ntype==4)
THEN
1392 ELSEIF (ntype==1)
THEN
1398 ELSEIF (ity == 3)
THEN
1402 IF (ptr_cur%IPOLY(1) == 1)
THEN
1403 iel=ptr_cur%IPOLY(3)
1404 IF (-tagela(iel) == i) nnp=nnp+1
1406 ptr_cur => ptr_cur%PTR
1411 nphmax=
max(nphmax,nnp)
1417 jj=ixs(1+2*(j-1)+1,ii)
1420 ELSEIF (ntype==3)
THEN
1429 ELSEIF (ntype==4)
THEN
1434 ELSEIF (ntype==1)
THEN
1444 ALLOCATE(ipoly_f(lenimax,npoly), rpoly_f(lenrmax,npoly),
1445 . polh_f(2+nphmax,npolh), ifvnod(nns), volu(npolh),
1446 . ifvnod2(2,nns2), rfvnod2(4,nns2), xns(3,nns),
1459 jj=ptr_cur%IPOLY(6+j)
1462 xns(1,nns)=ptr_cur%RPOLY(4+3*(j-1)+1)
1463 xns(2,nns)=ptr_cur%RPOLY(4+3*(j-1)+2)
1464 xns(3,nns)=ptr_cur%RPOLY(4+3*(j-1)+3)
1467 ptr_cur => ptr_cur%PTR
1475 ipoly_f(j,i)=ptr_cur%IPOLY(j)
1478 rpoly_f(j,i)=ptr_cur%RPOLY(j)
1481 jj=ptr_cur%IPOLY(6+j)
1485 ifvnod(nns)=ptr_cur%IELNOD(j)
1490 IF (ptr_cur%IPOLY(1) == 1)
THEN
1492 IF(tagela(iel) < 0 )
THEN
1493 ipoly_f(4,i)=ipoly_f(5,i)
1495 ELSEIF(tagela(iel) > 0)
THEN
1496 IF(tagela(iel) <= nel)
THEN
1497 ipoly_f(4,i)=ipoly_f(5,i)
1501 ELSEIF (ptr_cur%IPOLY(1) == 2)
THEN
1502 nhol=ptr_cur%IPOLY(6+nn+1)
1503 ipoly_f(6+nn+1,i)=nhol
1505 ipoly_f(6+nn+1+j,i)=ptr_cur%IPOLY(6+nn+1+j)
1506 rpoly_f(4+3*nn+3*(j-1)+1,i)=
1507 . ptr_cur%RPOLY(4+3*nn+3*(j-1)+1)
1508 rpoly_f(4+3*nn+3*(j-1)+2,i)=
1509 . ptr_cur%RPOLY(4+3*nn+3*(j-1)+2)
1510 rpoly_f(4+3*nn+3*(j-1)+3,i)=
1511 . ptr_cur%RPOLY(4+3*nn+3*(j-1)+3)
1517 jj=ptr_cur%NREF(1,j)
1518 ifvnod2(1,jj)=ptr_cur%NREF(2,j)
1519 ifvnod2(2,jj)=ptr_cur%NREF(3,j)
1520 rfvnod2(1,jj)=ptr_cur%AREF(1,j)
1521 rfvnod2(2,jj)=ptr_cur%AREF(2,j)
1522 rfvnod2(3,jj)=ptr_cur%AREF(3,j)
1523 rfvnod2(4,jj)=ptr_cur%AREF(4,j)
1526 ptr_tmp => ptr_cur%PTR
1527 DEALLOCATE(ptr_cur%IPOLY, ptr_cur%RPOLY, ptr_cur%IELNOD)
1528 IF (nnsp > 0)
DEALLOCATE(ptr_cur%NREF, ptr_cur%AREF)
1539 IF (ifvnod2(1,ii) /= n2.AND.ifvnod2(2,ii) /= n2)
THEN
1540 WRITE(istdo,*)
'PROBLEM DEPENDANT NODE ',i
1546 ELSEIF (n2 < 0)
THEN
1548 IF (ifvnod2(1,ii) /= n1.AND.ifvnod2(2,ii) /= n1)
THEN
1549 WRITE(istdo,*)
'PROBLEM DEPENDANT NODE ',i
1561 val=abs(xns(1,n1)-xns(1,n2))
1563 IF (abs(xns(j,n1)-xns(j,n2)) > val)
THEN
1565 val=abs(xns(j,n1)-xns(j,n2))
1568 rfvnod2(1,i)=(rfvnod2(ii+1,i)-xns(ii,n2))/
1569 . (xns(ii,n1)-xns(ii,n2))
1577 polh_f(j,i)=ph_cur%POLH(j)
1579 ph_tmp => ph_cur%PTR
1580 DEALLOCATE(ph_cur%POLH)
1585 ALLOCATE(iflag(nb_node))
1586 iflag(1:nb_node) = 0
1595 count_tria_interne = 0
1603 ity=tfaca(2*(j-1)+1,i)
1606 nv=tfaca(2*(j-1)+2,i)
1607 IF (itagba(nv) == 0)
THEN
1608 count_tria_interne = count_tria_interne + 1
1614 ELSEIF (ntype==3)
THEN
1627 ELSEIF (ntype==4)
THEN
1640 ELSEIF (ntype==1)
THEN
1655 ipoly_f(5,npoly)=npolh+i
1656 ipoly_f(6,npoly)=npolh+nv
1657 ipoly_f(6+1,npoly)=nns+1
1658 ipoly_f(6+2,npoly)=nns+2
1659 ipoly_f(6+3,npoly)=nns+3
1660 ipoly_f(6+3+1,npoly)=0
1678 CALL fvnormal(x,nn1,nn2,nn3,0,nrx,nry,nrz)
1679 area2=sqrt(nrx**2+nry**2+nrz**2)
1680 rpoly_f(2,npoly)=nrx/area2
1681 rpoly_f(3,npoly)=nry/area2
1682 rpoly_f(4,npoly)=nrz/area2
1683 rpoly_f(4+1,npoly)=x1
1684 rpoly_f(4+2,npoly)=y1
1685 rpoly_f(4+3,npoly)=z1
1686 rpoly_f(4+4,npoly)=x2
1687 rpoly_f(4+5,npoly)=y2
1688 rpoly_f(4+6,npoly)=z2
1689 rpoly_f(4+7,npoly)=x3
1690 rpoly_f(4+8,npoly)=y3
1691 rpoly_f(4+9,npoly)=z3
1694 polh_f(2+nnp,npolh+i)=npoly
1695 ELSEIF(iquad==1)
THEN
1719 ipoly_f(5,npoly)=npolh+i
1720 ipoly_f(6,npoly)=npolh+nv
1721 ipoly_f(6+1,npoly)=nns+1
1722 ipoly_f(6+2,npoly)=nns+2
1723 ipoly_f(6+3,npoly)=nns+3
1724 ipoly_f(6+3+1,npoly)=0
1729 CALL fvnormal(x,nn1,nn2,nn3,0,nrx,nry,nrz)
1730 area2=sqrt(nrx**2+nry**2+nrz**2)
1731 rpoly_f(2,npoly)=nrx/area2
1732 rpoly_f(3,npoly)=nry/area2
1733 rpoly_f(4,npoly)=nrz/area2
1734 rpoly_f(4+1,npoly)=x1
1735 rpoly_f(4+2,npoly)=y1
1736 rpoly_f(4+3,npoly)=z1
1737 rpoly_f(4+4,npoly)=x2
1738 rpoly_f(4+5,npoly)=y2
1739 rpoly_f(4+6,npoly)=z2
1740 rpoly_f(4+7,npoly)=x3
1741 rpoly_f(4+8,npoly)=y3
1742 rpoly_f(4+9,npoly)=z3
1745 polh_f(2+nnp,npolh+i)=npoly
1752 ipoly_f(5,npoly)=npolh+i
1753 ipoly_f(6,npoly)=npolh+nv
1754 ipoly_f(6+1,npoly)=nns+1
1755 ipoly_f(6+2,npoly)=nns+2
1756 ipoly_f(6+3,npoly)=nns+3
1757 ipoly_f(6+3+1,npoly)=0
1762 CALL fvnormal(x,nn1,nn3,nn4,0,nrx,nry,nrz)
1763 area2=sqrt(nrx**2+nry**2+nrz**2)
1764 rpoly_f(2,npoly)=nrx/area2
1765 rpoly_f(3,npoly)=nry/area2
1766 rpoly_f(4,npoly)=nrz/area2
1767 rpoly_f(4+1,npoly)=x1
1768 rpoly_f(4+2,npoly)=y1
1769 rpoly_f(4+3,npoly)=z1
1770 rpoly_f(4+4,npoly)=x3
1771 rpoly_f(4+5,npoly)=y3
1772 rpoly_f(4+6,npoly)=z3
1773 rpoly_f(4+7,npoly)=x4
1774 rpoly_f(4+8,npoly)=y4
1775 rpoly_f(4+9,npoly)=z4
1778 polh_f(2+nnp,npolh+i)=npoly
1781 DO k=1,polh_f(1,npolh+nv)
1782 kk=polh_f(2+k,npolh+nv)
1783 IF (ipoly_f(1,kk) == 2.AND.
1784 . ipoly_f(6,kk) == npolh+i)
THEN
1786 polh_f(2+nnp,npolh+i)=kk
1790 ELSEIF (ity == 2)
THEN
1792 count_elem_ext = count_elem_ext + 1
1793 ELSEIF (ity == -2)
THEN
1796 count_elem_int = count_elem_int + 1
1802 ELSEIF (ntype==3)
THEN
1815 ELSEIF (ntype==4)
THEN
1828 ELSEIF (ntype==1)
THEN
1835 IF (iquad == 0)
THEN
1839 CALL fvnormal(x,nn1,nn2,nn3,0,nrx,nry,nrz)
1843 DO iel = nel + 1, nel + neli
1844 IF (iflag(ibuf(elem(1, iel))) * iflag(ibuf(elem(2, iel))) *
1845 . iflag(ibuf(elem(3, iel))) == 1)
THEN
1846 IF (
norm(1, iel) * nrx +
norm(2, iel) * nry +
norm(3, iel) * nrz < 0)
THEN
1847 IF (tagels(2*iel - nel - 1) == i)
THEN
1858 ELSE IF (iquad == 1)
THEN
1863 CALL fvnormal(x,nn1,nn2,nn3,0,nrx,nry,nrz)
1868 DO iel = nel + 1, nel + neli
1869 IF (iflag(ibuf(elem(1, iel))) * iflag(ibuf(elem(2, iel))) *
1870 . iflag(ibuf(elem(3, iel))) == 1)
THEN
1871 IF (
norm(1, iel) * nrx +
norm(2, iel) * nry +
norm(3, iel) * nrz < 0)
THEN
1872 IF (tagels(2*iel - nel - 1) == i)
THEN
1885 ELSEIF (ity == 3)
THEN
1888 IF (ipoly_f(1,k) == 1)
THEN
1890 IF (-tagela(iel) == i)
THEN
1892 polh_f(2+nnp,npolh+i)=k
1898 ipoly_f(6,k)=npolh+i
1906 polh_f(1,npolh+i)=nnp
1907 polh_f(2,npolh+i)=-i
1914 IF (ipoly_f(1,i) == 1)
THEN
1916 IF (tagela(iel) > 0) ipoly_f(3,i)=tagela(iel)
1921 IF (tagels(iel) > 0)
THEN
1925 ipoly_f(3,npoly)=iel
1926 ipoly_f(4,npoly)=npolh_old+tagels(iel)
1929 ipoly_f(7,npoly)=nns+1
1930 ipoly_f(8,npoly)=nns+2
1931 ipoly_f(9,npoly)=nns+3
1942 rpoly_f(1,npoly)=elarea(iel)
1943 rpoly_f(2,npoly)=
norm(1,iel)
1944 rpoly_f(3,npoly)=
norm(2,iel)
1945 rpoly_f(4,npoly)=
norm(3,iel)
1960 rpoly_f(10,npoly)=z2
1961 rpoly_f(11,npoly)=x3
1962 rpoly_f(12,npoly)=y3
1963 rpoly_f(13,npoly)=z3
1965 nnp=polh_f(1,npolh_old+tagels(iel))
1967 polh_f(1,npolh_old+tagels(iel))=nnp
1968 polh_f(2+nnp,npolh_old+tagels(iel))=npoly
1972 DO iel=nel + 1,nel + neli
1973 IF (tagels(2*iel-nel-1) > 0)
THEN
1977 ipoly_f(3,npoly)=iel
1978 ipoly_f(4,npoly)=npolh_old + tagels(2 * iel - nel - 1)
1979 ipoly_f(5,npoly)=npolh_old + tagels(2*iel-nel-1)
1980 ipoly_f(6,npoly)=npolh_old + tagels(2*iel-nel)
1981 ipoly_f(7,npoly)=nns+1
1982 ipoly_f(8,npoly)=nns+2
1983 ipoly_f(9,npoly)=nns+3
1994 rpoly_f(1,npoly)=elarea(iel)
1995 rpoly_f(2,npoly)=
norm(1,iel)
1996 rpoly_f(3,npoly)=
norm(2,iel)
1997 rpoly_f(4,npoly)=
norm(3,iel)
2012 rpoly_f(10,npoly)=z2
2013 rpoly_f(11,npoly)=x3
2014 rpoly_f(12,npoly)=y3
2015 rpoly_f(13,npoly)=z3
2017 nnp=polh_f(1,npolh_old+tagels(2*iel-nel-1))
2019 polh_f(1,npolh_old+tagels(2*iel-nel-1))=nnp
2020 polh_f(2+nnp,npolh_old+tagels(2*iel-nel-1))=npoly
2021 nnp=polh_f(1,npolh_old+tagels(2*iel-nel))
2023 polh_f(1,npolh_old+tagels(2*iel-nel))=nnp
2024 polh_f(2+nnp,npolh_old+tagels(2*iel-nel))=npoly
2035 IF (ity == 2) nhol=ipoly_f(6+nn+1,i)
2047 x2=rpoly_f(4+3*(jj-1)+1,i)
2048 y2=rpoly_f(4+3*(jj-1)+2,i)
2049 z2=rpoly_f(4+3*(jj-1)+3,i)
2050 x3=rpoly_f(4+3*(jjj-1)+1,i)
2051 y3=rpoly_f(4+3*(jjj-1)+2,i)
2052 z3=rpoly_f(4+3*(jjj-1)+3,i)
2065 ALLOCATE(adr(nhol+1))
2067 adr(j)=ipoly_f(6+nn+1+j,i)
2076 x2=rpoly_f(4+3*(jj-1)+1,i)
2077 y2=rpoly_f(4+3*(jj-1)+2,i)
2078 z2=rpoly_f(4+3*(jj-1)+3,i)
2079 x3=rpoly_f(4+3*(jjj-1)+1,i)
2080 y3=rpoly_f(4+3*(jjj-1)+2,i)
2081 z3=rpoly_f(4+3*(jjj-1)+3,i)
2096 x1=rpoly_f(4+3*adr(j)+1,i)
2097 y1=rpoly_f(4+3*adr(j)+2,i)
2098 z1=rpoly_f(4+3*adr(j)+3,i)
2100 DO k=adr(j)+1,adr(j+1)-2
2103 x2=rpoly_f(4+3*(kk-1)+1,i)
2104 y2=rpoly_f(4+3*(kk-1)+2,i)
2105 z2=rpoly_f(4+3*(kk-1)+3,i)
2106 x3=rpoly_f(4+3*(kkk-1)+1,i)
2107 y3=rpoly_f(4+3*(kkk-1)+2,i)
2108 z3=rpoly_f(4+3*(kkk-1)+3,i)
2118 area2=area2+(nnx*nx+nny*ny+nnz*nz)
2124 rpoly_f(1,i)=half*abs(
area)
2137 IF(tagels(iel) > 0)
THEN
2141 ELSEIF(tagels(iel) == 0)
THEN
2146 ELSEIF(iel > nel)
THEN
2147 IF (ipoly_f(5,jj) == i)
THEN
2151 ELSEIF (ipoly_f(6,jj) == i)
THEN
2158 ELSEIF (ity == 2.OR.ity == 3)
THEN
2159 IF (ipoly_f(5,jj) == i)
THEN
2163 ELSEIF (ipoly_f(6,jj) == i)
THEN
2172 volu(i)=volu(i)+third*
area*(x1*nx+y1*ny+z1*nz)
2180 IF (volu(i) <= zero)
THEN
2181 CALL ancmsg(msgid = 1627, msgtype = msgerror,
2185 . i2 = ixs(11, tba(1, i)))
2193 nns_old_save=nns_old
2194 ALLOCATE(ifvnod_old(nns_old), redir(nns_old))
2196 ifvnod_old(i)=ifvnod(i)
2202 tole=epsilon(zero)*0.5
2204 nnp_old=ipoly_f(2,i)
2211 x1=rpoly_f(4+3*(j-1)+1,i)
2212 y1=rpoly_f(4+3*(j-1)+2,i)
2213 z1=rpoly_f(4+3*(j-1)+3,i)
2214 lmax2=
max(lmax2,(x1-x0)**2+(y1-y0)**2+(z1-z0)**2)
2222 lmax2=
max(lmax2,(x1-x0)**2+(y1-y0)**2+(z1-z0)**2)
2226 IF (ipoly_f(1,i) == 2) nhol=ipoly_f(6+nnp_old+1,i)
2227 ALLOCATE(ipoly_old(nnp_old), rpoly_old(3*nnp_old),
2228 . adr_old(nhol+2), adr(nhol+2))
2230 ipoly_old(j)=ipoly_f(6+j,i)
2233 rpoly_old(j)=rpoly_f(4+j,i)
2240 IF (ipoly_old(1) > 0)
THEN
2242 IF (nns_old > nns_old_save)
THEN
2252 ifvnod(nns)=ifvnod_old(nns_old)
2254 ipoly_f(7,i)=ipoly_old(1)
2260 IF (ipoly_old(j) > 0)
THEN
2262 IF (nns_old > nns_old_save)
THEN
2270 x1=rpoly_old(3*(j-1)+1)
2271 y1=rpoly_old(3*(j-1)+2)
2272 z1=rpoly_old(3*(j-1)+3)
2273 dd=(x1-x0)**2+(y1-y0)**2+(z1-z0)**2
2274 IF (dd > tole2)
THEN
2276 IF (ipoly_old(j) > 0)
THEN
2278 ifvnod(nns)=ifvnod_old(nns_old)
2279 rpoly_f(4+3*(nnp-1)+1,i)=x1
2280 rpoly_f(4+3*(nnp-1)+2,i)=y1
2281 rpoly_f(4+3*(nnp-1)+3,i)=z1
2282 ipoly_f(6+nnp,i)=nns
2284 rpoly_f(4+3*(nnp-1)+1,i)=x1
2285 rpoly_f(4+3*(nnp-1)+2,i)=y1
2286 rpoly_f(4+3*(nnp-1)+3,i)=z1
2287 ipoly_f(6+nnp,i)=ipoly_old(j)
2292 ELSEIF (ipoly_old(j) > 0.AND.
2293 . ipoly_old(j0) < 0)
THEN
2295 ifvnod(nns)=ifvnod_old(nns_old)
2296 rpoly_f(4+3*(nnp-1)+1,i)=x1
2297 rpoly_f(4+3*(nnp-1)+2,i)=y1
2298 rpoly_f(4+3*(nnp-1)+3,i)=z1
2299 ipoly_f(6+nnp,i)=nns
2301 IF (ipoly_old(j) > 0) redir(nns_old)=nns
2307 dd=(x1-x0)**2+(y1-y0)**2+(z1-z0)**2
2308 IF (dd <= tole2.AND.ipoly_old(1) > 0)
THEN
2312 ELSEIF (dd <= tole2.AND.ipoly_old(1) < 0)
THEN
2324 adr_old(j+1)=ipoly_f(6+nnp_old+1+j,i)
2326 adr_old(nhol+2)=nnp_old
2328 x0=rpoly_f(4+3*adr(j)+1,i)
2329 y0=rpoly_f(4+3*adr(j)+2,i)
2330 z0=rpoly_f(4+3*adr(j)+3,i)
2331 IF (ipoly_old(adr_old(j)+1) > 0)
THEN
2333 IF (nns_old > nns_old_save)
THEN
2342 ipoly_f(6+adr(j)+1,i)=nns
2343 ifvnod(nns)=ifvnod_old(nns_old)
2345 ipoly_f(6+adr(j)+1,i)=ipoly_old(adr_old(j)+1)
2350 DO k=adr_old(j)+2,adr_old(j+1)
2352 IF (nns_old > nns_old_save)
THEN
2359 x1=rpoly_old(3*(k-1)+1)
2360 y1=rpoly_old(3*(k-1)+2)
2361 z1=rpoly_old(3*(k-1)+3)
2362 dd=(x1-x0)**2+(y1-y0)**2+(z1-z0)**2
2363 IF (dd > tole2)
THEN
2365 IF (ipoly_old(k) > 0)
THEN
2367 ifvnod(nns)=ifvnod_old(nns_old)
2368 rpoly_f(4+3*(nnp-1)+1,i)=x1
2369 rpoly_f(4+3*(nnp-1)+2,i)=y1
2370 rpoly_f(4+3*(nnp-1)+3,i)=z1
2371 ipoly_f(6+nnp,i)=nns
2373 rpoly_f(4+3*(nnp-1)+1,i)=x1
2374 rpoly_f(4+3*(nnp-1)+2,i)=y1
2375 rpoly_f(4+3*(nnp-1)+3,i)=z1
2376 ipoly_f(6+nnp,i)=ipoly_old(k)
2381 ELSEIF (ipoly_old(k) > 0.AND.
2382 . ipoly_old(k0) < 0)
THEN
2384 ifvnod(nns)=ifvnod_old(nns_old
2386 rpoly_f(4+3*(nnp-1)+2,i)=y1
2387 rpoly_f(4+3*(nnp-1)+3,i)=z1
2388 ipoly_f(6+nnp,i)=nns
2390 IF (ipoly_old(k) > 0) redir(nns_old)=nns
2393 x1=rpoly_f(4+3*(adr(j)-1)+1,i)
2394 y1=rpoly_f(4+3*(adr(j)-1)+2,i)
2395 z1=rpoly_f(4+3*(adr(j)-1)+3,i)
2396 dd=(x1-x0)**2+(y1-y0)**2+(z1-z0)**2
2397 IF (dd <= tole2.AND.ipoly_old(adr_old(j)+1) > 0)
THEN
2401 ELSEIF (dd <= tole2.AND.
2402 . ipoly_old(adr_old(j)+1) < 0)
THEN
2404 rpoly_f(4+3*(adr(j)-1)+1,i)=x0
2405 rpoly_f(4+3*(adr(j)-1)+2,i)=y0
2406 rpoly_f(4+3*(adr(j)-1)+3,i)=z0
2407 ipoly_f(6+adr(j)+1,i)=nns
2411 ipoly_f(6+nnp+1,i)=nhol
2413 ipoly_f(6+nnp+1+j,i)=adr(j+1)
2415 . rpoly_f(4+3*nnp_old+3*(j-1)+1,i)
2416 rpoly_f(4+3*nnp+3*(j-1)+2,i)=
2417 . rpoly_f(4+3*nnp_old+3*(j-1)+2,i)
2418 rpoly_f(4+3*nnp+3*(j-1)+3,i)=
2419 . rpoly_f(4+3*nnp_old+3*(j-1)+3,i)
2424 IF (nnp < nnp_old)
THEN
2434 DO j=1,ipoly_f(2,i)-2
2437 x2=rpoly_f(4+3*(jj-1)+1,i)
2438 y2=rpoly_f(4+3*(jj-1)+2,i)
2440 x3=rpoly_f(4+3*(jjj-1)+1,i)
2441 y3=rpoly_f(4+3*(jjj-1)+2,i)
2442 z3=rpoly_f(4+3*(jjj-1)+3,i)
2461 x2=rpoly_f(4+3*(jj-1)+1,i)
2462 y2=rpoly_f(4+3*(jj-1)+2,i)
2463 z2=rpoly_f(4+3*(jj-1)+3,i)
2464 x3=rpoly_f(4+3*(jjj-1)+1,i)
2465 y3=rpoly_f(4+3*(jjj-1)+2,i)
2466 z3=rpoly_f(4+3*(jjj-1)+3,i)
2481 x1=rpoly_f(4+3*adr(j+1)+1,i)
2482 y1=rpoly_f(4+3*adr(j+1)+2,i)
2483 z1=rpoly_f(4+3*adr(j+1)+3,i)
2484 DO k=adr(j+1)+1,adr(j+2)
2487 x2=rpoly_f(4+3*(kk-1)+1,i)
2488 y2=rpoly_f(4+3*(kk-1)+2,i)
2489 z2=rpoly_f(4+3*(kk-1)+3,i)
2490 x3=rpoly_f(4+3*(kkk-1)+1,i)
2491 y3=rpoly_f(4+3*(kkk-1)+2,i)
2492 z3=rpoly_f(4+3*(kkk-1)+3,i)
2505 rpoly_f(1,i)=half*abs(
area)
2508 DEALLOCATE(ipoly_old, rpoly_old, adr_old, adr)
2515 ifvnod2(1,i)=redir(i1)
2516 ifvnod2(2,i)=redir(i2)
2519 DEALLOCATE(ifvnod_old, redir)
2525 ALLOCATE(volu_old(npolh), rpoly_f_old(lenrmax,npoly),
2526 . ipoly_f_old(lenimax,npoly))
2532 ipoly_f_old(j,i)=ipoly_f(j,i)
2535 rpoly_f_old(j,i)=rpoly_f(j,i)
2538 400
IF (
ALLOCATED(polh_new))
DEALLOCATE(polh_new)
2539 IF (
ALLOCATED(imerged))
DEALLOCATE(imerged)
2540 ALLOCATE(polh_new(2+nphmax,npolh), imerged(npolh))
2548 ipoly_f(j,i)=ipoly_f_old(j,i)
2551 rpoly_f(j,i)=rpoly_f_old(j,i)
2558 DO j=1,2+polh_f(1,i)
2559 polh_new(j,i)=polh_f(j,i)
2564 IF (polh_f(2,i) < 0) cycle
2566 IF (volu(i) < -em10)
THEN
2579 IF (volu(i) > zero)
THEN
2580 vm =
min(vm ,volu(i))
2593 IF (volu(i) <= volumin)
THEN
2597 DO j=1,polh_new(1,i)
2602 IF (
area > areamax)
THEN
2603 IF (ipoly_f(5,jj) == i)
THEN
2607 ELSEIF (ipoly_f(6,jj) == i)
THEN
2617 jjmax=polh_new(2+jmax,i)
2618 rpoly_f(1,jjmax)=-one
2621 jjmax=polh_new(2+jmax,i)
2622 ity=ipoly_f(1,jjmax)
2623 IF (ity == 2) rpoly_f(1,jjmax)=-one
2628 IF (imerged(imax) == 1) imax=polh_new(2,imax)
2632 IF(ilvout >= 2)
THEN
2633 WRITE(iout,
'(A,I8,A6,G11.4,A1,A,I8,A6,G11.4,A1)')
2634 .
'** GLOBAL MERGE: MERGING FINITE VOLUME ',i,
' (VOL=',
2635 . volu(i),
')',
' WITH FINITE VOLUME ',imax,
2636 .
' (VOL=',volu(imax),
')'
2638 volu(imax)=volu(imax)+volu(i)
2641 DO j=1,polh_new(1,i)
2644 IF (np > nphmax) info=1
2647 polh_new(2+np,imax)=jj
2650 IF(ity == 1 .AND.iel > nel)ity=3
2652 IF (ipoly_f(5,jj) == i)
THEN
2654 ELSEIF (ipoly_f(6,jj) == i)
THEN
2659 nphmax=
max(nphmax,np)
2664 IF (info == 0) polh_new(1,imax)=np
2667 IF (info == 1)
GOTO 400
2672 IF (volu(i) <= zero) cycle
2673 IF (volu(i) < vmin)
THEN
2677 DO j=1,polh_new(1,i)
2679 IF (ipoly_f(1,jj) == 1.OR.rpoly_f(1,jj) < zero) cycle
2680 IF (ipoly_f(5,jj) == ipoly_f(6,jj)) rpoly_f(1,jj)=-one
2683 DEALLOCATE(volu_old, rpoly_f_old, ipoly_f_old, imerged)
2692 IF (volu(i) > zero)
THEN
2701 IF (ity == 1.AND.rpoly_f(1,i) > zero)
THEN
2703 areap=areap+rpoly_f(1,i)
2704 ELSEIF ((ity == 2 .OR. ity == 3) .AND.rpoly_f(1,i) > zero)
THEN
2709 areael=areael+elarea(iel)
2715 ALLOCATE(
fvdata(ifv)%IFVNOD(3,nns+nns2),
2716 .
fvdata(ifv)%RFVNOD(2,nns+nns2))
2718 fvdata(ifv)%RFVNOD(1:2,1:nns+nns2) = 0
2720 fvdata(ifv)%IFVNOD(1,i)=0
2721 fvdata(ifv)%IFVNOD(2,i)=0
2722 fvdata(ifv)%IFVNOD(3,i)=0
2730 IF (ipoly_f(6+j,i) > 0)
THEN
2732 IF (nns > nns_old)
THEN
2740 IF (ifvnod(nns) < 0)
THEN
2742 fvdata(ifv)%IFVNOD(1,nns)=2
2743 fvdata(ifv)%IFVNOD(2,nns)=-ifvnod(nns)
2747 fvdata(ifv)%IFVNOD(1,nns)=1
2749 fvdata(ifv)%IFVNOD(2,nns)=iel
2750 xx=rpoly_f(4+3*(j-1)+1,i)
2752 zz=rpoly_f(4+3*(j-1)+3,i)
2757 IF (tagela(iel) > 0)
THEN
2761 ELSEIF (tagela(iel) < 0)
THEN
2785 CALL coorloc(vpx, vpy, vpz, v1x, v1y,
2786 . v1z, v2x, v2y, v2z, ksi,
2789 fvdata(ifv)%RFVNOD(1,nns)=ksi
2790 fvdata(ifv)%RFVNOD(2,nns)=eta
2794 fvdata(ifv)%IFVNOD(1,nns_old+jj)=3
2795 fvdata(ifv)%IFVNOD(2,nns_old+jj)=ifvnod2(1,jj)
2796 fvdata(ifv)%IFVNOD(3,nns_old+jj)=ifvnod2(2,jj)
2797 fvdata(ifv)%RFVNOD(1,nns_old+jj)=rfvnod2(1,jj)
2803 IF (
fvdata(ifv)%IFVNOD(1,nns+i) == 0)
THEN
2804 fvdata(ifv)%IFVNOD(1,nns+i)=3
2805 fvdata(ifv)%IFVNOD(2,nns+i)=1
2806 fvdata(ifv)%IFVNOD(3,nns+i)=2
2807 fvdata(ifv)%RFVNOD(1,nns+i)=one
2811 IF (nns > nns_old)
THEN
2827 ALLOCATE(
fvdata(ifv)%IFVTRI(6,nntr),
2828 .
fvdata(ifv)%IFVPOLY(nntr),
2829 .
fvdata(ifv)%IFVTADR(npoly+1))
2834 ALLOCATE(redir_poly(npoly_old))
2841 IF (rpoly_f(1,i) <= zero)
THEN
2843 IF (ipoly_f(6+j,i) > 0) nns=nns+1
2851 IF (ipoly_f(1,i) == 2) nhol=ipoly_f(6+nnp
2852 ALLOCATE(pnodes(2,nnp), pseg(2,nnp), pholes(2,nhol),ptri(3,nnp), redir(nnp))
2856 IF (ipoly_f(6+j,i) > 0)
THEN
2864 IF (ipoly_f(1,i) == 1)
THEN
2866 IF( ipsurf > nel)
THEN
2874 ELSEIF (ipoly_f(1,i) == 2 .OR. ipoly_f(1,i) == 3)
THEN
2891 nrm1=sqrt((x1-x0)**2+(y1-y0)**2+(z1-z0)**2)
2903 xx=rpoly_f(4+3*(j-1)+1,i)
2904 yy=rpoly_f(4+3*(j-1)+2,i)
2905 zz=rpoly_f(4+3*(j-1)+3,i)
2909 pnodes(1,j)=vx*vx1+vy*vy1+vz*vz1
2910 pnodes(2,j)=vx*vx2+vy*vy2+vz*vz2
2918 ALLOCATE(adr(nhol+1))
2920 adr(j)=ipoly_f(6+nnp+1+j,i)
2925 xx=rpoly_f(4+3*(j-1)+1,i)
2926 yy=rpoly_f(4+3*(j-1)+2,i)
2927 zz=rpoly_f(4+3*(j-1)+3,i)
2931 pnodes(1,j)=vx*vx1+vy*vy1+vz*vz1
2932 pnodes(2,j)=vx*vx2+vy*vy2+vz*vz2
2941 xx=rpoly_f(4+3*adr(j)+1,i)
2942 yy=rpoly_f(4+3*adr(j)+2,i)
2943 zz=rpoly_f(4+3*adr(j)+3,i)
2947 pnodes(1,adr(j)+1)=vx*vx1+vy*vy1+vz*vz1
2948 pnodes(2,adr(j)+1)=vx*vx2+vy*vy2+vz*vz2
2949 DO k=adr(j)+2,adr(j+1)
2950 xx=rpoly_f(4+3*(k-1)+1,i)
2951 yy=rpoly_f(4+3*(k-1)+2,i)
2952 zz=rpoly_f(4+3*(k-1)+3,i)
2956 pnodes(1,k)=vx*vx1+vy*vy1+vz*vz1
2957 pnodes(2,k)=vx*vx2+vy*vy2+vz*vz2
2966 xx=rpoly_f(4+3*nnp+3*(j-1)+1,i)
2967 yy=rpoly_f(4+3*nnp+3*(j-1)+2,i
2968 zz=rpoly_f(4+3*nnp+3*(j-1)+3,i)
2972 pholes(1,j)=vx*vx1+vy*vy1+vz*vz1
2973 pholes(2,j)=vx*vx2+vy*vy2+vz*vz2
2979 CALL c_tricall(pnodes, pseg, pholes, ptri, nnp, nseg
2981 fvdata(ifv)%IFVTADR(npoly)=nntr+1
2990 x1=rpoly_f(4+3*(n1-1)+1,i)
2991 y1=rpoly_f(4+3*(n1-1)+2,i)
2992 z1=rpoly_f(4+3*(n1-1)+3,i)
2993 x2=rpoly_f(4+3*(n2-1)+1,i)
2994 y2=rpoly_f(4+3*(n2-1)+2,i)
2995 z2=rpoly_f(4+3*(n2-1)+3,i)
2996 x3=rpoly_f(4+3*(n3-1)+1,i)
2997 y3=rpoly_f(4+3*(n3-1)+2,i)
2998 z3=rpoly_f(4+3*(n3-1)+3,i)
3008 ss=nrx*nx+nry*ny+nrz*nz
3011 fvdata(ifv)%IFVTRI(1,nntr)=redir(n1)
3012 fvdata(ifv)%IFVTRI(2,nntr)=redir(n2)
3013 fvdata(ifv)%IFVTRI(3,nntr)=redir
3015 fvdata(ifv)%IFVTRI(1,nntr)=redir(n1)
3016 fvdata(ifv)%IFVTRI(2,nntr)=redir(n3)
3019 fvdata(ifv)%IFVTRI(4,nntr)=ipsurf
3020 fvdata(ifv)%IFVTRI(5,nntr)=ic1
3021 fvdata(ifv)%IFVTRI(6,nntr)=ic2
3022 fvdata(ifv)%IFVPOLY(nntr)=nntr
3025 DEALLOCATE(pnodes, pseg, pholes, ptri, redir)
3027 fvdata(ifv)%IFVTADR(npoly+1)=nntr+1
3031 ALLOCATE(
fvdata(ifv)%IFVPOLH(2*npoly),
3032 .
fvdata(ifv)%IFVPADR(npolh+1),
3033 .
fvdata(ifv)%IDPOLH(npolh),
3034 .
fvdata(ifv)%IBPOLH(npolh))
3038 ALLOCATE(redir_polh(npolh_old))
3044 IF (volu(i) <= zero) cycle
3047 fvdata(ifv)%IFVPADR(npolh)=nnp+1
3048 DO j=1,polh_new(1,i)
3049 jj=redir_poly(polh_new(2+j,i))
3052 fvdata(ifv)%IFVPOLH(nnp)=redir_poly(polh_new(2+j,i))
3055 fvdata(ifv)%IDPOLH(npolh)=npolh
3060 IF(ibsa(-ii) == 1) ii=-ii
3062 fvdata(ifv)%IBPOLH(npolh)=ii
3064 fvdata(ifv)%IFVPADR(npolh+1)=nnp+1
3067 IF (
fvdata(ifv)%IFVTRI(4,i) <= 0)
THEN
3068 ic1=
fvdata(ifv)%IFVTRI(5,i)
3069 ic2=
fvdata(ifv)%IFVTRI(6,i)
3070 fvdata(ifv)%IFVTRI(5,i)=redir_polh(ic1)
3071 fvdata(ifv)%IFVTRI(6,i)=redir_polh(ic2)
3087 ALLOCATE(
fvdata(ifv)%MPOLH(npolh),
fvdata(ifv)%QPOLH(3,npolh),
3090 .
fvdata(ifv)%TPOLH(npolh),
3091 .
fvdata(ifv)%CPAPOLH(npolh),
fvdata(ifv)%CPBPOLH(npolh),
3092 .
fvdata(ifv)%CPCPOLH(npolh),
fvdata(ifv)%RMWPOLH(npolh),
3093 .
fvdata(ifv)%VPOLH_INI(npolh),
fvdata(ifv)%DTPOLH(npolh))
3094 ALLOCATE(
fvdata(ifv)%CPDPOLH(npolh),
fvdata(ifv)%CPEPOLH(npolh),
3095 .
fvdata(ifv)%CPFPOLH(npolh))
3112 cpi=cpai+half*cpbi*ti+third*cpci*ti2
3113 IF(ivolu(2) == 8)
THEN
3114 cpi=cpi+fourth*cpdi*ti2*ti-cpei/ti2+one_fifth*cpfi*ti2*ti2
3122 fvdata(ifv)%MPOLH(ii)=rhoi*volu(i)
3123 fvdata(ifv)%QPOLH(1,ii)=zero
3124 fvdata(ifv)%QPOLH(2,ii)=zero
3125 fvdata(ifv)%QPOLH(3,ii)=zero
3127 fvdata(ifv)%PPOLH(ii)=pini
3128 fvdata(ifv)%RPOLH(ii)=rhoi
3129 fvdata(ifv)%GPOLH(ii)=gamai
3130 fvdata(ifv)%CPAPOLH(ii)=cpai
3131 fvdata(ifv)%CPBPOLH(ii)=cpbi
3132 fvdata(ifv)%CPCPOLH(ii)=cpci
3134 fvdata(ifv)%CPDPOLH(ii)=cpdi
3135 fvdata(ifv)%CPEPOLH(ii)=cpei
3136 fvdata(ifv)%CPFPOLH(ii)=cpfi
3137 fvdata(ifv)%RMWPOLH(ii)=rmwi
3138 fvdata(ifv)%DTPOLH(ii)=ep30
3139 fvdata(ifv)%VPOLH_INI(ii)=volu(i)
3143 imin=redir_polh(imin)
3144 DEALLOCATE(ipoly_f, rpoly_f, polh_f, volu, redir_poly, redir_polh,
3152 IF (
fvdata(ifv)%IFVTRI(4,i) > 0)
THEN
3165 WRITE(iout,1000) ivolu(1),nspoly,nstr,ncpoly,nctr,npolhf
3166 WRITE(iout,1010) vmin,imin,volumin
3167 WRITE(iout,1020) volph,areap,
tmass
3173 fvdata(ifv)%NPOLH_ANIM=npolh
3174 lenp=
fvdata(ifv)%IFVTADR(npoly+1)
3175 lenh=
fvdata(ifv)%IFVPADR(npolh+1)
3176 ALLOCATE(
fvdata(ifv)%IFVPOLY_ANIM(lenp),
3177 .
fvdata(ifv)%IFVTADR_ANIM(npoly+1),
3178 .
fvdata(ifv)%IFVPOLH_ANIM(lenh),
3179 .
fvdata(ifv)%IFVPADR_ANIM(npolh+1),
3180 .
fvdata(ifv)%IFVTRI_ANIM(6,nntr),
3181 .
fvdata(ifv)%REDIR_ANIM(nns+nns2),
3182 .
fvdata(ifv)%NOD_ANIM(3,nns+nns2),
3183 . redir(nns+nns2), itagt(nntr))
3199 tole=em05*fac_length
3202 ALLOCATE(pnodes(3,nns+nns2))
3204 IF (
fvdata(ifv)%IFVNOD(1,i) == 1)
THEN
3205 iel=
fvdata(ifv)%IFVNOD(2,i)
3206 ksi=
fvdata(ifv)%RFVNOD(1,i)
3207 eta=
fvdata(ifv)%RFVNOD(2,i)
3211 IF (tagela(iel) > 0)
THEN
3215 ELSEIF (tagela(iel) < 0)
THEN
3229 pnodes(1,i)=(one-ksi-eta)*x1+ksi*x2+eta*x3
3230 pnodes(2,i)=(one-ksi-eta)*y1+ksi*y2+eta*y3
3231 pnodes(3,i)=(one-ksi-eta)*z1+ksi*z2+eta*z3
3232 ELSEIF (
fvdata(ifv)%IFVNOD(1,i) == 2)
THEN
3233 ii=
fvdata(ifv)%IFVNOD(2,i)
3241 i1=
fvdata(ifv)%IFVNOD(2,ii)
3242 i2=
fvdata(ifv)%IFVNOD(3,ii)
3244 pnodes(1,ii)=
alpha*pnodes(1,i1)+(one-
alpha)*pnodes(1,i2)
3245 pnodes(2,ii)=
alpha*pnodes(2,i1)+(one-
alpha)*pnodes(2,i2)
3246 pnodes(3,ii)=
alpha*pnodes(3,i1)+(one-
alpha)*pnodes(3,i2)
3251 IF(ilvout >=3 )
THEN
3252 ALLOCATE(areatr(nntr))
3254 n1=
fvdata(ifv)%IFVTRI(1,i)
3255 n2=
fvdata(ifv)%IFVTRI(2,i)
3256 n3=
fvdata(ifv)%IFVTRI(3,i)
3266 CALL fvnormal(pnodes,n1,n2,n3,0,nrx,nry,nrz)
3267 area2=sqrt(nrx**2+nry**2+nrz**2)
3268 areatr(i)=half*area2
3272 WRITE(iout,
'(/A,10X,3A)')
' FINITE VOLUME',
' BRICK VOLUME ',
3273 .
' POLYGONE TRIANGLE AREA'
3276 n1=
fvdata(ifv)%IDPOLH(i)
3277 n2=
fvdata(ifv)%IBPOLH(i)
3282 volph=
fvdata(ifv)%VPOLH_INI(i)
3288 jj=
fvdata(ifv)%IFVPOLH(j)
3289 DO k=
fvdata(ifv)%IFVTADR(jj),
fvdata(ifv)%IFVTADR(jj+1)-1
3291 kk=
fvdata(ifv)%IFVPOLY(k)
3293 iel=
fvdata(ifv)%IFVTRI(4,kk)
3294 ic1=
fvdata(ifv)%IFVTRI(5,kk)
3295 ic2=
fvdata(ifv)%IFVTRI(6,kk)
3297 WRITE(iout,
'(3I10,2X,F10.2,4X,I5,5X,I10,5X,G14.6,3I10)')
3298 . n1,n2,n3,volph,jjj,kk,
area,iel,ic1,ic2
3300 WRITE(iout,
'(46X,I5,5X,I10,5X,G14.6,3I10)')
3301 . jjj,kk,
area,iel,ic1,ic2
3311 IF (ilvout >=1)
WRITE(istdo,
'(8X,A)')
3312 .
'MERGING COINCIDENT NODES FOR ANIM'
3314 ALLOCATE(radius(nns + nns2), idx(nns + nns2))
3319 radius(i) = xx*xx + yy*yy + zz*zz
3323 CALL quicksort(radius, idx, 1, nns + nns2)
3325 DO WHILE(i < nns+ nns2)
3332 nns_anim = nns_anim + 1
3333 redir(iad1) = nns_anim
3334 fvdata(ifv)%REDIR_ANIM(nns_anim)=iad1
3335 fvdata(ifv)%NOD_ANIM(1,nns_anim)=xx
3336 fvdata(ifv)%NOD_ANIM(2,nns_anim)=yy
3337 fvdata(ifv)%NOD_ANIM(3,nns_anim)=zz
3340 IF (abs(r1 - radius(j)) <= tole2)
THEN
3351 xn(1) = pnodes(1,iad2)
3352 xn(2) = pnodes(2,iad2)
3353 xn(3) = pnodes(3,iad2)
3354 dd2=(xx-xn(1))**2+(yy-xn(2))**2+(zz-xn(3))**2
3355 IF (dd2 <= tole2)
THEN
3357 redir(iad2) = redir(iad1)
3370 DEALLOCATE(radius, idx)
3372 fvdata(ifv)%NNS_ANIM=nns_anim
3376 n1=
fvdata(ifv)%IFVTRI(1,i)
3377 n2=
fvdata(ifv)%IFVTRI(2,i)
3378 n3=
fvdata(ifv)%IFVTRI(3,i)
3379 fvdata(ifv)%IFVTRI_ANIM(1,i)=redir(n1)
3380 fvdata(ifv)%IFVTRI_ANIM(2,i)=redir(n2)
3381 fvdata(ifv)%IFVTRI_ANIM(3,i)=redir(n3)
3382 fvdata(ifv)%IFVTRI_ANIM(4,i)=
3383 .
fvdata(ifv)%IFVTRI(4,i)
3384 fvdata(ifv)%IFVTRI_ANIM(5,i)=
3385 .
fvdata(ifv)%IFVTRI(5,i)
3386 fvdata(ifv)%IFVTRI_ANIM(6,i)=
3387 .
fvdata(ifv)%IFVTRI(6,i)
3391 DEALLOCATE(redir, itagt)
33961000
FORMAT(/5x,
'VOLUME NUMBER ',i10,
3397 . /5x,
'NUMBER OF SURFACE POLYGONS. . . . . . .=',i10,
3398 . /5x,
'NUMBER OF SURFACE TRIANGLES . . . . . .=',i10,
3399 . /5x,
'NUMBER OF COMMUNICATION POLYGONS. . . .=',i10,
3400 . /5x,
'NUMBER OF COMMUNICATION TRIANGLES . . .=',i10,
3401 . /5x,
'NUMBER OF FINITE VOLUMES. . . . . . . .=',i10)
34021010
FORMAT( 5x,
'MIN FINITE VOLUME VOLUME. . . . . . . .=',1pg20.13,
3403 . 5x,
'(FINITE VOLUME ID ',i10,
')',
3404 . /5x,
'INITIAL MERGING VOLUME. . . . . . . . .=',1pg20.13)
34051020
FORMAT( 5x,
'SUM VOLUME OF FINITE VOLUMES. . . . . .=',1pg20.13,
3406 . /5x,
'SUM AREA SURFACE TRIANGLES. . . . . . .=',1pg20.13,
3407 . /5x,
'SUM MASS OF FINITE VOLUMES. . . . . . .=',1pg20.13)