The TELEMAC-MASCARET system  trunk
layer.f
Go to the documentation of this file.
1 ! ****************
2  SUBROUTINE layer
3 ! ****************
4 !
5  &(zfcl_w,nlayer,zr,zf,estrat,elay,masbas,acladm,nsicla,npoin,
6  & elay0,voltot,es,avail,const_alayer,estratnew,nlaynew)
7 !
8 !***********************************************************************
9 ! SISYPHE V6P2 21/07/2011
10 !***********************************************************************
11 !
12 !brief COMPUTES AVAIL FOR EACH CLASS AND EACH LAYER;
13 !+ NEW STRATUM THICKNESS ESTRAT.
14 !+
15 !+ ACTIVE LAYER IS LAYER 1, IT IS KEPT AT A PRESCRIBED
16 !+ HEIGHT OF ELAY0 PROVIDED IT IS POSSIBLE
17 !+
18 !+ STRATUM IS LAYER 2 OF HEIGHT ESTRAT.
19 !
20 !history MATTHIEU GONZALES DE LINARES
21 !+ 2002
22 !+
23 !+
24 !
25 !history JMH
26 !+ 16/09/2009
27 !+
28 !+ AVAIL(NPOIN,10,NSICLA)
29 !
30 !history JMH
31 !+ 10/05/2010
32 !+ V6P0
33 !+ CASE WITH DEPOSITION REWRITTEN, TESTS CHANGED.
34 !
35 !history N. DURAND (HRW), S.E.BOURBAN (HRW)
36 !+ 13/07/2010
37 !+ V6P0
38 !+ Translation of French comments within the FORTRAN sources into
39 !+ English comments
40 !
41 !history N. DURAND (HRW), S.E.BOURBAN (HRW)
42 !+ 21/08/2010
43 !+ V6P0
44 !+ Creation of DOXYGEN tags for automated documentation and
45 !+ cross-referencing of the FORTRAN sources
46 !
47 !history J-M HERVOUET (LNHE)
48 !+ 12/04/2011
49 !+ V6P0
50 !+ One bug corrected in case of restart, and a formula made clearer
51 !+ Look for 12/04/2011...
52 !
53 !history C. VILLARET (EDF-LNHE), P.TASSI (EDF-LNHE)
54 !+ 19/07/2011
55 !+ V6P1
56 !+ Name of variables
57 !+
58 !history C. VILLARET (EDF-LNHE)
59 !+ 18/01/2012
60 !+ V6P1
61 !+ Dimension 10 of AVAIL changed into NOMBLAY
62 !
63 !history J,RIEHME (ADJOINTWARE)
64 !+ November 2016
65 !+ V7P2
66 !+ Replaced EXTERNAL statements to parallel functions / subroutines
67 !+ by the INTERFACE_PARALLEL
68 !
69 !history R.KOPMANN (BAW)
70 !+ Dezember 2017
71 !+ V7P2
72 !+ Zeroed the layer thicknesses if a layer was destroyed and setting
73 !+ the first class to 1 and all others to zero
74 !
75 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
76 !| ACLADM |-->| MEAN DIAMETER OF SEDIMENT
77 !| AVAIL |<->| SEDIMENT FRACTION FOR EACH LAYER, CLASS, POINT
78 !| CONST_ALAYER |-->| CONSTANT ACTIVE LAYER THICKNESS OR NOT
79 !| ELAY |<->| ACTIVE LAYER THICKNESS FOR EACH POINT
80 !| ELAY0 |<->| ACTIVE LAYER THICKNESS
81 !| ES |<->| LAYER THICKNESSES AS DOUBLE PRECISION
82 !| ESTRAT |<->| ACTIVE STRATUM THICKNESS FOR EACH POINT
83 !| ESTRATNEW |<->| ACTIVE STRATUM THICKNESS AT TIME T+DT
84 !| MASBAS |-->| INTEGRAL OF TEST FUNCTIONS
85 !| NLAYER |<--| NUMBER OF LAYER FOR EACH POINT
86 !| NLAYNEW |<->| NUMBER OF LAYER AT TIME T+DT
87 !| NPOIN |-->| NUMBER OF POINTS
88 !| NSICLA |-->| NUMBER OF SIZE CLASSES FOR BED MATERIALS
89 !| VOLTOT |<->| TOTAL VOLUME OF SEDIMENT IN THE BED
90 !| ZF |-->| ELEVATION OF BOTTOM
91 !| ZFCL_W |-->| BED EVOLUTION FOR EACH SEDIMENT CLASS
92 !| ZR |-->| NON ERODABLE BED
93 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
94 !
95  USE bief
96  USE declarations_sisyphe , ONLY : nomblay
98  USE interface_parallel, ONLY : p_dsum,p_isum
99  IMPLICIT NONE
100 !
101 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
102 !
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)
113 !
114 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
115 !
116  INTEGER I,J,K,ARRET,ARRET2
117  DOUBLE PRECISION EVOL,HEIGH,TEST1,TEST2,AUX
118 !
119 !-----------------------------------------------------------------------
120 !
121 ! TO CHECK FRACTIONS IN THE RANGE [-ZERO,1+ZERO]
122 !
123 ! DATA ZERO/1.D-10/
124 ! IN CASE OF RESTART, THE FIRST TIME STEP IS A BIT HARD BECAUSE OF
125 ! SINGLE PRECISION, WITHOUT RESTART 1.D-10 IS OK
126  DOUBLE PRECISION, PARAMETER :: ZERO = 1.d-7
127 !
128 !-----------------------------------------------------------------------
129 !
130  arret=0
131 !
132 !-----------------------------------------------------------------------
133 !
134  DO j=1,npoin
135 !
136 ! ACTIVATE BEFORE INVESTIGATING PROBLEMS IN LAYER...
137 ! LOOK FOR 'ACTIVATE' TO SEE OTHER LINES LIKE THIS BELOW
138 !
139 ! IF(ELAY%R(J).LT.0.D0) THEN
140 ! WRITE(LU,*) 'NEGATIVE ELAY IN LAYER J=',J,' ELAY=',ELAY%R(J)
141 ! CALL PLANTE(1)
142 ! STOP
143 ! ENDIF
144 !
145  IF(.NOT.const_alayer) elay0 = 3.d0 * acladm%R(j)
146 !
147  nlaynew(j) = nlayer%I(j)
148 !
149 ! TODO: QUESTION JMH, EVOLUTION HAS BEEN COMPUTED BEFORE IN ARRAY E, WHY NOT
150 ! EVOL=E(J) ?????
151 ! ELAY(J) = ES(J,1) WHY IS IT AN EXTRA ARRAY ??
152 !
153 !
154  heigh = zf%R(j)-zr%R(j)
155 !
156 ! ACTIVATE BEFORE INVESTIGATING PROBLEMS IN LAYER...
157 !
158 ! IF(HEIGH.LT.0.D0) THEN
159 ! WRITE(LU,*) 'BAD DATA IN LAYER J=',J,' HEIGH=',HEIGH
160 ! CALL PLANTE(1)
161 ! STOP
162 ! ENDIF
163 !
164 ! HERE ELAY.NE.HEIGH BECAUSE ELAY IS THE ACTIVE LAYER THICKNESS
165  evol = 0.d0
166  DO i=1,nsicla
167  evol = evol + zfcl_w%ADR(i)%P%R(j)
168  ENDDO
169 !
170  IF(nlayer%I(j).GT.1) THEN
171 !
172  IF(evol.GE.0.d0) THEN
173 !
174 ! DEPOSITION
175 !
176 ! NEW HEIGHT OF LAYER 2 (IT RECEIVES EVOL TO KEEP LAYER 1 CONSTANT)
177  estratnew(j) = estrat%R(j) + evol
178 !
179  DO i=1,nsicla
180 ! THE OLD IMPLEMENTATION CONSISTED OF FIRST
181 ! GIVING EVOL TO LAYER 2, WITH OLD AVAIL, THEN OF RECEIVING
182 ! THE DEPOSITION, BUT IF A CLASS DISAPPEARS IN LAYER 1,
183 ! IT IS NOT POSSIBLE TO GIVE IT FIRST TO LAYER 2, SO NEW
184 ! FRACTIONS MUST BE COMPUTED BEFORE GIVING EVOL TO LAYER 2
185 ! THEN I SEE NO DIFFERENCE BETWEEN EVOLELAY0
186 ! SO BOTH ARE TREATED BELOW, UNLIKE RELEASE 5.9.
187 !
188 ! 1) LAYER 1 RECEIVES ZFCL_W OF CLASS I, WE COMPUTE THE
189 ! PROVISIONAL NEW AVAIL(J,1,I) IN AUX
190  aux=(avail(j,1,i)*elay0+zfcl_w%ADR(i)%P%R(j))/
191  & (elay0+evol)
192 !
193 ! 2) LAYER 2 RECEIVES AUX*EVOL OF CLASS I (AUX MAY BE 0 HERE)
194  avail(j,2,i)=(aux*evol+avail(j,2,i)*estrat%R(j))/
195  & estratnew(j)
196 !
197 ! 3) SEEN FROM LAYER 1, AUX*EVOL OF CLASS I HAS BEEN GIVEN
198 ! AND THE NEW LAYER THICKNESS IS ELAY0, HENCE THE NEW AVAIL
199  avail(j,1,i)=( avail(j,1,i)*elay0-aux*evol
200  & +zfcl_w%ADR(i)%P%R(j) )/elay0
201 !
202 ! NOTE CV: CAN BE REPLACED BY
203 ! AVAIL(J,1,I)= AUX
204 !
205 ! OLD (AND WRONG) FORMULATION (IN IT -AVAIL*EVOL SHOULD BE -AUX*EVOL)
206 ! AVAIL(J,1,I)=( AVAIL(J,1,I)*(ELAY0-EVOL)
207 ! & +ZFCL_W%ADR(I)%P%R(J) )/ELAY0
208 !
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'
212  CALL plante(1)
213  stop
214  ENDIF
215  ENDDO
216 ! NEW HEIGHT OF LAYER 1
217  elay%R(j) = elay0
218 !
219  ELSEIF(evol.GT.-elay0) THEN
220 ! CV: I DON'T AGREE WITH THE COMMENT BELOW
221 ! WE'RE IN THE CASE : -ELAY0<EVOL<0 HENCE ELAY0>-EVOL>0
222 ! THICKNESS OF THE FIRST LAYER IS THEREFORE SUFFICIENT
223 !
224 ! EROSION GREATER THAN LAYER 1, WE HAVE TO DESTROY A STRATUM
225 !
226  IF(-evol.GT.estrat%R(j)) THEN
227 !
228 ! CV: USUALLY, LAYER 2 IS VERY BROAD AND TWO LAYERS ARE IN GENERAL SUFFICIENT
229 ! HERE LAYER 2 IS DESTROYED
230 !
231 ! USUAL CASE (NOTE JMH : WHY NOT .GE.2 ?
232 !
233  IF(nlayer%I(j).GT.2) THEN
234 !
235  DO i=1,nsicla
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))
240  & )/ elay0
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'
244  CALL plante(1)
245  stop
246  ENDIF
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)
250  ENDDO
251  ENDDO
252  elay%R(j) = elay0
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))
256  es(j,k) = es(j,k+1)
257  ENDDO
258 ! last layer must be zeroed, AVAIL: first class = 1, others = 0
259  es(j,nlayer%I(j)) = 0.d0
260  avail(j,nlayer%I(j),1) = 1.d0
261  DO i=2,nsicla
262  avail(j,nlayer%I(j),i) = 0.d0
263  ENDDO
264 
265 
266 !
267 ! HERE NLAYER.GT.1 AND NOT .GT.2, SO 2 !
268 !
269  ELSE
270  DO i=1,nsicla
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))
276 ! MODIF JMH 12/04/2011, WITH 2 LAYERS, LAYER 1
277 ! HAS ELAY%R(J)=ELAY0, SO WHY ELAY IN DENOMINATOR
278 ! AND ELAY0 IN NUMERATOR ? (VICIOUS!!)
279 ! & )/(ELAY%R(J)+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'
291  CALL plante(1)
292  stop
293  ENDIF
294  ELSE
295  avail(j,1,i) = 0.d0
296 ! Fraction 1 should be 1, if all the others are zero
297  avail(j,1,1) = 1.d0
298  ENDIF
299  avail(j,2,i) = 0.d0
300  ENDDO
301 ! Fraction 1 should be 1, if all the others are zero
302  avail(j,2,1) = 1.d0
303  nlaynew(j) = nlayer%I(j) - 1
304  elay%R(j) = heigh
305  estratnew(j) = 0.d0
306 ! a layer was just canceled, the layer thickness of the canceled layer
307 ! should be set to zero for graphic printout and restart
308  es(j,nlaynew(j)+1) = 0.d0
309  ENDIF
310 !
311 ! ONLY LAYER 1 ERODED
312 !
313  ELSE
314  DO i=1,nsicla
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'
321  CALL plante(1)
322  stop
323  ENDIF
324  ENDDO
325  elay%R(j) = elay0
326  estratnew(j) = estrat%R(j) + evol
327  ENDIF
328 !
329  ELSE
330 !
331 ! STOPS IF EROSION IS GREATER THAN
332 ! THICKNESS OF THE ACTIVE LAYER!
333 !
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
337  CALL plante(1)
338  stop
339 !
340 ! END OF TESTS ON EVOL
341 !
342  ENDIF
343 !
344 ! THERE WAS ONLY ONE LAYER
345 ! ------------------------
346 !
347  ELSE
348 !
349 ! IT IS NOW BIG ENOUGH TO MAKE TWO LAYERS
350 !
351  IF(heigh.GT.elay0) THEN
352  nlaynew(j) = 2
353  estratnew(j) = heigh - elay0
354  elay%R(j) = elay0
355  DO i=1,nsicla
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'
362  CALL plante(1)
363  stop
364  ENDIF
365  ENDDO
366 !
367 ! IF THERE REMAINS ONLY ONE LAYER
368 ! -------------------------------
369 !
370  ELSE
371 ! NOTE JMH: THE TRICKIEST PART...
372 ! THE PROBLEM OF 0/0 CREATED BY THE CHOICE OF AVAIL
373 ! AS MAIN VARIABLE...
374  IF(elay%R(j)+evol.GT.1.d-15) THEN
375  DO i=1,nsicla
376 ! AUX=AVAIL(J,1,I)
377  avail(j,1,i) = (avail(j,1,i)*elay%R(j)+
378  & zfcl_w%ADR(i)%P%R(j))
379  & / (elay%R(j)+evol)
380 ! IF(AVAIL(J,1,I).GT.1.D0+ZERO.OR.
381 ! & AVAIL(J,1,I).LT.-ZERO) THEN
382 ! WRITE(LU,*) 'ERROR IN LAYER CASE 6'
383 ! WRITE(LU,*) 'INITIAL AVAIL=',AUX
384 ! WRITE(LU,*) 'J=',J,' CLASS ',I
385 ! WRITE(LU,*) 'EVOL=',EVOL,' ELAY=',ELAY%R(J)
386 ! WRITE(LU,*) 'EVOL+ELAY=',EVOL+ELAY%R(J)
387 ! WRITE(LU,*) 'ZFCL=',ZFCL_W%ADR(I)%P%R(J)
388 ! WRITE(LU,*) 'DENOMINATOR=',ELAY%R(J)+EVOL
389 ! WRITE(LU,*) 'NUMERATOR=',AUX*ELAY%R(J)+
390 ! & ZFCL_W%ADR(I)%P%R(J)
391 ! ENDIF
392  avail(j,2,i) = 0.d0
393  ENDDO
394  IF(elay%R(j)+evol.LT.1.d-5) THEN
395 ! PLAYING WITH ZEROES, RISK OF SUM NOT EQUAL TO 1
396 ! ONLY BECAUSE OF TRUNCATION ERRORS, WE NORMALISE
397  test1=0.d0
398  DO i=1,nsicla
399  avail(j,1,i)=max(0.d0,min(1.d0,avail(j,1,i)))
400  test1=test1+avail(j,1,i)
401  ENDDO
402  IF((test1-1.d0)**2.GT.zero) THEN
403  DO i=1,nsicla
404  avail(j,1,i)=avail(j,1,i)/max(test1,1.d-21)
405  ENDDO
406  ENDIF
407  ENDIF
408  ELSE
409 ! ACLADM BEING RECOMPUTED WITH AVAIL
410  avail(j,1,1)=1.d0
411  avail(j,2,1)=1.d0
412  DO i=2,nsicla
413  avail(j,1,i) = 0.d0
414  avail(j,2,i) = 0.d0
415  ENDDO
416  ENDIF
417  elay%R(j) = heigh
418  estratnew(j) = 0.d0
419  nlaynew(j) = 1
420 !RK
421  DO i=2,nomblay
422  es(j,i) = 0.d0
423  END DO
424 !
425  ENDIF
426  ENDIF
427 !
428  nlayer%I(j) = nlaynew(j)
429  estrat%R(j) = estratnew(j)
430  es(j,1) = elay%R(j)
431 ! IN CASE OF RESTART, ES(J,2)
432 ! WILL BE STORED IN A FILE AND LOOKED AT TO COUNT THE
433 ! NUMBER OF LAYERS
434  es(j,2) = estrat%R(j)
435 !
436  test1 = 0.d0
437  test2 = 0.d0
438 !
439  DO i=1,nsicla
440  DO k=1,nlayer%I(j)
441 ! CHECKS THAT AVAIL IS IN THE RANGE (-ZERO,1+ZERO)
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)
447  ELSE
448  WRITE(lu,*) 'AVAIL-1=' ,avail(j,k,i)-1.d0
449  ENDIF
450  WRITE(lu,*) 'ZFCL=',zfcl_w%ADR(i)%P%R(j)
451  WRITE(lu,*) 'EVOL=',evol,' ELAY=',elay%R(j)
452  arret=1
453  ELSE
454 ! ONCE CHECKED THAT WE HAVE ONLY TRUNCATION ERRORS, CLIPS
455  avail(j,1,i)=max(avail(j,1,i),0.d0)
456  avail(j,1,i)=min(avail(j,1,i),1.d0)
457  ENDIF
458  ENDDO
459  test1 = test1 + avail(j,1,i)
460  test2 = test2 + avail(j,2,i)
461  ENDDO
462 !
463 ! CHECKS THAT SUM OF AVAIL IS 1 FOR FIRST 2 LAYERS
464 !
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'
468  arret=1
469  ENDIF
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'
473  arret=1
474  ENDIF
475 !
476 ! END OF LOOP ON ALL POINTS
477 !
478  ENDDO
479 !
480 ! COMPUTES THE TOTAL VOLUME OF SEDIMENTS IN THE DOMAIN
481 !
482  DO i = 1, nsicla
483  voltot(i) = 0.d0
484  ENDDO
485  DO i=1,nsicla
486  DO j=1,npoin
487  DO k=1,nlayer%I(j)
488  voltot(i) = voltot(i) + es(j,k)*avail(j,k,i)*masbas%R(j)
489  ENDDO
490  ENDDO
491  ENDDO
492 !
493  IF(ncsize.GT.1) THEN
494  DO i=1,nsicla
495  voltot(i) = p_dsum(voltot(i))
496  ENDDO
497  ENDIF
498 !
499 !-----------------------------------------------------------------------
500 !
501 ! CLEAN STOP FOR ALL PROCESSORS IF PROBLEM
502 !
503  arret2=arret
504  IF(ncsize.GT.1) arret2=p_isum(arret)
505  IF(arret2.GT.0) THEN
506  WRITE(lu,*) 'STOP AFTER AN ERROR IN LAYER'
507  IF(arret.EQ.0) THEN
508  WRITE(lu,*) 'IN ',arret2,' PROCESSOR(S)'
509  ENDIF
510  CALL plante(1)
511  stop
512  ENDIF
513 !
514 !-----------------------------------------------------------------------
515 !
516  RETURN
517  END
subroutine layer(ZFCL_W, NLAYER, ZR, ZF, ESTRAT, ELAY, MASBAS, ACLADM, NSICLA, NPOIN, ELAY0, VOLTOT, ES, AVAIL, CONST_ALAYER, ESTRATNEW, NLAYNEW)
Definition: layer.f:8
integer function p_isum(MYPART)
Definition: p_isum.F:7
double precision function p_dsum(MYPART)
Definition: p_dsum.F:7
Definition: bief.f:3