266
267
268
271
272
273
274#include "implicit_f.inc"
275
276
277
278#include "scr18_c.inc"
279#include "com01_c.inc"
280#include "com08_c.inc"
281#include "units_c.inc"
282#include "task_c.inc"
283#include "mvsiz_p.inc"
284
285
286
287 INTEGER, INTENT(IN) :: NUMNOD, NNTR, NNS,NNS_ANIM, NPOLH_ANIM,ILVOUT, NNT, NNA, IFV, ITYP,NPOLY, 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,*),
294 . IVOLU(*)
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
302
303
304
305 INTEGER I, IEL, N1, N2, N3, J, JJ, K, KK, NPA,
306 . IMAX, IP1, IP2, ITAG(NPOLH), ITAGP(NPOLY),
307 . COUNT(NPOLH), II, CC, LEN, NPOLH_OLD, NNP,
308 . IFVPADR_OLD(NPOLH+1), REDIR(NPOLH), ILOOP,
309 . POLHAPP(2,NPOLY), CMAX, ITYPM,
310 . IDP1, IDP2, IDPOLH_OLD(NPOLH), IBPOLH_OLD(NPOLH), , 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,
326 . masspolh, dti
327
328 INTEGER, ALLOCATABLE :: MERGE(:,:), IFVPOLH_OLD(:)
329
330 IF (nspmd == 1) THEN
331
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)
338 ENDDO
339
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)
348 ELSE
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)
352 ENDIF
353 ENDDO
354 ELSE
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)
361 ENDDO
362 ENDIF
363
364 DO i=1,nna
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)
368 END DO
369
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)
376 ENDDO
377
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)
386 ELSE
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)
390 ENDIF
391 ENDDO
392 ELSE
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)
399 ENDDO
400 ENDIF
401
402 DO i=1,nna
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)
406 vvva(3,i)=
fvspmd(ifv)%WAV(3,i)
407 ENDIF
408 ENDDO
409
410 ELSE
411
412
413
414
415
416
418
419
420
423
424
425
426 IF (
kmesh(ifv) >= 2)
THEN
427 DO i=1,nna
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)
432 ENDIF
433 END DO
434 ELSE
435
436 DO i=1,nna
438 xxxa(2,i)=
fvspmd(ifv)%WAX(2,i)
439 xxxa(3,i)=
fvspmd(ifv)%WAX(3,i)
440 END DO
441 ENDIF
442
443
444
445
446 DO i=1,nna
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)
451 END IF
452 END DO
453
454 IF (ispmd/=
fvspmd(ifv)%PMAIN-1)
GOTO 300
455 ENDIF
456
457 IF(tt == dt1) THEN
458 dti = dt1
459 ELSE
460 dti = dt12
461 ENDIF
462
463
464
465
466!$omp+ private(x2,y2,z2,x3,y3,z3,nrx,nry,nrz,area2)
467
468
469
470
471 DO i=1,nna
472 IF(ncona(2,i) == 0) THEN
476 ii=ncona(1,i)
477 IF(ii==0) cycle
478 DO j=1,ii
479 k=ncona(j+2,i)
483 ENDDO
487 ENDIF
488 ENDDO
489
490
491 IF(dt1 == zero) THEN
492
493 DO i=1,nna
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)
498 ENDIF
499 ENDDO
500
501 ENDIF
502
503
504
505 DO i=1,nna
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)
513 ENDIF
514 ENDDO
515
516
517
518
519
520 DO i=1,nns
521 IF (ifvnod(1,i)==1) THEN
522 iel=ifvnod(2,i)
523 ksi=rfvnod(1,i)
524 eta=rfvnod(2,i)
525
526 n1=elema(1,iel)
527 n2=elema(2,iel)
528 n3=elema(3,iel)
529 IF (tagela(iel)>0) THEN
539 ELSEIF (tagela(iel)<0) THEN
540 x1=xxxa(1,n1)
541 y1=xxxa(2,n1)
542 z1=xxxa(3,n1)
543 x2=xxxa(1,n2)
544 y2=xxxa(2,n2)
545 z2=xxxa(3,n2)
546 x3=xxxa(1,n3)
547 y3=xxxa(2,n3)
548 z3=xxxa(3,n3)
549 ENDIF
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
554 i2=ifvnod(3,i)
555 pnod(1,i)=xxxa(1,i2)
556 pnod(2,i)=xxxa(2,i2)
557 pnod(3,i)=xxxa(3,i2)
558 ENDIF
559 ENDDO
560
561
562
563 DO i=1,nns
564 IF (ifvnod(1,i)==3) THEN
565 i1=ifvnod(2,i)
566 i2=ifvnod(3,i)
567 fac=rfvnod(1,i)
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)
571 ENDIF
572 ENDDO
573
574
575 IF (npolh_anim>0) THEN
576
577 DO i=1,nns_anim
578 ii=redir_anim(i)
579 nod_anim(1,i)=pnod(1,ii)
580 nod_anim(2,i)=pnod(2,ii)
581 nod_anim(3,i)=pnod(3,ii)
582 ENDDO
583
584 ENDIF
585
586
587
588 DO i=1,nntr
589 n1=ifvtri(1,i)
590 n2=ifvtri(2,i)
591 n3=ifvtri(3,i)
592 x1=pnod(1,n1)
593 y1=pnod(2,n1)
594 z1=pnod(3,n1)
595 x2=pnod(1,n2)
596 y2=pnod(2,n2)
597 z2=pnod(3,n2)
598 x3=pnod(1,n3)
599 y3=pnod(2,n3)
600 z3=pnod(3,n3)
601 x12=x2-x1
602 y12=y2-y1
603 z12=z2-z1
604 x13=x3-x1
605 y13=y3-y1
606 z13=z3-z1
607 nrx=y12*z13-z12*y13
608 nry=z12*x13-x12*z13
609 nrz=x12*y13-y12*x13
610 area2=sqrt(nrx**2+nry**2+nrz**2)
611 parea(i)=half*area2
612 IF (area2>0) THEN
613 pnorm(1,i)=nrx/area2
614 pnorm(2,i)=nry/area2
615 pnorm(3,i)=nrz/area2
616 ELSE
617 pnorm(1,i)=zero
618 pnorm(2,i)=zero
619 pnorm(3,i)=zero
620 ENDIF
621 ENDDO
622
623
624
625
626 DO i=1,npolh
627 pvolu(i)= zero
628 pvoltmp = zero
629
630 DO j=ifvpadr(i),ifvpadr(i+1)-1
631 jj=ifvpolh(j)
632
633 DO k=ifvtadr(jj), ifvtadr(jj+1)-1
634 kk=ifvpoly(k)
636 iel=ifvtri(4,kk)
637 IF (iel>0) THEN
638 nx=pnorm(1,kk)
639 ny=pnorm(2,kk)
640 nz=pnorm(3,kk)
641 ELSE
642 ip1=ifvtri(5,kk)
643 ip2=ifvtri(6,kk)
644 IF (ip1==i) THEN
645 nx=pnorm(1,kk)
646 ny=pnorm(2,kk)
647 nz=pnorm(3,kk)
648 ENDIF
649 IF (ip2==i) THEN
650 nx=-pnorm(1,kk)
651 ny=-pnorm(2,kk)
652 nz=-pnorm(3,kk)
653 ENDIF
654 IF (ip1==i.AND.ip2==i) THEN
655 nx=zero
656 ny=zero
657 nz=zero
658 ENDIF
659 ENDIF
660 n1=ifvtri(1,kk)
661 x1=pnod(1,n1)
662 y1=pnod(2,n1)
663 z1=pnod(3,n1)
664 pvoltmp=pvoltmp+third*
area*(x1*nx+y1*ny+z1*nz)
665 ENDDO
666 ENDDO
667 pvolu(i) = pvoltmp
668 ENDDO
669
670
671
672 IF(ivolu(39) == 0) RETURN
673
674
675
676 dtmin = fvbag_dtmin
677 dtmergv12=idtmin(52)
678 IF(dtmergv12==2) dtmergv12=1
679
680 vm=zero
681 npa=0
682 DO i=1,npolh
683 IF (pvolu(i)>zero) THEN
684 vm=vm+pvolu(i)
685 npa=npa+1
686 ENDIF
687 ENDDO
688 IF(npa>0)THEN
689 vm=vm/npa
690 ENDIF
691
692
693
694
695 IF (ivmin == 1) THEN
696
697 volumin=vm*rvolu(31)
698 ELSEIF (ivmin == -1)THEN
699
700 volumin = ep20
701 ELSE
702
703 volumin=rvolu(33)*rvolu(31)
704 ENDIF
705
706
707 DO i=1,npoly
708 areapoly(i)=zero
709 polhapp(1,i)=0
710 polhapp(2,i)=0
711 DO j=ifvtadr(i),ifvtadr(i+1)-1
712 jj=ifvpoly(j)
713 IF (jj==-1) GOTO 50
714 iel=ifvtri(4,jj)
715 IF (iel==0) THEN
716 ip1=ifvtri(5,jj)
717 ip2=ifvtri(6,jj)
718 areapoly(i)=areapoly(i)+parea(jj)
719 polhapp(1,i)=ip1
720 polhapp(2,i)=ip2
721 ENDIF
722 ENDDO
723 50 ENDDO
724
725 IF (npolh==1) GOTO 300
726 100 DO i=1,npolh
727 itag(i)=0
728 ENDDO
729 DO i=1,npoly
730 itagp(i)=0
731 ENDDO
732
733
734
735 DO i=1,npolh
736 vvmax(i)=zero
737 DO j=ifvpadr(i),ifvpadr(i+1)-1
738 jj=ifvpolh(j)
739 DO k=ifvtadr(jj), ifvtadr(jj+1)-1
740 kk=ifvpoly(k)
741 iel=ifvtri(4,kk)
742 IF (iel==0) THEN
743 IF (ifvtri(5,kk)==i) THEN
744 ii=ifvtri(6,kk)
745 ELSEIF (ifvtri(6,kk)==i) THEN
746 ii=ifvtri(5,kk)
747 ENDIF
748 vvmax(i)=
max(vvmax(i),pvolu(ii))
749 ENDIF
750 ENDDO
751 ENDDO
752 vvmax(i)=rvolu(34)*vvmax(i)
753 ENDDO
754
755
756
757 pvolu_old(1:npolh)=pvolu(1:npolh)
758
759
760
761 iloop=0
762 DO i=1,npolh
763 IF (itag(i)/=0) cycle
764 IF (pvolu(i)<=volumin.OR.pvolu
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
769
770 itypm=1
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
774
775
776
777 areamax=zero
778 imax=0
779 DO j=ifvpadr(i),ifvpadr(i+1)-1
780 jj=ifvpolh(j)
782 ip1=polhapp(1,jj)
783 ip2=polhapp(2,jj)
784 IF (
area>areamax)
THEN
785 IF (ip1==i) THEN
786 imax=ip2
788 ELSEIF (ip2==i) THEN
789 imax=ip1
791 ENDIF
792 ENDIF
793 ENDDO
794
795 IF(imax==0) cycle
796
797 IF (itag(imax)/=0) THEN
798
799 iloop=1
800 ELSE
801
802 DO j=ifvpadr(imax),ifvpadr(imax+1)-1
803 jj=ifvpolh(j)
804 k=ifvtadr(jj)
805 kk=ifvpoly(k)
806
807 IF (ifvtri(4,kk)==0.AND.(ifvtri(5,kk)==i.OR.
808 . ifvtri(6,kk)==i))
809 . itagp(jj)=1
810 ENDDO
811
812 itag(i)=imax
813 itag(imax)=-i
814 vol1=pvolu(i)
815 vol2=pvolu(imax)
816 pvolu(imax)=pvolu(imax)+pvolu(i)
817
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
822
823 IF (ilvout >= 2) THEN
824 idp1=idpolh(i)
825 idp2=idpolh(imax)
826 IF (itypm==1) THEN
827 WRITE(iout,
828 . '(A46,I8,A6,G11.4,A1,A20,I8,A7,G11.4,A1,A12,I10)')
829 . ' ** GLOBAL MERGE: MERGING FINITE VOLUME ',idp1,
830 . ' (VOL=',vol1,')',
831 .
' WITH FINITE VOLUME ',idp2,
' (VOL=',vol2,
')',
' MONVOL ID ',
id
832 ELSEIF (itypm==2) THEN
833 WRITE(iout,
834 . '(A46,I8,A6,G11.4,A1,A20,I8,A7,G11.4,A1,A12,I10)')
835 . ' ** NEIGHBORHOOD MERGE: MERGING FINITE VOLUME ',idp1,
836 . ' (VOL=',vol1,')',
837 .
' WITH FINITE VOLUME ',idp2,
' (VOL=',vol2,
')',
' MONVOL ID ',
id
838 ELSEIF (itypm==3) THEN
839 WRITE(iout,
840 . '(A46,I8,A6,G11.4,A1,A20,I8,A7,G11.4,A1,A12,I10)')
841 . ' ** STABILITY MERGE: MERGING FINITE VOLUME ',idp1,
842 . ' (VOL=',vol1,')',
843 . ' with finite volume
',IDP2,' (vol=
',VOL2,')
',' monvol
id ',ID
844 ELSEIF (ITYPM==4) THEN
845 WRITE(IOUT,
846 . '(a46,i8,a6,g11.4,a1,a20,i8,a7,g11.4,a1,a12,i10)')
847 . ' ** time step
merge: merging finite volume
',IDP1,
848 . ' (vol=',VOL1,')',
849 . ' with finite volume
',IDP2,' (vol=
',VOL2,')
',' monvol
id ',ID
850 ENDIF
851 ENDIF
852 ENDIF
853 ENDIF
854 ENDDO
855
856 DO I=1,NPOLH
857 DO J=IFVPADR(I),IFVPADR(I+1)-1
858 JJ=IFVPOLH(J)
859 K=IFVTADR(JJ)
860 KK=IFVPOLY(K)
861.AND. IF (IFVTRI(4,KK)==0IFVTRI(5,KK)==IFVTRI(6,KK)) THEN
862 ITAGP(JJ)=1
863 ENDIF
864 ENDDO
865 ENDDO
866 DO I=1,NPOLH
867 COUNT(I)=1
868 ENDDO
869 DO I=1,NPOLH
870 II=ITAG(I)
871 IF (II>0) COUNT(II)=COUNT(II)+1
872 ENDDO
873
874 CMAX=0
875 DO I=1,NPOLH
876 CMAX=MAX(CMAX,COUNT(I))
877 ENDDO
878 IF (CMAX==1) GOTO 300
879
880 ALLOCATE(MERGE(CMAX+1,NPOLH))
881 DO I=1,NPOLH
882 MERGE(1,I)=1
883 MERGE(2,I)=I
884 ENDDO
885 DO I=1,NPOLH
886 II=ITAG(I)
887 IF (II>0) THEN
888 CC=MERGE(1,II)
889 CC=CC+1
890 MERGE(1,II)=CC
891 MERGE(CC+1,II)=I
892 MERGE(1,I)=0
893 ENDIF
894 ENDDO
895
896 LEN=IFVPADR(NPOLH+1)-1
897 ALLOCATE(IFVPOLH_OLD(LEN))
898
899!$OMP PARALLEL PRIVATE(I)
900!$OMP DO SCHEDULE(DYNAMIC,MVSIZ)
901 DO I=1,IFVPADR(NPOLH+1)-1
902 IFVPOLH_OLD(I)=IFVPOLH(I)
903 ENDDO
904!$OMP END DO
905!$OMP DO SCHEDULE(DYNAMIC,MVSIZ)
906 DO I=1,NPOLH+1
907 IFVPADR_OLD(I)=IFVPADR(I)
908 ENDDO
909!$OMP END DO
910!$OMP DO SCHEDULE(DYNAMIC,MVSIZ)
911 DO I=1,NPOLH
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)
928 CPFPOLH_OLD(I)=CPFPOLH(I)
929 DTPOLH_OLD(I)=DTPOLH(I)
930
931 MPOLH(I)=ZERO
932 QPOLH(1,I)=ZERO
933 QPOLH(2,I)=ZERO
934 QPOLH(3,I)=ZERO
935 EPOLH(I)=ZERO
936 PVOLU(I)=ZERO
937 GPOLH(I)=ZERO
938 CPAPOLH(I)=ZERO
939 CPBPOLH(I)=ZERO
940 CPCPOLH(I)=ZERO
941 RMWPOLH(I)=ZERO
942 TPOLH(I)=ZERO
943 CPDPOLH(I)=ZERO
944 CPEPOLH(I)=ZERO
945 CPFPOLH(I)=ZERO
946 ENDDO
947!$OMP END DO
948!$OMP END PARALLEL
949
950 NPOLH_OLD=NPOLH
951 NPOLH=0
952 NNP=0
953 DO I=1,NPOLH_OLD
954 CC=MERGE(1,I)
955 IF (CC==0) CYCLE
956 NPOLH=NPOLH+1
957 IFVPADR(NPOLH)=NNP+1
958 IF(CC == 1) THEN
959 JJ=MERGE(2,I)
960 REDIR(JJ)=NPOLH
961 DO K=IFVPADR_OLD(JJ),IFVPADR_OLD(JJ+1)-1
962 KK=IFVPOLH_OLD(K)
963 IF (ITAGP(KK)==1) CYCLE
964 NNP=NNP+1
965 IFVPOLH(NNP)=KK
966 ENDDO
967
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)
973
974.OR. IF (MPOLH(NPOLH)<=ZEROEPOLH(NPOLH)<=ZERO) ILOOP=1
975
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)
989 ELSE
990 MASSPOLH=ZERO
991 DO J=1,CC
992 JJ=MERGE(J+1,I)
993 REDIR(JJ)=NPOLH
994 DO K=IFVPADR_OLD(JJ),IFVPADR_OLD(JJ+1)-1
995 KK=IFVPOLH_OLD(K)
996 IF (ITAGP(KK)==1) CYCLE
997 NNP=NNP+1
998 IFVPOLH(NNP)=KK
999 ENDDO
1000
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)+QPOLH_OLD(2,JJ)
1004 QPOLH(3,NPOLH)=QPOLH(3,NPOLH)+QPOLH_OLD(3,JJ)
1005 EPOLH(NPOLH)=EPOLH(NPOLH)+EPOLH_OLD(JJ)
1006 PVOLU(NPOLH)=PVOLU(NPOLH)+PVOLU_OLD(JJ)
1007
1008.OR. IF (MPOLH(NPOLH)<=ZEROEPOLH(NPOLH)<=ZERO) ILOOP=1
1009 IF (PVOLU(NPOLH) <= ZERO) ILOOP=1
1010
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)
1021 ENDIF
1022 ENDDO
1023
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
1033 ENDIF
1034 VPOLH_INI(NPOLH)=VPOLH_INI_OLD(I)
1035 IDPOLH(NPOLH)=IDPOLH_OLD(I)
1036 IF (DT1 /= ZERO) THEN
1037
1038
1039 IBPOLH(NPOLH)=0
1040 ENDIF
1041 DTPOLH(NPOLH)=EP30
1042 ENDIF
1043 ENDDO
1044 IFVPADR(NPOLH+1)=NNP+1
1045
1046
1047 DO I=1,NNTR
1048 IF (IFVTRI(4,I)<=0) THEN
1049 IP1=IFVTRI(5,I)
1050 IP2=IFVTRI(6,I)
1051 IFVTRI(5,I)=REDIR(IP1)
1052 IFVTRI(6,I)=REDIR(IP2)
1053 ENDIF
1054 ENDDO
1055 DO I=1,NPOLY
1056 IF (ITAGP(I)==1) THEN
1057 DO J=IFVTADR(I),IFVTADR(I+1)-1
1058 IFVPOLY(J)=-1
1059 ENDDO
1060 ENDIF
1061 IP1=POLHAPP(1,I)
1062 IP2=POLHAPP(2,I)
1063 IF (IP1>0) THEN
1064 POLHAPP(1,I)=REDIR(IP1)
1065 POLHAPP(2,I)=REDIR(IP2)
1066 ENDIF
1067 ENDDO
1068 DEALLOCATE(MERGE, IFVPOLH_OLD)
1069
1070
1071!$OMP PARALLEL PRIVATE(I)
1072!$OMP+ PRIVATE(TEMP,TEMP0,EFAC,CPA,CPB,CPC,CPD,CPE,CPF,RMW)
1073!$OMP+ PRIVATE(ITYPL)
1074 ITYPL = ITYP
1075!$OMP DO SCHEDULE(DYNAMIC,MVSIZ)
1076 DO I=1,NPOLH
1077.OR. IF( EPOLH(I) <= ZERO
1078.OR. . MPOLH(I) <= ZERO
1079 . PVOLU(I) <= ZERO) CYCLE
1080 RPOLH(I)=MPOLH(I)/PVOLU(I)
1081 EFAC =EPOLH(I)/MPOLH(I)
1082 CPA =CPAPOLH(I)
1083 CPB =CPBPOLH(I)
1084 CPC =CPCPOLH(I)
1085 CPD =CPDPOLH(I)
1086 CPE =CPEPOLH(I)
1087 CPF =CPFPOLH(I)
1088 RMW =RMWPOLH(I)
1089 TEMP0=RVOLU(25)
1090 CALL FVTEMP(ITYPL , EFAC , CPA , CPB , CPC ,
1091 . CPD , CPE , CPF , RMW , TEMP0,
1092 . TEMP )
1093 TPOLH(I)=TEMP
1094 PPOLH(I)=RPOLH(I)*RMWPOLH(I)*TEMP
1095 ENDDO
1096!$OMP END DO
1097!$OMP END PARALLEL
1098
1099
1100
1101
1102.OR. IF(ILVOUT ==4 ILVOUT ==5) THEN
1103
1104 WRITE(IOUT,'(/,4a)') ' finite volume',' brick ',
1105 . ' volume mass temper. polygone triangle',
1106 . ''
1107
1108 DO I=1,NPOLH
1109 I1= IDPOLH(I)
1110 I2= IBPOLH(I)
1111.OR. IF(I2==0 ILVOUT==5) THEN
1112 II=0
1113 KKK=0
1114 DO J=IFVPADR(I),IFVPADR(I+1)-1
1115 JJ=IFVPOLH(J)
1116 DO K=IFVTADR(JJ),IFVTADR(JJ+1)-1
1117 KKK=KKK+1
1118 KK=IFVPOLY(K)
1119 AREA=PAREA(KK)
1120 IEL=IFVTRI(4,KK)
1121 IP1=IFVTRI(5,KK)
1122 IP2=IFVTRI(6,KK)
1123 IP3=IFVTRI(1,KK)
1124 IF(KKK==1) THEN
1125
1126 WRITE(IOUT,'(3i10,3g10.3,5x,i6,4x,i6,4x,g14
1127 . g14.6)') I,I1,I2,PVOLU(I),MPOLH(I),TPOLH(I),
1128 . JJ,KK,AREA,IEL,IP1,IP2,
1129 . DTPOLH_OLD(I)
1130 ELSE
1131 WRITE(IOUT,'(65x,i6,4x,i6,4x,g14.6,3i10,g14.6)')
1132 . JJ,KK,AREA,IEL,IP1,IP2,
1133 . PNOD(1,IP3)
1134 ENDIF
1135 ENDDO
1136 ENDDO
1137 ENDIF
1138 ENDDO
1139 ENDIF
1140
1141 IF (ILOOP==1) THEN
1142 IF (NPOLH==1) THEN
1143 IF (ILVOUT >= 1) THEN
1144 WRITE(IOUT,'(a,i10)
') ' ** monvol
id ',ID
1145 WRITE(IOUT,'(a)')' only one finite volume remain - exiting'
1146 ENDIF
1147 GOTO 300
1148 ELSE
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
1153 ENDIF
1154 ENDIF
1155 GOTO 100
1156 ENDIF
1157
1158
1159 300 CONTINUE
1160
1161 DEALLOCATE(FVSPMD(IFV)%XXX)
1162 DEALLOCATE(FVSPMD(IFV)%VVV)
1163 DEALLOCATE(FVSPMD(IFV)%WAV)
1164 DEALLOCATE(FVSPMD(IFV)%WAX)
1165
1166 RETURN
subroutine area(d1, x, x2, y, y2, eint, stif0)
subroutine merge(x, itab, itabm1, cmerge, imerge, imerge2, iadmerge2, nmerge_tot)
integer, dimension(:), allocatable kmesh
subroutine spmd_fvb_gath_end(ifv, x, xxx, xxxa, v, vvv, vvva)