5 &(t1,t2,t4,h,hn,mesh,flodel,compute_flodel,flbor,dt,
6 & unsv2d,npoin,gloseg1,gloseg2,nbor,nptfr,
7 & smh,yasmh,pluie,rain,optsou,flulim,limpro,hbor,kdir,info,
8 & flopoint,namecode,nitmax,makeflulim)
69 INTEGER,
INTENT(IN) :: NPOIN,NPTFR,OPTSOU,KDIR
70 INTEGER,
INTENT(IN) :: NITMAX
71 INTEGER,
INTENT(IN) :: GLOSEG1(*),GLOSEG2(*)
72 INTEGER,
INTENT(IN) :: NBOR(nptfr)
73 INTEGER,
INTENT(IN) :: LIMPRO(nptfr)
74 DOUBLE PRECISION,
INTENT(IN) :: DT,HBOR(nptfr)
75 DOUBLE PRECISION,
INTENT(INOUT) :: FLULIM(*)
76 TYPE(bief_mesh),
INTENT(INOUT) :: MESH
77 DOUBLE PRECISION,
INTENT(INOUT) :: FLOPOINT(mesh%nelem,3)
78 TYPE(bief_obj),
INTENT(INOUT) :: T1,T2,T4,FLODEL,H,FLBOR
79 TYPE(bief_obj),
INTENT(INOUT) :: PLUIE
80 TYPE(bief_obj),
INTENT(IN) :: UNSV2D,HN,SMH
81 LOGICAL,
INTENT(IN) :: YASMH,INFO,RAIN
82 LOGICAL,
INTENT(IN) :: COMPUTE_FLODEL
83 CHARACTER(LEN=24) :: NAMECODE
84 LOGICAL,
INTENT(IN) :: MAKEFLULIM
88 INTEGER I,I1,I2,IPTFR,REMAIN,NEWREMAIN,IR,NITER
89 INTEGER NELEM,NELMAX,NSEG
90 DOUBLE PRECISION C,CPREV,CINIT,HFL1
91 DOUBLE PRECISION SURDT,HSEG1,HSEG2,TET,HFL2
92 DOUBLE PRECISION,
PARAMETER :: TIERS=1.d0/3.d0
94 DOUBLE PRECISION,
PARAMETER :: EPS_FLUX = 1.d-15
95 LOGICAL,
PARAMETER :: TESTING = .false.
121 cinit=min(cinit,hn%R(i))
127 WRITE(
lu,*)
'AVANT TRAITEMENT HAUTEURS NEGATIVES, H MIN=',c
128 WRITE(
lu,*)
'AVANT TRAITEMENT HAUTEURS NEGATIVES, HN MIN=',cinit
133 c =c +h%R(i) *mesh%IFAC%I(i)/unsv2d%R(i)
134 cinit=cinit+hn%R(i)*mesh%IFAC%I(i)/unsv2d%R(i)
140 c =c +h%R(i) /unsv2d%R(i)
141 cinit=cinit+hn%R(i)/unsv2d%R(i)
144 WRITE(
lu,*)
'AVANT TRAITEMENT MASSE INITIALE=',cinit
145 WRITE(
lu,*)
'AVANT TRAITEMENT MASSE FINALE =',c
151 IF(compute_flodel)
THEN 153 CALL flux_ef_vf(flodel%R,flopoint,nseg,nelem,nelmax,
154 & mesh%ELTSEG%I,mesh%ORISEG%I,
155 & mesh%IKLE%I,.true.,2)
162 & nseg,1,2,1,mesh,1,11)
170 & mesh%NH_COM_SEG%DIM1,
171 & mesh%NB_NEIGHB_SEG,
172 & mesh%NB_NEIGHB_PT_SEG%I,
173 & mesh%LIST_SEND_SEG%I,nseg)
183 flulim(i)=flodel%R(i)
193 h%R(i)=hn%R(i)+dt*max(smh%R(i),0.d0)
195 ELSEIF(optsou.EQ.2)
THEN 197 h%R(i)=hn%R(i)+dt*max(smh%R(i),0.d0)*unsv2d%R(i)
210 h%R(i)=h%R(i)+dt*max(pluie%R(i),0.d0)
221 IF(ncsize.GT.1)
CALL os(
'X=0 ',x=t2)
222 CALL osdb(
'X=Y ' ,t2,flbor,flbor,0.d0,mesh)
224 IF(ncsize.GT.1)
CALL parcom(t2,2,mesh)
227 h%R(i)=h%R(i)-dt*unsv2d%R(i)*min(t2%R(i),0.d0)
244 cprev=cprev+abs(flodel%R(i))
246 IF(ncsize.GT.1) cprev=
p_sum(cprev)
247 IF(testing)
WRITE(
lu,*)
'INITIAL SUM OF FLUXES=',cprev
277 i=mesh%NACHB%I(nbmaxnshare*(iptfr-1)+1)
294 IF(flodel%R(i).GT.eps_flux)
THEN 295 t1%R(i1)=t1%R(i1)+flodel%R(i)
297 ELSEIF(flodel%R(i).LT.-eps_flux)
THEN 298 t1%R(i2)=t1%R(i2)-flodel%R(i)
311 i=mesh%NACHB%I(nbmaxnshare*(iptfr-1)+1)
315 IF(t1%R(i).GT.eps_flux)
THEN 323 h%R(i)=h%R(i)*mesh%IFAC%I(i)
337 IF(flodel%R(i).GT.eps_flux)
THEN 339 hseg1=t4%R(i1)*flodel%R(i)/t1%R(i1)
341 hfl1= dt*unsv2d%R(i1)*flodel%R(i)
342 IF(hfl1.GT.hseg1)
THEN 344 h%R(i2)=h%R(i2)+dt*unsv2d%R(i2)*flodel%R(i)*tet
345 flodel%R(i)=flodel%R(i)*(1.d0-tet)
347 newremain=newremain+1
350 h%R(i1)=h%R(i1)+hseg1-hfl1
351 h%R(i2)=h%R(i2)+dt*unsv2d%R(i2)*flodel%R(i)
354 ELSEIF(flodel%R(i).LT.-eps_flux)
THEN 356 hseg2=-t4%R(i2)*flodel%R(i)/t1%R(i2)
358 hfl2=-dt*unsv2d%R(i2)*flodel%R(i)
359 IF(hfl2.GT.hseg2)
THEN 362 h%R(i1)=h%R(i1)-dt*unsv2d%R(i1)*flodel%R(i)*tet
363 flodel%R(i)=flodel%R(i)*(1.d0-tet)
365 newremain=newremain+1
369 h%R(i1)=h%R(i1)-dt*unsv2d%R(i1)*flodel%R(i)
370 h%R(i2)=h%R(i2)+hseg2-hfl2
379 IF(ncsize.GT.1)
CALL parcom(h,2,mesh)
380 IF(ncsize.GT.1) c=
p_sum(c)
381 IF(testing)
WRITE(
lu,*)
'FLUX NON PRIS EN COMPTE=',c
385 IF(c.NE.cprev.AND.abs(c-cprev).GT.cinit*1.d-9
386 & .AND.c.NE.0.d0)
THEN 388 IF(niter.LT.nitmax)
GO TO 777
397 h%R(i)=h%R(i)+dt*min(smh%R(i),0.d0)
399 ELSEIF(optsou.EQ.2)
THEN 401 h%R(i)=h%R(i)+dt*min(smh%R(i),0.d0)*unsv2d%R(i)
410 IF(-dt*pluie%R(i).LT.h%R(i))
THEN 411 h%R(i)=h%R(i)+dt*min(pluie%R(i),0.d0)
413 pluie%R(i)=-h%R(i)/dt
426 hfl1=dt*unsv2d%R(i)*max(t2%R(i),0.d0)
427 IF(hfl1.GT.h%R(i))
THEN 429 flbor%R(iptfr)=flbor%R(iptfr)*h%R(i)/hfl1
434 IF(limpro(iptfr).EQ.kdir)
THEN 435 IF(hbor(iptfr).LT.0.d0)
THEN 436 WRITE(
lu,*)
'NEGATIVE DEPTH PRESCRIBED ON BOUNDARY' 437 WRITE(
lu,*)
'CHECK YOUR SPECIFIC SUBROUTINE:' 438 IF(namecode(1:7).EQ.
'SISYPHE')
THEN 439 WRITE(
lu,*)
'BEDLOAD_SOLVS_FE' 440 ELSEIF(namecode(1:4).EQ.
'GAIA')
THEN 441 WRITE(
lu,*)
'BEDLOAD_SOLVS_FE' 442 ELSEIF(namecode(1:9).EQ.
'TELEMAC2D')
THEN 444 ELSEIF(namecode(1:9).EQ.
'TELEMAC3D')
THEN 451 flbor%R(iptfr)=flbor%R(iptfr)
452 & +(h%R(i)-hbor(iptfr))/(dt*unsv2d%R(i))
462 IF(ncsize.GT.1) c=
p_min(c)
463 WRITE(
lu,*)
'APRES TRAITEMENT HAUTEURS NEGATIVES, HMIN=',c
467 c=c+h%R(i)*mesh%IFAC%I(i)/unsv2d%R(i)
472 c=c+h%R(i)/unsv2d%R(i)
475 WRITE(
lu,*)
'APRES TRAITEMENT MASSE FINALE =',c
503 & nseg,1,2,1,mesh,1,11)
505 & nseg,1,2,1,mesh,1,11)
510 flodel%R(i)=flulim(i)-flodel%R(i)
512 IF(abs(flulim(i)).GT.eps_flux)
THEN 513 flulim(i)=flodel%R(i)/flulim(i)
524 & mesh%NH_COM_SEG%DIM1,
525 & mesh%NB_NEIGHB_SEG,
526 & mesh%NB_NEIGHB_PT_SEG%I,
527 & mesh%LIST_SEND_SEG%I,nseg)
542 t1%R(i1)=t1%R(i1)-dt*unsv2d%R(i1)*flodel%R(i)
543 t1%R(i2)=t1%R(i2)+dt*unsv2d%R(i2)*flodel%R(i)
547 t1%R(i)=t1%R(i)-dt*unsv2d%R(i)*flbor%R(iptfr)
549 IF(ncsize.GT.1)
CALL parcom(t1,2,mesh)
551 t1%R(i)=t1%R(i)+hn%R(i)-h%R(i)
553 WRITE(
lu,*)
'ERREUR POSITIVE_DEPTHS_NERD=',
p_dots(t1,t1,mesh)
559 IF(namecode(1:7).EQ.
'SISYPHE'.OR.namecode(1:4).EQ.
'GAIA')
THEN 566 IF(niter.EQ.nitmax)
THEN 567 IF(namecode(1:7).EQ.
'SISYPHE'.OR.namecode(1:4).EQ.
'GAIA')
THEN 574 102
FORMAT(
' BEDLOAD EQUATION SOLVED IN ',1i5,
' ITERATIONS')
575 202
FORMAT(
' POSITIVE DEPTHS OBTAINED IN ',1i5,
' ITERATIONS')
576 103
FORMAT(
' BEDLOAD EQUATION SOLVED IN ',1i5,
' ITERATIONS = MAXIMUM',
577 & /,
'INCREASE MAXIMUM NUMBER OF ITERATIONS FOR ADVECTION SCHEMES')
578 203
FORMAT(
' POSITIVE DEPTHS SOLVED IN ',1i5,
' ITERATIONS = MAXIMUM',
579 & /,
'INCREASE MAXIMUM NUMBER OF ITERATIONS FOR ADVECTION SCHEMES')
subroutine mult_interface_seg(FSEG, NH_COM_SEG, DIM1NHCOM, NB_NEIGHB_SEG, NB_NEIGHB_PT_SEG, LIST_SEND, NSEG)
subroutine parcom2_seg(X1, X2, X3, NSEG, NPLAN, ICOM, IAN, MESH, OPT, IELM)
subroutine positive_depths_nerd(T1, T2, T4, H, HN, MESH, FLODEL, COMPUTE_FLODEL, FLBOR, DT, UNSV2D, NPOIN, GLOSEG1, GLOSEG2, NBOR, NPTFR, SMH, YASMH, PLUIE, RAIN, OPTSOU, FLULIM, LIMPRO, HBOR, KDIR, INFO, FLOPOINT, NAMECODE, NITMAX, MAKEFLULIM)
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_pdept_nerd
double precision function p_dots(X, Y, MESH)