5 &(zfcl_w,nlayer,zr,zf,estrat,elay,masbas,acladm,nsicla,npoin,
6 & elay0,voltot,es,avail,const_alayer,estratnew,nlaynew)
103 type(bief_obj),
INTENT(IN) :: zfcl_w,zr,zf
104 type(bief_obj),
INTENT(IN) :: masbas,acladm
105 INTEGER,
INTENT(IN) :: NSICLA,NPOIN
106 LOGICAL,
INTENT(IN) :: CONST_ALAYER
107 type(bief_obj),
INTENT(INOUT) :: nlayer,estrat,elay
108 DOUBLE PRECISION,
INTENT(INOUT) :: ELAY0
109 DOUBLE PRECISION,
INTENT(INOUT) :: ES(npoin,
nomblay)
110 DOUBLE PRECISION,
INTENT(INOUT) :: AVAIL(npoin,
nomblay,nsicla)
111 DOUBLE PRECISION,
INTENT(INOUT) :: VOLTOT(nsicla),ESTRATNEW(npoin)
112 INTEGER ,
INTENT(INOUT) :: NLAYNEW(npoin)
116 INTEGER I,J,K,ARRET,ARRET2
117 DOUBLE PRECISION EVOL,HEIGH,TEST1,TEST2,AUX
126 DOUBLE PRECISION,
PARAMETER :: ZERO = 1.d-7
145 IF(.NOT.const_alayer) elay0 = 3.d0 * acladm%R(j)
147 nlaynew(j) = nlayer%I(j)
154 heigh = zf%R(j)-zr%R(j)
167 evol = evol + zfcl_w%ADR(i)%P%R(j)
170 IF(nlayer%I(j).GT.1)
THEN 172 IF(evol.GE.0.d0)
THEN 177 estratnew(j) = estrat%R(j) + evol
190 aux=(avail(j,1,i)*elay0+zfcl_w%ADR(i)%P%R(j))/
194 avail(j,2,i)=(aux*evol+avail(j,2,i)*estrat%R(j))/
199 avail(j,1,i)=( avail(j,1,i)*elay0-aux*evol
200 & +zfcl_w%ADR(i)%P%R(j) )/elay0
209 IF(avail(j,1,i).GT.1.d0+zero.OR.
210 & avail(j,1,i).LT.-zero)
THEN 211 WRITE(
lu,*)
'ERROR IN LAYER CASE 1' 219 ELSEIF(evol.GT.-elay0)
THEN 226 IF(-evol.GT.estrat%R(j))
THEN 233 IF(nlayer%I(j).GT.2)
THEN 236 avail(j,1,i) = ( avail(j,1,i)*elay0
237 & + zfcl_w%ADR(i)%P%R(j)
238 & + avail(j,2,i)*estrat%R(j)
239 & - avail(j,3,i)*(evol+estrat%R(j))
241 IF(avail(j,1,i).GT.1.d0+zero.OR.
242 & avail(j,1,i).LT.-zero)
THEN 243 WRITE(
lu,*)
'ERROR IN LAYER CASE 2' 247 avail(j,2,i) = avail(j,3,i)
248 DO k=3,min(
nomblay-1,nlayer%I(j))
249 avail(j,k,i) = avail(j,k+1,i)
253 nlaynew(j) = nlayer%I(j) - 1
254 estratnew(j) = estrat%R(j) + evol + es(j,3)
255 DO k=3,min(
nomblay-1,nlayer%I(j))
259 es(j,nlayer%I(j)) = 0.d0
260 avail(j,nlayer%I(j),1) = 1.d0
262 avail(j,nlayer%I(j),i) = 0.d0
271 IF(heigh.GT.0.d0)
THEN 272 avail(j,1,i) = ( avail(j,1,i)*elay0
273 & + zfcl_w%ADR(i)%P%R(j)
274 & + estrat%R(j)*avail(j,2,i)
275 & )/(elay0+evol+estrat%R(j))
280 IF(avail(j,1,i).GT.1.d0+zero.OR.
281 & avail(j,1,i).LT.-zero)
THEN 282 WRITE(
lu,*)
'J=',j,
' NLAYER%I(J)=',nlayer%I(j)
283 WRITE(
lu,*)
'AVAIL(J,1,I)=',avail(j,1,i)
284 WRITE(
lu,*)
'AVAIL(J,2,I)=',avail(j,2,i)
285 WRITE(
lu,*)
'ZFCL=',zfcl_w%ADR(i)%P%R(j)
286 WRITE(
lu,*)
'HEIGH=',heigh,
' ELAY0=',elay0
287 WRITE(
lu,*)
'ESTRAT%R(J)=',estrat%R(j)
288 WRITE(
lu,*)
'ELAY%R(J)=',elay%R(j)
289 WRITE(
lu,*)
'EVOL=',evol
290 WRITE(
lu,*)
'ERROR IN LAYER CASE 3' 303 nlaynew(j) = nlayer%I(j) - 1
308 es(j,nlaynew(j)+1) = 0.d0
315 avail(j,1,i) = ( avail(j,1,i) * elay0
316 & + zfcl_w%ADR(i)%P%R(j)
317 & - evol*avail(j,2,i) )/elay0
318 IF(avail(j,1,i).GT.1.d0+zero.OR.
319 & avail(j,1,i).LT.-zero)
THEN 320 WRITE(
lu,*)
'ERROR IN LAYER CASE 4' 326 estratnew(j) = estrat%R(j) + evol
334 WRITE(
lu,*)
'TOO MUCH EROSION AT POINT J=',j
335 WRITE(
lu,*)
'DECREASE DT OR INCREASE ELAY0' 336 WRITE(
lu,*)
'EVOL=', evol,
'ELAY0=',elay0
351 IF(heigh.GT.elay0)
THEN 353 estratnew(j) = heigh - elay0
356 avail(j,2,i) = avail(j,1,i)
357 avail(j,1,i) = (avail(j,1,i) * (elay0-evol)
358 & + zfcl_w%ADR(i)%P%R(j) )/elay0
359 IF(avail(j,1,i).GT.1.d0+zero.OR.
360 & avail(j,1,i).LT.-zero)
THEN 361 WRITE(
lu,*)
'ERROR IN LAYER CASE 5' 374 IF(elay%R(j)+evol.GT.1.d-15)
THEN 377 avail(j,1,i) = (avail(j,1,i)*elay%R(j)+
378 & zfcl_w%ADR(i)%P%R(j))
394 IF(elay%R(j)+evol.LT.1.d-5)
THEN 399 avail(j,1,i)=max(0.d0,min(1.d0,avail(j,1,i)))
400 test1=test1+avail(j,1,i)
402 IF((test1-1.d0)**2.GT.zero)
THEN 404 avail(j,1,i)=avail(j,1,i)/max(test1,1.d-21)
428 nlayer%I(j) = nlaynew(j)
429 estrat%R(j) = estratnew(j)
434 es(j,2) = estrat%R(j)
442 IF(avail(j,k,i).GT.1.d0+zero.OR.avail(j,k,i).LT.-zero)
THEN 443 WRITE(
lu,*)
'ERROR ON FRACTIONS' 444 WRITE(
lu,*)
'LAYER ',k,
' CLASS ',i,
' POINT ',j
445 IF(avail(j,k,i).LT.0.d0)
THEN 446 WRITE(
lu,*)
'AVAIL=' ,avail(j,k,i)
448 WRITE(
lu,*)
'AVAIL-1=' ,avail(j,k,i)-1.d0
450 WRITE(
lu,*)
'ZFCL=',zfcl_w%ADR(i)%P%R(j)
451 WRITE(
lu,*)
'EVOL=',evol,
' ELAY=',elay%R(j)
455 avail(j,1,i)=max(avail(j,1,i),0.d0)
456 avail(j,1,i)=min(avail(j,1,i),1.d0)
459 test1 = test1 + avail(j,1,i)
460 test2 = test2 + avail(j,2,i)
465 IF(test1.GT.zero.AND.(test1-1.d0)**2>zero)
THEN 466 WRITE(
lu,*)
' PROBLEM IN LAYER: J,TEST1',j,test1
467 WRITE(
lu,*)
' IN LAYER 1 SUM OF FRACTIONS NOT 1' 470 IF(test2.GT.zero.AND.(test2-1.d0)**2>zero)
THEN 471 WRITE(
lu,*)
' PROBLEM IN LAYER: J,TEST2',j,test2
472 WRITE(
lu,*)
' IN LAYER 2 SUM OF FRACTIONS IS NOT 1' 488 voltot(i) = voltot(i) + es(j,k)*avail(j,k,i)*masbas%R(j)
495 voltot(i) =
p_dsum(voltot(i))
504 IF(ncsize.GT.1) arret2=
p_isum(arret)
506 WRITE(
lu,*)
'STOP AFTER AN ERROR IN LAYER' 508 WRITE(
lu,*)
'IN ',arret2,
' PROCESSOR(S)'
subroutine layer(ZFCL_W, NLAYER, ZR, ZF, ESTRAT, ELAY, MASBAS, ACLADM, NSICLA, NPOIN, ELAY0, VOLTOT, ES, AVAIL, CONST_ALAYER, ESTRATNEW, NLAYNEW)
integer function p_isum(MYPART)
double precision function p_dsum(MYPART)