-
Notifications
You must be signed in to change notification settings - Fork 8
/
15-organic_matter.Rmd
422 lines (350 loc) · 19.1 KB
/
15-organic_matter.Rmd
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
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
# Organic Matter {#organic-matter}
## Contributors
Matthew R. Hipsey
## Overview
Both the inorganic and organic, and dissolved and particulate forms of C, N and P are modelled in AED along the general degradation pathway of POM to DOM to dissolved inorganic matter (DIM). The OGM module simulates the organic material as a single or as multiple discrete pools. The inorganic carbon, nitrogen and phosphorus pools are reported in separate modules which are linked to from OGM.
It is well established that both autochthonous and allochthonous sources of OM have important consequences for water quality. Reactivity of OM is known to be linked with origin, varying potentially orders of magnitude, and often including a single OM pool could be a significant over-simplification. Harvey and Mannio (2001) analysed samples from several points in a US estuary according to an uncharacterisable fraction and a few major molecular classes (carbohydrates, proteins, lipids, lignins and hydrocarbons), and identified significant changes along the estuarine gradient.
Within the particulate pool, similarly there is a relatively labile POM fraction based on internal generation, and inputs from urban drains, in addition to a more refractory coarse POM pool (CPOM) that originates mainly form the forested headwaters and regions with significant intact riparian vegetation.
## Model Description
A 10-pool organic matter model able to capture the variable reactivity of the OM pool and its stoichiometry is configureable within this module. Under this conceptual model the decomposition of particulate detrital material is broken down through a process of enzymatic hydrolysis that slowly converts POM to labile DOM. A small fraction, $f_{ref}$, of this material is diverted to the DOM-R pool. The bioavailable DOM material enters the bacterial terminal metabolism pathways. These are active depending on the ambient oxygen concentrations and presence of electron acceptors, and of most relevance to the reservoirs, these pathways aerobic breakdown, denitrification, sulfate reduction, and methanogenesis. In most model approaches it is assumed these communities vary in response to temperature, and are mediated using a simple oxygen dependence or limitation factor.
<br>
<center>
```{r 15-pic1, echo=FALSE, fig.cap="Schematic overview of organic matter (OM) pools and their interactions. Grey dashed line indicates optional process pathway. Different tributaries to the model must be prescribed OM pool boundary concentrations based on land-use specific ratios of POM and DOM reactivity.", out.width = '80%'}
knitr::include_graphics("images/15-organic_matter/om.png")
```
</center>
<br>
The main dissolved organic matter pool balance equations are simulated as:
\begin{eqnarray}
\frac{D}{Dt}DOC = \color{darkgray}{ \mathbb{M} + \mathcal{S} } \quad
&+& \overbrace{(1-k_{ref})\:f_{hyd}^{POC}-f_{min}^{DOC}+\hat{f}_{sed}^{DOC} }^\text{aed_organic_matter} \\ (\#eq:doc1)
&+& \color{brown}{ f_{exr}^{PHY} + f_{exr}^{ZOO} + \hat{f}_{rsp}^{MAG} + \hat{f}_{rsp}^{BIV}} \\ \nonumber
\end{eqnarray}
\begin{eqnarray}
\frac{D}{Dt}DON = \color{darkgray}{ \mathbb{M} + \mathcal{S} } \quad
&+& f_{hyd}^{PON}-f_{min}^{DON}+\hat{f}_{sed}^{DON}\\ (\#eq:don1)
&+& \color{brown}{ f_{exr}^{PHY} + f_{exr}^{ZOO} + \hat{f}_{rsp}^{MAG} + \hat{f}_{rsp}^{BIV}} \\ \nonumber
\end{eqnarray}
\begin{eqnarray}
\frac{D}{Dt}DOP = \color{darkgray}{ \mathbb{M} + \mathcal{S} } \quad
&+& f_{hyd}^{POP}-f_{min}^{DOP}+\hat{f}_{sed}^{DOP}\\ (\#eq:dop1)
&+& \color{brown}{ f_{exr}^{PHY} + f_{exr}^{ZOO} + \hat{f}_{rsp}^{MAG} + \hat{f}_{rsp}^{BIV}} \\ \nonumber
\end{eqnarray}
where $\mathbb{M}$ and $\mathcal{S}$ refer to water mixing and boundary source terms, respectively, and the coloured $\color{brown}{f}$ terms reflect DOM related fluxes computed by other (optionally) linked modules such as modules of phytoplankton ($\mathrm{PHY}$) or zooplankton ($\mathrm{ZOO}$).
The main particulate organic matter pools are simulated as:
\begin{eqnarray}
\frac{D}{Dt}POC = \color{darkgray}{ \mathbb{M} + \mathcal{S} } \quad
&+& \overbrace{f_{set}^{POC}-f_{hyd}^{DOC}+\hat{f}_{res}^{POC} }^\text{aed_organic_matter} \\ (\#eq:poc1)
&+& \color{brown}{ f_{mor}^{PHY} + f_{egs}^{ZOO} + f_{msf}^{ZOO} + \hat{f}_{mor}^{MAG} + \hat{f}_{msf}^{BIV}} \\ \nonumber
\end{eqnarray}
\begin{eqnarray}
\frac{D}{Dt}PON = \color{darkgray}{ \mathbb{M} + \mathcal{S} } \quad
&+& f_{set}^{PON}-f_{hyd}^{DON}+\hat{f}_{res}^{PON}\\ (\#eq:pon1)
&+& \color{brown}{ f_{exr}^{PHY} + f_{exr}^{ZOO} + \hat{f}_{rsp}^{MAG} + \hat{f}_{rsp}^{BIV}} \\ \nonumber
\end{eqnarray}
\begin{eqnarray}
\frac{D}{Dt}POP = \color{darkgray}{ \mathbb{M} + \mathcal{S} } \quad
&+& f_{set}^{POP}-f_{hyd}^{DOP}+\hat{f}_{res}^{POP}\\ (\#eq:pop1)
&+& \color{brown}{ f_{exr}^{PHY} + f_{exr}^{ZOO} + \hat{f}_{rsp}^{MAG} + \hat{f}_{rsp}^{BIV}} \\ \nonumber
\end{eqnarray}
The OGM module optionally allows and extra 4 pools to specifically resolve the refractory (less reactive) organic matter material. In general we refer to the refractory DOM pool as $DOM{\text -}R$, which is broken into elemental pools, plus the $C{\text -}POM$ variables simulating coarse POM:
\begin{eqnarray}
\frac{D}{Dt}DOC{\text -}R = \color{darkgray}{ \mathbb{M} + \mathcal{S} } \quad
&+& \overbrace{k_{ref}\:f_{hyd}^{POC}-R^{DOMR}_{pm} +\hat{f}_{sed}^{DOCR} }^\text{aed_organic_matter} \\ (\#eq:docr1)
&+& \color{brown}{ f_{exr}^{PHY} + f_{exr}^{ZOO} + \hat{f}_{rsp}^{MAG} + \hat{f}_{rsp}^{BIV}} \\ \nonumber
\end{eqnarray}
\begin{eqnarray}
\frac{D}{Dt}DON{\text -}R = \color{darkgray}{ \mathbb{M} + \mathcal{S} } \quad
&+& f_{hyd}^{PON}-f_{min}^{DON}+\hat{f}_{sed}^{DON}\\ (\#eq:donr1)
&+& \color{brown}{ f_{exr}^{PHY} + f_{exr}^{ZOO} + \hat{f}_{rsp}^{MAG} + \hat{f}_{rsp}^{BIV}} \\ \nonumber
\end{eqnarray}
\begin{eqnarray}
\frac{D}{Dt}DOP{\text -}R = \color{darkgray}{ \mathbb{M} + \mathcal{S} } \quad
&+& f_{hyd}^{POP}-f_{min}^{DOP}+\hat{f}_{sed}^{DOP}\\ (\#eq:dopr1)
&+& \color{brown}{ f_{exr}^{PHY} + f_{exr}^{ZOO} + \hat{f}_{rsp}^{MAG} + \hat{f}_{rsp}^{BIV}} \\ \nonumber
\end{eqnarray}
\begin{eqnarray}
\frac{D}{Dt}C{\text -}POM = \color{darkgray}{ \mathbb{M} + \mathcal{S} } \quad
&+& f_{set}^{CPOM}-f_{bdn}^{CPOM}+\hat{f}_{res}^{CPOM} \\ (\#eq:cpom1)
&+& \color{brown}{ \check{f}_{lfl}^{VEG}} \\ \nonumber
\end{eqnarray}
The details of how each flux relevant to POC and DOC is calculated, and the associated parameter settings, are described in the next sections.
### Process Descriptions
#### Hydrolysis
#### Mineralisation
#### Photolysis
Ultraviolet light is known to drive photochemical breakdown of chromophoric $DOM$, conceptually equivalent to the $DOM{\text -}R$ pool in Figure X. This photolysis process can take shape either as photo-transformation of complex $DOM{\text -}R$ molecules to more bioavailable molecules (ie., DOM in Figure X), or as photo-mineralisation, where by components of the DOM-R molecule are mineralised. This is modelled based on a known intensity of UV photons, which drives a stoichiometrically equivalent loss of DOM-R via the photolysis reaction, and $f_{photo}$ is introduced as an empirically defined fraction that indicates the extent to which the process transforms the DOM-R molecules to bioavailable molecules or completely mineralises them.
The rate of photolysis can be computed based on the apparent quantum yield, ø¿, which varies with wavelength, the scalar photon flux density, ¡¿, and the adsorption coefficient, α¿, by integrating across the active wavelength spectrum, √415 v ́ √49?. This can be approximated for b discrete bandwidths (e.g. UV-A, UV-B, PAR) to simplify the calculation as:
\begin{equation}
R^{DOMR}_{pm} = \int_{\lambda_{min}}^{\lambda_{max}} \phi_{\lambda} \hat{I}_{\lambda} \alpha_{\lambda} d\lambda \: \approx \: \sum_{b=1}^3 \bar{\phi}_b \hat{I}_b \alpha_b
\end{equation}
where $\hat{I}_b$ is the mean bandwidth intensity (mol photons m-2 s-1) computed from the light intensity at any given depth, I, ø» is the mean bandwidth quantum yield, and $\alpha_b$ is the mean absorbance across the window of the specific bandwidth being computed. The latter two can be approximated by substituting into the following (Vähätalo et al. 2000; Vähätalo and Zepp, 2005): $\phi_{\lambda}=c10^{-d \lambda }$ and $\alpha_{\lambda} = \alpha_x exp(-S[x-\lambda])$.
#### CPOM breakdown
Internally generated inputs of POM also include from the shedding of seagrass leaves (this happens en-mass usually associated with winds/storms) and also decomposition of macroalgae or other . These latter terms are not presently included but reserved for future development efforts.
#### Sediment exchange
#### Settling
#### Resuspension
### Optional Module Links
### Feedbacks to the Host Model
The organic matter can feedback conditions to the hydrodynamic model by modifying the light extinction coefficient. For each dissolved and particulate attribute a specific attenuation coefficient, $K_e$, is required.
This total light extinction computed by the OGM model is:
\begin{equation}
K_{d_{om}} = K_{e_{doc}} DOC + K_{e_{poc}} POC + K_{e_{cdom}}CDOM + K_{e_{cpom}}CPOM
(\#eq:om_light_extc)
\end{equation}
### Variable Summary
The default variables created by this module, and the optionally required linked variables needed for full functionality of this module are summarised in Table \@ref(tab:15-statetable). The diagnostic outputs able to be output are summarised in Table \@ref(tab:15-diagtable).
#### State variables {-}
```{r 15-statetable, echo=FALSE, message=FALSE, warning=FALSE}
library(knitr)
library(kableExtra)
library(readxl)
library(rmarkdown)
theSheet <- read_excel('tables/aed_variable_tables.xlsx', sheet = 10)
theSheet <- theSheet[theSheet$Table == "State variable",]
theSheetGroups <- unique(theSheet$Group)
theSheet$`AED name` <- paste0("`",theSheet$`AED name`,"`")
for(i in seq_along(theSheet$Symbol)){
if(!is.na(theSheet$Symbol[i])==TRUE){
theSheet$Symbol[i] <- paste0("$$",theSheet$Symbol[i],"$$")
} else {
theSheet$Symbol[i] <- NA
}
}
for(i in seq_along(theSheet$Unit)){
if(!is.na(theSheet$Unit[i])==TRUE){
theSheet$Unit[i] <- paste0("$$\\small{",theSheet$Unit[i],"}$$")
} else {
theSheet$Unit[i] <- NA
}
}
for(i in seq_along(theSheet$Comments)){
if(!is.na(theSheet$Comments[i])==TRUE){
theSheet$Comments[i] <- paste0("",theSheet$Comments[i],"")
} else {
theSheet$Comments[i] <- " "
}
}
kbl(theSheet[,3:NCOL(theSheet)], caption = "Organic Matter - *state* variables", align = "l",) %>%
pack_rows(theSheetGroups[1],
min(which(theSheet$Group == theSheetGroups[1])),
max(which(theSheet$Group == theSheetGroups[1])),
background = '#ebebeb') %>%
pack_rows(theSheetGroups[2],
min(which(theSheet$Group == theSheetGroups[2])),
max(which(theSheet$Group == theSheetGroups[2])),
background = '#ebebeb') %>%
row_spec(0, background = "#14759e", bold = TRUE, color = "white") %>%
kable_styling(full_width = F,font_size = 11) %>%
column_spec(2, width_min = "7em") %>%
column_spec(3, width_max = "18em") %>%
column_spec(4, width_min = "10em") %>%
column_spec(5, width_min = "5em") %>%
column_spec(7, width_min = "10em") %>%
column_spec(7, width_max = "20em") %>%
scroll_box(width = "770px", height = "1450px",
fixed_thead = FALSE)
```
#### Diagnostics{-}
```{r 15-diagtable, echo=FALSE, message=FALSE, warning=FALSE}
library(knitr)
library(kableExtra)
library(readxl)
library(rmarkdown)
theSheet <- read_excel('tables/aed_variable_tables.xlsx', sheet = 10)
theSheet <- theSheet[theSheet$Table == "Diagnostics",]
theSheetGroups <- unique(theSheet$Group)
theSheet$`AED name` <- paste0("`",theSheet$`AED name`,"`")
for(i in seq_along(theSheet$Symbol)){
if(!is.na(theSheet$Symbol[i])==TRUE){
theSheet$Symbol[i] <- paste0("$$",theSheet$Symbol[i],"$$")
} else {
theSheet$Symbol[i] <- NA
}
}
for(i in seq_along(theSheet$Unit)){
if(!is.na(theSheet$Unit[i])==TRUE){
theSheet$Unit[i] <- paste0("$$\\small{",theSheet$Unit[i],"}$$")
} else {
theSheet$Unit[i] <- NA
}
}
for(i in seq_along(theSheet$Comments)){
if(!is.na(theSheet$Comments[i])==TRUE){
theSheet$Comments[i] <- paste0("",theSheet$Comments[i],"")
} else {
theSheet$Comments[i] <- " "
}
}
kbl(theSheet[,3:NCOL(theSheet)], caption = "Organic Matter - *diagnostic* variables", align = "l",) %>%
pack_rows(theSheetGroups[1],
min(which(theSheet$Group == theSheetGroups[1])),
max(which(theSheet$Group == theSheetGroups[1])),
background = '#ebebeb') %>%
pack_rows(theSheetGroups[2],
min(which(theSheet$Group == theSheetGroups[2])),
max(which(theSheet$Group == theSheetGroups[2])),
background = '#ebebeb') %>%
pack_rows(theSheetGroups[3],
min(which(theSheet$Group == theSheetGroups[3])),
max(which(theSheet$Group == theSheetGroups[3])),
background = '#ebebeb') %>%
row_spec(0, background = "#14759e", bold = TRUE, color = "white") %>%
kable_styling(full_width = F,font_size = 11) %>%
column_spec(2, width_min = "7em") %>%
column_spec(3, width_max = "18em") %>%
column_spec(4, width_min = "10em") %>%
column_spec(5, width_min = "6em") %>%
column_spec(7, width_min = "10em") %>%
scroll_box(width = "770px", height = "1300px",
fixed_thead = FALSE)
```
<br>
### Parameter Summary
The parameters and settings used by this module are summarised in Table \@ref(tab:15-parstable).
```{r 15-parstable, echo=FALSE, message=FALSE, warning=FALSE}
library(knitr)
library(kableExtra)
library(readxl)
library(rmarkdown)
theSheet <- read_excel('tables/aed_variable_tables.xlsx', sheet = 10)
theSheet <- theSheet[theSheet$Table == "Parameter",]
theSheetGroups <- unique(theSheet$Group)
theSheet$`AED name` <- paste0("`",theSheet$`AED name`,"`")
for(i in seq_along(theSheet$Symbol)){
if(!is.na(theSheet$Symbol[i])==TRUE){
theSheet$Symbol[i] <- paste0("$$",theSheet$Symbol[i],"$$")
} else {
theSheet$Symbol[i] <- " "
}
}
for(i in seq_along(theSheet$Unit)){
if(!is.na(theSheet$Unit[i])==TRUE){
theSheet$Unit[i] <- paste0("$$\\small{",theSheet$Unit[i],"}$$")
} else {
theSheet$Unit[i] <- NA
}
}
for(i in seq_along(theSheet$Comments)){
if(!is.na(theSheet$Comments[i])==TRUE){
theSheet$Comments[i] <- paste0("",theSheet$Comments[i],"")
} else {
theSheet$Comments[i] <- "-"
}
}
kbl(theSheet[,3:NCOL(theSheet)], caption = "Organic Matter module parameters and configuration options", align = "l",) %>%
pack_rows(theSheetGroups[1],
min(which(theSheet$Group == theSheetGroups[1])),
max(which(theSheet$Group == theSheetGroups[1])),
background = '#ebebeb') %>%
pack_rows(theSheetGroups[2],
min(which(theSheet$Group == theSheetGroups[2])),
max(which(theSheet$Group == theSheetGroups[2])),
background = '#ebebeb') %>%
pack_rows(theSheetGroups[3],
min(which(theSheet$Group == theSheetGroups[3])),
max(which(theSheet$Group == theSheetGroups[3])),
background = '#ebebeb') %>%
pack_rows(theSheetGroups[4],
min(which(theSheet$Group == theSheetGroups[4])),
max(which(theSheet$Group == theSheetGroups[4])),
background = '#ebebeb') %>%
pack_rows(theSheetGroups[5],
min(which(theSheet$Group == theSheetGroups[5])),
max(which(theSheet$Group == theSheetGroups[5])),
background = '#ebebeb') %>%
pack_rows(theSheetGroups[6],
min(which(theSheet$Group == theSheetGroups[6])),
max(which(theSheet$Group == theSheetGroups[6])),
background = '#ebebeb') %>%
pack_rows(theSheetGroups[7],
min(which(theSheet$Group == theSheetGroups[7])),
max(which(theSheet$Group == theSheetGroups[7])),
background = '#ebebeb') %>%
row_spec(0, background = "#14759e", bold = TRUE, color = "white") %>%
kable_styling(full_width = F,font_size = 11) %>%
column_spec(2, width_min = "7em") %>%
column_spec(3, width_max = "19em") %>%
column_spec(4, width_min = "10em") %>%
column_spec(5, width_min = "5em") %>%
column_spec(7, width_min = "10em") %>%
scroll_box(width = "770px", height = "3000px",
fixed_thead = FALSE)
```
<br>
## Setup & Configuration
An example `aed.nml` parameter specification block for the `aed_organic_matter` module is shown below:
```{fortran, eval = FALSE}
&aed_organic_matter
!-- Initial concentrations for OM variables (mmol/m3)
poc_initial = 15
doc_initial = 15
pon_initial = 2
don_initial = 1.1
pop_initial = 0.1
dop_initial = 0.01
docr_initial = 150.0
donr_initial = 9
dopr_initial = 0.15
cpom_initial = 0
!-- Breakdown and mineralisation (basic pool)
Rdom_minerl = 0.01348416
Rpoc_hydrol = 0.001
Rpon_hydrol = 0.001
Rpop_hydrol = 0.0001
theta_hydrol = 1.07
theta_minerl = 1.07
Kpom_hydrol = 33.66593
Kdom_minerl = 22.36079
simDenitrification = 1
dom_miner_oxy_reactant_var = 'OXY_oxy'
doc_miner_product_variable = 'CAR_dic'
don_miner_product_variable = 'NIT_amm'
dop_miner_product_variable = 'PHS_frp'
dom_miner_nit_reactant_var = 'NIT_nit'
f_an = 0.50
K_nit = 10.0
!-- Refractory organic matter (optional)
simRPools = .true.
Rdomr_minerl = 0.001
!-- Coarse particulate organic matter (optional)
Rcpom_bdown = 0.005
X_cpom_n = 0.005
X_cpom_p = 0.001
!-- Light related parameters
KeDOM = 0.03
KePOM = 0.096
KeDOMR = 0.15
KeCPOM = 0.00096
simphotolysis = .false.
photo_c = 0.75
!-- Particle settling parameters
settling = 1
w_pom = -0.01
d_pom = 1e-5
rho_pom = 1.2e3
w_cpom = -0.01
d_cpom = 1e-5
rho_cpom = 1.4e3
!-- Sediment interaction parameters (basic model)
resuspension = 1
resus_link = 'NCS_resus'
sedimentOMfrac = 0.0002
Xsc = 0.5
Xsn = 0.05
Xsp = 0.005
Fsed_doc = 1.4
Fsed_don = 0.0
Fsed_dop = 0.0
Ksed_dom = 93.0
theta_sed_dom = 1.06
!Fsed_doc_variable = 'SDF_Fsed_doc'
!Fsed_don_variable = 'SDF_Fsed_don'
!Fsed_dop_variable = 'SDF_Fsed_dop'
diag_level = 10
/
```
Note that when users link `Fsed_doc_variable` then `Fsed_doc` is not required as this parameter will be set for each sediment zone from values input via the `aed_sedflux` module. The numbers reported here are for example purposes and should be reviewed before use based on the users chosen site context. The entries are optional and will be [set to defaults](https://github.com/AquaticEcoDynamics/libaed-water/blob/07c1502f3e2c598ed88bd52963aa6fb01e683e82/src/aed_organic_matter.F90#L164) if the user does not provide a specific value.
<!-- ## Case Studies & Examples -->
<!-- ### Case Study -->
<!-- ### Publications -->