@@ -151,7 +151,7 @@ module generic_WOMBATmid
151
151
! =======================================================================
152
152
character (len= 10 ) :: co2_calc = ' mocsy' ! other option is 'ocmip2'
153
153
logical :: do_caco3_dynamics = .true. ! do dynamic CaCO3 precipitation, dissolution and ballasting?
154
- logical :: do_burial = .false. ! permanently bury organics and CaCO3 in sediments?
154
+ logical :: do_burial = .false. ! permanently bury organics and CaCO3 in sediments?
155
155
logical :: do_conserve_tracers = .false. ! add back the lost NO3 and Alk due to burial to surface?
156
156
logical :: do_nitrogen_fixation= .true. ! N cycle has nitrogen fixation?
157
157
logical :: do_anammox = .true. ! N cycle has anammox?
@@ -3074,11 +3074,11 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
3074
3074
real , dimension (nbands) :: sw_pen
3075
3075
real :: swpar
3076
3076
real :: u_npz, g_npz, m_npz, g_peffect
3077
- real :: zooprefphy, zooprefdia, zooprefdet
3078
- real :: mesprefphy, mesprefdia, mesprefdet, mesprefbdet, mesprefzoo
3077
+ real :: zooprefphy, zooprefdia, zooprefdet, I_zprefnorm
3078
+ real :: mesprefphy, mesprefdia, mesprefdet, mesprefbdet, mesprefzoo, I_mprefnorm
3079
3079
real :: biono3, bionh4, biooxy, biofer
3080
3080
real :: biophy, biodia, biozoo, biomes, biodet, biobdet, biobac, biodoc, biodon, biocaco3
3081
- real :: biophyfe, biodiafe, biozoofe, biomesfe, zooprey, mesprey
3081
+ real :: biophyfe, biodiafe, biozoofe, biomesfe, zooprey, mesprey, I_zooprey, I_mesprey
3082
3082
real :: fbc
3083
3083
real :: no3_bgc_change, caco3_bgc_change
3084
3084
real :: epsi = 1.0e-30
@@ -3813,14 +3813,12 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
3813
3813
wombat% phy_lpar(i,j,k) = (1 . - exp (- phy_pisl2 * wombat% radbio(i,j,k)))
3814
3814
wombat% phy_mu(i,j,k) = wombat% phy_mumax(i,j,k) * wombat% phy_lpar(i,j,k) * &
3815
3815
min (wombat% phy_lnit(i,j,k), wombat% phy_lfer(i,j,k))
3816
-
3817
3816
! !!~~~ Microphytoplankton ~~~!!!
3818
3817
dia_pisl = max (wombat% alphabio_dia * dia_chlc, wombat% alphabio_dia * wombat% diaminqc)
3819
3818
dia_pisl2 = dia_pisl / ( (1 . + wombat% dialmor* 86400.0 * fbc) ) ! add daylength estimate here
3820
3819
wombat% dia_lpar(i,j,k) = (1 . - exp (- dia_pisl2 * wombat% radbio(i,j,k)))
3821
3820
wombat% dia_mu(i,j,k) = wombat% dia_mumax(i,j,k) * wombat% dia_lpar(i,j,k) * &
3822
3821
min (wombat% dia_lnit(i,j,k), wombat% dia_lfer(i,j,k))
3823
-
3824
3822
3825
3823
!- ----------------------------------------------------------------------!
3826
3824
!- ----------------------------------------------------------------------!
@@ -3955,7 +3953,6 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
3955
3953
! Coagulation of colloidal Fe (umol/m3) to form sinking particles (mmol/m3)
3956
3954
! Following Tagliabue et al. (2023), make coagulation rate dependent on DOC and Phytoplankton biomass
3957
3955
biof = max (1 / 3 ., biophy / (biophy + 0.03 ))
3958
- ! biodoc = 40.0 + (1.0 - min(wombat%phy_lnit(i,j,k), wombat%phy_lfer(i,j,k))) * 40.0 ! proxy of DOC (mmol/m3)
3959
3956
! Colloidal shunt associated with small particles and DOC (Tagliabue et al., 2023)
3960
3957
if (wombat% zw(i,j,k).le. hblt_depth(i,j)) then
3961
3958
zval = ( (12 .* biof* biodoc + 9 .* biodet) + 2.5 * biodet + 128 .* biof* biodoc + 725 .* biodet )* wombat% kcoag_dfe
@@ -3998,9 +3995,10 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
3998
3995
! !!~~~ Zooplankton ~~~!!!
3999
3996
! Grazing function ! [1/s]
4000
3997
! Based on Gentleman et al., (2003) DSRII - normalize the prey preference kernal to reflect dietary fractions
4001
- zooprefphy = wombat% zprefphy / (wombat% zprefphy + wombat% zprefdia + wombat% zprefdet)
4002
- zooprefdia = wombat% zprefdia / (wombat% zprefphy + wombat% zprefdia + wombat% zprefdet)
4003
- zooprefdet = wombat% zprefdet / (wombat% zprefphy + wombat% zprefdia + wombat% zprefdet)
3998
+ I_zprefnorm = 1.0 / (wombat% zprefphy + wombat% zprefdia + wombat% zprefdet)
3999
+ zooprefphy = wombat% zprefphy * I_zprefnorm
4000
+ zooprefdia = wombat% zprefdia * I_zprefnorm
4001
+ zooprefdet = wombat% zprefdet * I_zprefnorm
4004
4002
zooprey = zooprefphy * biophy + zooprefdia * biodia + zooprefdet * biodet
4005
4003
! Epsilon (prey capture rate coefficient) is made a function of prey density (Fig 2 of Rohr et al., 2024; GRL)
4006
4004
! - scales towards lower values (microzooplankton) as prey biomass increases
@@ -4011,11 +4009,12 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
4011
4009
4012
4010
! !!~~~ Mesozooplankton ~~~!!!
4013
4011
! Grazing function ! [1/s]
4014
- mesprefphy = wombat% mprefphy / (wombat% mprefphy + wombat% mprefdia + wombat% mprefdet + wombat% mprefbdet + wombat% mprefzoo)
4015
- mesprefdia = wombat% mprefdia / (wombat% mprefphy + wombat% mprefdia + wombat% mprefdet + wombat% mprefbdet + wombat% mprefzoo)
4016
- mesprefdet = wombat% mprefdet / (wombat% mprefphy + wombat% mprefdia + wombat% mprefdet + wombat% mprefbdet + wombat% mprefzoo)
4017
- mesprefbdet = wombat% mprefbdet / (wombat% mprefphy + wombat% mprefdia + wombat% mprefdet + wombat% mprefbdet + wombat% mprefzoo)
4018
- mesprefzoo = wombat% mprefzoo / (wombat% mprefphy + wombat% mprefdia + wombat% mprefdet + wombat% mprefbdet + wombat% mprefzoo)
4012
+ I_mprefnorm = 1.0 / (wombat% mprefphy + wombat% mprefdia + wombat% mprefdet + wombat% mprefbdet + wombat% mprefzoo)
4013
+ mesprefphy = wombat% mprefphy * I_mprefnorm
4014
+ mesprefdia = wombat% mprefdia * I_mprefnorm
4015
+ mesprefdet = wombat% mprefdet * I_mprefnorm
4016
+ mesprefbdet = wombat% mprefbdet * I_mprefnorm
4017
+ mesprefzoo = wombat% mprefzoo * I_mprefnorm
4019
4018
mesprey = mesprefphy * biophy + mesprefdia * biodia + mesprefdet * biodet + mesprefbdet * biobdet + mesprefzoo * biozoo
4020
4019
! Epsilon (prey capture rate coefficient) is made a function of prey density (Fig 2 of Rohr et al., 2024; GRL)
4021
4020
! - scales towards lower values (mesozooplankton) as prey biomass increases
@@ -4269,12 +4268,12 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
4269
4268
else
4270
4269
wombat% bdetremi(i,j,k) = 0.0
4271
4270
endif
4272
-
4273
4271
! Grazing by microzooplankton
4274
4272
if (zooprey.gt. 1e-3 ) then
4275
- wombat% zoograzphy(i,j,k) = g_npz * wombat% f_zoo(i,j,k) * (zooprefphy* biophy)/ zooprey ! [molC/kg/s]
4276
- wombat% zoograzdia(i,j,k) = g_npz * wombat% f_zoo(i,j,k) * (zooprefdia* biodia)/ zooprey ! [molC/kg/s]
4277
- wombat% zoograzdet(i,j,k) = g_npz * wombat% f_zoo(i,j,k) * (zooprefdet* biodet)/ zooprey ! [molC/kg/s]
4273
+ I_zooprey = 1.0 / zooprey
4274
+ wombat% zoograzphy(i,j,k) = g_npz * wombat% f_zoo(i,j,k) * (zooprefphy* biophy)* I_zooprey ! [molC/kg/s]
4275
+ wombat% zoograzdia(i,j,k) = g_npz * wombat% f_zoo(i,j,k) * (zooprefdia* biodia)* I_zooprey ! [molC/kg/s]
4276
+ wombat% zoograzdet(i,j,k) = g_npz * wombat% f_zoo(i,j,k) * (zooprefdet* biodet)* I_zooprey ! [molC/kg/s]
4278
4277
else
4279
4278
wombat% zoograzphy(i,j,k) = 0.0
4280
4279
wombat% zoograzdia(i,j,k) = 0.0
@@ -4298,11 +4297,12 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
4298
4297
4299
4298
! Grazing by mesozooplankton
4300
4299
if (mesprey.gt. 1e-3 ) then
4301
- wombat% mesgrazphy(i,j,k) = m_npz * wombat% f_mes(i,j,k) * (mesprefphy* biophy)/ mesprey ! [molC/kg/s]
4302
- wombat% mesgrazdia(i,j,k) = m_npz * wombat% f_mes(i,j,k) * (mesprefdia* biodia)/ mesprey ! [molC/kg/s]
4303
- wombat% mesgrazdet(i,j,k) = m_npz * wombat% f_mes(i,j,k) * (mesprefdet* biodet)/ mesprey ! [molC/kg/s]
4304
- wombat% mesgrazbdet(i,j,k) = m_npz * wombat% f_mes(i,j,k) * (mesprefbdet* biobdet)/ mesprey ! [molC/kg/s]
4305
- wombat% mesgrazzoo(i,j,k) = m_npz * wombat% f_mes(i,j,k) * (mesprefzoo* biozoo)/ mesprey ! [molC/kg/s]
4300
+ I_mesprey = 1.0 / mesprey
4301
+ wombat% mesgrazphy(i,j,k) = m_npz * wombat% f_mes(i,j,k) * (mesprefphy* biophy)* I_mesprey ! [molC/kg/s]
4302
+ wombat% mesgrazdia(i,j,k) = m_npz * wombat% f_mes(i,j,k) * (mesprefdia* biodia)* I_mesprey ! [molC/kg/s]
4303
+ wombat% mesgrazdet(i,j,k) = m_npz * wombat% f_mes(i,j,k) * (mesprefdet* biodet)* I_mesprey ! [molC/kg/s]
4304
+ wombat% mesgrazbdet(i,j,k) = m_npz * wombat% f_mes(i,j,k) * (mesprefbdet* biobdet)* I_mesprey ! [molC/kg/s]
4305
+ wombat% mesgrazzoo(i,j,k) = m_npz * wombat% f_mes(i,j,k) * (mesprefzoo* biozoo)* I_mesprey ! [molC/kg/s]
4306
4306
else
4307
4307
wombat% mesgrazphy(i,j,k) = 0.0
4308
4308
wombat% mesgrazdia(i,j,k) = 0.0
0 commit comments