Skip to content

Commit 4d11673

Browse files
pearsebdougiesquire
authored andcommitted
* Detritus and CaCO3 now affect attenuation of blue, green and red light
* included variable biomass yield and Ks for bacterial uptake of DOC * fixed major bug in computation of "bacgrow"
1 parent 7bbdc56 commit 4d11673

File tree

1 file changed

+92
-33
lines changed

1 file changed

+92
-33
lines changed

generic_tracers/generic_WOMBATmid.F90

Lines changed: 92 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -201,11 +201,8 @@ module generic_WOMBATmid
201201
diamaxqf, &
202202
dialmor, &
203203
diaqmor, &
204-
<<<<<<< HEAD
205204
chlkWm2, &
206-
=======
207205
overflow, &
208-
>>>>>>> 42de9ae (* Added explicit Fe limitation of heterotrophic bacteria with uptake kinetics)
209206
trikf, &
210207
trichlc, &
211208
trin2c, &
@@ -270,9 +267,11 @@ module generic_WOMBATmid
270267
bac_knh4, &
271268
bac_kfer, &
272269
bac_yoxy, &
273-
bac_yaerC, &
270+
bac_yaerC_min, &
271+
bac_yaerC_max, &
274272
bac_yno3, &
275-
bac_yanaC, &
273+
bac_yanaC_min, &
274+
bac_yanaC_max, &
276275
bac_C2N, &
277276
bac_C2Fe, &
278277
baclmor, &
@@ -512,6 +511,8 @@ module generic_WOMBATmid
512511
bac_lfer, &
513512
bac_mu, &
514513
bac_kdoc, &
514+
bac_yaerC, &
515+
bac_yanaC, &
515516
bac_fanaer, &
516517
bacmor1, &
517518
bacmor2, &
@@ -668,6 +669,8 @@ module generic_WOMBATmid
668669
id_bac_lfer = -1, &
669670
id_bac_mu = -1, &
670671
id_bac_kdoc = -1, &
672+
id_bac_yaerC = -1, &
673+
id_bac_yanaC = -1, &
671674
id_bac_fanaer = -1, &
672675
id_bacmor1 = -1, &
673676
id_bacmor2 = -1, &
@@ -1664,6 +1667,16 @@ subroutine generic_WOMBATmid_register_diag(diag_list)
16641667
wombat%id_bac_kdoc = register_diag_field(package_name, vardesc_temp%name, axes(1:3), &
16651668
init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1)
16661669

1670+
vardesc_temp = vardesc( &
1671+
'bac_yaerC', 'Aerobic biomass yield of facultative heterotrophic bacteria', 'h', 'L', 's', 'molDOC/molB', 'f')
1672+
wombat%id_bac_yaerC = register_diag_field(package_name, vardesc_temp%name, axes(1:3), &
1673+
init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1)
1674+
1675+
vardesc_temp = vardesc( &
1676+
'bac_yanaC', 'Anaerobic biomass yield of facultative heterotrophic bacteria', 'h', 'L', 's', 'molDOC/molB', 'f')
1677+
wombat%id_bac_yanaC = register_diag_field(package_name, vardesc_temp%name, axes(1:3), &
1678+
init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1)
1679+
16671680
vardesc_temp = vardesc( &
16681681
'bac_fanaer', 'Fraction of growth supported by anaerobic metabolism', 'h', 'L', 's', '[0-1]', 'f')
16691682
wombat%id_bac_fanaer = register_diag_field(package_name, vardesc_temp%name, axes(1:3), &
@@ -2097,15 +2110,13 @@ subroutine user_add_params
20972110
!-----------------------------------------------------------------------
20982111
call g_tracer_add_param('diaqmor', wombat%diaqmor, 0.05/86400.0)
20992112

2100-
<<<<<<< HEAD
21012113
! Chlorophyll darkness growth reduction half-saturation coefficient [W/m2]
21022114
!-----------------------------------------------------------------------
21032115
call g_tracer_add_param('chlkWm2', wombat%chlkWm2, 5.0)
2104-
=======
2116+
21052117
! Maximum fraction of NPP that can be routed to DOC exudation by phytoplankton [0-1]
21062118
!-----------------------------------------------------------------------
21072119
call g_tracer_add_param('overflow', wombat%overflow, 0.5)
2108-
>>>>>>> 42de9ae (* Added explicit Fe limitation of heterotrophic bacteria with uptake kinetics)
21092120

21102121
! Trichodesmium half saturation constant for iron uptake [umolFe/m3]
21112122
!-----------------------------------------------------------------------
@@ -2362,17 +2373,25 @@ subroutine user_add_params
23622373
!-----------------------------------------------------------------------
23632374
call g_tracer_add_param('bac_kfer', wombat%bac_kfer, 0.5)
23642375

2365-
! Facultative heterotrophic bacteria aerobic biomass yield per DOC [mol DOC / mol Biomass]
2376+
! Facultative heterotrophic bacteria aerobic minimum biomass yield per DOC [mol DOC / mol Biomass]
23662377
!-----------------------------------------------------------------------
2367-
call g_tracer_add_param('bac_yaerC', wombat%bac_yaerC, 6.7)
2378+
call g_tracer_add_param('bac_yaerC_min', wombat%bac_yaerC_min, 2.0)
2379+
2380+
! Facultative heterotrophic bacteria aerobic maximum biomass yield per DOC [mol DOC / mol Biomass]
2381+
!-----------------------------------------------------------------------
2382+
call g_tracer_add_param('bac_yaerC_max', wombat%bac_yaerC_max, 20.0)
23682383

23692384
! Facultative heterotrophic bacteria aerobic biomass yield per O2 [mol O2/ mol Biomass]
23702385
!-----------------------------------------------------------------------
23712386
call g_tracer_add_param('bac_yoxy', wombat%bac_yoxy, 6.3)
23722387

2373-
! Facultative heterotrophic bacteria anaerobic biomass yield per DOC [mol DOC / mol Biomass]
2388+
! Facultative heterotrophic bacteria minimum anaerobic biomass yield per DOC [mol DOC / mol Biomass]
23742389
!-----------------------------------------------------------------------
2375-
call g_tracer_add_param('bac_yanaC', wombat%bac_yanaC, 9.1)
2390+
call g_tracer_add_param('bac_yanaC_min', wombat%bac_yanaC_min, 2.0*1.4)
2391+
2392+
! Facultative heterotrophic bacteria maximum anaerobic biomass yield per DOC [mol DOC / mol Biomass]
2393+
!-----------------------------------------------------------------------
2394+
call g_tracer_add_param('bac_yanaC_max', wombat%bac_yanaC_max, 20.0*1.4)
23762395

23772396
! Facultative heterotrophic bacteria aerobic biomass yield per NO3 [mol NO3/ mol Biomass]
23782397
!-----------------------------------------------------------------------
@@ -3066,7 +3085,7 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
30663085
real :: pi = 3.14159265358979
30673086
integer :: ichl, iter, max_iter
30683087
real :: par_phy_mldsum, par_z_mldsum
3069-
real :: chl, zchl, zval, sqrt_zval, phy_chlc, dia_chlc, phi
3088+
real :: chl, ndet, carb, zchl, zval, sqrt_zval, phy_chlc, dia_chlc, phi
30703089
real :: phy_limnh4, phy_limno3, phy_limdin
30713090
real :: dia_limnh4, dia_limno3, dia_limdin
30723091
real :: phy_pisl, phy_pisl2
@@ -3083,6 +3102,7 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
30833102
real, dimension(:), allocatable :: wsink1, wsink2, wsinkcal
30843103
real :: max_wsink
30853104
real, dimension(4,61) :: zbgr
3105+
real, dimension(3) :: dbgr, cbgr
30863106
real :: ztemk, I_ztemk, fe_keq, fe_par, fe_sfe, fe_tfe, partic
30873107
real :: fesol1, fesol2, fesol3, fesol4, fesol5, hp, fe3sol
30883108
real :: biof, zno3, zfermin
@@ -3123,9 +3143,9 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
31233143
umol_m3_to_mol_kg = 1.e-3 * mmol_m3_to_mol_kg
31243144

31253145

3126-
!=======================================================================
3127-
! Attenuation coefficients for blue, green and red light
3128-
!=======================================================================
3146+
!==========================================================================
3147+
! Attenuation coefficients for blue, green and red light due to chlorophyll
3148+
!==========================================================================
31293149
! Chlorophyll ! Blue attenuation ! Green attenuation ! Red attenuation
31303150
zbgr(1, 1) = 0.010; zbgr(2, 1) = 0.01618; zbgr(3, 1) = 0.07464; zbgr(4, 1) = 0.3780
31313151
zbgr(1, 2) = 0.011; zbgr(2, 2) = 0.01654; zbgr(3, 2) = 0.07480; zbgr(4, 2) = 0.37823
@@ -3189,6 +3209,29 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
31893209
zbgr(1,60) = 8.912; zbgr(2,60) = 0.44336; zbgr(3,60) = 0.25725; zbgr(4,60) = 0.55457
31903210
zbgr(1,61) = 10.000; zbgr(2,61) = 0.47804; zbgr(3,61) = 0.27178; zbgr(4,61) = 0.56870
31913211

3212+
!===================================================================================
3213+
! Attenuation coefficients for blue, green and red light due to detritus (m2 / mg N)
3214+
! Source: Dutkiewicz et al.(2015) Biogeosciences 12, 4447-4481, Fig. 1b
3215+
! collated into NetCDF file by Mark Baird for EMS model
3216+
! - csiro_mass_specific_iops_library.nc
3217+
! assume blue (450-495 nm), green (495-570 nm) and red (620-750 nm)
3218+
! to create values, we average absorption within these wavelengths
3219+
!===================================================================================
3220+
! Blue attenuation ! Green attenuation ! Red attenuation
3221+
dbgr(1) = 0.01006; dbgr(2) = 0.009007; dbgr(3) = 0.007264
3222+
3223+
!===================================================================================
3224+
! Attenuation coefficients for blue, green and red light due to CaCO3 (m2 / kg CaCO3)
3225+
! Source: Soja-Wozniak et al., 2019 J. Geophys. Res. (Oceans) 124 https://doi.org/10.1029/2019JC014998
3226+
! collated into NetCDF file by Mark Baird for EMS model
3227+
! - csiro_mass_specific_iops_library.nc
3228+
! assume blue (450-495 nm), green (495-570 nm) and red (620-750 nm)
3229+
! to create values, we average absorption within these wavelengths
3230+
!===================================================================================
3231+
! Blue attenuation ! Green attenuation ! Red attenuation
3232+
cbgr(1) = 1.55641; cbgr(2) = 3.200139; cbgr(3) = 20.068027
3233+
3234+
31923235
!=======================================================================
31933236
! Surface gas fluxes
31943237
!=======================================================================
@@ -3363,6 +3406,8 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
33633406
wombat%bac_lfer(:,:,:) = 1.0
33643407
wombat%bac_mu(:,:,:) = 0.0
33653408
wombat%bac_kdoc(:,:,:) = 10.0
3409+
wombat%bac_yaerC(:,:,:) = 6.7
3410+
wombat%bac_yanaC(:,:,:) = 9.3
33663411
wombat%bac_fanaer(:,:,:) = 0.0
33673412
wombat%bacmor1(:,:,:) = 0.0
33683413
wombat%bacmor2(:,:,:) = 0.0
@@ -3552,13 +3597,17 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
35523597

35533598
! chlorophyll concentration conversion from mol/kg --> mg/m3 for look-up table
35543599
chl = (wombat%f_pchl(i,j,k) + wombat%f_dchl(i,j,k)) * 12.0 / mmol_m3_to_mol_kg
3600+
! detritus concentration conversion from mol/kg --> mgN/m3 for look-up table
3601+
ndet = (wombat%f_det(i,j,k) + wombat%f_bdet(i,j,k)) * 16.0/122.0 * 14.0 / mmol_m3_to_mol_kg
3602+
! CaCO3 concentration conversion from mol/kg --> kg/m3 for look-up table
3603+
carb = wombat%f_caco3(i,j,k) / mmol_m3_to_mol_kg * 100.09 * 1e-3 * 1e-3 ! convert to kg/m3
35553604

35563605
! Attenuation coefficients given chlorophyll concentration
35573606
zchl = max(0.05, min(10.0, chl) )
35583607
ichl = nint( 41 + 20.0*log10(zchl) + epsi )
3559-
ek_bgr(k,1) = zbgr(2,ichl) * dzt(i,j,k)
3560-
ek_bgr(k,2) = zbgr(3,ichl) * dzt(i,j,k)
3561-
ek_bgr(k,3) = zbgr(4,ichl) * dzt(i,j,k)
3608+
ek_bgr(k,1) = (zbgr(2,ichl) + ndet * dbgr(1) + carb * cbgr(1)) * dzt(i,j,k) ! [/m * m]
3609+
ek_bgr(k,2) = (zbgr(3,ichl) + ndet * dbgr(2) + carb * cbgr(2)) * dzt(i,j,k) ! [/m * m]
3610+
ek_bgr(k,3) = (zbgr(4,ichl) + ndet * dbgr(3) + carb * cbgr(3)) * dzt(i,j,k) ! [/m * m]
35623611

35633612
! BGR light available in the water column
35643613
if (swpar.gt.0.0) then
@@ -4061,15 +4110,19 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
40614110
! 5. The affinity of bacteria for DOC decreases as the DOC:DON ratio increases
40624111

40634112
! Uptake of DOC (i.e., DOC-limited growth)
4064-
wombat%bac_kdoc(i,j,k) = max(wombat%bac_kdoc_min, wombat%bac_kdoc_max &
4065-
* max(0.0, min(1.0, (1.0/(wombat%bac_C2N**2) / (dom_N2C + 1.0/(wombat%bac_C2N**2))) )) )
4113+
wombat%bac_kdoc(i,j,k) = wombat%bac_kdoc_min + 2.0 * (wombat%bac_kdoc_max - wombat%bac_kdoc_min) &
4114+
* max(0.0, min(1.0, dom_N2C / (dom_N2C + (1.0/wombat%bac_C2N)) ))
4115+
wombat%bac_yaerC(i,j,k) = wombat%bac_yaerC_min + 2.0 * (wombat%bac_yaerC_max - wombat%bac_yaerC_min) &
4116+
* max(0.0, min(1.0, dom_N2C / (dom_N2C + (1.0/wombat%bac_C2N)) ))
4117+
wombat%bac_yanaC(i,j,k) = wombat%bac_yanaC_min + 2.0 * (wombat%bac_yanaC_max - wombat%bac_yanaC_min) &
4118+
* max(0.0, min(1.0, dom_N2C / (dom_N2C + (1.0/wombat%bac_C2N)) ))
40664119
bac_Vdoc = wombat%bac_Vmax_doc * biodoc / (biodoc + wombat%bac_kdoc(i,j,k))
40674120
! Aerobic growth
40684121
bac_Voxy = biooxy * wombat%bac_poxy
4069-
bac_muaer = max(0.0, min( (bac_Voxy/wombat%bac_yoxy), (bac_Vdoc/wombat%bac_yaerC) ) ) * fbc
4122+
bac_muaer = max(0.0, min( (bac_Voxy/wombat%bac_yoxy), (bac_Vdoc/wombat%bac_yaerC(i,j,k)) ) ) * fbc
40704123
! Anaerobic growth (will always be lower than aerobic growth when DOC is limiting)
40714124
bac_Vno3 = wombat%bac_Vmax_no3 * biono3 / (biono3 + wombat%bac_kno3)
4072-
bac_muana = max(0.0, min( (bac_Vno3/wombat%bac_yno3), (bac_Vdoc/wombat%bac_yanaC) ) ) * fbc
4125+
bac_muana = max(0.0, min( (bac_Vno3/wombat%bac_yno3), (bac_Vdoc/wombat%bac_yanaC(i,j,k)) ) ) * fbc
40734126
if (.not.do_wc_denitrification) bac_muana = 0.0 ! If no denitrification, anaerobic growth is zero
40744127

40754128
! Save occurance of anaerobic growth to array
@@ -4080,10 +4133,9 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
40804133
! Determine if bacteria are limited by N or Fe
40814134
if (wombat%bac_mu(i,j,k)*wombat%f_bac(i,j,k).gt.0.0) then
40824135
! 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]
4085-
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)) &
4086-
+ wombat%bac_mu(i,j,k) * wombat%f_bac(i,j,k) * wombat%bac_yanaC * wombat%bac_fanaer(i,j,k) ! [molC/kg/s]
4136+
wombat%bacgrow(i,j,k) = wombat%bac_mu(i,j,k) * wombat%f_bac(i,j,k) ! [molC/kg/s]
4137+
wombat%docremi(i,j,k) = wombat%bac_mu(i,j,k) * wombat%f_bac(i,j,k) * wombat%bac_yaerC(i,j,k) * (1. - wombat%bac_fanaer(i,j,k)) &
4138+
+ wombat%bac_mu(i,j,k) * wombat%f_bac(i,j,k) * wombat%bac_yanaC(i,j,k) * wombat%bac_fanaer(i,j,k) ! [molC/kg/s]
40874139
wombat%donremi(i,j,k) = wombat%docremi(i,j,k) * dom_N2C ! [molN/kg/s]
40884140

40894141
! Determine degree of N limitation of bacteria and adjust growth rate
@@ -4130,10 +4182,9 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
41304182
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))
41314183

41324184
! Final calculation after growth rate adjustment due to possible N or Fe limitation
4133-
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)) &
4134-
+ 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]
4135-
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)) &
4136-
+ wombat%bac_mu(i,j,k) * wombat%f_bac(i,j,k) * wombat%bac_yanaC * wombat%bac_fanaer(i,j,k) ! [molC/kg/s]
4185+
wombat%bacgrow(i,j,k) = wombat%bac_mu(i,j,k) * wombat%f_bac(i,j,k) ! [molC/kg/s]
4186+
wombat%docremi(i,j,k) = wombat%bac_mu(i,j,k) * wombat%f_bac(i,j,k) * wombat%bac_yaerC(i,j,k) * (1. - wombat%bac_fanaer(i,j,k)) &
4187+
+ wombat%bac_mu(i,j,k) * wombat%f_bac(i,j,k) * wombat%bac_yanaC(i,j,k) * wombat%bac_fanaer(i,j,k) ! [molC/kg/s]
41374188
wombat%donremi(i,j,k) = wombat%docremi(i,j,k) * dom_N2C ! [molN/kg/s]
41384189
wombat%bacufer(i,j,k) = wombat%bacgrow(i,j,k) / wombat%bac_C2Fe ! [molFe/kg/s]
41394190
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]
@@ -5602,8 +5653,12 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
56025653
used = g_send_data(wombat%id_bac_mu, wombat%bac_mu, model_time, &
56035654
rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk)
56045655

5605-
if (wombat%id_bac_kdoc .gt. 0) &
5606-
used = g_send_data(wombat%id_bac_kdoc, wombat%bac_kdoc, model_time, &
5656+
if (wombat%id_bac_yaerC .gt. 0) &
5657+
used = g_send_data(wombat%id_bac_yaerC, wombat%bac_yaerC, model_time, &
5658+
rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk)
5659+
5660+
if (wombat%id_bac_yanaC .gt. 0) &
5661+
used = g_send_data(wombat%id_bac_yanaC, wombat%bac_yanaC, model_time, &
56075662
rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk)
56085663

56095664
if (wombat%id_bac_fanaer .gt. 0) &
@@ -6233,6 +6288,8 @@ subroutine user_allocate_arrays
62336288
allocate(wombat%bac_lfer(isd:ied, jsd:jed, 1:nk)); wombat%bac_lfer(:,:,:)=0.0
62346289
allocate(wombat%bac_mu(isd:ied, jsd:jed, 1:nk)); wombat%bac_mu(:,:,:)=0.0
62356290
allocate(wombat%bac_kdoc(isd:ied, jsd:jed, 1:nk)); wombat%bac_kdoc(:,:,:)=0.0
6291+
allocate(wombat%bac_yaerC(isd:ied, jsd:jed, 1:nk)); wombat%bac_yaerC(:,:,:)=0.0
6292+
allocate(wombat%bac_yanaC(isd:ied, jsd:jed, 1:nk)); wombat%bac_yanaC(:,:,:)=0.0
62366293
allocate(wombat%bac_fanaer(isd:ied, jsd:jed, 1:nk)); wombat%bac_fanaer(:,:,:)=0.0
62376294
allocate(wombat%bacmor1(isd:ied, jsd:jed, 1:nk)); wombat%bacmor1(:,:,:)=0.0
62386295
allocate(wombat%bacmor2(isd:ied, jsd:jed, 1:nk)); wombat%bacmor2(:,:,:)=0.0
@@ -6466,6 +6523,8 @@ subroutine user_deallocate_arrays
64666523
wombat%bac_lfer, &
64676524
wombat%bac_mu, &
64686525
wombat%bac_kdoc, &
6526+
wombat%bac_yaerC, &
6527+
wombat%bac_yanaC, &
64696528
wombat%bac_fanaer, &
64706529
wombat%bacmor1, &
64716530
wombat%bacmor2, &

0 commit comments

Comments
 (0)