5 &(f,fn,fscexp,h,hn,hprop,udel,vdel,dm1,zconv,solsys,
6 & sm,smh,yasmh,smi,yasmi,fbor,masktr,mesh,
7 & t1,t2,t3,t4,t5,t6,t7,ht,dt,entet,
8 & msk,maskel,optsou,limtra,kdir,kddl,nptfr,flbor,
9 & yaflbor,unsv2d,iopt,flbortra,nbor,
10 & rain,pluie,train,nitmax,nco_dist,optadv)
122 INTEGER,
INTENT(IN) :: OPTSOU,KDIR,NPTFR,SOLSYS
123 INTEGER,
INTENT(IN) :: KDDL,IOPT,NITMAX,OPTADV
124 INTEGER,
INTENT(IN) :: NCO_DIST
125 INTEGER,
INTENT(IN) :: NBOR(nptfr)
126 INTEGER,
INTENT(INOUT) :: LIMTRA(nptfr)
127 DOUBLE PRECISION,
INTENT(IN) :: DT,TRAIN
128 LOGICAL,
INTENT(IN) :: YASMH,YAFLBOR,RAIN
129 LOGICAL,
INTENT(IN) :: MSK,ENTET,YASMI
130 TYPE(bief_obj),
INTENT(IN) :: MASKEL,H,HN,DM1,ZCONV
131 TYPE(bief_obj),
INTENT(IN) :: UNSV2D,HPROP
132 TYPE(bief_obj),
INTENT(IN) :: UDEL,VDEL,FN,SMI,SMH
133 TYPE(bief_obj),
INTENT(INOUT) :: FLBORTRA,FBOR,F,SM,HT
134 TYPE(bief_obj),
INTENT(INOUT) :: T1,T2,T3,T4,T5,T6,T7,FLBOR
135 TYPE(bief_obj),
INTENT(IN) :: FSCEXP,MASKTR,PLUIE
136 TYPE(bief_mesh) :: MESH
140 INTEGER I,IOPT2,NPOIN,IPTFR,I1,I2,I3,NITER,NEWREMAIN,NELMAX
141 INTEGER IR,N,NELEM,IELEM,REMAIN,NSEG
146 DOUBLE PRECISION C,CPREV,CINIT,HFL1,TET,LOCALMIN,LOCALMAX
147 DOUBLE PRECISION F1,F2,F3,COEF,FI1,FI2,FI3,VOL1,VOL2,VOL3
148 DOUBLE PRECISION DT1,DT2,DT3,FMIN,FMAX,VOLD1,VOLD2,VOLD3
149 DOUBLE PRECISION SURDT,FITOT,BETA1,BETA2,BETA3,A1,A2,A3
150 DOUBLE PRECISION FP1,FP2,FP3,FIP1,FIP2,FIP3,FS1,FS2,FS3
151 CHARACTER(LEN=16) FORMUL
152 DOUBLE PRECISION,
POINTER,
DIMENSION(:) :: FXMAT
153 DOUBLE PRECISION,
PARAMETER :: TIERS=1.d0/3.d0
154 LOGICAL,
PARAMETER :: TESTING = .false.
155 DOUBLE PRECISION,
PARAMETER :: EPS_FLUX = 1.d-15
156 DOUBLE PRECISION,
POINTER :: FLOP1(:),FLOP2(:),FLOP3(:)
157 DOUBLE PRECISION,
POINTER :: DTLIM1(:),DTLIM2(:),DTLIM3(:)
158 DOUBLE PRECISION,
POINTER :: SVOL1(:),SVOL2(:),SVOL3(:)
180 flop1=>mesh%MSEG%X%R( 1: nelem)
181 flop2=>mesh%MSEG%X%R( nelem+1:2*nelem)
182 flop3=>mesh%MSEG%X%R(2*nelem+1:3*nelem)
183 svol1=> mesh%W%R( 1: nelem)
184 svol2=> mesh%W%R( nelem+1:2*nelem)
185 svol3=> mesh%W%R(2*nelem+1:3*nelem)
186 dtlim1=> mesh%M%X%R( 1: nelem)
187 dtlim2=> mesh%M%X%R( nelem+1:2*nelem)
188 dtlim3=> mesh%M%X%R(2*nelem+1:3*nelem)
191 fxmat=>mesh%M%X%R(1:nseg)
206 IF(iopt2.NE.0.AND.iopt2.NE.1)
THEN 207 WRITE(
lu,*)
'CVTRVF_ERIA: OPTION IOPT2 UNKNOWN: ',iopt2
221 cinit=min(cinit,hn%R(i))
227 WRITE(
lu,*)
'AVANT TRAITEMENT HAUTEURS NEGATIVES, H MIN=',c
228 WRITE(
lu,*)
'AVANT TRAITEMENT HAUTEURS NEGATIVES, HN MIN=',cinit
243 IF(ncsize.GT.1)
CALL os(
'X=0 ',x=t2)
245 IF(.NOT.yaflbor)
THEN 247 CALL vector(flbor,
'=',
'FLUBDF ',1,1.d0,
249 & udel , vdel, vdel,mesh,.true.,masktr%ADR(8)%P)
253 CALL osdb(
'X=Y ' ,t2,flbor,flbor,0.d0,mesh)
255 IF(ncsize.GT.1)
CALL parcom(t2,2,mesh)
260 IF(limtra(i).EQ.kdir.AND.t2%R(n).GT.0.d0)
THEN 262 ELSEIF(limtra(i).EQ.kddl.AND.t2%R(n).LT.0.d0)
THEN 274 CALL os(
'X=Y ',x=f,y=fn)
275 CALL os(
'X=Y ',x=ht,y=hn)
280 IF(solsys.EQ.2) formul(8:8)=
'2' 282 CALL vector(t1,
'=',formul,h%ELM,-1.d0,
283 & hprop,dm1,zconv,udel,vdel,vdel,mesh,msk,maskel)
289 flop2(i)=mesh%W%R(i+nelmax)
290 flop3(i)=mesh%W%R(i+2*nelmax)
295 CALL flux_ef_vf(fxmat,mesh%W%R,mesh%NSEG,nelem,nelmax,
296 & mesh%ELTSEG%I,mesh%ORISEG%I,
297 & mesh%IKLE%I,.true.,2)
300 CALL parcom2_seg(fxmat,fxmat,fxmat,mesh%NSEG,1,2,1,mesh,1,11)
304 a1 = abs(flop1(ielem))
305 a2 = abs(flop2(ielem))
306 a3 = abs(flop3(ielem))
307 IF(a1.GE.a2.AND.a1.GE.a3)
THEN 309 flop1(ielem)=-flop2(ielem)
312 ELSEIF(a2.GE.a1.AND.a2.GE.a3)
THEN 315 flop2(ielem)=-flop3(ielem)
319 flop3(ielem)=-flop1(ielem)
330 IF(smh%R(i).GT.0.d0)
THEN 331 ht%R(i)=ht%R(i)+dt*smh%R(i)
332 f%R(i)=f%R(i)+dt/max(ht%R(i),1.d-4)*smh%R(i)*fscexp%R(i)
335 ELSEIF(optsou.EQ.2)
THEN 337 IF(smh%R(i).GT.0.d0)
THEN 338 ht%R(i)=ht%R(i)+dt*smh%R(i)*unsv2d%R(i)
339 f%R(i)=f%R(i)+dt/max(ht%R(i),1.d-4)*
340 & unsv2d%R(i)*smh%R(i)*fscexp%R(i)
350 c=max(pluie%R(i),0.d0)
355 f%R(i)=f%R(i)+((c*dt)/ht%R(i))*(train-f%R(i))
362 ht%R(i)=ht%R(i)-dt*unsv2d%R(i)*min(t2%R(i),0.d0)
365 IF(limtra(iptfr).EQ.kdir)
THEN 366 f%R(i)=f%R(i)-dt/max(ht%R(i),1.d-4)*
367 & unsv2d%R(i)*t2%R(i)*(fbor%R(iptfr)-f%R(i))
387 cprev=cprev+abs(flop1(ir))+abs(flop2(ir))+abs(flop3(ir))
389 IF(ncsize.GT.1) cprev=
p_sum(cprev)
390 IF(testing)
WRITE(
lu,*)
'INITIAL SUM OF FLUXES=',cprev
405 i2=mesh%IKLE%I(i +nelmax)
406 i3=mesh%IKLE%I(i+2*nelmax)
408 vol1=mesh%SURFAC%R(i)*ht%R(i1)*tiers
409 vol2=mesh%SURFAC%R(i)*ht%R(i2)*tiers
410 vol3=mesh%SURFAC%R(i)*ht%R(i3)*tiers
412 f1= flop1(i)-flop3(i)
413 f2=-flop1(i)+flop2(i)
414 f3=-flop2(i)+flop3(i)
416 IF(f1*dt.GT.vol1)
THEN 418 t7%R(i1)=t7%R(i1)+f1*dt-vol1
422 t1%R(i1)=t1%R(i1)+min(vol1,vol1-f1*dt)
424 IF(f2*dt.GT.vol2)
THEN 425 t7%R(i2)=t7%R(i2)+f2*dt-vol2
427 t1%R(i2)=t1%R(i2)+min(vol2,vol2-f2*dt)
429 IF(f3*dt.GT.vol3)
THEN 430 t7%R(i3)=t7%R(i3)+f3*dt-vol3
432 t1%R(i3)=t1%R(i3)+min(vol3,vol3-f3*dt)
435 ELSEIF(optpre.EQ.2)
THEN 439 i2=mesh%IKLE%I(i +nelmax)
440 i3=mesh%IKLE%I(i+2*nelmax)
442 vol1=mesh%SURFAC%R(i)*ht%R(i1)*tiers
443 vol2=mesh%SURFAC%R(i)*ht%R(i2)*tiers
444 vol3=mesh%SURFAC%R(i)*ht%R(i3)*tiers
446 f1= flop1(i)-flop3(i)
447 f2=-flop1(i)+flop2(i)
448 f3=-flop2(i)+flop3(i)
450 IF(f1.GT.0.d0) t7%R(i1)=t7%R(i1)+f1
451 IF(f2.GT.0.d0) t7%R(i2)=t7%R(i2)+f2
452 IF(f3.GT.0.d0) t7%R(i3)=t7%R(i3)+f3
453 t1%R(i1)=t1%R(i1)+vol1
454 t1%R(i2)=t1%R(i2)+vol2
455 t1%R(i3)=t1%R(i3)+vol3
470 i2=mesh%IKLE%I(i +nelmax)
471 i3=mesh%IKLE%I(i+2*nelmax)
475 f1= flop1(i)-flop3(i)
476 f2=-flop1(i)+flop2(i)
477 f3=-flop2(i)+flop3(i)
483 vol1=mesh%SURFAC%R(i)*ht%R(i1)*tiers
484 vol2=mesh%SURFAC%R(i)*ht%R(i2)*tiers
485 vol3=mesh%SURFAC%R(i)*ht%R(i3)*tiers
486 IF(f1*dt.GT.vol1)
THEN 489 IF(t7%R(i1).GT.t1%R(i1))
THEN 494 vol1=vol1+(f1*dt-vol1)*(t1%R(i1)/t7%R(i1))
501 IF(t1%R(i1).GT.t7%R(i1))
THEN 503 vol1=vol1-min(vol1,vol1-f1*dt)*(t7%R(i1)/t1%R(i1))
509 IF(f2*dt.GT.vol2)
THEN 510 IF(t7%R(i2).GT.t1%R(i2))
THEN 511 vol2=vol2+(f2*dt-vol2)*(t1%R(i2)/t7%R(i2))
516 IF(t1%R(i2).GT.t7%R(i2))
THEN 517 vol2=vol2-min(vol2,vol2-f2*dt)*(t7%R(i2)/t1%R(i2))
522 IF(f3*dt.GT.vol3)
THEN 523 IF(t7%R(i3).GT.t1%R(i3))
THEN 524 vol3=vol3+(f3*dt-vol3)*(t1%R(i3)/t7%R(i3))
529 IF(t1%R(i3).GT.t7%R(i3))
THEN 530 vol3=vol3-min(vol3,vol3-f3*dt)*(t7%R(i3)/t1%R(i3))
535 ELSEIF(optpre.EQ.2)
THEN 536 IF(t7%R(i1).GT.1.d-30)
THEN 538 vol1=t1%R(i1)*(max(f1,0.d0)/t7%R(i1))
540 vol1=mesh%SURFAC%R(i)*h%R(i1)*tiers
542 IF(t7%R(i2).GT.1.d-30)
THEN 543 vol2=t1%R(i2)*(max(f2,0.d0)/t7%R(i2))
545 vol2=mesh%SURFAC%R(i)*h%R(i2)*tiers
547 IF(t7%R(i3).GT.1.d-30)
THEN 548 vol3=t1%R(i3)*(max(f3,0.d0)/t7%R(i3))
550 vol3=mesh%SURFAC%R(i)*h%R(i3)*tiers
563 IF(f1*dt.GT.vol1)
THEN 564 dt1=dt*(vol1/(f1*dt))
568 IF(f2*dt.GT.vol2)
THEN 569 dt2=dt*(vol2/(f2*dt))
573 IF(f3*dt.GT.vol3)
THEN 574 dt3=dt*(vol3/(f3*dt))
586 dtlim1(i)=min(dt1,dt2)
587 dtlim2(i)=min(dt2,dt3)
588 dtlim3(i)=min(dt3,dt1)
604 t6%R(i)=f%R(i)*ht%R(i)
618 fmin=min(fmin,f%R(i))
619 fmax=max(fmax,f%R(i))
633 i2=mesh%IKLE%I(i +nelmax)
634 i3=mesh%IKLE%I(i+2*nelmax)
636 fp1=flop1(i)*dtlim1(i)
637 fp2=flop2(i)*dtlim2(i)
638 fp3=flop3(i)*dtlim3(i)
642 t4%R(i1)=t4%R(i1)-( fp1-fp3)
643 t4%R(i2)=t4%R(i2)-(-fp1+fp2)
644 t4%R(i3)=t4%R(i3)-(-fp2+fp3)
648 t5%R(i1)=t5%R(i1)-( fp1-fp3)*f%R(i1)
649 t5%R(i2)=t5%R(i2)-(-fp1+fp2)*f%R(i2)
650 t5%R(i3)=t5%R(i3)-(-fp2+fp3)*f%R(i3)
652 fi1=-min(fp1,0.d0)*(f%R(i2)-f%R(i1))
653 & +max(fp3,0.d0)*(f%R(i3)-f%R(i1))
654 fi2=+max(fp1,0.d0)*(f%R(i1)-f%R(i2))
655 & -min(fp2,0.d0)*(f%R(i3)-f%R(i2))
656 fi3=+max(fp2,0.d0)*(f%R(i2)-f%R(i3))
657 & -min(fp3,0.d0)*(f%R(i1)-f%R(i3))
663 IF(fitot.GT.eps_flux)
THEN 668 coef=fitot/(beta1+beta2+beta3)
672 ELSEIF(fitot.LT.-eps_flux)
THEN 677 coef=fitot/(beta1+beta2+beta3)
685 t5%R(i1)=t5%R(i1)+fi1
686 t5%R(i2)=t5%R(i2)+fi2
687 t5%R(i3)=t5%R(i3)+fi3
699 CALL os(
'X=XY ',x=t4,y=unsv2d)
700 CALL os(
'X=XY ',x=t5,y=unsv2d)
704 t6%R(i)=t6%R(i)+t5%R(i)
708 ht%R(i)=ht%R(i)+t4%R(i)
709 IF(ht%R(i).GT.1.d-15)
THEN 711 t3%R(i)=t6%R(i)/ht%R(i)
715 ht%R(i)=max(0.d0,ht%R(i))
717 t3%R(i)=min(fmax,max(fmin,t3%R(i)))
722 IF(nco_dist.GT.0)
THEN 735 i2=mesh%IKLE%I(i +nelmax)
736 i3=mesh%IKLE%I(i+2*nelmax)
738 fp1=flop1(i)*dtlim1(i)
739 fp2=flop2(i)*dtlim2(i)
740 fp3=flop3(i)*dtlim3(i)
742 vol1=svol1(i)-( fp1-fp3)
743 vol2=svol2(i)-(-fp1+fp2)
744 vol3=svol3(i)-(-fp2+fp3)
745 IF(vol1.LT.mesh%SURFAC%R(i)*ht%R(i1)*tiers)
THEN 746 t7%R(i1)=t7%R(i1)+mesh%SURFAC%R(i)*ht%R(i1)*tiers-vol1
748 t1%R(i1)=t1%R(i1)+vol1+min( fp1,0.d0)+min(-fp3,0.d0)
750 IF(vol2.LT.mesh%SURFAC%R(i)*ht%R(i2)*tiers)
THEN 751 t7%R(i2)=t7%R(i2)+mesh%SURFAC%R(i)*ht%R(i2)*tiers-vol2
753 t1%R(i2)=t1%R(i2)+vol2+min(-fp1,0.d0)+min( fp2,0.d0)
755 IF(vol3.LT.mesh%SURFAC%R(i)*ht%R(i3)*tiers)
THEN 756 t7%R(i3)=t7%R(i3)+mesh%SURFAC%R(i)*ht%R(i3)*tiers-vol3
758 t1%R(i3)=t1%R(i3)+vol3+min(-fp2,0.d0)+min( fp3,0.d0)
775 i2=mesh%IKLE%I(i +nelmax)
776 i3=mesh%IKLE%I(i+2*nelmax)
780 fp1=flop1(i)*dtlim1(i)
781 fp2=flop2(i)*dtlim2(i)
782 fp3=flop3(i)*dtlim3(i)
784 vol1=svol1(i)-( fp1-fp3)
785 vol2=svol2(i)-(-fp1+fp2)
786 vol3=svol3(i)-(-fp2+fp3)
788 IF(vol1.LT.mesh%SURFAC%R(i)*ht%R(i1)*tiers)
THEN 789 IF(t7%R(i1).GT.t1%R(i1))
THEN 791 vol1=vol1+(mesh%SURFAC%R(i)*ht%R(i1)*tiers-vol1)
792 & *(t1%R(i1)/t7%R(i1))
795 vol1=mesh%SURFAC%R(i)*ht%R(i1)*tiers
798 IF(t1%R(i1).GT.t7%R(i1))
THEN 800 vol1=vol1-(vol1+(min( fp1,0.d0)+min(-fp3,0.d0)))
801 & *(t7%R(i1)/t1%R(i1))
804 vol1=-(min( fp1,0.d0)+min(-fp3,0.d0))
808 IF(vol2.LT.mesh%SURFAC%R(i)*ht%R(i2)*tiers)
THEN 809 IF(t7%R(i2).GT.t1%R(i2))
THEN 811 vol2=vol2+(mesh%SURFAC%R(i)*ht%R(i2)*tiers-vol2)
812 & *(t1%R(i2)/t7%R(i2))
815 vol2=mesh%SURFAC%R(i)*ht%R(i2)*tiers
818 IF(t1%R(i2).GT.t7%R(i2))
THEN 820 vol2=vol2-(vol2+(min(-fp1,0.d0)+min( fp2,0.d0)))
821 & *(t7%R(i2)/t1%R(i2))
824 vol2=-(min(-fp1,0.d0)+min( fp2,0.d0))
828 IF(vol3.LT.mesh%SURFAC%R(i)*ht%R(i3)*tiers)
THEN 829 IF(t7%R(i3).GT.t1%R(i3))
THEN 831 vol3=vol3+(mesh%SURFAC%R(i)*ht%R(i3)*tiers-vol3)
832 & *(t1%R(i3)/t7%R(i3))
835 vol3=mesh%SURFAC%R(i)*ht%R(i3)*tiers
838 IF(t1%R(i3).GT.t7%R(i3))
THEN 840 vol3=vol3-(vol3+(min(-fp2,0.d0)+min( fp3,0.d0)))
841 & *(t7%R(i3)/t1%R(i3))
844 vol3=-(min(-fp2,0.d0)+min( fp3,0.d0))
856 t6%R(i)=f%R(i)*ht%R(i)
869 i2=mesh%IKLE%I(i +nelmax)
870 i3=mesh%IKLE%I(i+2*nelmax)
871 localmin=min( f%R(i1), f%R(i2), f%R(i3),
872 & t3%R(i1),t3%R(i2),t3%R(i3))
873 localmax=max( f%R(i1), f%R(i2), f%R(i3),
874 & t3%R(i1),t3%R(i2),t3%R(i3))
875 t1%R(i1)=min(t1%R(i1),localmin)
876 t1%R(i2)=min(t1%R(i2),localmin)
877 t1%R(i3)=min(t1%R(i3),localmin)
878 t7%R(i1)=max(t7%R(i1),localmax)
879 t7%R(i2)=max(t7%R(i2),localmax)
880 t7%R(i3)=max(t7%R(i3),localmax)
902 i2=mesh%IKLE%I(i +nelmax)
903 i3=mesh%IKLE%I(i+2*nelmax)
907 fp1=flop1(i)*dtlim1(i)
908 fp2=flop2(i)*dtlim2(i)
909 fp3=flop3(i)*dtlim3(i)
911 fi1=(t3%R(i1)-f%R(i1))*svol1(i)
912 fi2=(t3%R(i2)-f%R(i2))*svol2(i)
913 fi3=(t3%R(i3)-f%R(i3))*svol3(i)
918 t5%R(i1)=t5%R(i1)+fi1
919 t5%R(i2)=t5%R(i2)+fi2
920 t5%R(i3)=t5%R(i3)+fi3
924 fip1=-min(fp1,0.d0)*(f%R(i2)-f%R(i1))
925 & +max(fp3,0.d0)*(f%R(i3)-f%R(i1))
926 fip2=+max(fp1,0.d0)*(f%R(i1)-f%R(i2))
927 & -min(fp2,0.d0)*(f%R(i3)-f%R(i2))
928 fip3=+max(fp2,0.d0)*(f%R(i2)-f%R(i3))
929 & -min(fp3,0.d0)*(f%R(i1)-f%R(i3))
934 IF(fitot.GT.eps_flux)
THEN 939 coef=fitot/(beta1+beta2+beta3)
943 ELSEIF(fitot.LT.-eps_flux)
THEN 948 coef=fitot/(beta1+beta2+beta3)
966 IF(fitot.GT.eps_flux)
THEN 971 coef=fitot/(beta1+beta2+beta3)
975 ELSEIF(fitot.LT.-eps_flux)
THEN 980 coef=fitot/(beta1+beta2+beta3)
988 t5%R(i1)=t5%R(i1)+fi1
989 t5%R(i2)=t5%R(i2)+fi2
990 t5%R(i3)=t5%R(i3)+fi3
994 ELSEIF(optadv.EQ.2)
THEN 1002 i2=mesh%IKLE%I(i +nelmax)
1003 i3=mesh%IKLE%I(i+2*nelmax)
1007 fp1=flop1(i)*dtlim1(i)
1008 fp2=flop2(i)*dtlim2(i)
1009 fp3=flop3(i)*dtlim3(i)
1011 fi1=(f%R(i1)-t3%R(i1))*svol1(i)
1012 fi2=(f%R(i2)-t3%R(i2))*svol2(i)
1013 fi3=(f%R(i3)-t3%R(i3))*svol3(i)
1017 t5%R(i1)=t5%R(i1)-fi1
1018 t5%R(i2)=t5%R(i2)-fi2
1019 t5%R(i3)=t5%R(i3)-fi3
1023 vold1=max(0.d0,svol1(i)+min(fp1,0.d0)-max(fp3,0.d0))
1024 vold2=max(0.d0,svol2(i)-max(fp1,0.d0)+min(fp2,0.d0))
1025 vold3=max(0.d0,svol3(i)-max(fp2,0.d0)+min(fp3,0.d0))
1026 a1=2.d0*vold1/max(1.d-30, max(fp1,0.d0)-min(fp3,0.d0))
1027 a2=2.d0*vold2/max(1.d-30,-min(fp1,0.d0)+max(fp2,0.d0))
1028 a3=2.d0*vold3/max(1.d-30,-min(fp2,0.d0)+max(fp3,0.d0))
1029 fs1=min(t3%R(i1),f%R(i1)+a1*(f%R(i1)-t1%R(i1)))
1030 fs1=max(fs1 ,f%R(i1)+a1*(f%R(i1)-t7%R(i1)))
1031 fs2=min(t3%R(i2),f%R(i2)+a2*(f%R(i2)-t1%R(i2)))
1032 fs2=max(fs2 ,f%R(i2)+a2*(f%R(i2)-t7%R(i2)))
1033 fs3=min(t3%R(i3),f%R(i3)+a3*(f%R(i3)-t1%R(i3)))
1034 fs3=max(fs3 ,f%R(i3)+a3*(f%R(i3)-t7%R(i3)))
1036 fip1=0.5d0*(-min(fp1,0.d0)*(fs2-f%R(i1)+f%R(i2)-f%R(i1))
1037 & +max(fp3,0.d0)*(fs3-f%R(i1)+f%R(i3)-f%R(i1))
1038 & -max(fp1,0.d0)*(fs1-f%R(i1))
1039 & +min(fp3,0.d0)*(fs1-f%R(i1)))
1040 fip2=0.5d0*(+max(fp1,0.d0)*(fs1-f%R(i2)+f%R(i1)-f%R(i2))
1041 & -min(fp2,0.d0)*(fs3-f%R(i2)+f%R(i3)-f%R(i2))
1042 & +min(fp1,0.d0)*(fs2-f%R(i2))
1043 & -max(fp2,0.d0)*(fs2-f%R(i2)))
1044 fip3=0.5d0*(+max(fp2,0.d0)*(fs2-f%R(i3)+f%R(i2)-f%R(i3))
1045 & -min(fp3,0.d0)*(fs1-f%R(i3)+f%R(i1)-f%R(i3))
1046 & +min(fp2,0.d0)*(fs3-f%R(i3))
1047 & -max(fp3,0.d0)*(fs3-f%R(i3)))
1052 fitot=fip1+fip2+fip3
1053 IF(fitot.GT.eps_flux)
THEN 1055 beta1=max(fip1,0.d0)
1056 beta2=max(fip2,0.d0)
1057 beta3=max(fip3,0.d0)
1058 coef=fitot/(beta1+beta2+beta3)
1062 ELSEIF(fitot.LT.-eps_flux)
THEN 1064 beta1=min(fip1,0.d0)
1065 beta2=min(fip2,0.d0)
1066 beta3=min(fip3,0.d0)
1067 coef=fitot/(beta1+beta2+beta3)
1086 IF(fitot.GT.eps_flux)
THEN 1091 coef=fitot/(beta1+beta2+beta3)
1095 ELSEIF(fitot.LT.-eps_flux)
THEN 1100 coef=fitot/(beta1+beta2+beta3)
1108 t5%R(i1)=t5%R(i1)+fi1
1109 t5%R(i2)=t5%R(i2)+fi2
1110 t5%R(i3)=t5%R(i3)+fi3
1115 WRITE(
lu,*)
'UNKNOWN OPTION IN CVTRVF_ERIA: ',optadv
1124 IF(ncsize.GT.1)
CALL parcom(t5,2,mesh)
1125 CALL os(
'X=XY ',x=t5,y=unsv2d)
1128 IF(ht%R(i).GT.1.d-15)
THEN 1129 t3%R(i)=(t6%R(i)+t5%R(i))/ht%R(i)
1131 t3%R(i)=min(fmax,max(fmin,t3%R(i)))
1151 IF(dtlim1(i).EQ.dt.AND.dtlim2(i).EQ.dt.AND.
1152 & dtlim3(i).EQ.dt)
THEN 1157 newremain=newremain+1
1161 flop1(i)=flop1(i)*(1.d0-dtlim1(i)*surdt)
1162 flop2(i)=flop2(i)*(1.d0-dtlim2(i)*surdt)
1163 flop3(i)=flop3(i)*(1.d0-dtlim3(i)*surdt)
1164 c=c+abs(flop1(i))+abs(flop2(i))+abs(flop3(i))
1168 IF(ncsize.GT.1) c=
p_sum(c)
1169 IF(testing)
WRITE(
lu,*)
'FLUX NON PRIS EN COMPTE=',c
1173 IF(c.NE.cprev.AND.abs(c-cprev).GT.cinit*1.d-9
1174 & .AND.c.NE.0.d0)
THEN 1176 IF(niter.LT.nitmax)
GO TO 777
1182 IF(optsou.EQ.1)
THEN 1184 IF(smh%R(i).LT.0.d0)
THEN 1185 ht%R(i)=ht%R(i)+dt*smh%R(i)
1186 f%R(i)=f%R(i)+dt/max(ht%R(i),1.d-4)*smh%R(i)*fscexp%R(i)
1189 ELSEIF(optsou.EQ.2)
THEN 1191 IF(smh%R(i).LT.0.d0)
THEN 1192 ht%R(i)=ht%R(i)+dt*smh%R(i)*unsv2d%R(i)
1193 f%R(i)=f%R(i)+dt/max(ht%R(i),1.d-4)*
1194 & unsv2d%R(i)*smh%R(i)*fscexp%R(i)
1204 c=min(pluie%R(i),0.d0)
1207 ht%R(i)=ht%R(i)+c*dt
1211 f%R(i)=f%R(i)*(1.d0-((c*dt)/max(ht%R(i),1.d-4)))
1221 hfl1=dt*unsv2d%R(i)*max(t2%R(i),0.d0)
1223 IF(hfl1.GT.ht%R(i)) tet=ht%R(i)/hfl1
1225 ht%R(i)=max(ht%R(i)-hfl1*tet,0.d0)
1229 IF(limtra(iptfr).EQ.kdir)
THEN 1230 f%R(i)=f%R(i)-hfl1*tet/max(ht%R(i),1.d-4)*
1231 & (fbor%R(iptfr)-f%R(i))
1232 flbortra%R(iptfr)=flbor%R(iptfr)*fbor%R(iptfr)
1233 ELSEIF(limtra(iptfr).EQ.kddl)
THEN 1234 flbortra%R(iptfr)=flbor%R(iptfr)*f%R(i)
1241 c=c+(ht%R(i)-h%R(i))**2
1244 IF(ncsize.GT.1) c=
p_sum(c)
1245 WRITE(
lu,*)
'DIFFERENCE ENTRE H ET HT =',c
1251 IF(ncsize.GT.1) c=
p_min(c)
1252 WRITE(
lu,*)
'APRES TRAITEMENT TRACEUR MIN=',c
1257 IF(ncsize.GT.1) c=
p_max(c)
1258 WRITE(
lu,*)
'APRES TRAITEMENT TRACEUR MAX=',c
1271 f%R(i)=(f%R(i)+dt*sm%R(i))/
1272 & (1.d0-dt*smi%R(i)/max(h%R(i),1.d-15))
1276 ELSEIF(iopt2.EQ.1)
THEN 1280 f%R(i)=(f%R(i)*ht%R(i)+dt*sm%R(i)*h%R(i))/
1281 & (h%R(i)-dt*smi%R(i))
1290 f%R(i) = f%R(i)+dt*sm%R(i)
1301 IF(niter.EQ.nitmax)
THEN 1305 102
FORMAT(
' CVTRVF_ERIA (SCHEME ERIA, 15): ',1i3,
' ITERATIONS')
1306 103
FORMAT(
' CVTRVF_ERIA (SCHEME ERIA, 15): ',1i3,
' ITERATIONS',
1308 & /,
'INCREASE MAXIMUM NUMBER OF ITERATIONS FOR ADVECTION SCHEMES')
subroutine parcom2_seg(X1, X2, X3, NSEG, NPLAN, ICOM, IAN, MESH, OPT, IELM)
subroutine cvtrvf_eria(F, FN, FSCEXP, H, HN, HPROP, UDEL, VDEL, DM1, ZCONV, SOLSYS, SM, SMH, YASMH, SMI, YASMI, FBOR, MASKTR, MESH, T1, T2, T3, T4, T5, T6, T7, HT, DT, ENTET, MSK, MASKEL, OPTSOU, LIMTRA, KDIR, KDDL, NPTFR, FLBOR, YAFLBOR, UNSV2D, IOPT, FLBORTRA, NBOR, RAIN, PLUIE, TRAIN, NITMAX, NCO_DIST, OPTADV)
subroutine vector(VEC, OP, FORMUL, IELM1, XMUL, F, G, H, U, V, W, MESH, MSK, MASKEL, LEGO, ASSPAR)
subroutine osdb(OP, X, Y, Z, C, MESH)
subroutine flux_ef_vf(FLOW, PHIEL, NSEG, NELEM, NELMAX, ELTSEG, ORISEG, IKLE, INIFLO, IOPT, FN, YAFLULIM, FLULIM, YAFLULIMEBE, FLULIMEBE)
subroutine os(OP, X, Y, Z, C, IOPT, INFINI, ZERO)
subroutine parcom(X, ICOM, MESH)
integer, dimension(:), allocatable indic_cpos