5 &(dtmax,hstart,fxmat,fxmatpar,mas,dt,fxbor,smh,yasmh,tab1,nseg,
6 & npoin,nptfr,gloseg,sizglo,mesh,msk,maskpt,rain,pluie,fc,
7 & nelem,ikle,limtra,kdir,kddl,fbor,fscexp,train,nbor,minfc,maxfc,
129 INTEGER,
INTENT(IN) :: NSEG,NPOIN,NPTFR,SIZGLO,OPT
130 INTEGER,
INTENT(IN) :: GLOSEG(sizglo,2),NELEM
131 INTEGER,
INTENT(IN) :: IKLE(nelem,3),NBOR(nptfr)
132 INTEGER,
INTENT(IN) :: LIMTRA(nptfr),KDIR,KDDL
133 DOUBLE PRECISION,
INTENT(INOUT) :: DTMAX
134 DOUBLE PRECISION,
INTENT(IN) :: DT,HSTART(npoin)
135 DOUBLE PRECISION,
INTENT(IN) :: MAS(npoin),SMH(*)
136 DOUBLE PRECISION,
INTENT(IN) :: PLUIE(*)
138 DOUBLE PRECISION,
INTENT(IN) :: FXBOR(npoin)
139 DOUBLE PRECISION,
INTENT(IN) :: FXMAT(nseg),FXMATPAR(nseg)
140 DOUBLE PRECISION,
INTENT(INOUT) :: FC(npoin)
141 DOUBLE PRECISION,
INTENT(IN) :: FSCEXP(*)
142 DOUBLE PRECISION,
INTENT(IN) :: FBOR(nptfr),TRAIN,SECU
143 LOGICAL,
INTENT(IN) :: YASMH,MSK,RAIN,WITHABS
144 TYPE(bief_obj),
INTENT(INOUT) :: TAB1,MINFC,MAXFC
145 TYPE(bief_mesh),
INTENT(INOUT) :: MESH
146 TYPE(bief_obj),
INTENT(IN) :: MASKPT
150 INTEGER I,J,IELEM,I1,I2,I3,N,ISEG
151 DOUBLE PRECISION DI,MINEL,MAXEL
161 IF(opt.EQ.2.OR.opt.EQ.3)
THEN 174 fc(i)=max(fc(i),minfc%R(i))
175 fc(i)=min(fc(i),maxfc%R(i))
178 ELSEIF(opt.EQ.2)
THEN 186 IF(limtra(i).EQ.kdir)
THEN 188 minfc%R(n)=min(minfc%R(n),fbor(i))
189 maxfc%R(n)=max(maxfc%R(n),fbor(i))
197 minel=min(fc(i1),fc(i2),fc(i3))
198 maxel=max(fc(i1),fc(i2),fc(i3))
199 minfc%R(i1)=min(minfc%R(i1),minel)
200 minfc%R(i2)=min(minfc%R(i2),minel)
201 minfc%R(i3)=min(minfc%R(i3),minel)
202 maxfc%R(i1)=max(maxfc%R(i1),maxel)
203 maxfc%R(i2)=max(maxfc%R(i2),maxel)
204 maxfc%R(i3)=max(maxfc%R(i3),maxel)
207 IF(yasmh.AND.rain)
THEN 209 minfc%R(i)=min(minfc%R(i),fscexp(i),train)
210 maxfc%R(i)=max(maxfc%R(i),fscexp(i),train)
214 minfc%R(i)=min(minfc%R(i),fscexp(i))
215 maxfc%R(i)=max(maxfc%R(i),fscexp(i))
219 minfc%R(i)=min(minfc%R(i),train)
220 maxfc%R(i)=max(maxfc%R(i),train)
254 tab1%R(gloseg(i,1)) = tab1%R(gloseg(i,1)) + abs(fxmat(i))
255 tab1%R(gloseg(i,2)) = tab1%R(gloseg(i,2)) + abs(fxmat(i))
259 IF(fxmatpar(i).GT.0.d0)
THEN 261 tab1%R(gloseg(i,1)) = tab1%R(gloseg(i,1)) + fxmat(i)
264 tab1%R(gloseg(i,2)) = tab1%R(gloseg(i,2)) - fxmat(i)
269 IF(ncsize.GT.1)
CALL parcom(tab1,2,mesh)
273 CALL os(
'X=XY ',x=tab1,y=maskpt)
283 IF(yasmh.AND.rain)
THEN 286 tab1%R(i)=tab1%R(i)+abs(fxbor(i))
287 & +abs(smh(i)+pluie(i))
291 tab1%R(i)=tab1%R(i)+max(fxbor(i),0.d0)
292 & -min(smh(i)+pluie(i),0.d0)
298 tab1%R(i)=tab1%R(i)+abs(fxbor(i))+abs(smh(i))
302 tab1%R(i)=tab1%R(i)+max(fxbor(i),0.d0)-min(smh(i),0.d0)
308 tab1%R(i)=tab1%R(i)+abs(fxbor(i))+abs(pluie(i))
312 tab1%R(i)=tab1%R(i)+max(fxbor(i),0.d0)-min(pluie(i),0.d0)
318 tab1%R(i)=tab1%R(i)+abs(fxbor(i))
322 tab1%R(i)=tab1%R(i)+max(fxbor(i),0.d0)
328 IF(tab1%R(i).GT.1.d-20)
THEN 329 minfc%R(i)=secu*mas(i)*hstart(i)/tab1%R(i)
330 dtmax=min(dtmax,minfc%R(i))
336 ELSEIF(opt.EQ.2.OR.opt.EQ.3)
THEN 351 IF(fxmatpar(iseg).LT.0.d0)
THEN 353 & -fxmat(iseg)*(fc(j)-maxfc%R(i))
355 & +fxmat(iseg)*(fc(j)-maxfc%R(j))
358 & -fxmat(iseg)*(fc(i)-maxfc%R(i))
360 & +fxmat(iseg)*(fc(i)-maxfc%R(j))
365 IF(limtra(i).EQ.kdir)
THEN 369 & -min(fxbor(n),0.d0)*(fbor(i)-maxfc%R(n))
370 ELSEIF(limtra(i).EQ.kddl)
THEN 373 & -max(fxbor(n),0.d0)*(fc(n) -maxfc%R(n))
380 & +max(smh(i),0.d0)*(fscexp(i)-maxfc%R(i))
381 & +min(smh(i),0.d0)*(fc(i) -maxfc%R(i))
388 & +max(pluie(i),0.d0)*(train-maxfc%R(i))
389 & +min(pluie(i),0.d0)*(fc(i)-maxfc%R(i))
393 IF(ncsize.GT.1)
CALL parcom(tab1,2,mesh)
397 IF(msk)
CALL os(
'X=XY ',x=tab1,y=maskpt)
401 IF(di.GT.1.d-12)
THEN 402 dtmax = min(dtmax,hstart(i)*(maxfc%R(i)-fc(i))/di)
415 IF(fxmatpar(iseg).LT.0.d0)
THEN 417 & -fxmat(iseg)*(fc(j)-minfc%R(i))
419 & +fxmat(iseg)*(fc(j)-minfc%R(j))
422 & -fxmat(iseg)*(fc(i)-minfc%R(i))
424 & +fxmat(iseg)*(fc(i)-minfc%R(j))
429 IF(limtra(i).EQ.kdir)
THEN 433 & -min(fxbor(n),0.d0)*(fbor(i)-minfc%R(n))
434 ELSEIF(limtra(i).EQ.kddl)
THEN 437 & -max(fxbor(n),0.d0)*(fc(n) -minfc%R(n))
444 & +max(smh(i),0.d0)*(fscexp(i)-minfc%R(i))
445 & +min(smh(i),0.d0)*(fc(i) -minfc%R(i))
452 & +max(pluie(i),0.d0)*(train-minfc%R(i))
453 & +min(pluie(i),0.d0)*(fc(i)-minfc%R(i))
457 IF(ncsize.GT.1)
CALL parcom(tab1,2,mesh)
461 IF(msk)
CALL os(
'X=XY ',x=tab1,y=maskpt)
465 IF(di.LT.-1.d-12)
THEN 466 dtmax = min(dtmax,hstart(i)*(minfc%R(i)-fc(i))/di)
472 WRITE(
lu,*)
'UNKNOWN OPTION IN CFLVF: ',opt
subroutine cflvf(DTMAX, HSTART, FXMAT, FXMATPAR, MAS, DT, FXBOR, SMH, YASMH, TAB1, NSEG, NPOIN, NPTFR, GLOSEG, SIZGLO, MESH, MSK, MASKPT, RAIN, PLUIE, FC, NELEM, IKLE, LIMTRA, KDIR, KDDL, FBOR, FSCEXP, TRAIN, NBOR, MINFC, MAXFC, SECU, OPT, WITHABS)
subroutine os(OP, X, Y, Z, C, IOPT, INFINI, ZERO)
subroutine parcom(X, ICOM, MESH)