38 1 IBUF ,IBUFA ,ELEMA ,TAGELA ,
40 3 IFVNOD ,RFVNOD ,IFVTRI ,
41 4 IFVPOLY,IFVTADR,IFVPOLH,
42 5 IFVPADR,IBPOLH ,DLH )
46#include "implicit_f.inc"
54 INTEGER NNS, NNTR, NPOLH
55 INTEGER IBUF(*), IBUFA(*), ELEMA(3,*), TAGELA(*),
56 . IVOLU(*), IBPOLH(*), IFVNOD(3,*),IFVTRI(6,*),
57 . (*),IFVTADR(*),IFVPOLH(*), IFVPADR(*)
58 my_real X(3,*), RFVNOD(2,*), DLH
62 INTEGER I, J, K, I1, I2, IEL, JJ, KK,
63 . n1, n2, n3, nn1, nn2, nn3,
65 INTEGER IDBR1, IDBR2, IDBR3
67 . x1, y1, z1, x2, y2, z2, x3, y3, z3,
68 . nx, ny, nz, area2, ksi, eta,
area, fac,
69 . areapoly, areapolymax,
70 . pnod(3,nns), pvolu(npolh),
71 . parea(nntr), pnorm(3,nntr)
73 . x12, y12, z12, x23, y23, z23, x31, y31, z31,
74 . l12, l23, l31, dl0, dl1, dl2, dll, dlbr1, dlbr2, dlbr3
105 IF (ifvnod(1,i)==1)
THEN
114 IF (tagela(iel)>0)
THEN
127 ELSEIF (tagela(iel)<0)
THEN
141 pnod(1,i)=(one-ksi-eta)*x1+ksi*x2+eta*x3
142 pnod(2,i)=(one-ksi-eta)*y1+ksi*y2+eta*y3
143 pnod(3,i)=(one-ksi-eta)*z1+ksi*z2+eta*z3
145 ELSEIF (ifvnod(1,i)==2)
THEN
154 IF (ifvnod(1,i)==3)
THEN
158 pnod(1,i)=fac*pnod(1,i1)+(one-fac)*pnod(1,i2)
159 pnod(2,i)=fac*pnod(2,i1)+(one-fac)*pnod(2,i2)
160 pnod(3,i)=fac*pnod(3,i1)+(one-fac)*pnod(3,i2)
170 CALL fvnormal(pnod,n1,n2,n3,0,nx,ny,nz)
171 area2=sqrt(nx*nx+ny*ny+nz*nz)
197 DO j=ifvpadr(i),ifvpadr(i+1)-1
201 DO k=ifvtadr(jj), ifvtadr(jj+1)-1
204 areapoly=areapoly+
area
211 IF (ifvtri(5,kk)==i)
THEN
215 ELSEIF (ifvtri(6,kk)==i)
THEN
225 pvolu(i)=pvolu(i)+third*
area*(x1*nx+y1*ny+z1*nz)
244 l12=x12**2+y12**2+z12**2
245 l23=x23**2+y23**2+z23**2
246 l31=x31**2+y31**2+z31**2
247 IF(ibpolh(i)==0)
THEN
248 dl2=
min(dl2,l12,l23,l31)
257 areapolymax=
max(areapolymax,areapoly)
260 IF(ibpolh(i)==0)
THEN
261 dl1=
min(dl1,pvolu(i))
264 IF(pvolu(i) < dlbr1)
THEN
268 dll=pvolu(i)/areapolymax
275 WRITE(iout,
'(A,E12.4,3I10)')
'NEGATIVE VOLUME',
276 . pvolu(i),i,ibpolh(i),nadbr
287 IF(dlbr1 > zero)
THEN
293 IF(dl0==zero) dlh=dlbr2
297 WRITE(iout,1000) ivolu(1),npolh,npolh-nadbr,dl0,dl1,dl2
299 WRITE(iout,1001) nadbr,
300 . dlbr1,idbr1,iabs(ibpolh(idbr1)),
301 . dlbr2,idbr2,iabs(ibpolh(idbr2)),
302 . dlbr3,idbr3,iabs(ibpolh(idbr3))
306 . //
' FVMBAG: FINITE VOLUME MINIMUM LENGTH '/
307 .
' -------------------------------------'/
308 . /5x,
'VOLUME NUMBER ',i10,
309 . /5x,
'TOTAL NUMBER OF FINITE VOLUMES.. . . . . . .=',i10,
310 . /5x,
'NUMBER OF POLYHEDRA . . . . .. . . . . . . .=',i10,
311 . /5x,
' MINIMUM LENGTH USED FOR TIME STEP. . . .=',1pg20.13,
312 . /5x,
' MINIMUM LENGTH BASED ON VOLUME . . . . .='
313 . /5x,
' MINIMUM LENGTH BASED ON NODAL DISTANCE .=',1pg20.13)
315 . 5x,
'NUMBER OF ADDITIONAL BRICKS. . . . . . . . .=',i10,
316 . /5x,
' MINIMUM LENGTH BASED ON VOLUME . . . . .=',1pg20.13,
' (FINITE VOLUME ID '')',
' (BRICK ID ',i10,
')',
317 . /5x,
' MINIMUM LENGTH BASED ON NODAL DISTANCE .=',1pg20.13,
' (FINITE VOLUME ID ',i10,
')',
' (BRICK ID ',i10,
')',
318 . /5x,
' MINIMUM LENGTH BASED ON VOLUME/AREA. . .=',1pg20.13,
' (FINITE VOLUME ID ',i10,
')',
' (BRICK ID ',i10,
')',/)
subroutine fvlength(nns, nntr, npolh, ibuf, ibufa, elema, tagela, x, ivolu, ifvnod, rfvnod, ifvtri, ifvpoly, ifvtadr, ifvpolh, ifvpadr, ibpolh, dlh)