Skip to content

Commit deb1803

Browse files
committed
WIP redox balance
1 parent 43cba1c commit deb1803

3 files changed

Lines changed: 18 additions & 15 deletions

File tree

src/Individuals/Plankton/IronEnergyMode/growth_kernels.jl

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ end
100100
Ksat = Qfe_ps / max(1.0f-30, Qfe_ps + p.KfePS)
101101
PS = p.PCmax * (1.0f0 - exp(-αI)) * Bm * Ksat
102102
#RePS = PS * 4.0f0 / 2.6f0 # e:ATP = 4.0:2.6
103-
#OPS = PS /2.6f0 # O2:ATP = 1.0:2.6
103+
#OPS = PS / 2.6f0 # O2:ATP = 1.0:2.6
104104
return PS
105105
end
106106
@kernel function calc_PS_kernel!(plank, trs, p)
@@ -116,17 +116,19 @@ end
116116

117117
##### calculate potential maximum respiration (mmolC/individual/second)
118118
##### and energy production (mmolATP/individual/second)
119-
@inline function calc_respir(CH, T, p, ac, ΔT)
120-
RS = CH * p.k_rs * tempFunc(T, p) * ac
121-
RS = min(RS, CH/ΔT) # double check CH is not over consumed
122-
#ERS = RS * p.e_rs * ac
123-
#ORS = RS
124-
#ReRS = 2.0f0/3.0f0*RS
125-
return RS
119+
@inline function calc_respir(CH, Bm, qO2, T, p, ac, ΔT)
120+
Qo = qO2 / max(1.0f-30, Bm + CH)
121+
regQO = shape_func_inc_alt(Qo, p.qOmax, 1.0f-1, pow = 2.0f0)
122+
RSo = CH * p.k_rs * regQO * tempFunc(T, p) * ac
123+
RSo = min(RSo, 0.5f0*CH/ΔT, qO2/ΔT) # double check CH and qO2 is not over consumed
124+
RSe = RSo
125+
return RSo, RSe
126126
end
127127
@kernel function calc_respiration_kernel!(plank, trs, p, ΔT)
128128
i = @index(Global)
129-
@inbounds plank.RS[i] = calc_respir(plank.CH[i], trs.T[i], p, plank.ac[i], ΔT)
129+
@inbounds plank.RSo[i], plank.RSe[i] =
130+
calc_respir(plank.CH[i], plank.Bm[i], plank.qO2[i],
131+
trs.T[i], p, plank.ac[i], ΔT)
130132
end
131133
function calc_repiration!(plank, trs, p, ΔT, arch::Architecture)
132134
kernel! = calc_respiration_kernel!(device(arch), 256, (size(plank.ac,1)))
@@ -159,7 +161,7 @@ end
159161
##### and energy consumption (mmolATP/individual/second)
160162
@inline function calc_NR(qNO3, qNH4, qFeNR, Bm, CH, T, p, ac, ΔT)
161163
Qn = qNH4/max(1.0f-30, Bm + CH)
162-
reg = shape_func_dec(Qn, p.qNH4max, 1.0f-4, pow = 2.0f0)
164+
reg = shape_func_dec(Qn , p.qNH4max, 1.0f-4, pow = 2.0f0)
163165
Qfe_NR = qFeNR / max(1.0f-30, Bm + CH)
164166
Ksat = Qfe_NR / max(1.0f-30, Qfe_NR + p.KfeNR)
165167
NR = p.k_nr * reg * qNO3 * Ksat * tempFunc(T, p) * ac
@@ -218,7 +220,6 @@ end
218220
plank.ERS[i], plank.ECF[i], plank.ENF[i], plank.ENR[i], plank.exEn[i] =
219221
energy_alloc(plank.PS[i], plank.ERS[i], plank.ECF[i],
220222
plank.ENF[i], plank.ENR[i], p)
221-
@inbounds plank.RS[i] = plank.ERS[i] / p.e_rs
222223
@inbounds plank.CF[i] = plank.ECF[i] / p.e_cf
223224
@inbounds plank.NF[i] = plank.ENF[i] / p.e_nf
224225
@inbounds plank.NR[i] = plank.ENR[i] / p.e_nr
@@ -232,7 +233,7 @@ end
232233
##### update energy reserve and CH, and N quotas - second time
233234
@kernel function update_state_2_kernel!(plank, ΔT)
234235
i = @index(Global)
235-
@inbounds plank.CH[i] += (plank.CF[i] - plank.RS[i]) * ΔT
236+
@inbounds plank.CH[i] += (plank.CF[i] - plank.RSo[i] - plank.RSe[i]) * ΔT
236237
@inbounds plank.qNO3[i] += -plank.NR[i] * ΔT
237238
@inbounds plank.qNH4[i] += plank.NR[i] * ΔT
238239
@inbounds plank.qNH4[i] += plank.NF[i] * ΔT

src/Individuals/Plankton/IronEnergyMode/plankton_generation.jl

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ function construct_plankton(arch::Architecture, sp::Int, params::Dict, maxN::Int
99
gen = zeros(FT, maxN), age = zeros(FT, maxN), ac = zeros(Bool, maxN),
1010
idx = zeros(Int,maxN), tdark= zeros(FT, maxN),
1111
PS = zeros(FT, maxN), OPS = zeros(FT, maxN), RePS = zeros(FT, maxN),
12-
BS = zeros(FT, maxN),
12+
BS = zeros(FT, maxN), EBS = zeros(FT, maxN),
1313
CF = zeros(FT, maxN), ECF = zeros(FT, maxN), ReCF = zeros(FT, maxN),
1414
NF = zeros(FT, maxN), ENF = zeros(FT, maxN), ReNF = zeros(FT, maxN),
1515
NR = zeros(FT, maxN), ENR = zeros(FT, maxN), ReNR = zeros(FT, maxN),
16-
RS = zeros(FT, maxN), ERS = zeros(FT, maxN), ORS = zeros(FT, maxN), ReRS = zeros(FT, maxN),
16+
RSo = zeros(FT, maxN), ERS = zeros(FT, maxN),
17+
RSe = zeros(FT, maxN),
1718
VNH4 = zeros(FT, maxN), VNO3 = zeros(FT, maxN), VPO4 = zeros(FT, maxN),
1819
VFe = zeros(FT, maxN), VO2 = zeros(FT, maxN), ρChl = zeros(FT, maxN),
1920
PS2ST= zeros(FT, maxN), ST2PS= zeros(FT, maxN),
@@ -31,7 +32,7 @@ function construct_plankton(arch::Architecture, sp::Int, params::Dict, maxN::Int
3132
:e_cf, :e_rs, :e_nr, :e_nf,
3233
:k_Fe_ST2PS, :k_Fe_PS2ST, :k_Fe_ST2NR, :k_Fe_NR2ST, :k_Fe_ST2NF, :k_Fe_NF2ST,
3334
:KfePS, :KfeNR, :KfeNF, :KsatNH4, :KsatNO3, :KsatPO4, :KSAFe,
34-
:CHmax, :qNH4max, :qNO3max, :qPmax, :qFemax,
35+
:CHmax, :qNH4max, :qNO3max, :qPmax, :qFemax, :qOmax,
3536
:Chl2N, :R_NC, :R_PC, :NF_clock,
3637
:grz_P, :dvid_type, :dvid_P, :dvid_reg, :dvid_reg2, :mort_P, :mort_reg,
3738
:grazFracC, :grazFracN, :grazFracP, :grazFracFe,

src/Parameters/param_default.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ function phyt_params_default(N::Int64, mode::IronEnergyMode)
200200
"qPmax" => [0.02], # Maximum P quota in cell (mmolP/mmolC)
201201
"qFemax" => [2.0e-5], # Maximum Fe quota in cell (mmolFe/mmolC)
202202
"CHmax" => [0.4], # Maximum C quota in cell (mmolC/mmolC)
203+
"qOmax" => [0.5], # Maximum O₂ quota in cell (mmolO₂/mmolC)
203204
"Chl2N" => [3.0], # Maximum Chla:N ratio in phytoplankton
204205
"R_NC" => [16/106], # N:C ratio in cell biomass
205206
"R_PC" => [1/106], # N:C ratio in cell biomass

0 commit comments

Comments
 (0)