ROMS
Loading...
Searching...
No Matches
sediment_mod.h
Go to the documentation of this file.
2!
3!git $Id$
4!================================================== Hernan G. Arango ===
5! Copyright (c) 2002-2025 The ROMS Group John C. Warner !
6! Licensed under a MIT/X style license !
7! See License_ROMS.md !
8!=======================================================================
9! !
10! Parameters for sediment model: !
11! ============================= !
12! !
13! Csed Sediment concentration (kg/m3), used during !
14! analytical initialization. !
15! Erate Surface erosion rate (kg/m2/s). !
16! Sd50 Median sediment grain diameter (m). !
17! Srho Sediment grain density (kg/m3). !
18! SedIter Maximum number of iterations. !
19! Wsed Particle settling velocity (m/s). !
20! poros Porosity (non-dimensional: 0.0-1.0): !
21! Vwater/(Vwater+Vsed). !
22! tau_ce Kinematic critical shear for erosion (m2/s2). !
23! tau_cd Kinematic critical shear for deposition (m2/s2). !
24! !
25! bedload_coeff Bedload rate coefficient (nondimensional). !
26! minlayer_thick Minimum thickness for 2nd layer (m). !
27! newlayer_thick New layer deposit thickness criteria (m). !
28! morph_fac Morphological scale factor (nondimensional). !
29! !
30! BED properties indices: !
31! ====================== !
32! !
33! MBEDP Number of bed properties (array dimension). !
34! idBmas(:) Sediment mass index. !
35! idSbed(:) IO indices for bed properties variables. !
36! idfrac(:) Sediment class fraction (non-dimensional). !
37! ithck Sediment layer thickness (m). !
38! iaged Sediment layer age (s). !
39! iporo Sediment layer porosity (non-dimensional). !
40! idiff Sediment layer bio-diffusivity (m2/s). !
41! ibtcr Sediment critical stress for erosion (Pa). !
42! !
43! BOTTOM properties indices: !
44! ========================= !
45! !
46! MBOTP Number of bottom properties (array dimension). !
47! idBott(:) IO indices for bottom properties variables. !
48! isd50 Median sediment grain diameter (m). !
49! idens Median sediment grain density (kg/m3). !
50! iwsed Mean settling velocity (m/s). !
51! itauc Mean critical erosion stress (m2/s2). !
52! irlen Sediment ripple length (m). !
53! irhgt Sediment ripple height (m). !
54! ibwav Bed wave excursion amplitude (m). !
55! izdef Default bottom roughness (m). !
56! izapp Apparent bottom roughness (m). !
57! izNik Nikuradse bottom roughness (m). !
58! izbio Biological bottom roughness (m). !
59! izbfm Bed form bottom roughness (m). !
60! izbld Bed load bottom roughness (m). !
61! izwbl Bottom roughness used wave BBL (m). !
62! iactv Active layer thickness for erosive potential (m). !
63! ishgt Sediment saltation height (m). !
64! idefx Erosion flux. !
65! idnet Erosion or deposition. !
66! idoff Offset for calculation of dmix erodibility !
67! profile (m). !
68! idslp Slope for calculation of dmix or erodibility !
69! profile. !
70! idtim Time scale for restoring erodibility profile (s). !
71! idbmx Bed biodifusivity maximum. !
72! idbmm Bed biodifusivity minimum. !
73! idbzs Bed biodifusivity zs. !
74! idbzm Bed biodifusivity zm. !
75! idbzp Bed biodifusivity phi. !
76! idprp Cohesive behavior. !
77! !
78!=======================================================================
79!
80 USE mod_param
81!
82 implicit none
83!
84!-----------------------------------------------------------------------
85! Tracer identification indices.
86!-----------------------------------------------------------------------
87!
88 integer, allocatable :: idsed(:) ! Cohesive and non-cohesive
89 integer, allocatable :: idmud(:) ! Cohesive sediment
90 integer, allocatable :: isand(:) ! Non-cohesive sediment
91!
92!-----------------------------------------------------------------------
93! Bed and bottom properties indices.
94!-----------------------------------------------------------------------
95!
96! Set size of properties arrays.
97!
98#if defined COHESIVE_BED || defined SED_BIODIFF || defined MIXED_BED
99 integer, parameter :: mbedp = 5 ! Bed properties
100#else
101 integer, parameter :: mbedp = 4 ! Bed properties
102#endif
103 integer :: idsbed(mbedp) ! bed properties IDs
104!
105#if defined MIXED_BED
106 integer, parameter :: mbotp = 27 ! Bottom properties
107#elif defined COHESIVE_BED || defined SED_BIODIFF
108 integer, parameter :: mbotp = 26 ! Bottom properties
109#else
110 integer, parameter :: mbotp = 18 ! Bottom properties
111#endif
112 integer :: idbott(mbotp) ! bottom properties IDs
113!
114! Set properties indices.
115!
116 integer, parameter :: ithck = 1 ! layer thickness
117 integer, parameter :: iaged = 2 ! layer age
118 integer, parameter :: iporo = 3 ! layer porosity
119 integer, parameter :: idiff = 4 ! layer bio-diffusivity
120#if defined COHESIVE_BED || defined SED_BIODIFF || defined MIXED_BED
121 integer, parameter :: ibtcr = 5 ! layer critical stress
122#endif
123!
124 integer, parameter :: isd50 = 1 ! mean grain diameter
125 integer, parameter :: idens = 2 ! mean grain density
126 integer, parameter :: iwsed = 3 ! mean settle velocity
127 integer, parameter :: itauc = 4 ! critical erosion stress
128 integer, parameter :: irlen = 5 ! ripple length
129 integer, parameter :: irhgt = 6 ! ripple height
130 integer, parameter :: ibwav = 7 ! wave excursion amplitude
131 integer, parameter :: izdef = 8 ! default bottom roughness
132 integer, parameter :: izapp = 9 ! apparent bottom roughness
133 integer, parameter :: iznik = 10 ! Nikuradse bottom roughness
134 integer, parameter :: izbio = 11 ! biological bottom roughness
135 integer, parameter :: izbfm = 12 ! bed form bottom roughness
136 integer, parameter :: izbld = 13 ! bed load bottom roughness
137 integer, parameter :: izwbl = 14 ! wave bottom roughness
138 integer, parameter :: iactv = 15 ! active layer thickness
139 integer, parameter :: ishgt = 16 ! saltation height
140 integer, parameter :: idefx = 17 ! erosion flux
141 integer, parameter :: idnet = 18 ! erosion or deposition
142#if defined COHESIVE_BED || defined SED_BIODIFF || defined MIXED_BED
143 integer, parameter :: idoff = 19 ! tau critical offset
144 integer, parameter :: idslp = 20 ! tau critical slope
145 integer, parameter :: idtim = 21 ! erodibility time scale
146 integer, parameter :: idbmx = 22 ! diffusivity db_max
147 integer, parameter :: idbmm = 23 ! diffusivity db_m
148 integer, parameter :: idbzs = 24 ! diffusivity db_zs
149 integer, parameter :: idbzm = 25 ! diffusivity db_zm
150 integer, parameter :: idbzp = 26 ! diffusivity db_zphi
151#endif
152#if defined MIXED_BED
153 integer, parameter :: idprp = 27 ! cohesive behavior
154#endif
155!
156! Sediment metadata indices vectors.
157!
158 integer, allocatable :: idbmas(:) ! class mass indices
159 integer, allocatable :: idfrac(:) ! class fraction indices
160 integer, allocatable :: idubld(:) ! bed load u-points
161 integer, allocatable :: idvbld(:) ! bed load v-points
162!
163!-----------------------------------------------------------------------
164! Input sediment parameters.
165!-----------------------------------------------------------------------
166!
167 real(r8), allocatable :: newlayer_thick(:) ! deposit thickness
168 real(r8), allocatable :: minlayer_thick(:) ! 2nd layer thickness
169 real(r8), allocatable :: bedload_coeff(:) ! bedload rate
170
171 real(r8), allocatable :: csed(:,:) ! initial concentration
172 real(r8), allocatable :: erate(:,:) ! erosion rate
173 real(r8), allocatable :: sd50(:,:) ! mediam grain diameter
174 real(r8), allocatable :: srho(:,:) ! grain density
175 real(r8), allocatable :: wsed(:,:) ! settling velocity
176 real(r8), allocatable :: poros(:,:) ! porosity
177 real(r8), allocatable :: tau_ce(:,:) ! shear for erosion
178 real(r8), allocatable :: tau_cd(:,:) ! shear for deposition
179 real(r8), allocatable :: morph_fac(:,:) ! morphological factor
180
181#if defined COHESIVE_BED || defined MIXED_BED
182 real(r8), allocatable :: tcr_min(:) ! minimum shear erosion
183 real(r8), allocatable :: tcr_max(:) ! maximum shear erosion
184 real(r8), allocatable :: tcr_slp(:) ! Tau_crit profile slope
185 real(r8), allocatable :: tcr_off(:) ! Tau_crit profile offset
186 real(r8), allocatable :: tcr_tim(:) ! Tau_crit consolidation
187#endif
188
189#if defined MIXED_BED
190 real(r8), allocatable :: transc(:) ! cohesive transition
191 real(r8), allocatable :: transn(:) ! noncohesive transition
192#endif
193!
194 CONTAINS
195!
197!
198!=======================================================================
199! !
200! This routine sets several variables needed by the sediment model. !
201! It allocates and assigns sediment tracers indices. !
202! !
203!=======================================================================
204!
205! Local variable declarations
206!
207 integer :: i, ic
208
209 real(r8), parameter :: IniVal = 0.0_r8
210!
211!-----------------------------------------------------------------------
212! Initialize tracer identification indices.
213!-----------------------------------------------------------------------
214!
215! Allocate various nested grid depended parameters
216!
217 IF (.not.allocated(newlayer_thick)) THEN
218 allocate ( newlayer_thick(ngrids) )
219 newlayer_thick = inival
220 dmem(1)=dmem(1)+real(ngrids,r8)
221 END IF
222
223 IF (.not.allocated(minlayer_thick)) THEN
224 allocate ( minlayer_thick(ngrids) )
225 minlayer_thick = inival
226 dmem(1)=dmem(1)+real(ngrids,r8)
227 END IF
228
229 IF (.not.allocated(bedload_coeff)) THEN
230 allocate ( bedload_coeff(ngrids) )
231 bedload_coeff = inival
232 dmem(1)=dmem(1)+real(ngrids,r8)
233 END IF
234
235#if defined COHESIVE_BED || defined MIXED_BED
236 IF (.not.allocated(tcr_min)) THEN
237 allocate ( tcr_min(ngrids) )
238 tcr_min = inival
239 dmem(1)=dmem(1)+real(ngrids,r8)
240 END IF
241
242 IF (.not.allocated(tcr_max)) THEN
243 allocate ( tcr_max(ngrids) )
244 tcr_max = inival
245 dmem(1)=dmem(1)+real(ngrids,r8)
246 END IF
247
248 IF (.not.allocated(tcr_slp)) THEN
249 allocate ( tcr_slp(ngrids) )
250 tcr_slp = inival
251 dmem(1)=dmem(1)+real(ngrids,r8)
252 END IF
253
254 IF (.not.allocated(tcr_off)) THEN
255 allocate ( tcr_off(ngrids) )
256 tcr_off = inival
257 dmem(1)=dmem(1)+real(ngrids,r8)
258 END IF
259
260 IF (.not.allocated(tcr_tim)) THEN
261 allocate ( tcr_tim(ngrids) )
262 tcr_tim = inival
263 dmem(1)=dmem(1)+real(ngrids,r8)
264 END IF
265#endif
266
267#if defined MIXED_BED
268 IF (.not.allocated(transc)) THEN
269 allocate ( transc(ngrids) )
270 transc = inival
271 dmem(1)=dmem(1)+real(ngrids,r8)
272 END IF
273
274 IF (.not.allocated(transn)) THEN
275 allocate ( transn(ngrids) )
276 transn = inival
277 dmem(1)=dmem(1)+real(ngrids,r8)
278 END IF
279#endif
280!
281! Allocate sediment tracers indices vectors.
282!
283 IF (.not.allocated(idsed)) THEN
284 allocate ( idsed(max(1,nst)) )
285 dmem(1)=dmem(1)+real(max(1,nst),r8)
286 END IF
287
288 IF (.not.allocated(idmud)) THEN
289 allocate ( idmud(max(1,ncs)) )
290 dmem(1)=dmem(1)+real(max(1,ncs),r8)
291 END IF
292
293 IF (.not.allocated(isand)) THEN
294 allocate ( isand(max(1,nns)) )
295 dmem(1)=dmem(1)+real(max(1,nns),r8)
296 END IF
297
298 IF (.not.allocated(idbmas)) THEN
299 allocate ( idbmas(nst) )
300 dmem(1)=dmem(1)+real(nst,r8)
301 END IF
302
303 IF (.not.allocated(idfrac)) THEN
304 allocate ( idfrac(nst) )
305 dmem(1)=dmem(1)+real(nst,r8)
306 END IF
307
308 IF (.not.allocated(idubld)) THEN
309 allocate ( idubld(nst) )
310 dmem(1)=dmem(1)+real(nst,r8)
311 END IF
312
313 IF (.not.allocated(idvbld)) THEN
314 allocate ( idvbld(nst) )
315 dmem(1)=dmem(1)+real(nst,r8)
316 END IF
317!
318! Set cohesive and noncohesive suspended sediment tracers
319! identification indices.
320!
321 ic=nat+npt
322 DO i=1,ncs
323 ic=ic+1
324 idmud(i)=ic
325 idsed(i)=idmud(i)
326 END DO
327 DO i=1,nns
328 ic=ic+1
329 isand(i)=ic
330 idsed(ncs+i)=isand(i)
331 END DO
332!
333 RETURN
334 END SUBROUTINE initialize_sediment
335
336 END MODULE mod_sediment
integer nat
Definition mod_param.F:499
real(r8), dimension(:), allocatable dmem
Definition mod_param.F:137
integer ncs
Definition mod_param.F:525
integer ngrids
Definition mod_param.F:113
integer nns
Definition mod_param.F:529
integer npt
Definition mod_param.F:505
integer nst
Definition mod_param.F:521
integer, parameter iwsed
integer, parameter ibtcr
integer, parameter irlen
integer, dimension(:), allocatable idubld
integer, parameter idbzs
integer, parameter idprp
integer, parameter irhgt
real(r8), dimension(:), allocatable bedload_coeff
integer, parameter mbotp
real(r8), dimension(:,:), allocatable erate
integer, parameter idiff
integer, dimension(mbedp) idsbed
integer, parameter iactv
integer, parameter iaged
integer, parameter idnet
real(r8), dimension(:,:), allocatable tau_cd
real(r8), dimension(:,:), allocatable srho
integer, parameter iznik
integer, parameter ibwav
integer, parameter idbmx
integer, dimension(:), allocatable idsed
integer, dimension(:), allocatable isand
subroutine initialize_sediment
integer, parameter ishgt
real(r8), dimension(:), allocatable tcr_max
integer, dimension(:), allocatable idfrac
integer, parameter iporo
integer, parameter idslp
integer, parameter idens
integer, parameter isd50
integer, parameter idtim
integer, parameter idbzp
real(r8), dimension(:,:), allocatable poros
integer, dimension(:), allocatable idmud
integer, dimension(mbotp) idbott
integer, parameter izbld
integer, parameter idefx
real(r8), dimension(:), allocatable transn
real(r8), dimension(:,:), allocatable morph_fac
integer, parameter izapp
real(r8), dimension(:), allocatable newlayer_thick
integer, parameter izbio
integer, parameter izdef
real(r8), dimension(:), allocatable minlayer_thick
real(r8), dimension(:,:), allocatable sd50
real(r8), dimension(:), allocatable transc
real(r8), dimension(:), allocatable tcr_tim
real(r8), dimension(:), allocatable tcr_off
real(r8), dimension(:,:), allocatable wsed
integer, dimension(:), allocatable idvbld
integer, dimension(:), allocatable idbmas
integer, parameter idoff
real(r8), dimension(:), allocatable tcr_min
integer, parameter itauc
integer, parameter ithck
integer, parameter idbzm
real(r8), dimension(:,:), allocatable tau_ce
integer, parameter izwbl
real(r8), dimension(:), allocatable tcr_slp
integer, parameter mbedp
integer, parameter idbmm
integer, parameter izbfm
real(r8), dimension(:,:), allocatable csed