Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
! *****************************************
SUBROUTINE BED1_UPDATE_ACTIVELAYER_HIRANO
! *****************************************
!
!***********************************************************************
! GAIA
!***********************************************************************
!
! Routine antérieure à la version trunk car bug...
!
!***********************************************************************
!
!>@brief Mass transfer between the active layer (first layer) and the
!! layer underneath. This is possible and needed only if there
!! is no consolidation. The algorithm is based on the classical
!! active layer formulation of Hirano, improved to consider
!! cases involving sand, mud or sand-mud mixtures.
!!
!! This subroutine updates mass_sand and mass_mud using their mass
!! flux.
!!
!! For the case of consolidation, the mass transfer between layers
!! is only caused by consolidation and the active layer is virtual
!! and therefore recomputed when needed from the consolidation layers
!
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!
USE BIEF
USE DECLARATIONS_TELEMAC
USE DECLARATIONS_GAIA, ONLY: MIN_SED_MASS_COMP,ES,MASS_SAND,
& MASS_MUD,NSAND,NMUD,NPOIN,NOMBLAY,XKV0,CONC_MUD,
& ELAY,CONC_MUD_ACTIV_LAYER,MASS_MUD_ACTIV_LAYER,
& MASS_MUD_ACTIV_LAYER,FLUX_MASS_MUD,
& FLUX_MASS_SAND
USE DECLARATIONS_SPECIAL
IMPLICIT NONE
!
!----------------------------------------------------------------------
!
INTEGER IPOIN,ILAYER,ISAND,IMUD
DOUBLE PRECISION THICK_TRANSFER,THICK_TRANSFER_TEMPO
DOUBLE PRECISION RATIO_XKV
!
!----------------------------------------------------------------------
!
! INITIALIZATION
!
DO IPOIN=1,NPOIN
DO ILAYER=1,NOMBLAY
DO IMUD=1,NMUD
FLUX_MASS_MUD(IMUD,ILAYER,IPOIN)=0.D0
ENDDO
DO ISAND=1,NSAND
FLUX_MASS_SAND(ISAND,ILAYER,IPOIN)=0.D0
ENDDO
ENDDO
ENDDO
!
! COMPUTATION OF THE THICKNESS FOR TRANSFER
!
DO IPOIN=1,NPOIN
! TOTAL MASS MUD AND CONCENTRATION OF MUD IN THE ACTIVE LAYER BEFORE UPDATE
CONC_MUD_ACTIV_LAYER(IPOIN)=
& MAX(CONC_MUD(1,IPOIN),CONC_MUD(2,IPOIN))
MASS_MUD_ACTIV_LAYER(IPOIN)= 0.D0
DO IMUD = 1,NMUD
MASS_MUD_ACTIV_LAYER(IPOIN)= MASS_MUD_ACTIV_LAYER(IPOIN)+
& MASS_MUD(IMUD,1,IPOIN)
ENDDO
THICK_TRANSFER = ES(IPOIN,1)- ELAY%R(IPOIN)
! POSITIVE SIGNE MEANS DEPOSITION, NEGATIVE MEANS EROSION
!
!-----------------------------------------------------------------------
! DEPOSITION CASE
!-----------------------------------------------------------------------
!
IF(THICK_TRANSFER.GT.0.D0) THEN
! ACTIVE LAYER TOO LARGE: TRANSFER OF MASS FROM UPPER LAYER TO
! LOWER LAYER
IF(NMUD.GE.1) THEN
DO IMUD = 1,NMUD
FLUX_MASS_MUD(IMUD,1,IPOIN)= -(THICK_TRANSFER/ES(IPOIN,1))
& *MASS_MUD(IMUD,1,IPOIN)
FLUX_MASS_MUD(IMUD,2,IPOIN)=+(THICK_TRANSFER/ES(IPOIN,1))
& *MASS_MUD(IMUD,1,IPOIN)
ENDDO
ENDIF
IF(NSAND.GE.1) THEN
DO ISAND=1,NSAND
FLUX_MASS_SAND(ISAND,1,IPOIN)=-(THICK_TRANSFER/ES(IPOIN,1))
& *MASS_SAND(ISAND,1,IPOIN)
FLUX_MASS_SAND(ISAND,2,IPOIN)=+(THICK_TRANSFER/ES(IPOIN,1))
& *MASS_SAND(ISAND,1,IPOIN)
ENDDO
ENDIF
! IN THIS CASE: CONCENTRATION OF MUD IN THE ACTIVE LAYER DONT CHANGE
!
!-----------------------------------------------------------------------
! EROSION CASE
!-----------------------------------------------------------------------
!
ELSE !IF(THICK_TRANSFER.LE.0.D0) THEN
! ACTIVE LAYER TOO SMALL: TRANSFER OF MASS FROM SUBLAYER TO
! UPPER LAYER
THICK_TRANSFER_TEMPO = ABS(THICK_TRANSFER)
DO ILAYER =2,NOMBLAY
RATIO_XKV = (1.D0-XKV0(ILAYER))/(1.D0-XKV0(1))
IF(THICK_TRANSFER_TEMPO.GE.ES(IPOIN,ILAYER)*RATIO_XKV) THEN
IF(NMUD.GE.1) THEN
DO IMUD=1,NMUD
FLUX_MASS_MUD(IMUD,ILAYER,IPOIN)=
& FLUX_MASS_MUD(IMUD,ILAYER,IPOIN)-
& MASS_MUD(IMUD,ILAYER,IPOIN)
FLUX_MASS_MUD(IMUD,1,IPOIN)=
& FLUX_MASS_MUD(IMUD,1,IPOIN)+
& MASS_MUD(IMUD,ILAYER,IPOIN)
! UPDATE CONCENTRATION OF MUD IN THE ACTIVE LAYER
CONC_MUD_ACTIV_LAYER(IPOIN)=
& (CONC_MUD_ACTIV_LAYER(IPOIN)*
& MASS_MUD_ACTIV_LAYER(IPOIN)+
& CONC_MUD(ILAYER,IPOIN)*MASS_MUD(IMUD,ILAYER,IPOIN))/
& (MASS_MUD_ACTIV_LAYER(IPOIN)+MASS_MUD(IMUD,ILAYER,IPOIN))
MASS_MUD_ACTIV_LAYER(IPOIN)=
& MASS_MUD_ACTIV_LAYER(IPOIN)+MASS_MUD(IMUD,ILAYER,IPOIN)
ENDDO
ENDIF
IF(NSAND.GE.1) THEN
DO ISAND=1,NSAND
FLUX_MASS_SAND(ISAND,ILAYER,IPOIN)=
& FLUX_MASS_SAND(ISAND,ILAYER,IPOIN)-
& MASS_SAND(ISAND,ILAYER,IPOIN)
FLUX_MASS_SAND(ISAND,1,IPOIN)=
& FLUX_MASS_SAND(ISAND,1,IPOIN)+
& MASS_SAND(ISAND,ILAYER,IPOIN)
ENDDO
ENDIF
THICK_TRANSFER_TEMPO = THICK_TRANSFER_TEMPO
& - ES(IPOIN,ILAYER)*RATIO_XKV
ELSE
IF(NMUD.GE.1) THEN
DO IMUD=1,NMUD
FLUX_MASS_MUD(IMUD,ILAYER,IPOIN)=
& FLUX_MASS_MUD(IMUD,ILAYER,IPOIN)-
& (THICK_TRANSFER_TEMPO/(ES(IPOIN,ILAYER)*RATIO_XKV))
& *MASS_MUD(IMUD,ILAYER,IPOIN)
!
FLUX_MASS_MUD(IMUD,1,IPOIN)=
& FLUX_MASS_MUD(IMUD,1,IPOIN)+
& (THICK_TRANSFER_TEMPO/(ES(IPOIN,ILAYER)*RATIO_XKV))
& *MASS_MUD(IMUD,ILAYER,IPOIN)
! UPDATE CONCENTRATION OF MUD IN THE ACTIVE LAYER
CONC_MUD_ACTIV_LAYER(IPOIN)=
& (CONC_MUD_ACTIV_LAYER(IPOIN)*
& MASS_MUD_ACTIV_LAYER(IPOIN)+
& CONC_MUD(ILAYER,IPOIN)*
& (THICK_TRANSFER_TEMPO/(ES(IPOIN,ILAYER)*RATIO_XKV))
& *MASS_MUD(IMUD,ILAYER,IPOIN))/
& (MASS_MUD_ACTIV_LAYER(IPOIN)+
& (THICK_TRANSFER_TEMPO/(ES(IPOIN,ILAYER)*RATIO_XKV))
& *MASS_MUD(IMUD,ILAYER,IPOIN))
!
MASS_MUD_ACTIV_LAYER(IPOIN)=
& MASS_MUD_ACTIV_LAYER(IPOIN)+
& (THICK_TRANSFER_TEMPO/(ES(IPOIN,ILAYER)*RATIO_XKV))
& *MASS_MUD(IMUD,ILAYER,IPOIN)
ENDDO
ENDIF
IF(NSAND.GE.1) THEN
DO ISAND=1,NSAND
FLUX_MASS_SAND(ISAND,ILAYER,IPOIN)=
& FLUX_MASS_SAND(ISAND,ILAYER,IPOIN)-
& (THICK_TRANSFER_TEMPO/(ES(IPOIN,ILAYER)*RATIO_XKV))
& *MASS_SAND(ISAND,ILAYER,IPOIN)
FLUX_MASS_SAND(ISAND,1,IPOIN)=
& FLUX_MASS_SAND(ISAND,1,IPOIN)+
& (THICK_TRANSFER_TEMPO/(ES(IPOIN,ILAYER)*RATIO_XKV))
& *MASS_SAND(ISAND,ILAYER,IPOIN)
ENDDO
ENDIF
GOTO 100
ENDIF
ENDDO
100 CONTINUE
ENDIF ! THICK_TRANSFER.GE.0.D0
IF(NMUD.GE.1) THEN
! CHECK CONCENTRATION OF ACTIVE LAYER AND UPDATE CONC_MUD(1,IPOIN)
IF(CONC_MUD_ACTIV_LAYER(IPOIN).LE.CONC_MUD(2,IPOIN))THEN
CONC_MUD(1,IPOIN)= CONC_MUD(2,IPOIN)
ELSEIF(CONC_MUD_ACTIV_LAYER(IPOIN).GE.
& CONC_MUD(NOMBLAY,IPOIN))THEN
CONC_MUD(1,IPOIN)=CONC_MUD(NOMBLAY,IPOIN)
ELSE
CONC_MUD(1,IPOIN)= CONC_MUD_ACTIV_LAYER(IPOIN)
ENDIF
ENDIF
ENDDO ! NPOIN
!
!-----------------------------------------------------------------------
! TRANSFER OF MUD MASSES
!-----------------------------------------------------------------------
!
IF(NMUD.GE.1) THEN
DO IPOIN=1,NPOIN
DO ILAYER=1,NOMBLAY
DO IMUD = 1,NMUD
MASS_MUD(IMUD,ILAYER,IPOIN)= MASS_MUD(IMUD,ILAYER,IPOIN)
& +FLUX_MASS_MUD(IMUD,ILAYER,IPOIN)
ENDDO
ENDDO
ENDDO
ENDIF
!
!-----------------------------------------------------------------------
! TRANSFER OF SAND MASSES
!-----------------------------------------------------------------------
!
! NEGATIVE FLUX_MASS_SAND MEANS THE FLUX IS FROM UPPER LAYER TO
! LOWER LAYER
IF(NSAND.GE.1) THEN
DO IPOIN=1,NPOIN
DO ILAYER=1,NOMBLAY
DO ISAND=1,NSAND
MASS_SAND(ISAND,ILAYER,IPOIN)=
& MASS_SAND(ISAND,ILAYER,IPOIN)
& +FLUX_MASS_SAND(ISAND,ILAYER,IPOIN)
ENDDO
ENDDO
ENDDO
ENDIF
!
!-----------------------------------------------------------------------
!-----------------------------------------------------------------------
!
RETURN
END