The TELEMAC-MASCARET system  trunk
init_mixte.f
Go to the documentation of this file.
1 ! *********************
2  SUBROUTINE init_mixte
3 ! *********************
4 !
5  &(xmvs,npoin,avail,nsicla,es,es_sable, es_vase,elay,nomblay,
6  & conc_vase,ms_sable,ms_vase,zf,zr,ava0,conc,debu,mixte)
7 !
8 !***********************************************************************
9 ! SISYPHE V6P2 21/07/2011
10 !***********************************************************************
11 !
12 !brief
13 !
14 !history
15 !+
16 !+ V6P0
17 !+
18 !
19 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
20 !+ 13/07/2010
21 !+ V6P0
22 !+ Translation of French comments within the FORTRAN sources into
23 !+ English comments
24 !
25 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
26 !+ 21/08/2010
27 !+ V6P0
28 !+ Creation of DOXYGEN tags for automated documentation and
29 !+ cross-referencing of the FORTRAN sources
30 !
31 !history C.VILLARET (EDF-LNHE), P.TASSI (EDF-LNHE)
32 !+ 19/07/2011
33 !+ V6P1
34 !+ Name of variables
35 !+
36 !history C.VILLARET (EDF-LNHE)
37 !+ 22/08/2012
38 !+ V6P2
39 !+ Changing the calling to init_compo_coh: the number of layers is fixed
40 !+ Testing SUM(layers) = ZF-ZR
41 !+ Compute the initial mass balance
42 !+
43 !history PABLO SANTORO (IMFIA) AND PABLO TASSI (EDF R&D - LHSV)
44 !+ 01/08/2015
45 !+ V7P1
46 !+ small correction for continuous computation
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 !| AVA0 |-->| VOLUME PERCENT
56 !| AVAIL |<->| VOLUME PERCENT OF EACH CLASS
57 !| CONC |<->| CONC OF EACH BED LAYER (KG/M3)
58 !| CONC_VASE |<->| MUD CONCENTRATION FOR EACH LAYER
59 !| DEBU |-->| FLAG, FOR PREVIOUS SEDIMENTOLOGICAL FILE
60 !| ELAY |<->| THICKNESS OF TOTAL LAYER
61 !| ES |<->| LAYER THICKNESSES AS DOUBLE PRECISION
62 !| ES_SABLE |<->| THICKNESS OF SAND LAYER (M)
63 !| ES_VASE |<->| THICKNESS OF MUD LAYER (M)
64 !| MIXTE |-->| SEDIMENT MIXTE (SABLE + VASE)
65 !| MS_SABLE |<->| MASS OF SAND PER LAYER (KG/M2)
66 !| MS_VASE |<->| MASS OF MUD PER LAYER (KG/M2)
67 !| NOMBLAY |-->| NUMBER OF LAYERS FOR CONSOLIDATION
68 !| NPOIN |-->| NUMBER OF POINTS
69 !| NSICLA |-->| NUMBER OF SIZE CLASSES FOR BED MATERIALS
70 !| XMVS |-->| WATER DENSITY
71 !| ZF |-->| ELEVATION OF BOTTOM
72 !| ZR |-->| NON ERODABLE BED
73 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
74 !
75  USE bief
76  USE interface_sisyphe, ex_init_mixte=> init_mixte
79 !
81  USE interface_parallel, ONLY : p_dsum
82  IMPLICIT NONE
83 !
84 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
85 !
86  INTEGER, INTENT(IN) :: NPOIN,NSICLA,NOMBLAY
87  DOUBLE PRECISION, INTENT(IN) :: XMVS
88  DOUBLE PRECISION, INTENT(INOUT) :: AVAIL(npoin,nomblay,nsicla)
89  DOUBLE PRECISION, INTENT(INOUT) :: ES(npoin,nomblay)
90  DOUBLE PRECISION, INTENT(INOUT) :: ELAY(npoin)
91  DOUBLE PRECISION, INTENT(IN) :: ZR(npoin),ZF(npoin)
92  DOUBLE PRECISION, INTENT(INOUT) :: MS_SABLE(npoin,nomblay)
93  DOUBLE PRECISION, INTENT(INOUT) :: MS_VASE(npoin,nomblay)
94 !
95  DOUBLE PRECISION, INTENT(INOUT) :: ES_SABLE(npoin,nomblay)
96  DOUBLE PRECISION, INTENT(INOUT) :: ES_VASE(npoin,nomblay)
97 !
98  DOUBLE PRECISION, INTENT(IN) :: CONC_VASE(nomblay)
99  DOUBLE PRECISION, INTENT(INOUT) :: CONC(npoin,nomblay)
100  DOUBLE PRECISION, INTENT(IN) :: AVA0(nsicla)
101  LOGICAL, INTENT (IN) :: DEBU, MIXTE
102 !
103 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
104 !
105 ! LOCAL VARIABLES
106 !
107  INTEGER I,J,K,NK
108  DOUBLE PRECISION HAUTSED
109  DOUBLE PRECISION DIFF,EST
110 !
111 !-----------------------------------------------------------------------
112 !
113 !*******INITIAL SEDIMENT COMPOSITION IS IDENTICAL AT EACH NODE
114 ! DEFAULT INITIALISATION: ALL LAYERS ARE EMPTY EXCEPT BED LAYER
115 ! OTHERWISE SET THICKNESS OF THE MUD LAYERS IN EPAI_VASE(I= 1, NCOUCH_TASS-1)
116 !
117 
118 ! INITIALISATION OF ES : THICKNESS OF EACH LAYERS
119 ! INIT_COMPO_COH : composition of the sediment bed : thickness of layers
120 ! and concentrations The number of sediment bed layers is fixed
121 
122  IF(.NOT.debu) THEN
123 !
124  CALL init_compo_coh(es,conc_vase,conc,npoin,
125  & nomblay,nsicla,avail,ava0)
126 !
127 ! Recalcul des epaisseurs pour satisfaire : Sum (ES)=ZF-ZR
128 !
129  DO i=1,npoin
130 !
131  elay(i)=zf(i)-zr(i)
132 !
133 !
134 ! THE HEIGHT OF SEDIMENT (SUM OF ES) MUST BE EQUAL TO ZF-ZR
135 ! IF SO, THE HEIGHT OF THE LAST LAYER IS REDUCED
136 ! IF THERE ARE LAYERS UNDER ZR, THEY ARE NOT TAKEN INTO ACCOUNT
137 !
138  hautsed = 0.d0
139 !
140  nk=nomblay
141  DO k=1,nomblay
142 !
143  IF(hautsed + es(i,k) .GE. elay(i)) THEN
144  es(i,k) = elay(i) - hautsed
145  nk=k
146  hautsed = hautsed + es(i,k)
147  GOTO 144
148  ENDIF
149  hautsed = hautsed + es(i,k)
150 !
151  ENDDO
152 !
153 144 CONTINUE
154 !
155 ! FOR CLEAN OUTPUTS
156 !
157  IF(nk.LT.nomblay) THEN
158  DO k=nk+1,nomblay
159  es(i,k) = 0.d0
160  ENDDO
161  ENDIF
162 !
163 ! THE THICKNESS OF THE LAST LAYER IS ENLARGED SO THAT
164 ! THE HEIGHT OF SEDIMENT (SUM OF ES) IS EQUAL TO ZF-ZR
165 !
166  IF(hautsed.LT.elay(i)) THEN
167  es(i,nomblay)=es(i,nomblay)+elay(i)-hautsed
168  ENDIF
169 !
170  ENDDO
171 !
172  ELSE
173 !
174 ! En cas de suite de calcul
175 ! Check that sum of layers (simple precision) is equal to ZF-ZR
176 !
177  DO i=1,npoin
178 !
179  elay(i)=zf(i)-zr(i)
180 !
181  est=0.d0
182 !
183 ! IF(NOMBLAY.GT.1) THEN
184 !
185  DO j=1,nomblay
186  est=est+es(i,j)
187  conc(i,j) = conc_vase(j)
188  ENDDO
189 ! ELSE
190 ! EST=ES(I,1)
191 ! ENDIF
192 !
193  diff= elay(i) - est
194 !
195  IF(abs(diff).GE.1.d-4) THEN
196  WRITE(lu,*) 'ERROR IN INIT-MIXTE:'
197  WRITE(lu,*) 'THE SUM OF THICKNESS OF BED LAYERS
198  & IS DIFFERENT FROM ERODIBLE BED THICKNESS'
199  CALL plante(1)
200  stop
201  ELSE
202  es(i,nomblay) = max(es(i,nomblay)+ diff,0.d0)
203  ENDIF
204 !
205  ENDDO
206 !
207  ENDIF
208 !
209 ! END LOOP (initialization of layers)
210 !
211 ! Check sum ELAY = ZF-ZR
212 ! = SUM (ES)
213  DO i = 1, npoin
214  est=0.d0
215  DO j= 1, nomblay
216  est=est+es(i,j)
217  ENDDO
218  diff=abs(est-elay(i))
219  IF(diff.GT.1.d-08) THEN
220  WRITE(lu,*) 'ERREUR POINT I'
221  & , i, 'ELAY=',elay(i), 'EST=', est
222  CALL plante(1)
223  stop
224  ENDIF
225  ENDDO
226 !
227 
228 ! COMPUTING THE INITIAL MASSES OF MUD AND SAND
229 !
230  DO i=1,npoin
231  t1%R(i)=0.d0
232  t2%R(i)=0.d0
233  DO j=1,nomblay
234  IF(nsicla.EQ.1) THEN
235  es_vase(i,j) = es(i,j)
236  ms_vase(i,j) = es(i,j)*conc(i,j)
237  ELSE
238 ! FOR MIXTE SEDIMENTS : (MUD, second class )
239 !.... FILLING VOIDS BETWEEN SAND GRAINS ....(XKV=1)
240 !
241  es_sable(i,j)=es(i,j)*avail(i,j,1)
242  es_vase(i,j)= es(i,j)*avail(i,j,2)
243 !
244  ms_vase(i,j) = es_vase(i,j)*conc(i,j)
245  ms_sable(i,j)= es_sable(i,j)*xmvs
246  ENDIF
247  t1%R(i)= t1%R(i)+ms_vase(i,j)
248  IF(mixte) t2%R(i)=t2%R(i) + ms_sable(i,j)
249  ENDDO
250  ENDDO
251 !
252 !
253 ! FOR MASS BALANCE
254 !
255  IF(bilma) THEN
256  masv0=dots(t1,volu2d)
257  IF(mixte) mass0= dots(t2,volu2d)
258  IF(ncsize.GT.1) THEN
259  masv0=p_dsum(masv0)
260  IF(mixte) mass0=p_dsum(mass0)
261  ENDIF
262 !
263  masvt=masv0
264  IF(mixte) masst=mass0
265  IF (.NOT.mixte) THEN
266  WRITE(lu,2) masv0
267  ELSE
268  WRITE(lu,20) masv0, mass0
269  ENDIF
270  ENDIF
271 !
272 002 FORMAT(1x,'INITIAL MASS OF THE MUD BED: ', g20.11, ' KG')
273 020 FORMAT(1x,'INITIAL MASS OF THE MUD BED: ', g20.11, ' KG',
274  & /,1x,'INITIAL MASS OF THE SAND BED: ', g20.11, ' KG')
275 
276 !
277 !-----------------------------------------------------------------------
278 !
279  RETURN
280  END
subroutine init_compo_coh(ES, CONC_VASE, CONC, NPOIN, NOMBLAY, NSICLA, AVAIL, AVA0)
Definition: init_compo_coh.f:7
type(bief_obj), pointer t1
double precision function dots(X, Y)
Definition: dots.f:7
double precision function p_dsum(MYPART)
Definition: p_dsum.F:7
subroutine init_mixte(XMVS, NPOIN, AVAIL, NSICLA, ES, ES_SABLE, ES_VASE, ELAY, NOMBLAY, CONC_VASE, MS_SABLE, MS_VASE, ZF, ZR, AVA0, CONC, DEBU, MIXTE)
Definition: init_mixte.f:8
type(bief_obj), pointer t2
type(bief_obj), target volu2d
Definition: bief.f:3