250 SUBROUTINE fvupd1(NEL , IBUF , ELEM , X , NPOLH ,
251 . MPOLH , QPOLH , EPOLH , V ,
252 . PPOLH , RPOLH , GPOLH ,
253 . IFVNOD , RFVNOD , IFVTRI ,
254 . IFVPOLY , IFVTADR , IFVPOLH ,
255 . IFVPADR , NNS , NNTR , RVOLU, NPOLY ,
256 . ID , CPAPOLH , CPBPOLH ,
257 . CPCPOLH , RMWPOLH , VPOLH_INI,
258 . IVMIN , IDPOLH , IBUFA ,
259 . ELEMA , TAGELA , IBPOLH ,
260 . REDIR_ANIM, NOD_ANIM, NNS_ANIM ,
261 . NPOLH_ANIM, DTPOLH , ILVOUT , NNT , NNA ,
262 . IFV , XXXA , TPOLH,
263 . CPDPOLH , CPEPOLH , CPFPOLH ,
264 . ITYP , NFVMERGE, VVVA ,
265 . NCONA , IVOLU ,FVBAG_DTMIN, NUMNOD)
274#include "implicit_f.inc"
278#include "scr18_c.inc"
279#include "com01_c.inc"
280#include "com08_c.inc"
281#include "units_c.inc"
283#include "mvsiz_p.inc"
287 INTEGER,
INTENT(IN), NNTR, NNS,NNS_ANIM, NPOLH_ANIM,ILVOUT, NNT, NNA, IFV, ,, ID, IVMIN, NEL
288 INTEGER,
INTENT(INOUT) ::NPOLH
289 INTEGER IBUF(*), ELEM(3,*), IFVNOD(3,*), IFVTRI(6,NNTR),
290 . IFVPOLY(*), IFVTADR(*), IFVPOLH(*), IFVPADR(*),
291 . IDPOLH(*), IBUFA(*), ELEMA(3,*),
292 . TAGELA(*), IBPOLH(*), REDIR_ANIM(*),
293 . NFVMERGE(4), NCONA(16,*),
296 . X(3,NUMNOD), MPOLH(NPOLH), QPOLH(3,NPOLH), EPOLH(NPOLH), PPOLH(NPOLH),
297 . RPOLH(NPOLH), GPOLH(NPOLH), RFVNOD(2,NNS), RVOLU(*),
298 . CPAPOLH(NPOLH), CPBPOLH(NPOLH), CPCPOLH(NPOLH), RMWPOLH(NPOLH),
299 . VPOLH_INI(NPOLH), NOD_ANIM(3,NNS_ANIM), DTPOLH(NPOLH), XXXA(3,*),
300 . TPOLH(NPOLH), CPDPOLH(NPOLH), CPEPOLH(NPOLH), CPFPOLH(NPOLH),
301 . V(3,NUMNOD) , VVVA(3,*), FVBAG_DTMIN
305 INTEGER I, IEL, N1, N2, N3, J, JJ, K, KK, NPA,
306 . IMAX, IP1, IP2, ITAG(), (NPOLY),
307 . COUNT(NPOLH), II, CC, LEN, NPOLH_OLD, NNP,
308 . IFVPADR_OLD(NPOLH+1), REDIR(NPOLH), ,
309 . POLHAPP(2,NPOLY), CMAX, ITYPM,
310 . idp1, idp2, idpolh_old(npolh), ibpolh_old(npolh), i1, i2,
311 . nnsa,kkk,ip3,itypl,dtmergv12
313 . ksi, eta, x1, y1, z1, x2, y2, z2, x3, y3, z3,
314 . pnod(3,nns), x12, y12, z12, x13, y13, z13, nrx, nry,
315 . nrz, area2, parea(nntr), pnorm(3,nntr), pvolu(npolh),
316 .
area, nx, ny, nz, vm, areamax, mpolh_old(npolh),
317 . qpolh_old(3,npolh), epolh_old(npolh), pvolu_old(npolh),
318 . volumin, areapoly(npoly), cpapolh_old(npolh),
319 . cpbpolh_old(npolh), cpcpolh_old(npolh),
320 . rmwpolh_old(npolh), gpolh_old(npolh),
321 . vpolh_ini_old(npolh), vvmax(npolh), vol1,
322 . vol2, dtmin, fac, dtpolh_old(npolh),
323 . tpolh_old(npolh), cpdpolh_old(npolh), cpepolh_old(npolh),
324 . cpfpolh_old(npolh), efac, cpa, cpb, cpc, cpd, cpe, cpf,
325 . rmw, temp0, temp, pvoltmp,
328 INTEGER,
ALLOCATABLE :: MERGE(:,:), IFVPOLH_OLD(:)
333 i1=
fvspmd(ifv)%IBUF_L(1,i)
334 i2=
fvspmd(ifv)%IBUF_L(2,i)
335 fvspmd(ifv)%XXX(1,i1)=x(1,i2)
336 fvspmd(ifv)%XXX(2,i1)=x(2,i2)
337 fvspmd(ifv)%XXX(3,i1)=x(3,i2)
340 IF (
kmesh(ifv) >= 2)
THEN
341 DO i = 1,
fvspmd(ifv)%NNA_L
342 i1=
fvspmd(ifv)%IBUFA_L(1,i)
343 i2=
fvspmd(ifv)%IBUFA_L(2,i)
344 IF(ncona(2,i) == 1)
THEN
345 fvspmd(ifv)%WAX(1,i1)=x(1,i2)
346 fvspmd(ifv)%WAX(2,i1)=x(2,i2)
347 fvspmd(ifv)%WAX(3,i1)=x(3,i2)
349 fvspmd(ifv)%WAX(1,i1)=xxxa(1,i1)
350 fvspmd(ifv)%WAX(2,i1)=xxxa(2,i1)
351 fvspmd(ifv)%WAX(3,i1)=xxxa(3,i1)
356 i1=
fvspmd(ifv)%IBUFA_L(1,i)
357 i2=
fvspmd(ifv)%IBUFA_L(2,i)
358 fvspmd(ifv)%WAX(1,i1)=x(1,i2)
359 fvspmd(ifv)%WAX(2,i1)=x(2,i2)
360 fvspmd(ifv)%WAX(3,i1)=x(3,i2)
365 xxxa(1,i)=
fvspmd(ifv)%WAX(1,i)
366 xxxa(2,i)=
fvspmd(ifv)%WAX(2,i)
367 xxxa(3,i)=
fvspmd(ifv)%WAX(3,i)
371 i1=
fvspmd(ifv)%IBUF_L(1,i)
372 i2=
fvspmd(ifv)%IBUF_L(2,i)
373 fvspmd(ifv)%VVV(1,i1)=v(1,i2)
374 fvspmd(ifv)%VVV(2,i1)=v(2,i2)
375 fvspmd(ifv)%VVV(3,i1)=v(3,i2)
378 IF (
kmesh(ifv) >= 2)
THEN
379 DO i = 1,
fvspmd(ifv)%NNA_L
380 i1=
fvspmd(ifv)%IBUFA_L(1,i)
381 i2=
fvspmd(ifv)%IBUFA_L(2,i)
382 IF(ncona(2,i) == 1)
THEN
383 fvspmd(ifv)%WAV(1,i1)=v(1,i2)
384 fvspmd(ifv)%WAV(2,i1)=v(2,i2)
385 fvspmd(ifv)%WAV(3,i1)=v(3,i2)
387 fvspmd(ifv)%WAV(1,i1)=vvva(1,i1)
388 fvspmd(ifv)%WAV(2,i1)=vvva(2,i1)
389 fvspmd(ifv)%WAV(3,i1)=vvva(3,i1)
394 i1=
fvspmd(ifv)%IBUFA_L(1,i)
395 i2=
fvspmd(ifv)%IBUFA_L(2,i)
396 fvspmd(ifv)%WAV(1,i1)=v(1,i2)
397 fvspmd(ifv)%WAV(2,i1)=v(2,i2)
398 fvspmd(ifv)%WAV(3,i1)=v(3,i2)
403 IF(ncona(2,i) == 1)
THEN
404 vvva(1,i)=
fvspmd(ifv)%WAV(1,i)
405 vvva(2,i)=
fvspmd(ifv)%WAV(2,i)
426 IF (
kmesh(ifv) >= 2)
THEN
428 IF (ncona(2, i) /= 0)
THEN
429 xxxa(1,i)=
fvspmd(ifv)%WAX(1,i)
430 xxxa(2,i)=
fvspmd(ifv)%WAX(2,i)
431 xxxa(3,i)=
fvspmd(ifv)%WAX(3,i)
437 xxxa(1,i)=
fvspmd(ifv)%WAX(1,i)
438 xxxa(2,i)=
fvspmd(ifv)%WAX(2,i)
439 xxxa(3,i)=
fvspmd(ifv)%WAX(3,i)
447 IF(ncona(2,i) == 1)
THEN
448 vvva(1,i)=
fvspmd(ifv)%WAV(1,i)
449 vvva(2,i)=
fvspmd(ifv)%WAV(2,i)
450 vvva(3,i)=
fvspmd(ifv)%WAV(3,i)
454 IF (ispmd/=
fvspmd(ifv)%PMAIN-1)
GOTO 300
472 IF(ncona(2,i) == 0)
THEN
494 IF(ncona(2,i) == 0)
THEN
495 fvspmd(ifv)%WAV(1,i)=rvolu(67)
496 fvspmd(ifv)%WAV(2,i)=rvolu(68)
497 fvspmd(ifv)%WAV(3,i)=rvolu(69)
506 IF(ncona(2,i) == 0)
THEN
507 vvva(1,i)=
fvspmd(ifv)%WAV(1,i)
508 vvva(2,i)=
fvspmd(ifv)%WAV(2,i)
509 vvva(3,i)=
fvspmd(ifv)%WAV(3,i)
510 xxxa(1,i)=xxxa(1,i)+dti*
fvspmd(ifv)%WAV(1,i)
511 xxxa(2,i)=xxxa(2,i)+dti*
fvspmd(ifv)%WAV(2,i)
512 xxxa(3,i)=xxxa(3,i)+dti*
fvspmd(ifv)%WAV(3,i)
521 IF (ifvnod(1,i)==1)
THEN
529 IF (tagela(iel)>0)
THEN
539 ELSEIF (tagela(iel)<0)
THEN
550 pnod(1,i)=(one-ksi-eta)*x1+ksi*x2+eta*x3
551 pnod(2,i)=(one-ksi-eta)*y1+ksi*y2+eta*y3
552 pnod(3,i)=(one-ksi-eta)*z1+ksi*z2+eta*z3
553 ELSEIF (ifvnod(1,i)==2)
THEN
564 IF (ifvnod(1,i)==3)
THEN
568 pnod(1,i)=fac*pnod(1,i1)+(one-fac)*pnod(1,i2)
569 pnod(2,i)=fac*pnod(2,i1)+(one-fac)*pnod(2,i2)
570 pnod(3,i)=fac*pnod(3,i1)+(one-fac)*pnod(3,i2)
575 IF (npolh_anim>0)
THEN
579 nod_anim(1,i)=pnod(1,ii)
580 nod_anim(2,i)=pnod(2,ii)
581 nod_anim(3,i)=pnod(3,ii)
610 area2=sqrt(nrx**2+nry**2+nrz**2)
630 DO j=ifvpadr(i),ifvpadr(i+1)-1
633 DO k=ifvtadr(jj), ifvtadr(jj+1)-1
654 IF (ip1==i.AND.ip2==i)
THEN
664 pvoltmp=pvoltmp+third*
area*(x1*nx+y1*ny+z1*nz)
672 IF(ivolu(39) == 0)
RETURN
678 IF(dtmergv12==2) dtmergv12=1
683 IF (pvolu(i)>zero)
THEN
698 ELSEIF (ivmin == -1)
THEN
703 volumin=rvolu(33)*rvolu(31)
711 DO j=ifvtadr(i),ifvtadr(i+1)-1
718 areapoly(i)=areapoly(i)+parea(jj)
725 IF (npolh==1)
GOTO 300
737 DO j=ifvpadr(i),ifvpadr(i+1)-1
739 DO k=ifvtadr(jj), ifvtadr(jj+1)-1
743 IF (ifvtri(5,kk)==i)
THEN
745 ELSEIF (ifvtri(6,kk)==i)
THEN
748 vvmax(i)=
max(vvmax(i),pvolu(ii))
752 vvmax(i)=rvolu(34)*vvmax(i)
757 pvolu_old(1:npolh)=pvolu(1:npolh)
763 IF (itag(i)/=0) cycle
764 IF (pvolu(i)<=volumin.OR.pvolu(i)<=vvmax(i).OR.
765 . mpolh(i)<=zero.OR.epolh(i)<=zero.OR.
766 . (dtmergv12 == 0 .AND. dtpolh(i) <= dtmin .AND.
767 . pvolu(i) <= ten*volumin) .OR.
768 . (dtmergv12 == 1 .AND. dtpolh(i)<=dtmin) )
THEN
771 IF (pvolu(i)>volumin) itypm=2
772 IF (mpolh(i)<=zero.OR.epolh(i)<=zero) itypm=3
773 IF (dtpolh(i)<=dtmin) itypm=4
779 DO j=ifvpadr(i),ifvpadr(i+1)-1
784 IF (
area>areamax)
THEN
797 IF (itag(imax)/=0)
THEN
802 DO j=ifvpadr(imax),ifvpadr(imax+1)-1
807 IF (ifvtri(4,kk)==0.AND.(ifvtri(5,kk)==i.OR.
816 pvolu(imax)=pvolu(imax)+pvolu(i)
818 IF(itypm == 1) nfvmerge(1)=nfvmerge(1)+1
819 IF(itypm == 2) nfvmerge(2)=nfvmerge(2)+1
820 IF(itypm == 3) nfvmerge(3)=nfvmerge(3)+1
821 IF(itypm == 4) nfvmerge(4)=nfvmerge(4)+1
823 IF (ilvout >= 2)
THEN
828 .
'(A46,I8,A6,G11.4,A1,A20,I8,A7,G11.4,A1,A12,I10)')
829 .
' ** GLOBAL MERGE: MERGING FINITE VOLUME ',idp1,
831 .
' WITH FINITE VOLUME ',idp2,
' (VOL=',vol2,
')',
' MONVOL ID ',id
834 .
'(A46,I8,A6,G11.4,A1,A20,I8,A7,G11.4,A1,A12,I10)')
835 .
' ** NEIGHBORHOOD MERGE: MERGING FINITE VOLUME ',idp1,
837 .
' WITH FINITE VOLUME ',idp2,
' (VOL=',vol2,
')',
' MONVOL ID ',id
838 ELSEIF (itypm==3)
THEN
840 .
'(A46,I8,A6,G11.4,A1,A20,I8,A7,G11.4,A1,A12,I10)')
841 .
' ** STABILITY MERGE: MERGING FINITE VOLUME ',idp1,
843 .
' WITH FINITE VOLUME ',idp2,
' (VOL=',vol2,
')',
' MONVOL ID ',id
844 ELSEIF (itypm==4)
THEN
846 .
'(A46,I8,A6,G11.4,A1,A20,I8,A7,G11.4,A1,A12,I10)')
847 .
' ** TIME STEP MERGE: MERGING FINITE VOLUME ',idp1,
849 .
' WITH FINITE VOLUME ',idp2,
' (VOL=',vol2,
')',
' MONVOL ID ',id
857 DO j=ifvpadr(i),ifvpadr(i+1)-1
861 IF (ifvtri(4,kk)==0.AND.ifvtri(5,kk)==ifvtri(6,kk))
THEN
871 IF (ii>0) count(ii)=count(ii)+1
876 cmax=
max(cmax,count(i))
878 IF (cmax==1)
GOTO 300
880 ALLOCATE(merge(cmax+1,npolh))
896 len=ifvpadr(npolh+1)-1
897 ALLOCATE(ifvpolh_old(len))
901 DO i=1,ifvpadr(npolh+1)-1
902 ifvpolh_old(i)=ifvpolh(i)
907 ifvpadr_old(i)=ifvpadr(i)
912 mpolh_old(i)=mpolh(i)
913 qpolh_old(1,i)=qpolh(1,i)
914 qpolh_old(2,i)=qpolh(2,i)
915 qpolh_old(3,i)=qpolh(3,i)
916 epolh_old(i)=epolh(i)
917 gpolh_old(i)=gpolh(i)
918 cpapolh_old(i)=cpapolh(i)
919 cpbpolh_old(i)=cpbpolh(i)
920 cpcpolh_old(i)=cpcpolh(i)
921 rmwpolh_old(i)=rmwpolh(i)
922 vpolh_ini_old(i)=vpolh_ini(i)
923 idpolh_old(i)=idpolh(i)
924 ibpolh_old(i)=ibpolh(i)
925 tpolh_old(i)=tpolh(i)
926 cpdpolh_old(i)=cpdpolh(i)
927 cpepolh_old(i)=cpepolh(i)
929 dtpolh_old(i)=dtpolh(i)
961 DO k=ifvpadr_old(jj),ifvpadr_old(jj+1)-1
963 IF (itagp(kk)==1) cycle
968 mpolh(npolh)=mpolh_old(jj)
969 qpolh(1,npolh)=qpolh_old(1,jj)
970 qpolh(2,npolh)=qpolh_old(2,jj)
971 qpolh(3,npolh)=qpolh_old(3,jj)
972 epolh(npolh)=epolh_old(jj)
974 IF (mpolh(npolh)<=zero.OR.epolh(npolh)<=zero) iloop=1
976 pvolu(npolh)=pvolu_old(jj)
977 gpolh(npolh)=gpolh_old(jj)
978 cpapolh(npolh)=cpapolh_old(jj)
979 cpbpolh(npolh)=cpbpolh_old(jj)
980 cpcpolh(npolh)=cpcpolh_old(jj)
981 rmwpolh(npolh)=rmwpolh_old(jj)
982 cpdpolh(npolh)=cpdpolh_old(jj)
983 cpepolh(npolh)=cpepolh_old(jj)
984 cpfpolh(npolh)=cpfpolh_old(jj)
985 vpolh_ini(npolh)=vpolh_ini_old(i)
986 idpolh(npolh)=idpolh_old(i)
987 ibpolh(npolh)=ibpolh_old(i)
988 dtpolh(npolh)=dtpolh_old(i)
994 DO k=ifvpadr_old(jj),ifvpadr_old(jj+1)-1
996 IF (itagp(kk)==1) cycle
1001 mpolh(npolh)=mpolh(npolh)+mpolh_old(jj)
1002 qpolh(1,npolh)=qpolh(1,npolh)+qpolh_old(1,jj)
1003 qpolh(2,npolh)=qpolh(2,npolh
1005 epolh(npolh)=epolh(npolh)+epolh_old(jj)
1006 pvolu(npolh)=pvolu(npolh)+pvolu_old(jj)
1008 IF (mpolh(npolh)<=zero.OR.epolh(npolh)<=zero) iloop=1
1009 IF (pvolu(npolh) <= zero) iloop=1
1011 IF(mpolh_old(jj) > 0)
THEN
1012 masspolh=masspolh+mpolh_old(jj)
1013 gpolh(npolh) =gpolh(npolh) +mpolh_old(jj)*gpolh_old(jj)
1014 cpapolh(npolh)=cpapolh(npolh)+mpolh_old(jj)*cpapolh_old(jj)
1015 cpbpolh(npolh)=cpbpolh(npolh)+mpolh_old(jj)*cpbpolh_old(jj)
1016 cpcpolh(npolh)=cpcpolh(npolh)+mpolh_old(jj)*cpcpolh_old(jj)
1017 rmwpolh(npolh)=rmwpolh(npolh)+mpolh_old(jj)*rmwpolh_old(jj)
1018 cpdpolh(npolh)=cpdpolh(npolh)+mpolh_old(jj)*cpdpolh_old(jj)
1019 cpepolh(npolh)=cpepolh(npolh)+mpolh_old(jj)*cpepolh_old(jj)
1020 cpfpolh(npolh)=cpfpolh(npolh)+mpolh_old(jj)*cpfpolh_old(jj)
1024 IF(masspolh > zero)
THEN
1025 gpolh(npolh) =gpolh(npolh) /masspolh
1026 cpapolh(npolh)=cpapolh(npolh)/masspolh
1027 cpbpolh(npolh)=cpbpolh(npolh)/masspolh
1028 cpcpolh(npolh)=cpcpolh(npolh)/masspolh
1029 rmwpolh(npolh)=rmwpolh(npolh)/masspolh
1030 cpdpolh(npolh)=cpdpolh(npolh)/masspolh
1031 cpepolh(npolh)=cpepolh(npolh)/masspolh
1032 cpfpolh(npolh)=cpfpolh(npolh)/masspolh
1034 vpolh_ini(npolh)=vpolh_ini_old(i)
1035 idpolh(npolh)=idpolh_old(i)
1036 IF (dt1 /= zero)
THEN
1044 ifvpadr(npolh+1)=nnp+1
1048 IF (ifvtri(4,i)<=0)
THEN
1051 ifvtri(5,i)=redir(ip1)
1052 ifvtri(6,i)=redir(ip2)
1056 IF (itagp(i)==1)
THEN
1057 DO j=ifvtadr(i),ifvtadr(i+1)-1
1064 polhapp(1,i)=redir(ip1)
1065 polhapp(2,i)=redir(ip2)
1068 DEALLOCATE(merge, ifvpolh_old)
1077 IF( epolh(i) <= zero .OR.
1078 . mpolh(i) <= zero .OR.
1079 . pvolu(i) <= zero) cycle
1080 rpolh(i)=mpolh(i)/pvolu(i)
1081 efac =epolh(i)/mpolh(i)
1090 CALL fvtemp(itypl , efac , cpa , cpb , cpc ,
1091 . cpd , cpe , cpf , rmw , temp0,
1094 ppolh(i)=rpolh(i)*rmwpolh(i)*temp
1102 IF(ilvout ==4 .OR. ilvout ==5)
THEN
1104 WRITE(iout,
'(/,4A)')
' FINITE VOLUME',
' BRICK ',
1105 .
' VOLUME MASS TEMPER. POLYGONE TRIANGLE',
1106 .
' AREA TRIANGLE BRICK1 BRICK2 '
1111 IF(i2==0 .OR. ilvout==5)
THEN
1114 DO j=ifvpadr(i),ifvpadr(i+1)-1
1116 DO k=ifvtadr(jj),ifvtadr(jj+1)-1
1126 WRITE(iout,
'(3I10,3G10.3,5X,I6,4X,I6,4X,G14.6,3I10,
1127 . G14.6)') i,i1,i2,pvolu(i),mpolh(i),tpolh(i),
1128 . jj,kk,
area,iel,ip1,ip2,
1131 WRITE(iout,
'(65X,I6,4X,I6,4X,G14.6,3I10,G14.6)')
1132 . jj,kk,
area,iel,ip1,ip2,
1143 IF (ilvout >= 1)
THEN
1144 WRITE(iout,
'(A,I10)')
' ** MONVOL ID ',id
1145 WRITE(iout,
'(A)')
' ONLY ONE FINITE VOLUME REMAIN - EXITING'
1149 IF (ilvout >= 1)
THEN
1150 WRITE(iout,
'(A,I10,2A,I10)')
' ** MONVOL ID ',id,
1151 .
' FINITE VOLUME MESH UPDATE - LOOPING -',
1152 .
' NUMBER OF FINITE VOLUMES : ',npolh
1161 DEALLOCATE(
fvspmd(ifv)%XXX)
1162 DEALLOCATE(
fvspmd(ifv)%VVV)
1163 DEALLOCATE(
fvspmd(ifv)%WAV)
1164 DEALLOCATE(
fvspmd(ifv)%WAX)