The TELEMAC-MASCARET system  trunk
bilan_sisyphe.f
Go to the documentation of this file.
1 ! ************************
2  SUBROUTINE bilan_sisyphe
3 ! ************************
4 !
5  &(e,esomt,t1,vcumu,dt,nptfr,
6  & info,zfcl_c,zfcl_s,zfcl_ms,
7  & nsicla,voltot,
8  & numliq,nfrliq,flbcla,lt,nit,npoin,volu2d,csf_sable,masdep,
9  & masdept,charr,susp,slide)
10 !
11 !***********************************************************************
12 ! SISYPHE V6P2 21/07/2011
13 !***********************************************************************
14 !
15 !brief COMPUTES THE MASS BALANCE.
16 !
17 !note T2 IS NOT USED
18 !
19 !history CMGDL
20 !+
21 !+ V5P9
22 !+ CHANGED FOR GRADED SEDIMENT
23 !
24 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
25 !+ 13/07/2010
26 !+ V6P0
27 !+ Translation of French comments within the FORTRAN sources into
28 !+ English comments
29 !
30 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
31 !+ 21/08/2010
32 !+ V6P0
33 !+ Creation of DOXYGEN tags for automated documentation and
34 !+ cross-referencing of the FORTRAN sources
35 !
36 !history C.VILLARET (EDF-LNHE), P.TASSI (EDF-LNHE)
37 !+ 19/07/2011
38 !+ V6P1
39 !+ Name of variables
40 !+
41 !
42 !history J-M HERVOUET (EDF-LNHE)
43 !+ 14/02/2012
44 !+ V6P2
45 !+ NSICLM and MAXFRO used instead of 10 and 300. New and compatible
46 !+ computation: flux given as argument, mass computed differently,
47 !+ and coefficient CSF_SABLE.
48 !
49 !history J,RIEHME (ADJOINTWARE)
50 !+ November 2016
51 !+ V7P2
52 !+ Replaced EXTERNAL statements to parallel functions / subroutines
53 !+ by the INTERFACE_PARALLEL
54 !
55 !history R.KOPMANN (BAW)
56 !+ 15/02/2019
57 !+ V7P2
58 !+ Adding mass balance per class
59 !+ incorporating nestor volumes in mass balance
60 !+ Adding mass balance with total volume (initial volume - final volume)
61 !
62 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
63 !| CSF_SABLE |-->| 1-POROSITY
64 !| DT |-->| TIME STEP
65 !| E |-->| BED EVOLUTION AT A GIVEN TIME STEP
66 !| ESOMT |-->| CUMULATED BED EVOLUTION
67 !| FLBCLA |-->| BLOCK OF FLUXES AT BOUNDARY FOR EACH CLASS
68 !| INFO |-->| IF YES : INFORMATION IS PRINTED
69 !| LT |-->| CURRENT TIME STEP
70 !| MASDEP |-->| VOLUME DEPOSITED ON THE BOTTOM FOR EACH CLASS
71 !| | | FROM THE BEGINNING
72 !| MASDEPT |-->| VOLUME DEPOSITED ON THE BOTTOM FOR EACH CLASS
73 !| | | FOR THIS TIME STEP
74 !| MASKEL |-->| MASKING OF ELEMENTS
75 !| MESH |<->| MESH STRUCTURE
76 !| NFRLIQ |-->| NUMBER OF LIQUID BOUNDARIES
77 !| NIT |-->| NUMBER OF TIME STEPS
78 !| NPOIN |-->| NUMBER OF POINTS
79 !| NPTFR |-->| NUMBER OF BOUNDARY NODES
80 !| NSICLA |-->| NUMBER OF SIZE CLASSES FOR BED MATERIALS
81 !| NUMLIQ |-->| LIQUID BOUNDARY NUMBER OF BOUNDARY POINTS
82 !| QSCLXC |<->| TRANSPORT RATE FOR EACH CLASS X-DIRECTION
83 !| QSCLYC |<->| TRANSPORT RATE FOR EACH CLASS Y-DIRECTION
84 !| S |-->| VOID STRUCTURE
85 !| T1 |<->| WORK BIEF_OBJ STRUCTURE
86 !| T2 |<->| WORK BIEF_OBJ STRUCTURE
87 !| VCUMU |<->| VOLUME OF SEDIMENT ENTERING THE DOMAIN
88 !| VF |-->| IF YES : FINITE VOLUMES IF NO : FINITE ELEMENTS
89 !| VOLTOT |-->| VOLUME TOTAL PER CLASS OF SEDIMENT
90 !| VOLU2D |-->| INTEGRAL OF TEST FUNCTIONS (NOT ASSEMBLED IN //)
91 !| ZFCL_C |<->| BEDLOAD EVOLUTION FOR EACH SEDIMENT CLASS
92 !| ZFCL_S |<->| SUSPENDED LOAD EVOLUTION FOR EACH SEDIMENT CLASS
93 !| ZFCL_MS |<->| SLIDE EVOLUTION FOR EACH SEDIMENT CLASS
94 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
95 !
96  USE bief
99  & vcumucl,rmascl,volnestorcl,volnestorcla
100 !
102  USE interface_parallel, ONLY : p_dsum
103  IMPLICIT NONE
104 !
105 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
106 !
107  INTEGER, INTENT(IN) :: NPTFR,NFRLIQ,NSICLA,LT,NIT
108  INTEGER, INTENT(IN) :: NPOIN,NUMLIQ(nptfr)
109  DOUBLE PRECISION, INTENT(IN) :: DT
110  LOGICAL, INTENT(IN) :: INFO,SUSP,SLIDE,CHARR
111 !
112  DOUBLE PRECISION, INTENT(INOUT) :: VCUMU
113  DOUBLE PRECISION, INTENT(IN) :: CSF_SABLE,VOLTOT(nsicla)
114  DOUBLE PRECISION, INTENT(IN) :: MASDEP(nsicla)
115  DOUBLE PRECISION, INTENT(INOUT) :: MASDEPT(nsicla)
116 !
117 !-----------------------------------------------------------------------
118 !
119 ! VECTOR STRUCTURES
120 !
121  TYPE(bief_obj), INTENT(IN) :: ZFCL_C
122  TYPE(bief_obj), INTENT(IN) :: E,ESOMT,VOLU2D,ZFCL_S
123  TYPE(bief_obj), INTENT(IN) :: ZFCL_MS
124  TYPE(bief_obj), INTENT(INOUT) :: T1,FLBCLA
125 !
126 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
127 !
128  INTEGER I,IFRLIQ,IPTFR,ICLA,J
129  DOUBLE PRECISION RMASSE,RCUMU,RMASCLA(nsiclm)
130  DOUBLE PRECISION VCUMUCLA(nsiclm),FLUXT,FLUXTCLA,VOLDEP
131  DOUBLE PRECISION FLT_BOUND(maxfro),VOLDEPC
132  DOUBLE PRECISION VOLNESTOR,VOLLOSTPERC,VOLTOT1
133  DOUBLE PRECISION VOLINI1,VCUMU1,VOLNESTOR1
134 !
135 !-----------------------------------------------------------------------
136 !
137 ! COMPUTES THE EVOLUTION (E)
138 !
139  rmasse=0.d0
140  DO i=1,npoin
141  rmasse=rmasse+e%R(i)*volu2d%R(i)
142  ENDDO
143  IF(ncsize.GT.1) rmasse = p_dsum(rmasse)
144 !
145 !=======================================================================
146 !
147 ! COMPUTES THE INTEGRAL OF EVOLUTION AT THE END (ESOMT)
148 !
149  IF(lt.EQ.nit) THEN
150  rcumu=0.d0
151  DO i=1,npoin
152  rcumu=rcumu+esomt%R(i)*volu2d%R(i)
153  ENDDO
154  IF(ncsize.GT.1) rcumu = p_dsum(rcumu)
155  ENDIF
156 !
157 !=======================================================================
158 !
159 ! COMPUTES THE FLUXES AT THE BOUNDARIES
160 !
161  IF(charr) THEN
162  CALL os('X=Y ',x=t1,y=flbcla%ADR(1)%P)
163  IF(nsicla.GT.1) THEN
164  DO i=2,nsicla
165  CALL os('X=X+Y ',x=t1,y=flbcla%ADR(i)%P)
166  ENDDO
167  ENDIF
168  ELSE
169  CALL cpstvc(flbcla%ADR(1)%P,t1)
170  CALL os('X=0 ',x=t1)
171  ENDIF
172 !
173  fluxt=0.d0
174 !
175  IF(nfrliq.GT.0) THEN
176  DO ifrliq=1,nfrliq
177  flt_bound(ifrliq)=0.d0
178  ENDDO
179  IF(nptfr.GT.0) THEN
180  DO iptfr=1,nptfr
181  ifrliq=numliq(iptfr)
182  IF(ifrliq.GT.0) THEN
183  flt_bound(ifrliq)=flt_bound(ifrliq)+t1%R(iptfr)
184  ENDIF
185  ENDDO
186  ENDIF
187  IF(ncsize.GT.1) THEN
188  DO ifrliq=1,nfrliq
189  flt_bound(ifrliq)=p_dsum(flt_bound(ifrliq))
190  ENDDO
191  ENDIF
192  DO ifrliq=1,nfrliq
193  fluxt=fluxt+flt_bound(ifrliq)
194  ENDDO
195  ENDIF
196 !
197  vcumu = vcumu - fluxt*dt/csf_sable
198 !
199 ! BALANCE IN EXTENDED GRANULOMETRY
200 !
201  IF(nsicla.GT.1) THEN
202 !
203  DO icla=1,nsicla
204 !
205 ! COMPUTES THE EVOLUTION PER CLASS
206 !
207  rmascla(icla)=0.d0
208  IF(susp.AND.slide.AND.charr) THEN
209  DO i=1,npoin
210  rmascla(icla)=rmascla(icla)
211  & +( zfcl_c%ADR(icla)%P%R(i)
212  & +zfcl_s%ADR(icla)%P%R(i)
213  & +zfcl_ms%ADR(icla)%P%R(i) )*volu2d%R(i)
214  ENDDO
215  ELSEIF(slide.AND.charr) THEN
216  DO i=1,npoin
217  rmascla(icla)=rmascla(icla)
218  & +( zfcl_c%ADR(icla)%P%R(i)
219  & +zfcl_ms%ADR(icla)%P%R(i) )*volu2d%R(i)
220  ENDDO
221  ELSEIF(susp.AND.charr) THEN
222  DO i=1,npoin
223  rmascla(icla)=rmascla(icla)
224  & +( zfcl_c%ADR(icla)%P%R(i)
225  & +zfcl_s%ADR(icla)%P%R(i) )*volu2d%R(i)
226  ENDDO
227  ELSEIF(susp.AND.slide) THEN
228  DO i=1,npoin
229  rmascla(icla)=rmascla(icla)
230  & +( zfcl_s%ADR(icla)%P%R(i)
231  & +zfcl_ms%ADR(icla)%P%R(i) )*volu2d%R(i)
232  ENDDO
233  ELSEIF(susp) THEN
234  DO i=1,npoin
235  rmascla(icla)=rmascla(icla)
236  & +zfcl_s%ADR(icla)%P%R(i)*volu2d%R(i)
237  ENDDO
238  ELSEIF(slide) THEN
239  DO i=1,npoin
240  rmascla(icla)=rmascla(icla)
241  & +zfcl_ms%ADR(icla)%P%R(i)*volu2d%R(i)
242  ENDDO
243  ELSEIF(charr) THEN
244  DO i=1,npoin
245  rmascla(icla)=rmascla(icla)
246  & +zfcl_c%ADR(icla)%P%R(i)*volu2d%R(i)
247  ENDDO
248  ENDIF
249  IF(ncsize.GT.1) rmascla(icla) = p_dsum(rmascla(icla))
250  rmascl(icla) = rmascl(icla)+rmascla(icla)
251 
252 !
253 ! COMPUTES THE FREE FLUXES BY CLASS
254 !
255  fluxtcla=0.d0
256  IF(nfrliq.GT.0.AND.charr) THEN
257  IF(nptfr.GT.0) THEN
258  DO iptfr=1,nptfr
259  ifrliq=numliq(iptfr)
260  IF(ifrliq.GT.0) THEN
261  fluxtcla=fluxtcla+flbcla%ADR(icla)%P%R(iptfr)
262  ENDIF
263  ENDDO
264  ENDIF
265  IF(ncsize.GT.1) fluxtcla=p_dsum(fluxtcla)
266  ENDIF
267 !
268  vcumucla(icla) = - fluxtcla*dt/csf_sable
269  vcumucl(icla) = vcumucl(icla)- fluxtcla*dt/csf_sable
270 !
271  ENDDO
272 !
273  ENDIF
274 !
275 !=======================================================================
276 !
277 ! GRAIN-FEEDING
278 !
279  voldepc=0.d0
280  IF(susp) THEN
281  DO i=1,nsicla
282  voldepc=voldepc+masdept(i)
283  ENDDO
284  voldepc=voldepc/csf_sable
285  ENDIF
286 !
287 ! WRITES OUT THE BALANCE
288 !
289  IF(info) THEN
290 !
291 ! GLOBAL BALANCE
292 !
293  WRITE(lu,*)
294  WRITE(lu,2000)
295  WRITE(lu,2010) rmasse
296  IF(nfrliq.GT.0) THEN
297  DO ifrliq=1,nfrliq
298  WRITE(lu,2110) ifrliq,-flt_bound(ifrliq)/csf_sable
299  ENDDO
300  WRITE(lu,2111) -fluxt/csf_sable
301  IF(susp) WRITE(lu,2112) voldepc
302  ENDIF
303  volnestor = 0.d0
304  IF(nestor) THEN
305  DO i=1,nsicla
306  volnestor = volnestor + volnestorcla(i)
307  END DO
308  WRITE(lu,*)'NESTOR VOLUME CHANGE = ', volnestor
309  ENDIF
310  WRITE(lu,2033) rmasse+dt*fluxt/csf_sable-voldepc-volnestor
311 ! BALANCE PER CLASS
312 !
313  IF(nsicla.GT.1) THEN
314  DO i=1,nsicla
315  WRITE(lu,*)
316  WRITE(lu,*) 'MASS BALANCE FOR SEDIMENT CLASS :',i
317  WRITE(lu,*) 'TOTAL VOLUME:',voltot(i)
318  WRITE(lu,3010) rmascla(i)
319  WRITE(lu,3031) vcumucla(i)
320  WRITE(lu,*) 'NESTOR VOLUME PER CLASS: ',volnestorcla(i)
321  IF(susp) THEN
322  WRITE(lu,3034) masdept(i)/csf_sable
323  WRITE(lu,2033) rmascla(i)-vcumucla(i)
324  & -masdept(i)/csf_sable
325  ELSE
326  WRITE(lu,2033) rmascla(i)-vcumucla(i)-volnestorcla(i)
327  ENDIF
328  ENDDO
329  ENDIF
330 !
331 ! FINAL GLOBAL BALANCE
332 !
333  IF(lt.EQ.nit) THEN
334  WRITE(lu,*)
335  WRITE(lu,*)'---------------------------'
336  WRITE(lu,*)'FINAL SEDIMENT MASS BALANCE'
337  WRITE(lu,*)'---------------------------'
338  voldep=0.d0
339  volnestor = 0.d0
340  DO i=1,nsicla
341  voldep=voldep+masdep(i)
342  ENDDO
343  IF(nestor) THEN
344  DO i=1,nsicla
345  volnestor=volnestor+volnestorcl(i)
346  ENDDO
347  ENDIF
348  voldep=voldep/csf_sable
349  WRITE(lu,*)
350  WRITE(lu,2030) rcumu
351  WRITE(lu,2031) vcumu
352  IF(susp) WRITE(lu,2032) voldep
353  IF(nestor) WRITE(lu,*)'CUMULATED NESTOR VOLUME: :',
354  & volnestor
355  WRITE(lu,2033) rcumu-vcumu-voldep-volnestor
356  IF(nsicla.EQ.1) THEN
357  volini1 = volini(1)
358  voltot1 = 0.d0
359  DO j=1,npoin
360  voltot1 = voltot1 + (zf%R(j)-zr%R(j))*volu2d%R(j)
361  ENDDO
362  IF(ncsize>1)voltot1 = p_dsum(voltot1)
363  volnestor1 = volnestor
364  vcumu1 = vcumu
365  ELSE ! NSICLA >1
366  volini1 = 0.d0
367  voltot1 = 0.d0
368  volnestor1 = 0.d0
369  vcumu1 = 0.d0
370  DO i=1,nsicla
371  volini1 = volini1+volini(i)
372  voltot1 = voltot1+voltot(i)
373  volnestor1 = volnestor1+volnestorcl(i)
374  vcumu1 = vcumu1+vcumucl(i)
375  END DO
376  ENDIF
377 
378  WRITE(lu,*)'INITIAL VOLUME :',volini1
379  WRITE(lu,*)'FINAL VOLUME :',voltot1
380  IF(volini1.GT.0.d0) THEN
381  vollostperc = (voltot1-volini1-vcumu1-
382  & volnestor)*100.d0/volini1
383  ELSE
384  vollostperc = 0.d0
385  ENDIF
386  WRITE(lu,*)'TOTAL VOLUME LOST :',
387  & voltot1-volini1-vcumu1-volnestor
388  WRITE(lu,*)' :'
389  & ,vollostperc,'%'
390  IF(nsicla>1) THEN
391  DO i=1,nsicla
392  WRITE(lu,*)
393  WRITE(lu,*) 'MASS BALANCE FOR SEDIMENT CLASS :',i
394  WRITE(lu,*)'VOLUME THAT ENTERED THE DOMAIN PER CLASS ',
395  & vcumucl(i)
396  WRITE(lu,*)'SUM OF THE CUMULATED EVOLUTIONS PER CLASS ',
397  & rmascl(i)
398  WRITE(lu,*)'BALANCE FLUXES AND EVOLUTIONS PER CLASS ',
399  & rmascl(i)-vcumucl(i)
400  WRITE(lu,*) ''
401  WRITE(lu,*)'INITIAL VOLUME PER CLASS OVER ALL LAYERS ',
402  & volini(i)
403  WRITE(lu,*)'FINAL VOLUME PER CLASS OVER ALL LAYERS ',
404  & voltot(i)
405  IF(nestor)
406  & WRITE(lu,*)
407  & 'DREDGED/DISPOSED VOLUME PER CLASS ',
408  & volnestorcl(i)
409  IF(volini(i).GT.0.d0) THEN
410  vollostperc = (voltot(i)-volini(i)-vcumucl(i)-
411  & volnestorcl(i))*100.d0/volini(i)
412  ELSE
413  vollostperc = 0.d0
414  ENDIF
415  WRITE(lu,*)'TOTAL VOLUME LOST PER CLASS OVER ALL LAYERS',
416  & voltot(i)-volini(i)-vcumucl(i)-volnestorcl(i)
417  WRITE(lu,*)' '
418  & ,vollostperc,'%'
419  END DO
420  ENDIF
421  ENDIF ! lt==nit
422 !
423 ! IF(LGRAFED) THEN
424 ! WRITE(LU, 4001) MASST
425 ! WRITE(LU, 4011) MASS_GF
426 ! ENDIF
427 !
428  ENDIF
429 !
430 2000 FORMAT(1x,'MASS-BALANCE (IN VOLUME, INCLUDING VOID): ')
431 2010 FORMAT(1x,'SUM OF THE EVOLUTIONS : ',g16.7,' M3')
432 2030 FORMAT(1x,'SUM OF THE CUMULATED EVOLUTIONS : ',g16.7)
433 2031 FORMAT(1x,'VOLUME THAT ENTERED THE DOMAIN : ',g16.7,' M3'
434  & ,' ( IF <0 EXIT )')
435 2032 FORMAT(1x,'VOLUME DEPOSITED ON THE BOTTOM : ',g16.7,' M3'
436  & ,' ( IF <0 ERODED )')
437 2033 FORMAT(1x,'LOST VOLUME : ',g16.7,' M3'
438  & ,' ( IF <0 EXIT )')
439 2110 FORMAT(1x,'BOUNDARY ',1i3,' BEDLOAD FLUX = ',g16.7,
440  & ' ( M3/S >0 = ENTERING )')
441 2111 FORMAT(1x,'TOTAL BEDLOAD FLUX = ',g16.7,
442  & ' ( M3/S >0 = ENTERING )')
443 2112 FORMAT(1x,'DEPOSIT ON BOTTOM = ',g16.7,
444  & ' ( M3/S )')
445 3010 FORMAT(1x,'SUM OF THE EVOLUTIONS FOR THIS CLASS: ',g16.7)
446 3031 FORMAT(1x,'VOLUME THAT ENTERED THE DOMAIN FOR THIS CLASS: '
447  & ,g16.7,' M3')
448 3034 FORMAT(1x,'VOLUME DEPOSITED ON BOTTOM FOR THIS CLASS: '
449  & ,g16.7,' M3')
450 !
451 !-----------------------------------------------------------------------
452 !
453  RETURN
454  END
type(bief_obj), target zr
type(bief_obj), target zf
integer, parameter nsiclm
double precision, dimension(nsiclm) volini
subroutine bilan_sisyphe(E, ESOMT, T1, VCUMU, DT, NPTFR, INFO, ZFCL_C, ZFCL_S, ZFCL_MS, NSICLA, VOLTOT, NUMLIQ, NFRLIQ, FLBCLA, LT, NIT, NPOIN, VOLU2D, CSF_SABLE, MASDEP, MASDEPT, CHARR, SUSP, SLIDE)
Definition: bilan_sisyphe.f:11
double precision function p_dsum(MYPART)
Definition: p_dsum.F:7
subroutine cpstvc(X, Y)
Definition: cpstvc.f:7
subroutine os(OP, X, Y, Z, C, IOPT, INFINI, ZERO)
Definition: os.f:7
Definition: bief.f:3