The TELEMAC-MASCARET system  trunk
fluxpr_sisyphe.f
Go to the documentation of this file.
1 ! *************************
2  SUBROUTINE fluxpr_sisyphe
3 ! *************************
4 !
5  &(nsec,ctrlsc,flx,volneg,volpos,info,tps,nseg,ncsize,
6  & flxs,volnegs,volposs,susp,flxc,volnegc,volposc,charr)
7 !
8 !***********************************************************************
9 ! SISYPHE V7P0 21/07/2011
10 !***********************************************************************
11 !
12 !brief COMPUTES FLUXES THROUGH CONTROL SECTIONS
13 !+ AND ADDS THEM UP TO OBTAIN OSCILLATING VOLUMES.
14 !
15 !note THIS SUBROUTINE PRINTS OUT DISCHARGES THROUGH CONTROL
16 !+ SECTIONS. YOU CAN REWRITE IT TO DIVERT THESE PRINTOUTS
17 !+ TO A FILE OR TO CHANGE THE FORMAT.
18 !
19 !history J-M HERVOUET (LNHE)
20 !+ 27/12/2006
21 !+ V5P7
22 !+
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 & J-M HERVOUET (EDF LAB, LNHE)
37 !+ 18/04/2014
38 !+ V7P0
39 !+ Printing information on bedload and suspension, and writing the
40 !+ sections output file with both old and new methods.
41 !
42 !history J-M HERVOUET (EDF LAB, LNHE)
43 !+ 06/05/2014
44 !+ V7P0
45 !+ A use of P_DSUM removed in the scalar section (caused a stop with
46 !+ some compilers).
47 !
48 !history J,RIEHME (ADJOINTWARE)
49 !+ November 2016
50 !+ V7P2
51 !+ Replaced EXTERNAL statements to parallel functions / subroutines
52 !+ by the INTERFACE_PARALLEL
53 !
54 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
55 !| CHARR |-->| LOGICAL, BEDLOAD OR NOT
56 !| CTRLSC |-->| NUMBERS OF POINTS IN THE CONTROL SECTIONS
57 !| FLX |-->| FLUXES THROUGH CONTROL SECTIONS
58 !| FLXC |-->| BEDLOAD DISCHARGE
59 !| FLXS |-->| SUSPENDED LOAD DISCHARGE
60 !| INFO |-->| IF YES : INFORMATION IS PRINTED
61 !| NCSIZE |-->| NUMBER OF PROCESSORS (PARALLEL)
62 !| NSEC |-->| NUMBER OF CONTROL SECTIONS
63 !| NSEG |-->| NUMBER OF SEGMENTS PER CONTROL SECTION
64 !| SUSP |-->| LOGICAL, SUSPENSION OR NOT
65 !| TPS |-->| TIME
66 !| VOLNEG |-->| CUMULATED NEGATIVE VOLUME THROUGH SECTIONS
67 !| VOLNEGC |-->| CUMULATED NEGATIVE VOLUME FOR THE BEDLOAD
68 !| VOLNEGS |-->| CUMULATED NEGATIVE VOLUME FOR THE SUSPENSION
69 !| VOLPOS |-->| CUMULATED POSITIVE VOLUME THROUGH SECTIONS
70 !| VOLPOSC |-->| CUMULATED POSITIVE VOLUME FOR THE BEDLOAD
71 !| VOLPOSS |-->| CUMULATED POSITIVE VOLUME FOR THE SUSPENDED LOAD
72 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
73 !
74  USE bief_def, ONLY: ipid
76  & init_fluxpr,work,workb
79  IMPLICIT NONE
80 !
81 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
82 !
83  INTEGER, INTENT(IN) :: NSEC,NCSIZE
84  INTEGER, INTENT(IN) :: CTRLSC(*)
85  INTEGER, INTENT(IN) :: NSEG(nsec)
86  LOGICAL, INTENT(IN) :: INFO,SUSP,CHARR
87  DOUBLE PRECISION, INTENT(IN) :: FLX(nsec),TPS
88  DOUBLE PRECISION, INTENT(IN) :: VOLNEG(nsec),VOLPOS(nsec)
89  DOUBLE PRECISION, INTENT(IN) :: FLXS(nsec),FLXC(nsec)
90  DOUBLE PRECISION, INTENT(IN) :: VOLNEGS(nsec),VOLPOSS(nsec)
91  DOUBLE PRECISION, INTENT(IN) :: VOLNEGC(nsec),VOLPOSC(nsec)
92 !
93 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
94 !
95  INTEGER ISEC,II,ERR,NSEO
96  CHARACTER(LEN=16) :: FMTZON='(4(1X,1PG21.14))'
97  LOGICAL :: OLD_METHOD=.false.
98  DOUBLE PRECISION :: DTMP1,DTMP2,DTMP3,DTMP4
99 !
100 !-----------------------------------------------------------------------
101 !
102  nseo=sis_files(sisseo)%LU
103 !
104 !-----------------------------------------------------------------------
105 !
106  IF(.NOT.ALLOCATED(chain)) old_method=.true.
107 !
108 ! DONE ONCE FOR ALL
109 !
110  IF(init_fluxpr.AND.(trim(sis_files(sisseo)%NAME).NE.'') ) THEN
111 !
112  IF(ncsize.GT.1) THEN
113  ALLOCATE (work(nsec), stat=err)
114  IF(err.NE.0) THEN
115  WRITE(lu,*) 'FLUXPR_SISYPHE: ERROR ALLOCATING WORK:',err
116  CALL plante(1)
117  stop
118  ENDIF
119  IF(charr.AND.susp) THEN
120  ALLOCATE (workb(nsec), stat=err)
121  IF(err.NE.0) THEN
122  WRITE(lu,*) 'FLUXPR_SISYPHE: ERROR ALLOCATING WORK:',err
123  CALL plante(1)
124  stop
125  ENDIF
126  ENDIF
127  ENDIF
128 !
129  init_fluxpr=.false.
130 !
131  IF(charr.AND..NOT.susp) THEN
132  WRITE(nseo,*) ' INTEGRATED BEDLOAD DISCHARGES '
133  WRITE(nseo,*) ' VARIABLES = TIME(S) QC(M3/S) FOR',
134  & (' '//trim(chain(isec)%DESCR), isec=1,nsec)
135  ENDIF
136 !
137  IF(susp.AND..NOT.charr) THEN
138  WRITE(nseo,*) ' INTEGRATED SUSPENDED LOAD DISCHARGES '
139  WRITE(nseo,*) ' VARIABLES = TIME QS (M3/S) FOR SECTIONS '
140  & ,(ii,ii=1,nsec)
141  ENDIF
142 !
143  IF(charr.AND.susp) THEN
144  WRITE(nseo,*) ' INTEGRATED BEDLOAD AND SUSPENDED LOAD '
145  WRITE(nseo,*) 'VARIABLES = TIME , QC FOR ',
146  & (' '//trim(chain(isec)%DESCR), isec=1,nsec), ' QS FOR',
147  & (' '//trim(chain(isec)%DESCR), isec=1,nsec)
148  ENDIF
149 !
150  WRITE(nseo,100)(ii , ii= 1 ,nsec)
151 100 FORMAT(' TIME',' SECTION:',i2, 'SECTION: ',i2)
152 !
153  ENDIF
154 !
155  IF(info) THEN
156 !
157  IF(old_method) THEN
158 !
159  IF(ncsize.LE.1) THEN
160 !
161 ! SCALAR MODE
162 !
163  DO isec = 1,nsec
164 !
165  WRITE(lu,131) isec,ctrlsc(1+2*(isec-1)),
166  & ctrlsc(2+2*(isec-1)),
167  & flx(isec),volneg(isec),
168  & volpos(isec)
169 !
170 131 FORMAT(1x,/,1x,'CONTROL SECTION NUMBER ',1i2,
171  & ' (BETWEEN POINTS ',1i5,' AND ',1i5,')',//,5x,
172  & 'DISCHARGE: ',g16.7,/,5x,
173  & 'CUMULATED NEGATIVE VOLUME: ',g16.7,/,5x,
174  & 'CUMULATED POSITIVE VOLUME: ',g16.7)
175  IF(susp) THEN
176  WRITE(lu,1302) flxs(isec),
177  & volnegs(isec),
178  & volposs(isec)
179  ENDIF
180 !
181 1302 FORMAT(5x,'DISCHARGE IN SUSPENSION: ',g16.7,/,5x,
182  & 'CUMULATED NEGATIVE VOLUME: ',g16.7,/,5x,
183  & 'CUMULATED POSITIVE VOLUME: ',g16.7)
184  IF(charr) THEN
185  WRITE(lu,1304) flxc(isec),
186  & volnegc(isec),
187  & volposc(isec)
188 1304 FORMAT(5x,'BEDLOAD DISCHARGE: ',g16.7,/,5x,
189  & 'CUMULATED NEGATIVE VOLUME: ',g16.7,/,5x,
190  & 'CUMULATED POSITIVE VOLUME: ',g16.7)
191  ENDIF
192 !
193  ENDDO
194 !
195  ELSE
196 !
197 ! PARALLEL MODE
198 !
199  DO isec = 1,nsec
200 !
201 ! SECTIONS ACROSS 2 SUB-DOMAINS WILL HAVE NSEG=0 OR -1
202 ! AND -1 WANTED HERE FOR RELEVANT MESSAGE
203 !
204  dtmp1 = p_min(flx(isec))
205  dtmp2 = p_max(flx(isec))
206  dtmp3 = p_min(volneg(isec))
207  dtmp4 = p_max(volpos(isec))
208  ii=p_min(nseg(isec))
209  IF(ii.GE.0) THEN
210 !
211  WRITE(lu,131) isec,ctrlsc(1+2*(isec-1)),
212  & ctrlsc(2+2*(isec-1)),
213  & dtmp1+dtmp2,dtmp3,dtmp4
214 !
215  IF(susp) THEN
216  dtmp1 = p_min(flxs(isec))
217  dtmp2 = p_max(flxs(isec))
218  dtmp3 = p_min(volnegs(isec))
219  dtmp4 = p_max(volposs(isec))
220  WRITE(lu,1302) dtmp1+dtmp2,dtmp3,dtmp4
221  ENDIF
222  IF(charr) THEN
223  dtmp1 = p_min(flxc(isec))
224  dtmp2 = p_max(flxc(isec))
225  dtmp3 = p_min(volnegc(isec))
226  dtmp4 = p_max(volposc(isec))
227  WRITE(lu,1304) dtmp1+dtmp2,dtmp3,dtmp4
228  ENDIF
229 !
230 ! OLD METHOD AND SECTION ON SEVERAL SUB-DOMAIN
231 ! IN THIS CASE NOTHING IS COMPUTED
232 !
233  ELSE
234 !
235  WRITE(lu,135) isec,ctrlsc(1+2*(isec-1)),
236  & ctrlsc(2+2*(isec-1))
237 135 FORMAT(1x,/,1x,'CONTROL SECTION NUMBER ',1i2,
238  & ' (BETWEEN POINTS ',1i5,' AND ',1i5,')',//,5x,
239  & 'ACROSS TWO SUB-DOMAINS, NO COMPUTATION')
240 !
241  ENDIF
242 !
243  ENDDO
244 !
245  ENDIF
246 !
247 !-----------------------------------------------------------------------
248 !
249  ELSE
250 !
251 ! NEW METHOD
252 ! CHAIN ALLOCATED, I.E. SERIAL OR PARALLEL CASE FROM SECTIONS INPUT FILE
253 ! WE CAN APPLY CO-ORDINATES INSTEAD AND/OR NAMES OF SECTIONS
254 !
255  DO isec = 1,nsec
256 !
257  IF(ncsize.GT.1) THEN
258  dtmp1 = p_dsum(flx(isec))
259  dtmp2 = p_dsum(volneg(isec))
260  dtmp3 = p_dsum(volpos(isec))
261  WRITE(lu,231) isec,trim(chain(isec)%DESCR),
262  & dtmp1,dtmp2,dtmp3
263  ELSE
264  WRITE(lu,231) isec,trim(chain(isec)%DESCR),
265  & flx(isec),volneg(isec),volpos(isec)
266  ENDIF
267 231 FORMAT(1x,/,1x,'CONTROL SECTION NUMBER ',1i2,
268  & ' (NAME ',a,')',//,5x,
269  & 'DISCHARGE: ',g16.7,/,5x,
270  & 'CUMULATED NEGATIVE VOLUME: ',g16.7,/,5x,
271  & 'CUMULATED POSITIVE VOLUME: ',g16.7)
272  IF(susp) THEN
273  IF(ncsize.GT.1) THEN
274  dtmp1 = p_dsum(flxs(isec))
275  dtmp2 = p_dsum(volnegs(isec))
276  dtmp3 = p_dsum(volposs(isec))
277  WRITE(lu,2302) dtmp1,dtmp2,dtmp3
278  ELSE
279  WRITE(lu,2302)
280  & flxs(isec),volnegs(isec),volposs(isec)
281  ENDIF
282 2302 FORMAT(5x,'DISCHARGE IN SUSPENSION: ',g16.7,/,5x,
283  & 'CUMULATED NEGATIVE VOLUME: ',g16.7,/,5x,
284 
285  & 'CUMULATED POSITIVE VOLUME: ',g16.7)
286  ENDIF
287 !
288  IF(charr) THEN
289  IF(ncsize.GT.1) THEN
290  dtmp1 = p_dsum(flxc(isec))
291  dtmp2 = p_dsum(volnegc(isec))
292  dtmp3 = p_dsum(volposc(isec))
293  WRITE(lu,2304) dtmp1,dtmp2,dtmp3
294  ELSE
295  WRITE(lu,2304)
296  & flxc(isec),volnegc(isec),volposc(isec)
297  ENDIF
298 2304 FORMAT(5x,'BEDLOAD DISCHARGE: ',g16.7,/,5x,
299  & 'CUMULATED NEGATIVE VOLUME: ',g16.7,/,5x,
300  & 'CUMULATED POSITIVE VOLUME: ',g16.7)
301  ENDIF
302 !
303  ENDDO
304 !
305 !
306  ENDIF ! IF OLD_METHOD
307 !
308 ! A SECTIONS OUTPUT FILE HAS BEEN GIVEN, IT IS FILLED
309 !
310  IF(trim(sis_files(sisseo)%NAME).NE.'') THEN
311 !
312 ! ONLY BEDLOAD
313 !
314  IF(charr.AND..NOT.susp) THEN
315  IF(ncsize.GT.1) THEN
316  DO isec=1,nsec
317  dtmp1 = p_dsum(flxc(isec))
318  work(isec) = dtmp1
319  ENDDO
320 ! IN // ONLY PROCESSOR 0 WRITES THE FILE
321  IF(ipid.EQ.0) THEN
322  WRITE(nseo,fmt=fmtzon) tps,(work(isec),isec=1,nsec)
323  ENDIF
324  ELSE
325  WRITE(nseo,fmt=fmtzon) tps,(flxc(isec),isec=1,nsec)
326  ENDIF
327  ENDIF
328 !
329 ! ONLY SUSPENSION
330 !
331  IF(susp.AND..NOT.charr) THEN
332  IF(ncsize.GT.1) THEN
333  DO isec=1,nsec
334  dtmp1 = p_dsum(flxs(isec))
335  work(isec) = dtmp1
336  ENDDO
337 ! IN // ONLY PROCESSOR 0 WRITES THE FILE
338  IF(ipid.EQ.0) THEN
339  WRITE (nseo,fmt=fmtzon) tps,(work(isec),isec=1,nsec)
340  ENDIF
341  ELSE
342  WRITE(nseo,fmt=fmtzon) tps,(flxs(isec),isec=1,nsec)
343  ENDIF
344  ENDIF
345 !
346 ! BOTH BEDLOAD AND SUSPENSION
347 !
348  IF(susp.AND.charr) THEN
349  IF(ncsize.GT.1) THEN
350  DO isec=1,nsec
351  dtmp1 = p_dsum(flxc(isec))
352  work(isec) = dtmp1
353  dtmp2 = p_dsum(flxs(isec))
354  workb(isec)= dtmp2
355  ENDDO
356  IF(ipid.EQ.0) THEN
357  WRITE (nseo,fmt=fmtzon) tps,(work(isec),isec=1,nsec),
358  & (workb(isec), isec=1,nsec)
359  ENDIF
360  ELSE
361  WRITE (nseo,fmt=fmtzon) tps,(flxc(isec),isec=1,nsec),
362  & (flxs(isec),isec=1,nsec)
363  ENDIF
364  ENDIF
365 !
366  ENDIF
367 !
368 ! IF(INFO)...
369  ENDIF
370 !
371 !-----------------------------------------------------------------------
372 !
373  RETURN
374  END SUBROUTINE fluxpr_sisyphe
subroutine fluxpr_sisyphe(NSEC, CTRLSC, FLX, VOLNEG, VOLPOS, INFO, TPS, NSEG, NCSIZE, FLXS, VOLNEGS, VOLPOSS, SUSP, FLXC, VOLNEGC, VOLPOSC, CHARR)
Definition: fluxpr_sisyphe.f:8
integer ipid
Definition: bief_def.f:49
double precision function p_dsum(MYPART)
Definition: p_dsum.F:7
type(chain_type), dimension(:), allocatable chain
type(bief_file), dimension(maxlu_sis), target sis_files