Skip to content

Commit 7bbdc56

Browse files
pearsebdougiesquire
authored andcommitted
* Corrected a bug in the N required by bacteria so that it is relative to bacterial C growth, not DOC remineralisation
* Same bug existed in Fe uptake by bacteria, now corrected. * bacunh4 array no longer required in sources and sinks terms * Ensured the the logical "do_wc_denitrification" works by setting bac_muana = 0.0 when true * Slight tweaks to default parameters
1 parent 56893ca commit 7bbdc56

File tree

1 file changed

+31
-20
lines changed

1 file changed

+31
-20
lines changed

generic_tracers/generic_WOMBATmid.F90

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2328,15 +2328,15 @@ subroutine user_add_params
23282328

23292329
! Ammonia Oxidizing Archaea maximum growth * biomass rate [/s]
23302330
!-----------------------------------------------------------------------
2331-
call g_tracer_add_param('aoamumax', wombat%aoamumax, 0.01/86400.0)
2331+
call g_tracer_add_param('aoamumax', wombat%aoamumax, 0.025/86400.0)
23322332

23332333
! Facultative heterotrophic bacteria maximum rate of uptake of DOC [mmol/m3/s]
23342334
!-----------------------------------------------------------------------
2335-
call g_tracer_add_param('bac_Vmax_doc', wombat%bac_Vmax_doc, 5.0/86400.0)
2335+
call g_tracer_add_param('bac_Vmax_doc', wombat%bac_Vmax_doc, 6.7/86400.0)
23362336

23372337
! Facultative heterotrophic bacteria maximum rate of uptake of NO3 [mmol/m3/s]
23382338
!-----------------------------------------------------------------------
2339-
call g_tracer_add_param('bac_Vmax_no3', wombat%bac_Vmax_no3, 5.0/86400.0)
2339+
call g_tracer_add_param('bac_Vmax_no3', wombat%bac_Vmax_no3, 7.2/86400.0)
23402340

23412341
! Facultative heterotrophic bacteria diffusive uptake limit of O2 [m3/mmolC/s]
23422342
!-----------------------------------------------------------------------
@@ -2348,15 +2348,15 @@ subroutine user_add_params
23482348

23492349
! Facultative heterotrophic bacteria minimum half saturation constant for DOC uptake [mmolC/m3]
23502350
!-----------------------------------------------------------------------
2351-
call g_tracer_add_param('bac_kdoc_min', wombat%bac_kdoc_min, 1.0)
2351+
call g_tracer_add_param('bac_kdoc_min', wombat%bac_kdoc_min, 10.0)
23522352

23532353
! Facultative heterotrophic bacteria maximum half saturation constant for DOC uptake [mmolC/m3]
23542354
!-----------------------------------------------------------------------
2355-
call g_tracer_add_param('bac_kdoc_max', wombat%bac_kdoc_max, 20.0)
2355+
call g_tracer_add_param('bac_kdoc_max', wombat%bac_kdoc_max, 100.0)
23562356

23572357
! Facultative heterotrophic bacteria half saturation constant for ammonium uptake [mmolN/m3]
23582358
!-----------------------------------------------------------------------
2359-
call g_tracer_add_param('bac_knh4', wombat%bac_knh4, 0.5)
2359+
call g_tracer_add_param('bac_knh4', wombat%bac_knh4, 0.1)
23602360

23612361
! Facultative heterotrophic bacteria half saturation constant for dissolved iron uptake [umolFe/m3]
23622362
!-----------------------------------------------------------------------
@@ -4070,51 +4070,57 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
40704070
! Anaerobic growth (will always be lower than aerobic growth when DOC is limiting)
40714071
bac_Vno3 = wombat%bac_Vmax_no3 * biono3 / (biono3 + wombat%bac_kno3)
40724072
bac_muana = max(0.0, min( (bac_Vno3/wombat%bac_yno3), (bac_Vdoc/wombat%bac_yanaC) ) ) * fbc
4073+
if (.not.do_wc_denitrification) bac_muana = 0.0 ! If no denitrification, anaerobic growth is zero
40734074

40744075
! Save occurance of anaerobic growth to array
40754076
if (bac_muana.gt.bac_muaer) wombat%bac_fanaer(i,j,k) = 1.0
40764077
! Take the maximum growth rate as the realised growth rate
40774078
wombat%bac_mu(i,j,k) = max(bac_muaer, bac_muana)
40784079

40794080
! Determine if bacteria are limited by N or Fe
4080-
if (wombat%bac_mu(i,j,k) .gt. 0.0) then
4081+
if (wombat%bac_mu(i,j,k)*wombat%f_bac(i,j,k).gt.0.0) then
4082+
! Initial estimate of the C biomass growth, DOC and DON assimilation rate by bacteria
4083+
wombat%bacgrow(i,j,k) = wombat%bac_mu(i,j,k) * wombat%f_bac(i,j,k) * 1.0/wombat%bac_yaerC * (1. - wombat%bac_fanaer(i,j,k)) &
4084+
+ wombat%bac_mu(i,j,k) * wombat%f_bac(i,j,k) * 1.0/wombat%bac_yanaC * wombat%bac_fanaer(i,j,k) ! [molC/kg/s]
40814085
wombat%docremi(i,j,k) = wombat%bac_mu(i,j,k) * wombat%f_bac(i,j,k) * wombat%bac_yaerC * (1. - wombat%bac_fanaer(i,j,k)) &
40824086
+ wombat%bac_mu(i,j,k) * wombat%f_bac(i,j,k) * wombat%bac_yanaC * wombat%bac_fanaer(i,j,k) ! [molC/kg/s]
40834087
wombat%donremi(i,j,k) = wombat%docremi(i,j,k) * dom_N2C ! [molN/kg/s]
40844088

40854089
! Determine degree of N limitation of bacteria and adjust growth rate
40864090
if (bionh4.gt.1e-3) then ! First, make sure that NH4 is available for uptake
4087-
! Find out what they need to supplement growth
4088-
wombat%bacunh4(i,j,k) = wombat%docremi(i,j,k) / wombat%bac_C2N - wombat%donremi(i,j,k) ! [molN/kg/s]
4091+
! Find out what they need to supplement growth (this assumes that bacteria can achieve a N biomass yield of 1.0)
4092+
wombat%bacunh4(i,j,k) = wombat%bacgrow(i,j,k) / wombat%bac_C2N - wombat%donremi(i,j,k) ! [molN/kg/s]
40894093
! Find limitation of NH4 uptake
4090-
if (wombat%bacunh4(i,j,k).gt.0.0) then ! Is NH4 is needed to support growth? (when DOC:DON > bacterial C:N ratio)
4094+
if (wombat%bacunh4(i,j,k).gt.0.0) then ! NH4 is needed to support growth
40914095
! Apply uptake kinetics constraint on bacterial NH4 uptake
40924096
bac_limnh4 = bionh4 / (bionh4 + wombat%bac_knh4 + epsi)
40934097
wombat%bacunh4(i,j,k) = wombat%bacunh4(i,j,k) * bac_limnh4 ! [molN/kg/s]
4094-
! Make sure bacteria don't remove more NH4 than is available
4098+
! Make sure bacteria don't remove more NH4 than is available (can take up as much as half at a time)
40954099
if (wombat%bacunh4(i,j,k).gt.wombat%f_nh4(i,j,k)*0.5/dt) then
40964100
wombat%bacunh4(i,j,k) = wombat%f_nh4(i,j,k)*0.5 / dt ! [molN/kg/s]
40974101
endif
4102+
! Recompute N limitation of bacteria (DON + NH4 uptake)
40984103
wombat%bac_lnit(i,j,k) = max(0.0, min(1.0, (wombat%donremi(i,j,k) + wombat%bacunh4(i,j,k)) &
4099-
/ ((wombat%docremi(i,j,k) + epsi) / wombat%bac_C2N) ))
4104+
/ (wombat%bacgrow(i,j,k) / wombat%bac_C2N) ))
41004105
else
4106+
wombat%bacunh4(i,j,k) = 0.0
41014107
wombat%bac_lnit(i,j,k) = 1.0
41024108
endif
41034109
else ! No NH4 available to supplement growth
41044110
wombat%bacunh4(i,j,k) = 0.0
41054111
wombat%bac_lnit(i,j,k) = max(0.0, min(1.0, (wombat%donremi(i,j,k) + wombat%bacunh4(i,j,k)) &
4106-
/ ((wombat%docremi(i,j,k) + epsi) / wombat%bac_C2N) ))
4112+
/ (wombat%bacgrow(i,j,k) / wombat%bac_C2N) ))
41074113
endif
41084114

41094115
! Determine degree of Fe limitation of bacteria and adjust growth rate
41104116
if (biofer.gt.1e-3) then ! First, make sure that dFe is available for uptake
41114117
! Apply uptake kinetics constraint on bacterial dFe uptake
41124118
wombat%bac_lfer(i,j,k) = biofer / (biofer + wombat%bac_kfer + epsi)
4113-
wombat%bacufer(i,j,k) = wombat%docremi(i,j,k) / wombat%bac_C2Fe * wombat%bac_lfer(i,j,k) ! [molFe/kg/s]
4119+
wombat%bacufer(i,j,k) = wombat%bacgrow(i,j,k) / wombat%bac_C2Fe * wombat%bac_lfer(i,j,k) ! [molFe/kg/s]
41144120
! Check that enough dFe is available to support growth (at any one timestep, bacteria can only take up half of the available dFe)
41154121
if (wombat%bacufer(i,j,k).gt.wombat%f_fe(i,j,k)*0.5/dt) then
41164122
wombat%bacufer(i,j,k) = wombat%f_fe(i,j,k)*0.5 / dt ! [molFe/kg/s]
4117-
wombat%bac_lfer(i,j,k) = wombat%bacufer(i,j,k) / (wombat%docremi(i,j,k) / wombat%bac_C2Fe)
4123+
wombat%bac_lfer(i,j,k) = wombat%bacufer(i,j,k) / (wombat%bacgrow(i,j,k) / wombat%bac_C2Fe)
41184124
endif
41194125
else ! No dFe available
41204126
wombat%bac_lfer(i,j,k) = 0.0
@@ -4123,14 +4129,13 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
41234129
! Adjust the growth rate to be the minumum of N-limited or dFe-limited
41244130
wombat%bac_mu(i,j,k) = wombat%bac_mu(i,j,k) * min(wombat%bac_lfer(i,j,k), wombat%bac_lnit(i,j,k))
41254131

4126-
! Final calculation after growth rate adjustment due to possible N limitation
4132+
! Final calculation after growth rate adjustment due to possible N or Fe limitation
41274133
wombat%bacgrow(i,j,k) = wombat%bac_mu(i,j,k) * wombat%f_bac(i,j,k) * 1.0/wombat%bac_yaerC * (1. - wombat%bac_fanaer(i,j,k)) &
41284134
+ wombat%bac_mu(i,j,k) * wombat%f_bac(i,j,k) * 1.0/wombat%bac_yanaC * wombat%bac_fanaer(i,j,k) ! [molC/kg/s]
41294135
wombat%docremi(i,j,k) = wombat%bac_mu(i,j,k) * wombat%f_bac(i,j,k) * wombat%bac_yaerC * (1. - wombat%bac_fanaer(i,j,k)) &
41304136
+ wombat%bac_mu(i,j,k) * wombat%f_bac(i,j,k) * wombat%bac_yanaC * wombat%bac_fanaer(i,j,k) ! [molC/kg/s]
41314137
wombat%donremi(i,j,k) = wombat%docremi(i,j,k) * dom_N2C ! [molN/kg/s]
4132-
wombat%bacunh4(i,j,k) = wombat%docremi(i,j,k) / wombat%bac_C2N - wombat%donremi(i,j,k) ! [molN/kg/s]
4133-
wombat%bacufer(i,j,k) = wombat%docremi(i,j,k) / wombat%bac_C2Fe ! [molFe/kg/s]
4138+
wombat%bacufer(i,j,k) = wombat%bacgrow(i,j,k) / wombat%bac_C2Fe ! [molFe/kg/s]
41344139
wombat%bacresp(i,j,k) = wombat%bac_mu(i,j,k) * wombat%f_bac(i,j,k) * wombat%bac_yoxy * (1. - wombat%bac_fanaer(i,j,k)) ! [molO2/kg/s]
41354140
wombat%bacdeni(i,j,k) = wombat%bac_mu(i,j,k) * wombat%f_bac(i,j,k) * wombat%bac_yno3 * wombat%bac_fanaer(i,j,k) ! [molNO3/kg/s]
41364141
endif
@@ -4347,7 +4352,6 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
43474352
wombat%f_nh4(i,j,k) = wombat%f_nh4(i,j,k) + dtsb * ( 0.0 &
43484353
+ wombat%nitrfix(i,j,k) &
43494354
+ (wombat%donremi(i,j,k) - wombat%bacgrow(i,j,k)/wombat%bac_C2N) &
4350-
- wombat%bacunh4(i,j,k) &
43514355
- wombat%ammox(i,j,k) &
43524356
- wombat%anammox(i,j,k) ) &
43534357
+ dtsb * 16./122. * ( 0.0 &
@@ -4639,7 +4643,6 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
46394643
+ dtsb * ( 0.0 &
46404644
+ (wombat%donremi(i,j,k) - wombat%bacgrow(i,j,k)/wombat%bac_C2N) &
46414645
+ wombat%bacdeni(i,j,k) &
4642-
- wombat%bacunh4(i,j,k) &
46434646
- wombat%anammox(i,j,k) &
46444647
- 2.0 * wombat%ammox(i,j,k) ) &
46454648
+ dtsb * 2.0 * ( 0.0 &
@@ -4750,6 +4753,11 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
47504753
print *, " diagrow (molC/kg/s) =", wombat%diagrow(i,j,k)
47514754
print *, " detremi (molC/kg/s) =", wombat%detremi(i,j,k)
47524755
print *, " bdetremi (molC/kg/s) =", wombat%bdetremi(i,j,k)
4756+
print *, " bacunh4 (molN/kg/s) =", wombat%bacunh4(i,j,k)
4757+
print *, " donremi (molN/kg/s) =", wombat%donremi(i,j,k)
4758+
print *, " bacdeni (molN/kg/s) =", wombat%bacdeni(i,j,k)
4759+
print *, " anammox (molN/kg/s) =", wombat%anammox(i,j,k)
4760+
print *, " nitrfix (molN/kg/s) =", wombat%nitrfix(i,j,k)
47534761
print *, " zooresp (molC/kg/s) =", wombat%zooresp(i,j,k)
47544762
print *, " zooexcrphy (molC/kg/s) =", wombat%zooexcrphy(i,j,k)
47554763
print *, " zooexcrdia (molC/kg/s) =", wombat%zooexcrdia(i,j,k)
@@ -5065,6 +5073,9 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
50655073
wombat%det_sed_denit(i,j) = wombat%det_sed_remin(i,j) * min(0.9 * 94.0/122.0, &
50665074
(0.083 + 0.21 * 0.98**((wombat%sedo2(i,j) - wombat%sedno3(i,j))/mmol_m3_to_mol_kg)))
50675075
wombat%fdenit(i,j) = wombat%det_sed_denit(i,j) * 122.0/94.0 / (wombat%det_sed_remin(i,j) + epsi)
5076+
else
5077+
wombat%det_sed_denit(i,j) = 0.0 ! [mol/m2/s]
5078+
wombat%fdenit(i,j) = 0.0
50685079
endif
50695080

50705081
! Remineralisation of sediments to supply nutrient fields.

0 commit comments

Comments
 (0)