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)
61 use element_mod ,
only : nixs
65#include "implicit_f.inc"
74 INTEGER IBUF(*), ELEM(3,*), IVOLU(*), BRIC(8,*),
75 . NEL, NELI, NBRIC, TBRIC(13,*), NBA, NELA, TBA(2,*),
76 . TFACA(12,*), TAGELS(*), IBUFA(*), ELEMA(3,*), TAGELA(*),
77 . IXS(NIXS,*), NB_NODE, ITYP
78 my_real x(3,*), xb(3,*), rvolu(*), sfac(6,4,*), dxm
80 CHARACTER(len=nchartitle) :: TITR
84 INTEGER ILVOUT, NLAYER, NFACMAX, NPPMAX, I, J, IEL, N1, N2, N3,
85 . NN1, NN2, NN3, IAD, NPOLY, NNS, ITAGB(NBRIC),
86 . NVMAX, INFO, ICUT, NVERTS, NF1, NF2, NF3, NF4, NS,
87 . NSMAX, NV, K, KK, NNP, NPOLMAX, NRPMAX, N, M, MM, NPOLH,
88 . npolb, ity, nn, nphmax, npolhmax, jj, jjj, ii,
89 . nns_old, nnp_old, npa, jmax, imax, jjmax, np, nntr,
90 . npoly_old, ipsurf, ic1, ic2, nhol, nelp, npolh_old,
91 . l, ll, ifv, nns2, npoly2, npl, polc, nspoly, ncpoly,
92 . npolhf, lenp, lenh, ip, lenimax,
93 . lenrmax, kkk, nseg, imin, nfac, n4, nn4,
94 . itagba(nba), ibsa(nba), itagn(nb_node), nall,
95 . nns_anim, nbz, nbnedge, nns3, npoly_new, nnsp, nedge,
96 . ityz, inz, j0, nns1, k0, i1, i2, idep, nstr, nctr, iiz,
97 . nns_old_save,ityzint,iad1, iad2, itmp1
98 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IFLAG
100 my_real x1, y1, z1, x2, y2, z2, x3, y3, z3, x12, y12, z12,
101 . x13, y13, z13, nrx, nry, nrz, area2, elarea(nel+neli),
102 .
norm(3,nel+neli), xbmax, ybmax, zbmax, xbmin, ybmin, zbmin,
103 . xc, yc, zc, xx, yy, zz, pp(3,3), xl7(3), bcenter(3),
104 . bhalfsize(3), xtmax, ytmax, ztmax, xtmin, ytmin, ztmin,
105 . tverts(9), tmptri(3,3), tmpbox(3,8), tmpnorm(3,6), tole,
106 . xg, yg, zg, fv0(3), fv1(3), fv2(3), fu0(3), fu1(3),
107 . fu2(3), quad(3,4), nr(3),
area, nx, ny, nz, nnx,
108 . nny, nnz, x0, y0, z0, lmax2, tole2, dd, vm, volumin,
109 . areamax, volph, areap, areael, vpx, vpy, vpz,
110 . v1x, v1y, v1z, v2x, v2y, v2z, nrm1, vx, vy, vz, ss,
111 . normf(3,4), ksi, eta, vx1, vy1, vz1, vx2, vy2, vz2,
112 . vmin, x4, y4, z4, norma(3,nela),
113 . dd2, xn(3), zlmin, zlmax, zl, vnorm, vx3, vy3, vz3, lz,
114 . dz,
alpha, gamai, cpai, cpbi, cpci, rmwi, pini, ti, cpi,
115 . cvi, rhoi, zl1, zl2, zl3, zlc, val,
tmass,
116 . ti2, cpdi, cpei, cpfi, r1
117 INTEGER :: COUNT_ELEM_INT, COUNT_ELEM_EXT, COUNT_TRIA_INTERNE
118 INTEGER :: COUNT_ELEM_INT_OLD, COUNT_ELEM_EXT_OLD, COUNT_TRIA_INTERNE_OLD
119 INTEGER,
ALLOCATABLE :: FACET(:,:), IPOLY(:,:),
120 . IELNOD(:,:), POLH(:,:), IPOLY_F(:,:),
121 . polh_f(:,:), ifvnod(:), ifvnod_old(:),
122 . redir_poly(:), pseg(:,:), redir(:),
123 . ptri(:,:), redir_polh(:), polb(:),
124 . ipoly_old(:), polh_new(:,:), itagt(:),
125 . tri(:,:), adr(:), adr_old(:), imerged(:),
126 . ipoly_f_old(:,:), inedge(:,:), nref(:,:),
127 . iz(:,:), ledge(:), ifvnod2(:,:)
128 my_real,
ALLOCATABLE :: normt(:,:), poly(:,:), rpoly(:,:),
129 . rpoly_f(:,:), volu(:), pnodes(:,:),
130 . pholes(:,:), rpoly_old(:),
131 . volu_old(:), rpoly_f_old(:,:),
133 . aref(:,:), rfvnod2(:,:), xns(:,:),
134 . xns2(:,:), areatr(:)
136 INTEGER (4,6), FACNOR(4,6), FAC4(3,4), FAC6(4,5)
137 INTEGER FAC5(4,5), NFACE(4), , IQUAD
144 DATA facnor /3,4,5,6,
169 INTEGER,
DIMENSION(:),
POINTER :: IPOLY, IELNOD
170 INTEGER,
DIMENSION(:,:),
POINTER :: NREF
171 my_real,
DIMENSION(:),
POINTER :: rpoly
172 my_real,
DIMENSION(:,:),
POINTER :: aref
173 TYPE(polygone),
POINTER :: PTR
175 TYPE(polygone),
POINTER :: FIRST, PTR_PREC, PTR_CUR, PTR_TMP,
176 . ptr_old, first2, ptr_cur2, ptr_prec2,
178 TYPE(polygone),
TARGET :: NOTHING
182 INTEGER,
DIMENSION(:),
POINTER :: POLH
183 TYPE(POLYHEDRE),
POINTER :: PTR
185 TYPE(polyhedre),
POINTER :: PHFIRST, PH_PREC, PH_CUR, PH_TMP
187 my_real,
DIMENSION(:),
ALLOCATABLE :: radius
188 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IDX
210 nothing%PTR => nothing
223 IF (ilvout >=1.AND.nba == 0)
WRITE(istdo,
'(A19,I10)')
224 .
' --> FVMBAG ID: ',ivolu(1)
246 CALL fvnormal(x,nn1,nn2,nn3,0,nrx,nry,nrz)
247 area2=sqrt(nrx**2+nry**2+nrz**2)
248 elarea(iel)=half*area2
249 norm(1,iel)=nrx/area2
250 norm(2,iel)=nry/area2
251 norm(3,iel)=nrz/area2
258 IF (tagela(iel) > 0)
THEN
262 ELSEIF (tagela(iel) < 0)
THEN
267 CALL fvnormal(x,nn1,nn2,nn3,0,nrx,nry,nrz)
268 area2=sqrt(nrx**2+nry**2+nrz**2)
269 norma(1,iel)=nrx/area2
270 norma(2,iel)=nry/area2
271 norma(3,iel)=nrz/area2
292 IF (ilvout >=1)
WRITE(istdo,
'(8X,A)')
'BUILDING POLYGONS'
302 ALLOCATE(facet(6,1+nfacmax), tri(nfacmax,5),
303 . normt(3,nfacmax), poly(3,nvmax))
345 xl7(1)=pp(1,1)*(xx-xc)+pp(2,1)*(yy-yc)+pp(3,1)*(zz
346 xl7(2)=pp(1,2)*(xx-xc)+pp(2,2)*(yy-yc)+pp(3,2)*(zz-zc)
347 xl7(3)=pp(1,3)*(xx-xc)+pp(2,3)*(yy-yc)+pp(3,3)*(zz-zc)
359 IF (tagela(iel) > 0)
THEN
363 ELSEIF (tagela(iel) < 0)
THEN
383 IF (xbmax < xtmin.OR.ybmax < ytmin.OR.zbmax < ztmin.OR.
384 . xbmin > xtmax.OR.ybmin > ytmax.OR.zbmin > ztmax)
387 tverts(1)=pp(1,1)*(x1-xc)+pp(2,1)*(y1-yc)+pp(3,1)*(z1-zc)
388 tverts(2)=pp(1,2)*(x1-xc)+pp(2,2)*(y1-yc)+pp(3,2)*(z1-zc)
389 tverts(3)=pp(1,3)*(x1-xc)+pp(2,3)*(y1-yc)+pp(3,3)*(z1-zc)
390 tverts(4)=pp(1,1)*(x2-xc)+pp(2,1)*(y2-yc)+pp(3,1)*(z2-zc)
391 tverts(5)=pp(1,2)*(x2-xc)+pp(2,2)*(y2-yc)+pp(3,2)*(z2-zc)
392 tverts(6)=pp(1,3)*(x2-xc)+pp(2,3)*(y2-yc)+pp(3,3)*(z2-zc)
393 tverts(7)=pp(1,1)*(x3-xc)+pp(2,1)*(y3-yc)+pp(3,1)*(z3-zc)
394 tverts(8)=pp(1,2)*(x3-xc)+pp(2,2)*(y3-yc)+pp(3,2)*(z3-zc)
395 tverts(9)=pp(1,3)*(x3-xc)+pp(2,3)*(y3-yc)+pp(3,3)*(z3-zc)
397 CALL tribox3(icut, bcenter, bhalfsize, tverts)
405 x1=xg+(one+tole)*(x1-xg)
406 y1=yg+(one+tole)*(y1-yg)
407 z1=zg+(one+tole)*(z1-zg)
408 x2=xg+(one+tole)*(x2-xg)
409 y2=yg+(one+tole)*(y2-yg)
410 z2=zg+(one+tole)*(z2-zg)
411 x3=xg+(one+tole)*(x3-xg)
412 y3=yg+(one+tole)*(y3-yg)
413 z3=zg+(one+tole)*(z3-zg)
415 tverts(1)=pp(1,1)*(x1-xc)+pp(2,1)*(y1-yc)+pp(3,1)*(z1-zc)
416 tverts(2)=pp(1,2)*(x1-xc)+pp(2,2)*(y1-yc)+pp(3,2)*(z1-zc)
417 tverts(3)=pp(1,3)*(x1-xc)+pp(2,3)*(y1-yc)+pp(3,3)*(z1-zc)
418 tverts(4)=pp(1,1)*(x2-xc)+pp(2,1)*(y2-yc)+pp(3,1)*(z2-zc)
419 tverts(5)=pp(1,2)*(x2-xc)+pp(2,2)*(y2-yc)+pp(3,2)*(z2-zc)
420 tverts(6)=pp(1,3)*(x2-xc)+pp(2,3)*(y2-yc)+pp(3,3)*(z2-zc)
421 tverts(7)=pp(1,1)*(x3-xc)+pp(2,1)*(y3-yc)+pp(3,1)*(z3-zc)
422 tverts(8)=pp(1,2)*(x3-xc)+pp(2,2)*(y3-yc)+pp(3,2)*(z3-zc)
423 tverts(9)=pp(1,3)*(x3-xc)+pp(2,3)*(y3-yc)+pp(3,3)*(z3-zc)
425 CALL tribox3(icut, bcenter, bhalfsize, tverts)
426 IF (icut == 1) icut=2
442 tmpbox(1,j)=xb(1,bric(j,i))
443 tmpbox(2,j)=xb(2,bric(j,i))
444 tmpbox(3,j)=xb(3,bric(j,i))
447 tmpnorm(1,j)=-sfac(j,2,i)
448 tmpnorm(2,j)=-sfac(j,3,i)
449 tmpnorm(3,j)=-sfac(j,4,i)
451 CALL itribox(tmptri, tmpbox, tmpnorm, nverts, poly,
455 IF (.NOT.
ASSOCIATED(first))
THEN
460 ptr_prec%PTR => ptr_cur
462 ALLOCATE(ptr_cur%IPOLY(6+nverts),
463 . ptr_cur%IELNOD(nverts),
464 . ptr_cur%RPOLY(4+3*nverts))
466 ptr_cur%IPOLY(2)=nverts
471 ptr_cur%RPOLY(1)=zero
472 ptr_cur%RPOLY(2)=norma(1,iel)
473 ptr_cur%RPOLY(3)=norma(2,iel)
474 ptr_cur%RPOLY(4)=norma(3,iel)
477 ptr_cur%IPOLY(6+j)=nns
478 ptr_cur%IELNOD(j)=iel
479 ptr_cur%RPOLY(4+3*(j-1)+1)=poly(1,j)
480 ptr_cur%RPOLY(4+3*(j-1)+2)=poly(2,j)
492 x1=xg+(one+tole)*(x1-xg)
493 y1=yg+(one+tole)*(y1-yg)
494 z1=zg+(one+tole)*(z1-zg)
495 x2=xg+(one+tole)*(x2-xg)
496 y2=yg+(one+tole)*(y2-yg)
497 z2=zg+(one+tole)*(z2-zg)
498 x3=xg+(one+tole)*(x3-xg)
499 y3=yg+(one+tole)*(y3-yg)
500 z3=zg+(one+tole)*(z3-zg)
526 CALL tritri3(icut, fv0, fv1, fv2, fu0, fu1, fu2)
532 IF (ns > nfacmax)
THEN
547 CALL tritri3(icut, fv0, fv1, fv2, fu0, fu1, fu2)
553 IF (ns > nfacmax)
THEN
566 nsmax=
max(nsmax,facet(j,1))
569 IF(ilvout >=1)
WRITE(iout,
'(A,I10,A,I10)')
570 .
' MONITORED VOLUME ID: ',ivolu(1),
571 .
' NFACMAX IS RESET TO ',nsmax
573 IF (npoly_old > 0)
THEN
574 ptr_cur => ptr_old%PTR
578 DO j=1,npoly-npoly_old
579 ptr_tmp => ptr_cur%PTR
580 DEALLOCATE(ptr_cur%IPOLY, ptr_cur%RPOLY,
585 IF (npoly_old > 0)
THEN
594 DEALLOCATE(facet, tri, normt, poly)
598 IF (tbric(7,i) <= 1)
THEN
599 DEALLOCATE(facet, tri, normt, poly)
606 IF (itagb(nv) == 1) cycle
607 IF (tbric(7+j,i) == 2)
THEN
610 quad(1,k)=xb(1,bric(kk,i))
611 quad(2,k)=xb(2,bric(kk,i))
612 quad(3,k)=xb(3,bric(kk,i))
617 IF (tagela(iel) > 0)
THEN
619 ll=ibuf(elema(l,iel))
622 IF(tagela(iel) <= nel)
THEN
629 ELSEIF (tagela(iel) < 0)
THEN
632 ll=ibufa(elema(l,iel))
638 normt(1,k)=norma(1,iel)
639 normt(2,k)=norma(2,iel)
640 normt(3,k)=norma(3,iel)
643 normf(1,k)=sfac(facnor(k,j),2,i)
644 normf(2,k)=sfac(facnor(k,j),3,i)
645 normf(3,k)=sfac(facnor(k,j),4,i)
656 ALLOCATE(ipoly(6+nppmax+1+npolmax,npolmax),
657 . rpoly(nrpmax+3*npolmax,npolmax),
658 . ielnod(nppmax,npolmax))
660 CALL facepoly(quad, tri, ns, ipoly, rpoly,
661 . nr, normf, normt, nfacmax, nnp,
662 . nrpmax, i, nv, dxm, npolmax,
663 . nppmax, info, ielnod, x, j,
666 DEALLOCATE(ipoly, rpoly, ielnod)
671 IF (ipoly(1,n) == -1) cycle
673 IF (.NOT.
ASSOCIATED(first2))
THEN
678 ptr_prec2%PTR => ptr_cur2
682 ALLOCATE(ptr_cur2%IPOLY(6+nn+1+nhol),
683 . ptr_cur2%IELNOD(nn),
684 . ptr_cur2%RPOLY(4+3*nn+3*nhol))
686 ptr_cur2%IPOLY(m)=ipoly(m,n)
689 ptr_cur2%RPOLY(m)=rpoly(m,n)
693 ptr_cur2%IPOLY(6+m)=nns2
695 ptr_cur2%IELNOD(m)=facet(j,1+mm)
696 ptr_cur2%RPOLY(4+3*(m-1)+1)=rpoly(4+3*(m-1)+1,n)
697 ptr_cur2%RPOLY(4+3*(m-1)+2)=rpoly(4+3*(m-1)+2,n)
698 ptr_cur2%RPOLY(4+3*(m-1)+3)=rpoly(4+3*(m-1)+3,n)
700 ptr_cur2%IPOLY(6+nn+1)=nhol
702 ptr_cur2%IPOLY(6+nn+1+m)=ipoly(6+nn+1+m,n)
703 ptr_cur2%RPOLY(4+3*nn+3*(m-1)+1)=
704 . rpoly(4+3*nn+3*(m-1)+1,n)
705 ptr_cur2%RPOLY(4+3*nn+3*(m-1)+2)=
706 . rpoly(4+3*nn+3*(m-1)+2,n)
707 ptr_cur2%RPOLY(4+3*nn+3*(m-1)+3)=
708 . rpoly(4+3*nn+3*(m-1)+3,n)
710 ptr_prec2 => ptr_cur2
713 DEALLOCATE(ipoly, rpoly, ielnod)
719 DEALLOCATE(facet, tri, normt, poly)
730 ptr_prec%PTR => ptr_cur
732 nhol=ptr_cur2%IPOLY(6+nn+1)
733 ALLOCATE(ptr_cur%IPOLY(6+nn+1+nhol),
734 . ptr_cur%IELNOD(nn),
735 . ptr_cur%RPOLY(4+3*nn+3*nhol))
737 ptr_cur%IPOLY(j)=ptr_cur2%IPOLY(j)
740 ptr_cur%RPOLY(j)=ptr_cur2%RPOLY(j)
743 ptr_cur%IPOLY(6+j)=nns+ptr_cur2%IPOLY(6+j)
744 ptr_cur%IELNOD(j)=ptr_cur2%IELNOD(j)
745 ptr_cur%RPOLY(4+3*(j-1)+1)=ptr_cur2%RPOLY(4+3*(j-1)+1)
746 ptr_cur%RPOLY(4+3*(j-1)+2)=ptr_cur2%RPOLY(4+3*(j-1)+2)
747 ptr_cur%RPOLY(4+3*(j-1)+3)=ptr_cur2%RPOLY(4+3*(j-1)+3)
749 ptr_cur%IPOLY(6+nn+1)=nhol
751 ptr_cur%IPOLY(6+nn+1+j)=ptr_cur2%IPOLY(6+nn+1+j)
752 ptr_cur%RPOLY(4+3*nn+3*(j-1)+1)=
753 . ptr_cur2%RPOLY(4+3*nn+3*(j-1)+1)
754 ptr_cur%RPOLY(4+3*nn+3*(j-1)+2)=
755 . ptr_cur2%RPOLY(4+3*nn+3*(j-1)+2)
756 ptr_cur%RPOLY(4+3*nn+3*(j-1)+3)=
757 . ptr_cur2%RPOLY(4+3*nn+3*(j-1)+3)
759 ptr_tmp2 => ptr_cur2%PTR
760 DEALLOCATE(ptr_cur2%IPOLY, ptr_cur2%RPOLY, ptr_cur2%IELNOD)
775 ptr_cur => ptr_cur%PTR
785 vnorm=sqrt(vx3**2+vy3**2+vz3**2)
789 ss=vx3*vx1+vy3*vy1+vz3*vz1
793 vnorm=sqrt(vx1**2+vy1**2+vz1**2)
832 zl1=(x1-x0)*vx3+(y1-y0)*vy3+(z1-z0)*vz3
833 zl2=(x2-x0)*vx3+(y2-y0)*vy3+(z2-z0)*vz3
834 zl3=(x3-x0)*vx3+(y3-y0)*vy3+(z3-z0)*vz3
847 ALLOCATE(inedge(6,npoly*nppmax), rnedge(6,npoly*nppmax))
853 IF (zlc < zbmin.OR.zlc > zbmax)
THEN
865 DO k=1,ptr_cur%IPOLY(2)
866 xx=ptr_cur%RPOLY(4+3*(k-1)+1)
867 yy=ptr_cur%RPOLY(4+3*(k-1)+2)
868 zz=ptr_cur%RPOLY(4+3*(k-1)+3)
869 zl=(xx-x0)*vx3+(yy-y0)*vy3+(zz-z0)*vz3
874 IF (zlmin*zlmax < zero)
THEN
878 IF (ity == 2) nhol=ptr_cur%IPOLY(6+nn+1)
879 ALLOCATE(ipoly(6+2*nn+1+nhol,nn),
880 . rpoly(4+3*2*nn+3*nhol,nn),
882 . nref(2,nn), aref(4,nn),
885 . ipoly, rpoly, ptr_cur%IPOLY, ptr_cur%RPOLY, inedge,
886 . rnedge, nbnedge, vx3, vy3, vz3,
887 . x0, y0, z0, nref, aref,
888 . nn, nhol, iiz, iz, nns3,
889 . nnp , nnsp, ielnod, ptr_cur%IELNOD)
892 ptr_tmp => ptr_cur%PTR
893 npoly_new=npoly_new-1
895 npoly_new=npoly_new+1
897 DEALLOCATE(ptr_cur%IPOLY, ptr_cur%RPOLY,
901 ptr_prec%PTR => ptr_cur
906 ALLOCATE(ptr_cur%IPOLY(6+nn+1+nhol),
907 . ptr_cur%IELNOD(nn),
908 . ptr_cur%RPOLY(4+3*nn+3*nhol))
910 ptr_cur%IPOLY(m)=ipoly(m,n)
913 ptr_cur%RPOLY(m)=rpoly(m,n)
917 ptr_cur%IPOLY(6+m)=mm
918 ptr_cur%IELNOD(m)=ielnod(m,n)
919 ptr_cur%RPOLY(4+3*(m-1)+1)=rpoly(4+3*(m-1)+1,n)
920 ptr_cur%RPOLY(4+3*(m-1)+2)=rpoly(4+3*(m-1)+2,n)
921 ptr_cur%RPOLY(4+3*(m-1)+3)=rpoly(4+3*(m-1)+3,n)
924 ptr_cur%IPOLY(6+nn+1)=nhol
926 ptr_cur%IPOLY(6+nn+1+m)=ipoly(6+nn+1+m,n)
927 ptr_cur%RPOLY(4+3*nn+3*(m-1)+1)=
928 . rpoly(4+3*nn+3*(m-1)+1,n)
929 ptr_cur%RPOLY(4+3*nn+3*(m-1)+2)=
930 . rpoly(4+3*nn+3*(m-1)+2,n)
931 ptr_cur%RPOLY(4+3*nn+3*(m-1)+3)=
932 . rpoly(4+3*nn+3*(m-1)+3,n)
935 ptr_cur%IZ(2)=iz(2,n)
938 ALLOCATE(ptr_cur%NREF(3,nnsp),
939 . ptr_cur%AREF(4,nnsp))
942 ptr_cur%NREF(1,m)=nns3
943 ptr_cur%NREF(2,m)=nref(1,m)
944 ptr_cur%NREF(3,m)=nref(2,m)
945 ptr_cur%AREF(1,m)=aref(1,m)
946 ptr_cur%AREF(2,m)=aref(2,m)
947 ptr_cur%AREF(3,m)=aref(3,m)
948 ptr_cur%AREF(4,m)=aref(4,m)
952 IF (n == nnp) ptr_cur%PTR => ptr_tmp
956 DEALLOCATE(ipoly, rpoly, ielnod, nref, aref, iz)
959 IF (zlmin == zero.AND.zlmax > zero)
THEN
961 ALLOCATE(nref(2,2*nn), aref(4,2*nn))
963 . ptr_cur%IPOLY, ptr_cur%RPOLY, vx3, vy3, vz3,
964 . nbnedge, inedge, rnedge, x0, y0,
965 . z0, iiz , nns3, nref, aref,
969 ALLOCATE(ptr_cur%NREF(3,nnsp),
970 . ptr_cur%AREF(4,nnsp))
974 ptr_cur%NREF(1,n)=nns3
975 ptr_cur%NREF(2,n)=nref(1,n)
976 ptr_cur%NREF(3,n)=nref(2,n)
977 ptr_cur%AREF(1,n)=aref(1,n)
978 ptr_cur%AREF(2,n)=aref(2,n)
979 ptr_cur%AREF(3,n)=aref(3,n)
980 ptr_cur%AREF(4,n)=aref(4,n)
983 DEALLOCATE(nref, aref)
986 IF (zlmin >= zero)
THEN
989 ELSEIF (iiz == 1.AND.zlmax <= zero)
THEN
995 ptr_cur => ptr_cur%PTR
1004 ALLOCATE(redir(nns))
1010 jj=ptr_cur%IPOLY(6+j)
1016 ptr_cur => ptr_cur%PTR
1024 n1=ptr_cur%NREF(2,j)
1025 n2=ptr_cur%NREF(3,j)
1026 IF (n1 > 0) ptr_cur%NREF(2,j)=redir(n1)
1027 IF (n2 > 0) ptr_cur%NREF(3,j)=redir(n2)
1030 ptr_cur => ptr_cur%PTR
1037 ptr_cur => ptr_cur%PTR
1040 ALLOCATE(ledge(nbnedge))
1045 IF (inedge(6,k) /= i) cycle
1046 IF (inedge(1,k) == 1.AND.inedge(5,k) /= j) cycle
1047 IF (inedge(1,k) == 2.AND.inedge(4,k) /= j.AND.
1048 . inedge(5,k) /= j) cycle
1052 IF (nedge == 0) cycle
1053 ALLOCATE(ipoly(6+2*nedge+1+nedge,nedge),
1054 . rpoly(4+6*nedge+3*nedge,nedge),
1055 . iz(3,nedge), ielnod(nedge,nedge))
1057 CALL horipoly(inedge, rnedge, ledge, nedge, ipoly,
1058 . rpoly, iz, ielnod, nnp, vx3,
1059 . vy3, vz3, i , j , nel,
1063 IF (ipoly(1,n) == -1) cycle
1066 ptr_prec%PTR => ptr_cur
1068 nhol=ipoly(6+nn+1,n)
1069 ALLOCATE(ptr_cur%IPOLY(6+nn+1+nhol),
1070 . ptr_cur%RPOLY(4+3*nn+3*nhol),
1071 . ptr_cur%IELNOD(nn))
1074 ptr_cur%IPOLY(m)=ipoly(m,n)
1077 ptr_cur%RPOLY(m)=rpoly(m,n)
1080 ptr_cur%IPOLY(6+m)=ipoly(6+m,n)
1081 ptr_cur%IELNOD(m)=ielnod(m,n)
1082 ptr_cur%RPOLY(4+3*(m-1)+1)=rpoly(4+3*(m-1)+1,n)
1083 ptr_cur%RPOLY(4+3*(m-1)+2)=rpoly(4+3*(m-1)+2,n)
1084 ptr_cur%RPOLY(4+3*(m-1)+3)=rpoly(4+3*(m-1)+3,n)
1086 nhol=ipoly(6+nn+1,n)
1087 ptr_cur%IPOLY(6+nn+1)=nhol
1089 ptr_cur%IPOLY(6+nn+1+m)=ipoly(6+nn+1+m,n)
1090 ptr_cur%RPOLY(4+3*nn+3*(m-1)+1)=
1091 . rpoly(4+3*nn+3*(m-1)+1,n)
1092 ptr_cur%RPOLY(4+3*nn+3*(m-1)+2)=
1093 . rpoly(4+3*nn+3*(m-1)+2,n)
1094 ptr_cur%RPOLY(4+3*nn+3*(m-1)+3)=
1095 . rpoly(4+3*nn+3*(m-1)+3,n)
1098 ptr_cur%IZ(m)=iz(m,n)
1103 DEALLOCATE(ipoly, rpoly, iz, ielnod)
1113 ptr_cur => ptr_cur%PTR
1123 IF (ilvout >=1)
WRITE(istdo,
'(8X,A)')
'BUILDING FINITE VOLUMES'
1127 IF (tbric(7,i) /= 2) cycle
1133 ity=ptr_cur%IPOLY(1)
1134 IF ((ity == 1.AND.ptr_cur%IPOLY(4) == i).OR.
1136 . (ptr_cur%IPOLY(3) == i.OR.ptr_cur%IPOLY(4) == i)))
THEN
1138 nppmax=
max(nppmax,ptr_cur%IPOLY(2))
1140 ptr_cur => ptr_cur%PTR
1142 IF (npolb == 0) cycle
1145 ALLOCATE(polb(npolb), ipoly(6+nppmax,npolb),
1146 . rpoly(nrpmax,npolb), redir(npolb))
1152 ity=ptr_cur%IPOLY(1)
1154 IF (((ity == 1.AND.ptr_cur%IPOLY(4) == i).OR.
1155 . (ity == 2.AND.(ptr_cur%IPOLY(3) == i.OR.
1156 . ptr_cur%IPOLY(4) == i)))
1158 . ((ityz == 1.AND.ptr_cur%IZ(2) == inz).OR.
1159 . (ityz == 2.AND.(ptr_cur%IZ(2) == inz.OR.
1160 . ptr_cur%IZ(3) == inz))))
THEN
1164 IF(ity==1.AND.ityzint==0)
THEN
1165 iel=ptr_cur%IPOLY(3)
1166 IF(tagela(iel) > nel) ityzint=1
1169 ipoly(k,npolb)=ptr_cur%IPOLY(k)
1172 rpoly(k,npolb)=ptr_cur%RPOLY(k)
1176 ptr_cur => ptr_cur%PTR
1178 IF (npolb == 0) cycle
1184 IF (
ALLOCATED(polh))
DEALLOCATE(polh)
1185 ALLOCATE(polh(nphmax+2,npolhmax))
1188 CALL polyhedr(ipoly, rpoly , polb, npolb, polh,
1189 . nnp, nrpmax , nphmax, i, dxm ,
1190 . info , npolhmax, nppmax )
1192 CALL polyhedr1(ipoly, rpoly , polb, npolb, polh,
1193 . nnp, nrpmax , nphmax, i, dxm ,
1197 IF (info == 1)
GOTO 300
1201 polc=redir(polb(npl))
1204 ity=ptr_cur%IPOLY(1)
1206 ptr_cur%IPOLY(5)=npolh+ipoly(5,npl)
1207 iel=ptr_cur%IPOLY(3)
1208 IF(tagela(iel) > nel)
THEN
1209 ptr_cur%IPOLY(6)=npolh+ipoly(6,npl)
1211 ELSEIF (ity == 2)
THEN
1212 IF (ptr_cur%IPOLY(5) == 0)
THEN
1213 ptr_cur%IPOLY(5)=npolh+ipoly(5,npl)
1215 ptr_cur%IPOLY(6)=npolh+ipoly(6,npl)
1218 IF (npl == npolb)
GOTO 350
1220 polc=redir(polb(npl))
1222 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
1279 nphmax=
max(nphmax,nn)
1280 ph_cur => ph_cur%PTR
1298 n1=ibuf(elem(1,iel))
1299 n2=ibuf(elem(2,iel))
1300 n3=ibuf(elem(3,iel))
1306 count_elem_int_old = 0
1307 count_elem_ext_old = 0
1308 count_tria_interne_old = 0
1314 ity=tfaca(2*(j-1)+1,i)
1315 IF (ity == 1 .OR. ity == -2)
THEN
1317 nv=tfaca(2*(j-1)+2,i)
1318 IF (itagba(nv) == 0)
THEN
1319 IF (ity == 1) count_tria_interne_old = count_tria_interne_old + 1
1320 IF (ity == -2) count_elem_int_old = count_elem_int_old + 1
1321 lenimax=
max(lenimax,6+3+1)
1322 lenrmax=
max(lenrmax,6+3*3)
1326 ELSEIF (ntype==3)
THEN
1334 ELSEIF (ntype==4)
THEN
1342 ELSEIF (ntype==1)
THEN
1350 ELSEIF (ntype==3)
THEN
1356 ELSEIF (ntype==4)
THEN
1362 ELSEIF (ntype==1)
THEN
1366 ELSEIF (ity == 2)
THEN
1368 count_elem_ext_old = count_elem_ext_old + 1
1373 ELSEIF (ntype==3)
THEN
1383 ELSEIF (ntype==4)
THEN
1393 ELSEIF (ntype==1)
THEN
1399 ELSEIF (ity == 3)
THEN
1403 IF (ptr_cur%IPOLY(1) == 1)
THEN
1404 iel=ptr_cur%IPOLY(3)
1405 IF (-tagela(iel) == i) nnp=nnp+1
1407 ptr_cur => ptr_cur%PTR
1412 nphmax=
max(nphmax,nnp)
1418 jj=ixs(1+2*(j-1)+1,ii)
1421 ELSEIF (ntype==3)
THEN
1430 ELSEIF (ntype==4)
THEN
1435 ELSEIF (ntype==1)
THEN
1445 ALLOCATE(ipoly_f(lenimax,npoly), rpoly_f(lenrmax,npoly),
1446 . polh_f(2+nphmax,npolh), ifvnod(nns), volu(npolh),
1447 . ifvnod2(2,nns2), rfvnod2(4,nns2), xns(3,nns),
1460 jj=ptr_cur%IPOLY(6+j)
1463 xns(1,nns)=ptr_cur%RPOLY(4+3*(j-1)+1)
1464 xns(2,nns)=ptr_cur%RPOLY(4+3*(j-1)+2)
1465 xns(3,nns)=ptr_cur%RPOLY(4+3*(j-1)+3)
1468 ptr_cur => ptr_cur%PTR
1476 ipoly_f(j,i)=ptr_cur%IPOLY(j)
1479 rpoly_f(j,i)=ptr_cur%RPOLY(j)
1482 jj=ptr_cur%IPOLY(6+j)
1486 ifvnod(nns)=ptr_cur%IELNOD(j)
1491 IF (ptr_cur%IPOLY(1) == 1)
THEN
1493 IF(tagela(iel) < 0 )
THEN
1494 ipoly_f(4,i)=ipoly_f(5,i)
1496 ELSEIF(tagela(iel) > 0)
THEN
1497 IF(tagela(iel) <= nel)
THEN
1498 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
1547 ELSEIF (n2 < 0)
THEN
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)
1586 ALLOCATE(iflag(nb_node))
1587 iflag(1:nb_node) = 0
1596 count_tria_interne = 0
1604 ity=tfaca(2*(j-1)+1,i)
1607 nv=tfaca(2*(j-1)+2,i)
1608 IF (itagba(nv) == 0)
THEN
1609 count_tria_interne = count_tria_interne + 1
1615 ELSEIF (ntype==3)
THEN
1628 ELSEIF (ntype==4)
THEN
1641 ELSEIF (ntype==1)
THEN
1656 ipoly_f(5,npoly)=npolh+i
1657 ipoly_f(6,npoly)=npolh+nv
1658 ipoly_f(6+1,npoly)=nns+1
1659 ipoly_f(6+2,npoly)=nns+2
1660 ipoly_f(6+3,npoly)=nns+3
1661 ipoly_f(6+3+1,npoly)=0
1679 CALL fvnormal(x,nn1,nn2,nn3,0,nrx,nry,nrz)
1680 area2=sqrt(nrx**2+nry**2+nrz**2)
1681 rpoly_f(2,npoly)=nrx/area2
1682 rpoly_f(3,npoly)=nry/area2
1683 rpoly_f(4,npoly)=nrz/area2
1684 rpoly_f(4+1,npoly)=x1
1685 rpoly_f(4+2,npoly)=y1
1686 rpoly_f(4+3,npoly)=z1
1687 rpoly_f(4+4,npoly)=x2
1688 rpoly_f(4+5,npoly)=y2
1689 rpoly_f(4+6,npoly)=z2
1690 rpoly_f(4+7,npoly)=x3
1691 rpoly_f(4+8,npoly)=y3
1692 rpoly_f(4+9,npoly)=z3
1695 polh_f(2+nnp,npolh+i)=npoly
1696 ELSEIF(iquad==1)
THEN
1720 ipoly_f(5,npoly)=npolh+i
1721 ipoly_f(6,npoly)=npolh+nv
1722 ipoly_f(6+1,npoly)=nns+1
1723 ipoly_f(6+2,npoly)=nns+2
1724 ipoly_f(6+3,npoly)=nns+3
1725 ipoly_f(6+3+1,npoly)=0
1730 CALL fvnormal(x,nn1,nn2,nn3,0,nrx,nry,nrz)
1731 area2=sqrt(nrx**2+nry**2+nrz**2)
1732 rpoly_f(2,npoly)=nrx/area2
1733 rpoly_f(3,npoly)=nry/area2
1734 rpoly_f(4,npoly)=nrz/area2
1735 rpoly_f(4+1,npoly)=x1
1736 rpoly_f(4+2,npoly)=y1
1737 rpoly_f(4+3,npoly)=z1
1738 rpoly_f(4+4,npoly)=x2
1739 rpoly_f(4+5,npoly)=y2
1740 rpoly_f(4+6,npoly)=z2
1741 rpoly_f(4+7,npoly)=x3
1742 rpoly_f(4+8,npoly)=y3
1743 rpoly_f(4+9,npoly)=z3
1746 polh_f(2+nnp,npolh+i)=npoly
1753 ipoly_f(5,npoly)=npolh+i
1754 ipoly_f(6,npoly)=npolh+nv
1755 ipoly_f(6+1,npoly)=nns+1
1756 ipoly_f(6+2,npoly)=nns+2
1757 ipoly_f(6+3,npoly)=nns+3
1758 ipoly_f(6+3+1,npoly)=0
1763 CALL fvnormal(x,nn1,nn3,nn4,0,nrx,nry,nrz)
1764 area2=sqrt(nrx**2+nry**2+nrz**2)
1765 rpoly_f(2,npoly)=nrx/area2
1766 rpoly_f(3,npoly)=nry/area2
1767 rpoly_f(4,npoly)=nrz/area2
1768 rpoly_f(4+1,npoly)=x1
1769 rpoly_f(4+2,npoly)=y1
1770 rpoly_f(4+3,npoly)=z1
1771 rpoly_f(4+4,npoly)=x3
1772 rpoly_f(4+5,npoly)=y3
1773 rpoly_f(4+6,npoly)=z3
1774 rpoly_f(4+7,npoly)=x4
1775 rpoly_f(4+8,npoly)=y4
1776 rpoly_f(4+9,npoly)=z4
1779 polh_f(2+nnp,npolh+i)=npoly
1782 DO k=1,polh_f(1,npolh+nv)
1783 kk=polh_f(2+k,npolh+nv)
1784 IF (ipoly_f(1,kk) == 2.AND.
1785 . ipoly_f(6,kk) == npolh+i)
THEN
1787 polh_f(2+nnp,npolh+i)=kk
1791 ELSEIF (ity == 2)
THEN
1793 count_elem_ext = count_elem_ext + 1
1794 ELSEIF (ity == -2)
THEN
1797 count_elem_int = count_elem_int + 1
1803 ELSEIF (ntype==3)
THEN
1816 ELSEIF (ntype==4)
THEN
1829 ELSEIF (ntype==1)
THEN
1836 IF (iquad == 0)
THEN
1840 CALL fvnormal(x,nn1,nn2,nn3,0,nrx,nry,nrz)
1844 DO iel = nel + 1, nel + neli
1845 IF (iflag(ibuf(elem(1, iel))) * iflag(ibuf(elem(2, iel))) *
1846 . iflag(ibuf(elem(3, iel))) == 1)
THEN
1847 IF (
norm(1, iel) * nrx +
norm(2, iel) * nry +
norm(3, iel) * nrz < 0)
THEN
1848 IF (tagels(2*iel - nel - 1) == i)
THEN
1859 ELSE IF (iquad == 1)
THEN
1864 CALL fvnormal(x,nn1,nn2,nn3,0,nrx,nry,nrz)
1869 DO iel = nel + 1, nel + neli
1870 IF (iflag(ibuf(elem(1, iel))) * iflag(ibuf(elem(2, iel))) *
1871 . iflag(ibuf(elem(3, iel))) == 1)
THEN
1872 IF (
norm(1, iel) * nrx +
norm(2, iel) * nry +
norm(3, iel) * nrz < 0)
THEN
1873 IF (tagels(2*iel - nel - 1) == i)
THEN
1886 ELSEIF (ity == 3)
THEN
1889 IF (ipoly_f(1,k) == 1)
THEN
1891 IF (-tagela(iel) == i)
THEN
1893 polh_f(2+nnp,npolh+i)=k
1899 ipoly_f(6,k)=npolh+i
1907 polh_f(1,npolh+i)=nnp
1908 polh_f(2,npolh+i)=-i
1915 IF (ipoly_f(1,i) == 1)
THEN
1917 IF (tagela(iel) > 0) ipoly_f(3,i)=tagela(iel)
1922 IF (tagels(iel) > 0)
THEN
1926 ipoly_f(3,npoly)=iel
1927 ipoly_f(4,npoly)=npolh_old+tagels(iel)
1930 ipoly_f(7,npoly)=nns+1
1931 ipoly_f(8,npoly)=nns+2
1932 ipoly_f(9,npoly)=nns+3
1943 rpoly_f(1,npoly)=elarea(iel)
1944 rpoly_f(2,npoly)=
norm(1,iel)
1945 rpoly_f(3,npoly)=
norm(2,iel)
1946 rpoly_f(4,npoly)=
norm(3,iel)
1961 rpoly_f(10,npoly)=z2
1962 rpoly_f(11,npoly)=x3
1963 rpoly_f(12,npoly)=y3
1964 rpoly_f(13,npoly)=z3
1966 nnp=polh_f(1,npolh_old+tagels(iel))
1968 polh_f(1,npolh_old+tagels(iel))=nnp
1969 polh_f(2+nnp,npolh_old+tagels(iel))=npoly
1973 DO iel=nel + 1,nel + neli
1974 IF (tagels(2*iel-nel-1) > 0)
THEN
1978 ipoly_f(3,npoly)=iel
1979 ipoly_f(4,npoly)=npolh_old + tagels(2 * iel - nel - 1)
1980 ipoly_f(5,npoly)=npolh_old + tagels(2*iel-nel-1)
1981 ipoly_f(6,npoly)=npolh_old + tagels(2*iel-nel)
1982 ipoly_f(7,npoly)=nns+1
1983 ipoly_f(8,npoly)=nns+2
1984 ipoly_f(9,npoly)=nns+3
1995 rpoly_f(1,npoly)=elarea(iel)
1996 rpoly_f(2,npoly)=
norm(1,iel)
1997 rpoly_f(3,npoly)=
norm(2,iel)
1998 rpoly_f(4,npoly)=
norm(3,iel)
2013 rpoly_f(10,npoly)=z2
2014 rpoly_f(11,npoly)=x3
2015 rpoly_f(12,npoly)=y3
2016 rpoly_f(13,npoly)=z3
2018 nnp=polh_f(1,npolh_old+tagels(2*iel-nel-1))
2020 polh_f(1,npolh_old+tagels(2*iel-nel-1))=nnp
2021 polh_f(2+nnp,npolh_old+tagels(2*iel-nel-1))=npoly
2022 nnp=polh_f(1,npolh_old+tagels(2*iel-nel))
2024 polh_f(1,npolh_old+tagels(2*iel-nel))=nnp
2025 polh_f(2+nnp,npolh_old+tagels(2*iel-nel))=npoly
2036 IF (ity == 2) nhol=ipoly_f(6+nn+1,i)
2048 x2=rpoly_f(4+3*(jj-1)+1,i)
2049 y2=rpoly_f(4+3*(jj-1)+2,i)
2050 z2=rpoly_f(4+3*(jj-1)+3,i)
2051 x3=rpoly_f(4+3*(jjj-1)+1,i)
2052 y3=rpoly_f(4+3*(jjj-1)+2,i)
2053 z3=rpoly_f(4+3*(jjj-1)+3,i)
2066 ALLOCATE(adr(nhol+1))
2068 adr(j)=ipoly_f(6+nn+1+j,i)
2077 x2=rpoly_f(4+3*(jj-1)+1,i)
2078 y2=rpoly_f(4+3*(jj-1)+2,i)
2079 z2=rpoly_f(4+3*(jj-1)+3,i)
2080 x3=rpoly_f(4+3*(jjj-1)+1,i)
2081 y3=rpoly_f(4+3*(jjj-1)+2,i)
2082 z3=rpoly_f(4+3*(jjj-1)+3,i)
2097 x1=rpoly_f(4+3*adr(j)+1,i)
2098 y1=rpoly_f(4+3*adr(j)+2,i)
2099 z1=rpoly_f(4+3*adr(j)+3,i)
2101 DO k=adr(j)+1,adr(j+1)-2
2104 x2=rpoly_f(4+3*(kk-1)+1,i)
2105 y2=rpoly_f(4+3*(kk-1)+2,i)
2106 z2=rpoly_f(4+3*(kk-1)+3,i)
2107 x3=rpoly_f(4+3*(kkk-1)+1,i)
2108 y3=rpoly_f(4+3*(kkk-1)+2,i)
2109 z3=rpoly_f(4+3*(kkk-1)+3,i)
2119 area2=area2+(nnx*nx+nny*ny+nnz*nz)
2125 rpoly_f(1,i)=half*abs(
area)
2138 IF(tagels(iel) > 0)
THEN
2142 ELSEIF(tagels(iel) == 0)
THEN
2147 ELSEIF(iel > nel)
THEN
2148 IF (ipoly_f(5,jj) == i)
THEN
2152 ELSEIF (ipoly_f(6,jj) == i)
THEN
2159 ELSEIF (ity == 2.OR.ity == 3)
THEN
2160 IF (ipoly_f(5,jj) == i)
THEN
2164 ELSEIF (ipoly_f(6,jj) == i)
THEN
2173 volu(i)=volu(i)+third*
area*(x1*nx+y1*ny+z1*nz)
2181 IF (volu(i) <= zero)
THEN
2182 CALL ancmsg(msgid = 1627, msgtype = msgerror,
2186 . i2 = ixs(11, tba(1, i)))
2194 nns_old_save=nns_old
2195 ALLOCATE(ifvnod_old(nns_old), redir(nns_old))
2197 ifvnod_old(i)=ifvnod(i)
2203 tole=epsilon(zero)*0.5
2205 nnp_old=ipoly_f(2,i)
2212 x1=rpoly_f(4+3*(j-1)+1,i)
2213 y1=rpoly_f(4+3*(j-1)+2,i)
2214 z1=rpoly_f(4+3*(j-1)+3,i)
2215 lmax2=
max(lmax2,(x1-x0)**2+(y1-y0)**2+(z1-z0)**2)
2223 lmax2=
max(lmax2,(x1-x0)**2+(y1-y0)**2+(z1-z0)**2)
2227 IF (ipoly_f(1,i) == 2) nhol=ipoly_f(6+nnp_old+1,i)
2228 ALLOCATE(ipoly_old(nnp_old), rpoly_old(3*nnp_old),
2229 . adr_old(nhol+2), adr(nhol+2))
2231 ipoly_old(j)=ipoly_f(6+j,i)
2234 rpoly_old(j)=rpoly_f(4+j,i)
2241 IF (ipoly_old(1) > 0)
THEN
2243 IF (nns_old > nns_old_save)
THEN
2253 ifvnod(nns)=ifvnod_old(nns_old)
2255 ipoly_f(7,i)=ipoly_old(1)
2261 IF (ipoly_old(j) > 0)
THEN
2263 IF (nns_old > nns_old_save)
THEN
2271 x1=rpoly_old(3*(j-1)+1)
2272 y1=rpoly_old(3*(j-1)+2)
2273 z1=rpoly_old(3*(j-1)+3)
2274 dd=(x1-x0)**2+(y1-y0)**2+(z1-z0)**2
2275 IF (dd > tole2)
THEN
2277 IF (ipoly_old(j) > 0)
THEN
2279 ifvnod(nns)=ifvnod_old(nns_old)
2280 rpoly_f(4+3*(nnp-1)+1,i)=x1
2281 rpoly_f(4+3*(nnp-1)+2,i)=y1
2282 rpoly_f(4+3*(nnp-1)+3,i)=z1
2283 ipoly_f(6+nnp,i)=nns
2285 rpoly_f(4+3*(nnp-1)+1,i)=x1
2286 rpoly_f(4+3*(nnp-1)+2,i)=y1
2287 rpoly_f(4+3*(nnp-1)+3,i)=z1
2288 ipoly_f(6+nnp,i)=ipoly_old(j)
2293 ELSEIF (ipoly_old(j) > 0.AND.
2296 ifvnod(nns)=ifvnod_old(nns_old)
2297 rpoly_f(4+3*(nnp-1)+1,i)=x1
2298 rpoly_f(4+3*(nnp-1)+2,i)=y1
2299 rpoly_f(4+3*(nnp-1)+3,i)=z1
2300 ipoly_f(6+nnp,i)=nns
2302 IF (ipoly_old(j) > 0) redir(nns_old)=nns
2308 dd=(x1-x0)**2+(y1-y0)**2+(z1-z0)**2
2309 IF (dd <= tole2.AND.ipoly_old(1) > 0)
THEN
2313 ELSEIF (dd <= tole2.AND.ipoly_old(1) < 0)
THEN
2320 ipoly_f(6+nnp+1,i)=0
2325 adr_old(j+1)=ipoly_f(6+nnp_old+1+j,i)
2327 adr_old(nhol+2)=nnp_old
2329 x0=rpoly_f(4+3*adr(j)+1,i)
2330 y0=rpoly_f(4+3*adr(j)+2,i)
2331 z0=rpoly_f(4+3*adr(j)+3,i)
2332 IF (ipoly_old(adr_old(j)+1) > 0)
THEN
2334 IF (nns_old > nns_old_save)
THEN
2343 ipoly_f(6+adr(j)+1,i)=nns
2344 ifvnod(nns)=ifvnod_old(nns_old)
2346 ipoly_f(6+adr(j)+1,i)=ipoly_old(adr_old(j)+1)
2351 DO k=adr_old(j)+2,adr_old(j+1)
2353 IF (nns_old > nns_old_save)
THEN
2360 x1=rpoly_old(3*(k-1)+1)
2361 y1=rpoly_old(3*(k-1)+2)
2362 z1=rpoly_old(3*(k-1)+3)
2363 dd=(x1-x0)**2+(y1-y0)**2+(z1-z0)**2
2364 IF (dd > tole2)
THEN
2366 IF (ipoly_old(k) > 0)
THEN
2368 ifvnod(nns)=ifvnod_old(nns_old)
2369 rpoly_f(4+3*(nnp-1)+1,i)=x1
2370 rpoly_f(4+3*(nnp-1)+2,i)=y1
2371 rpoly_f(4+3*(nnp-1)+3,i)=z1
2372 ipoly_f(6+nnp,i)=nns
2374 rpoly_f(4+3*(nnp-1)+1,i)=x1
2375 rpoly_f(4+3*(nnp-1)+2,i)=y1
2376 rpoly_f(4+3*(nnp-1)+3,i)=z1
2377 ipoly_f(6+nnp,i)=ipoly_old(k)
2382 ELSEIF (ipoly_old(k) > 0.AND.
2383 . ipoly_old(k0) < 0)
THEN
2385 ifvnod(nns)=ifvnod_old(nns_old)
2386 rpoly_f(4+3*(nnp-1)+1,i)=x1
2387 rpoly_f(4+3*(nnp-1)+2,i)=y1
2388 rpoly_f(4+3*(nnp-1)+3,i)=z1
2389 ipoly_f(6+nnp,i)=nns
2391 IF (ipoly_old(k) > 0) redir(nns_old)=nns
2394 x1=rpoly_f(4+3*(adr(j)-1)+1,i)
2395 y1=rpoly_f(4+3*(adr(j)-1)+2,i)
2396 z1=rpoly_f(4+3*(adr(j)-1)+3,i)
2397 dd=(x1-x0)**2+(y1-y0)**2+(z1-z0)**2
2398 IF (dd <= tole2.AND.ipoly_old(adr_old(j)+1) > 0)
THEN
2402 ELSEIF (dd <= tole2.AND.
2403 . ipoly_old(adr_old(j)+1) < 0)
THEN
2405 rpoly_f(4+3*(adr(j)-1)+1,i)=x0
2406 rpoly_f(4+3*(adr(j)-1)+2,i)=y0
2407 rpoly_f(4+3*(adr(j)-1)+3,i)=z0
2408 ipoly_f(6+adr(j)+1,i)=nns
2412 ipoly_f(6+nnp+1,i)=nhol
2414 ipoly_f(6+nnp+1+j,i)=adr(j+1)
2415 rpoly_f(4+3*nnp+3*(j-1)+1,i)=
2416 . rpoly_f(4+3*nnp_old+3*(j-1)+1,i)
2417 rpoly_f(4+3*nnp+3*(j-1)+2,i)=
2418 . rpoly_f(4+3*nnp_old+3*(j-1)+2,i)
2419 rpoly_f(4+3*nnp+3*(j-1)+3,i)=
2420 . rpoly_f(4+3*nnp_old+3*(j-1)+3,i)
2425 IF (nnp < nnp_old)
THEN
2435 DO j=1,ipoly_f(2,i)-2
2438 x2=rpoly_f(4+3*(jj-1)+1,i)
2439 y2=rpoly_f(4+3*(jj-1)+2,i)
2440 z2=rpoly_f(4+3*(jj-1)+3,i)
2441 x3=rpoly_f(4+3*(jjj-1)+1,i)
2442 y3=rpoly_f(4+3*(jjj-1)+2,i)
2443 z3=rpoly_f(4+3*(jjj-1)+3,i)
2462 x2=rpoly_f(4+3*(jj-1)+1,i)
2463 y2=rpoly_f(4+3*(jj-1)+2,i)
2464 z2=rpoly_f(4+3*(jj-1)+3,i)
2465 x3=rpoly_f(4+3*(jjj-1)+1,i)
2466 y3=rpoly_f(4+3*(jjj-1)+2,i)
2467 z3=rpoly_f(4+3*(jjj-1)+3,i)
2482 x1=rpoly_f(4+3*adr(j+1)+1,i)
2483 y1=rpoly_f(4+3*adr(j+1)+2,i)
2484 z1=rpoly_f(4+3*adr(j+1)+3,i)
2485 DO k=adr(j+1)+1,adr(j+2)
2488 x2=rpoly_f(4+3*(kk-1)+1,i)
2489 y2=rpoly_f(4+3*(kk-1)+2,i)
2490 z2=rpoly_f(4+3*(kk-1)+3,i)
2491 x3=rpoly_f(4+3*(kkk-1)+1,i)
2492 y3=rpoly_f(4+3*(kkk-1)+2,i)
2493 z3=rpoly_f(4+3*(kkk-1)+3,i)
2506 rpoly_f(1,i)=half*abs(
area)
2509 DEALLOCATE(ipoly_old, rpoly_old, adr_old, adr)
2516 ifvnod2(1,i)=redir(i1)
2517 ifvnod2(2,i)=redir(i2)
2520 DEALLOCATE(ifvnod_old, redir)
2526 ALLOCATE(volu_old(npolh), rpoly_f_old(lenrmax,npoly),
2527 . ipoly_f_old(lenimax,npoly))
2533 ipoly_f_old(j,i)=ipoly_f(j,i)
2536 rpoly_f_old(j,i)=rpoly_f(j,i)
2539 400
IF (
ALLOCATED(polh_new))
DEALLOCATE(polh_new)
2540 IF (
ALLOCATED(imerged))
DEALLOCATE(imerged)
2541 ALLOCATE(polh_new(2+nphmax,npolh), imerged(npolh))
2549 ipoly_f(j,i)=ipoly_f_old(j,i)
2552 rpoly_f(j,i)=rpoly_f_old(j,i)
2559 DO j=1,2+polh_f(1,i)
2560 polh_new(j,i)=polh_f(j,i)
2565 IF (polh_f(2,i) < 0) cycle
2567 IF (volu(i) < -em10)
THEN
2580 IF (volu(i) > zero)
THEN
2581 vm =
min(vm ,volu(i))
2594 IF (volu(i) <= volumin)
THEN
2598 DO j=1,polh_new(1,i)
2603 IF (
area > areamax)
THEN
2604 IF (ipoly_f(5,jj) == i)
THEN
2608 ELSEIF (ipoly_f(6,jj) == i)
THEN
2618 jjmax=polh_new(2+jmax,i)
2619 rpoly_f(1,jjmax)=-one
2622 jjmax=polh_new(2+jmax,i)
2623 ity=ipoly_f(1,jjmax)
2624 IF (ity == 2) rpoly_f(1,jjmax)=-one
2629 IF (imerged(imax) == 1) imax=polh_new(2,imax)
2633 IF(ilvout >= 2)
THEN
2634 WRITE(iout,
'(A,I8,A6,G11.4,A1,A,I8,A6,G11.4,A1)')
2635 .
'** GLOBAL MERGE: MERGING FINITE VOLUME ',i,
' (VOL=',
2636 . volu(i),
')',
' WITH FINITE VOLUME ',imax,
2637 .
' (VOL=',volu(imax),
')'
2639 volu(imax)=volu(imax)+volu(i)
2642 DO j=1,polh_new(1,i)
2645 IF (np > nphmax) info=1
2648 polh_new(2+np,imax)=jj
2651 IF(ity == 1 .AND.iel > nel)ity=3
2653 IF (ipoly_f(5,jj) == i)
THEN
2655 ELSEIF (ipoly_f(6,jj) == i)
THEN
2660 nphmax=
max(nphmax,np)
2665 IF (info == 0) polh_new(1,imax)=np
2668 IF (info == 1)
GOTO 400
2673 IF (volu(i) <= zero) cycle
2674 IF (volu(i) < vmin)
THEN
2678 DO j=1,polh_new(1,i)
2680 IF (ipoly_f(1,jj) == 1.OR.rpoly_f(1,jj) < zero)
2681 IF (ipoly_f(5,jj) == ipoly_f(6,jj)) rpoly_f(1,jj)=-one
2684 DEALLOCATE(volu_old, rpoly_f_old, ipoly_f_old, imerged)
2693 IF (volu(i) > zero)
THEN
2702 IF (ity == 1.AND.rpoly_f(1,i) > zero)
THEN
2704 areap=areap+rpoly_f(1,i)
2705 ELSEIF ((ity == 2 .OR. ity == 3) .AND.rpoly_f(1,i) > zero)
THEN
2710 areael=areael+elarea(iel)
2716 ALLOCATE(
fvdata(ifv)%IFVNOD(3,nns+nns2),
2717 .
fvdata(ifv)%RFVNOD(2,nns+nns2))
2719 fvdata(ifv)%RFVNOD(1:2,1:nns+nns2) = 0
2721 fvdata(ifv)%IFVNOD(1,i)=0
2722 fvdata(ifv)%IFVNOD(2,i)=0
2723 fvdata(ifv)%IFVNOD(3,i)=0
2731 IF (ipoly_f(6+j,i) > 0)
THEN
2733 IF (nns > nns_old)
THEN
2741 IF (ifvnod(nns) < 0)
THEN
2743 fvdata(ifv)%IFVNOD(1,nns)=2
2744 fvdata(ifv)%IFVNOD(2,nns)=-ifvnod(nns)
2748 fvdata(ifv)%IFVNOD(1,nns)=1
2750 fvdata(ifv)%IFVNOD(2,nns)=iel
2751 xx=rpoly_f(4+3*(j-1)+1,i)
2752 yy=rpoly_f(4+3*(j-1)+2,i)
2753 zz=rpoly_f(4+3*(j-1)+3,i)
2758 IF (tagela(iel) > 0)
THEN
2762 ELSEIF (tagela(iel) <
THEN
2786 CALL coorloc(vpx, vpy, vpz, v1x, v1y,
2787 . v1z, v2x, v2y, v2z, ksi,
2790 fvdata(ifv)%RFVNOD(1,nns)=ksi
2791 fvdata(ifv)%RFVNOD(2,nns)=eta
2795 fvdata(ifv)%IFVNOD(1,nns_old+jj)=3
2796 fvdata(ifv)%IFVNOD(2,nns_old+jj)=ifvnod2(1,jj)
2797 fvdata(ifv)%IFVNOD(3,nns_old+jj)=ifvnod2(2,jj)
2798 fvdata(ifv)%RFVNOD(1,nns_old+jj)=rfvnod2(1,jj)
2804 IF (
fvdata(ifv)%IFVNOD(1,nns+i) == 0)
THEN
2805 fvdata(ifv)%IFVNOD(1,nns+i)=3
2806 fvdata(ifv)%IFVNOD(2,nns+i)=1
2807 fvdata(ifv)%IFVNOD(3,nns+i)=2
2808 fvdata(ifv)%RFVNOD(1,nns+i)=one
2812 IF (nns > nns_old)
THEN
2828 ALLOCATE(
fvdata(ifv)%IFVTRI(6,nntr),
2829 .
fvdata(ifv)%IFVPOLY(nntr),
2830 .
fvdata(ifv)%IFVTADR(npoly+1))
2835 ALLOCATE(redir_poly(npoly_old))
2842 IF (rpoly_f(1,i) <= zero)
THEN
2844 IF (ipoly_f(6+j,i) > 0) nns=nns+1
2852 IF (ipoly_f(1,i) == 2) nhol=ipoly_f(6+nnp+1,i)
2853 ALLOCATE(pnodes(2,nnp), pseg(2,nnp), pholes(2,nhol),ptri(3,nnp), redir(nnp))
2857 IF (ipoly_f(6+j,i) > 0)
THEN
2865 IF (ipoly_f(1,i) == 1)
THEN
2867 IF( ipsurf > nel)
THEN
2875 ELSEIF (ipoly_f(1,i) == 2 .OR. ipoly_f(1,i) == 3)
THEN
2892 nrm1=sqrt((x1-x0)**2+(y1-y0)**2+(z1-z0)**2)
2904 xx=rpoly_f(4+3*(j-1)+1,i)
2905 yy=rpoly_f(4+3*(j-1)+2,i)
2906 zz=rpoly_f(4+3*(j-1)+3,i)
2910 pnodes(1,j)=vx*vx1+vy*vy1+vz*vz1
2911 pnodes(2,j)=vx*vx2+vy*vy2+vz*vz2
2919 ALLOCATE(adr(nhol+1))
2921 adr(j)=ipoly_f(6+nnp+1+j,i)
2926 xx=rpoly_f(4+3*(j-1)+1,i)
2927 yy=rpoly_f(4+3*(j-1)+2,i)
2928 zz=rpoly_f(4+3*(j-1)+3,i)
2932 pnodes(1,j)=vx*vx1+vy*vy1+vz*vz1
2933 pnodes(2,j)=vx*vx2+vy*vy2+vz*vz2
2942 xx=rpoly_f(4+3*adr(j)+1,i)
2943 yy=rpoly_f(4+3*adr(j)+2,i)
2944 zz=rpoly_f(4+3*adr(j)+3,i)
2948 pnodes(1,adr(j)+1)=vx*vx1+vy*vy1+vz*vz1
2949 pnodes(2,adr(j)+1)=vx*vx2+vy*vy2+vz*vz2
2950 DO k=adr(j)+2,adr(j+1)
2951 xx=rpoly_f(4+3*(k-1)+1,i)
2952 yy=rpoly_f(4+3*(k-1)+2,i)
2953 zz=rpoly_f(4+3*(k-1)+3,i)
2957 pnodes(1,k)=vx*vx1+vy*vy1+vz*vz1
2958 pnodes(2,k)=vx*vx2+vy*vy2+vz*vz2
2964 pseg(1,nseg)=adr(j+1)
2965 pseg(2,nseg)=adr(j)+1
2968 yy=rpoly_f(4+3*nnp+3*(j-1)+2,i)
2969 zz=rpoly_f(4+3*nnp+3*(j-1)+3,i)
2973 pholes(1,j)=vx*vx1+vy*vy1+vz*vz1
2974 pholes(2,j)=vx*vx2+vy*vy2+vz*vz2
2980 CALL c_tricall(pnodes, pseg, pholes, ptri, nnp, nseg, nhol, nelp)
2982 fvdata(ifv)%IFVTADR(npoly)=nntr+1
2991 x1=rpoly_f(4+3*(n1-1)+1,i)
2992 y1=rpoly_f(4+3*(n1-1)+2,i)
2993 z1=rpoly_f(4+3*(n1-1)+3,i)
2994 x2=rpoly_f(4+3*(n2-1)+1,i)
2995 y2=rpoly_f(4+3*(n2-1)+2,i)
2996 z2=rpoly_f(4+3*(n2-1)+3,i)
2997 x3=rpoly_f(4+3*(n3-1)+1,i)
2998 y3=rpoly_f(4+3*(n3-1)+2,i)
2999 z3=rpoly_f(4+3*(n3-1)+3,i)
3009 ss=nrx*nx+nry*ny+nrz*nz
3012 fvdata(ifv)%IFVTRI(1,nntr)=redir(n1)
3013 fvdata(ifv)%IFVTRI(2,nntr)=redir(n2)
3014 fvdata(ifv)%IFVTRI(3,nntr)=redir(n3)
3016 fvdata(ifv)%IFVTRI(1,nntr)=redir(n1)
3017 fvdata(ifv)%IFVTRI(2,nntr)=redir(n3)
3018 fvdata(ifv)%IFVTRI(3,nntr)=redir(n2)
3020 fvdata(ifv)%IFVTRI(4,nntr)=ipsurf
3021 fvdata(ifv)%IFVTRI(5,nntr)=ic1
3022 fvdata(ifv)%IFVTRI(6,nntr)=ic2
3023 fvdata(ifv)%IFVPOLY(nntr)=nntr
3026 DEALLOCATE(pnodes, pseg, pholes, ptri, redir)
3028 fvdata(ifv)%IFVTADR(npoly+1)=nntr+1
3032 ALLOCATE(
fvdata(ifv)%IFVPOLH(2*npoly),
3033 .
fvdata(ifv)%IFVPADR(npolh+1),
3034 .
fvdata(ifv)%IDPOLH(npolh),
3035 .
fvdata(ifv)%IBPOLH(npolh))
3039 ALLOCATE(redir_polh(npolh_old))
3045 IF (volu(i) <= zero) cycle
3048 fvdata(ifv)%IFVPADR(npolh)=nnp+1
3049 DO j=1,polh_new(1,i)
3050 jj=redir_poly(polh_new(2+j,i))
3053 fvdata(ifv)%IFVPOLH(nnp)=redir_poly(polh_new(2+j,i))
3056 fvdata(ifv)%IDPOLH(npolh)=npolh
3061 IF(ibsa(-ii) == 1) ii=-ii
3063 fvdata(ifv)%IBPOLH(npolh)=ii
3065 fvdata(ifv)%IFVPADR(npolh+1)=nnp+1
3068 IF (
fvdata(ifv)%IFVTRI(4,i) <= 0)
THEN
3069 ic1=
fvdata(ifv)%IFVTRI(5,i)
3070 ic2=
fvdata(ifv)%IFVTRI(6,i)
3071 fvdata(ifv)%IFVTRI(5,i)=redir_polh(ic1)
3072 fvdata(ifv)%IFVTRI(6,i)=redir_polh(ic2)
3088 ALLOCATE(
fvdata(ifv)%MPOLH(npolh),
fvdata(ifv)%QPOLH(3,npolh),
3091 .
fvdata(ifv)%TPOLH(npolh),
3092 .
fvdata(ifv)%CPAPOLH(npolh),
fvdata(ifv)%CPBPOLH(npolh),
3093 .
fvdata(ifv)%CPCPOLH(npolh),
fvdata(ifv)%RMWPOLH(npolh),
3094 .
fvdata(ifv)%VPOLH_INI(npolh),
fvdata(ifv)%DTPOLH(npolh))
3095 ALLOCATE(
fvdata(ifv)%CPDPOLH(npolh),
fvdata(ifv)%CPEPOLH(npolh),
3096 .
fvdata(ifv)%CPFPOLH(npolh))
3113 cpi=cpai+half*cpbi*ti+third*cpci*ti2
3114 IF(ivolu(2) == 8)
THEN
3115 cpi=cpi+fourth*cpdi*ti2*ti-cpei/ti2+one_fifth*cpfi*ti2*ti2
3123 fvdata(ifv)%MPOLH(ii)=rhoi*volu(i)
3124 fvdata(ifv)%QPOLH(1,ii)=zero
3125 fvdata(ifv)%QPOLH(2,ii)=zero
3126 fvdata(ifv)%QPOLH(3,ii)=zero
3128 fvdata(ifv)%PPOLH(ii)=pini
3129 fvdata(ifv)%RPOLH(ii)=rhoi
3130 fvdata(ifv)%GPOLH(ii)=gamai
3131 fvdata(ifv)%CPAPOLH(ii)=cpai
3132 fvdata(ifv)%CPBPOLH(ii)=cpbi
3133 fvdata(ifv)%CPCPOLH(ii)=cpci
3135 fvdata(ifv)%CPDPOLH(ii)=cpdi
3136 fvdata(ifv)%CPEPOLH(ii)=cpei
3137 fvdata(ifv)%CPFPOLH(ii)=cpfi
3138 fvdata(ifv)%RMWPOLH(ii)=rmwi
3139 fvdata(ifv)%DTPOLH(ii)=ep30
3140 fvdata(ifv)%VPOLH_INI(ii)=volu(i)
3144 imin=redir_polh(imin)
3145 DEALLOCATE(ipoly_f, rpoly_f, polh_f, volu, redir_poly, redir_polh,
3146 . polh_new, ifvnod, ifvnod2, rfvnod2, xns, xns2)
3153 IF (
fvdata(ifv)%IFVTRI(4,i) > 0)
THEN
3166 WRITE(iout,1000) ivolu(1),nspoly,nstr,ncpoly,nctr,npolhf
3167 WRITE(iout,1010) vmin,imin,volumin
3168 WRITE(iout,1020) volph,areap,
tmass
3174 fvdata(ifv)%NPOLH_ANIM=npolh
3175 lenp=
fvdata(ifv)%IFVTADR(npoly+1)
3176 lenh=
fvdata(ifv)%IFVPADR(npolh+1)
3177 ALLOCATE(
fvdata(ifv)%IFVPOLY_ANIM(lenp),
3178 .
fvdata(ifv)%IFVTADR_ANIM(npoly+1),
3179 .
fvdata(ifv)%IFVPOLH_ANIM(lenh),
3180 .
fvdata(ifv)%IFVPADR_ANIM(npolh+1),
3181 .
fvdata(ifv)%IFVTRI_ANIM(6,nntr),
3182 .
fvdata(ifv)%REDIR_ANIM(nns+nns2),
3183 .
fvdata(ifv)%NOD_ANIM(3,nns+nns2),
3184 . redir(nns+nns2), itagt(nntr))
3200 tole=em05*fac_length
3203 ALLOCATE(pnodes(3,nns+nns2))
3205 IF (
fvdata(ifv)%IFVNOD(1,i) == 1)
THEN
3206 iel=
fvdata(ifv)%IFVNOD(2,i)
3207 ksi=
fvdata(ifv)%RFVNOD(1,i)
3208 eta=
fvdata(ifv)%RFVNOD(2,i)
3212 IF (tagela(iel) > 0)
THEN
3216 ELSEIF (tagela(iel) < 0)
THEN
3230 pnodes(1,i)=(one-ksi-eta)*x1+ksi*x2+eta*x3
3231 pnodes(2,i)=(one-ksi-eta)*y1+ksi*y2
3232 pnodes(3,i)=(one-ksi-eta)*z1+ksi*z2+eta*z3
3233 ELSEIF (
fvdata(ifv)%IFVNOD(1,i) == 2)
THEN
3234 ii=
fvdata(ifv)%IFVNOD(2,i)
3243 i2=
fvdata(ifv)%IFVNOD(3,ii)
3245 pnodes(1,ii)=
alpha*pnodes(1,i1)+(one-
alpha)*pnodes
3246 pnodes(2,ii)=
alpha*pnodes
3247 pnodes(3,ii)=
alpha*pnodes(3,i1)+(one-
alpha)*pnodes(3,i2)
3252 IF(ilvout >=3 )
THEN
3253 ALLOCATE(areatr(nntr))
3255 n1=
fvdata(ifv)%IFVTRI(1,i)
3256 n2=
fvdata(ifv)%IFVTRI(2,i)
3257 n3=
fvdata(ifv)%IFVTRI(3,i)
3267 CALL fvnormal(pnodes,n1,n2,n3,0,nrx,nry,nrz)
3268 area2=sqrt(nrx**2+nry**2+nrz**2)
3269 areatr(i)=half*area2
3273 WRITE(iout,
'(/A,10X,3A)')
' FINITE VOLUME',
' BRICK VOLUME ',
3274 .
' POLYGONE TRIANGLE AREA'
3277 n1=
fvdata(ifv)%IDPOLH(i)
3278 n2=
fvdata(ifv)%IBPOLH(i)
3283 volph=
fvdata(ifv)%VPOLH_INI(i)
3289 jj=
fvdata(ifv)%IFVPOLH(j)
3290 DO k=
fvdata(ifv)%IFVTADR(jj),
fvdata(ifv)%IFVTADR(jj+1)-1
3292 kk=
fvdata(ifv)%IFVPOLY(k)
3294 iel=
fvdata(ifv)%IFVTRI(4,kk)
3295 ic1=
fvdata(ifv)%IFVTRI(5,kk)
3296 ic2=
fvdata(ifv)%IFVTRI(6,kk)
3298 WRITE(iout,
'(3I10,2X,F10.2,4X,I5,5X,I10,5X,G14.6,3I10)')
3299 . n1,n2,n3,volph,jjj,kk,
area,iel,ic1,ic2
3301 WRITE(iout,
'(46X,I5,5X,I10,5X,G14.6,3I10)')
3302 . jjj,kk,
area,iel,ic1,ic2
3312 IF (ilvout >=1)
WRITE(istdo,
'(8X,A)')
3313 .
'MERGING COINCIDENT NODES FOR ANIM'
3315 ALLOCATE(radius(nns + nns2), idx(nns + nns2))
3316 DO i = 1, nns + nns2
3320 radius(i) = xx*xx + yy*yy + zz*zz
3324 CALL quicksort(radius, idx, 1, nns + nns2)
3326 DO WHILE(i < nns+ nns2)
3333 nns_anim = nns_anim + 1
3334 redir(iad1) = nns_anim
3335 fvdata(ifv)%REDIR_ANIM(nns_anim)=iad1
3336 fvdata(ifv)%NOD_ANIM(1,nns_anim)=xx
3337 fvdata(ifv)%NOD_ANIM(2,nns_anim)=yy
3338 fvdata(ifv)%NOD_ANIM(3,nns_anim)=zz
3340 DO WHILE(j <= nns + nns2)
3341 IF (abs(r1 - radius(j)) <= tole2)
THEN
3352 xn(1) = pnodes(1,iad2)
3353 xn(2) = pnodes(2,iad2)
3354 xn(3) = pnodes(3,iad2)
3355 dd2=(xx-xn(1))**2+(yy-xn(2))**2+(zz-xn(3))**2
3356 IF (dd2 <= tole2)
THEN
3358 redir(iad2) = redir(iad1)
3371 DEALLOCATE(radius, idx)
3373 fvdata(ifv)%NNS_ANIM=nns_anim
3377 n1=
fvdata(ifv)%IFVTRI(1,i)
3378 n2=
fvdata(ifv)%IFVTRI(2,i)
3379 n3=
fvdata(ifv)%IFVTRI(3,i)
3380 fvdata(ifv)%IFVTRI_ANIM(1,i)=redir(n1)
3381 fvdata(ifv)%IFVTRI_ANIM(2,i)=redir(n2)
3382 fvdata(ifv)%IFVTRI_ANIM(3,i)=redir(n3)
3383 fvdata(ifv)%IFVTRI_ANIM(4,i)=
3384 .
fvdata(ifv)%IFVTRI(4,i)
3385 fvdata(ifv)%IFVTRI_ANIM(5,i)=
3386 .
fvdata(ifv)%IFVTRI(5,i)
3387 fvdata(ifv)%IFVTRI_ANIM(6,i)=
3388 .
fvdata(ifv)%IFVTRI(6,i)
3392 DEALLOCATE(redir, itagt)
33971000
FORMAT(/5x,
'VOLUME NUMBER ',i10,
3398 . /5x,
'NUMBER OF SURFACE POLYGONS. . . . . . .=',i10,
3399 . /5x,
'NUMBER OF SURFACE TRIANGLES . . . . . .=',i10,
3400 . /5x,
'NUMBER OF COMMUNICATION POLYGONS. . . .=',i10,
3401 . /5x,
'NUMBER OF COMMUNICATION TRIANGLES . . .=',i10,
3402 . /5x,
'NUMBER OF FINITE VOLUMES. . . . . . . .=',i10)
34031010
FORMAT( 5x,
'MIN FINITE VOLUME VOLUME. . . . . . . .=',1pg20.13,
3404 . 5x,
'(FINITE VOLUME ID ',i10,
')',
3405 . /5x,
'INITIAL MERGING VOLUME. . . . . . . . .=',1pg20.13)
34061020
FORMAT( 5x,
'SUM VOLUME OF FINITE VOLUMES. . . . . .=',1pg20.13,
3407 . /5x,
'SUM AREA SURFACE TRIANGLES. . . . . . .=',1pg20.13,
3408 . /5x,
'SUM MASS OF FINITE VOLUMES. . . . . . .=',1pg20.13)