Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix to prevent overly efficient iron uptake/scavenging and early onset of aggregation/sinking in warm water #101

Merged
merged 4 commits into from
Oct 31, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
Step, Day, Truncs, Energy/Mass, Maximum CFL, Mean Sea Level, Total Mass, Mean Salin, Mean Temp, Frac Mass Err, Salin Err, Temp Err
[days] [m2 s-2] [Nondim] [m] [kg] [PSU] [degC] [Nondim] [PSU] [degC]
0, 731595.000, 0, En 0.0000000000000000E+00, CFL 0.00000, SL -0.0000E+00, M 6.97073E+15, S 35.2427, T 6.2462, Me 0.00E+00, Se 0.00E+00, Te 0.00E+00
6, 731595.250, 0, En 1.9430731566557828E-06, CFL 0.00273, SL -1.0976E-03, M 6.97073E+15, S 35.2427, T 6.2460, Me -8.57E-10, Se -2.86E-07, Te -2.66E-06
12, 731595.500, 0, En 4.1720928837009248E-06, CFL 0.00286, SL -2.1342E-03, M 6.97073E+15, S 35.2427, T 6.2457, Me -7.46E-10, Se -6.81E-07, Te -6.81E-06
18, 731595.750, 0, En 1.1711233584828893E-05, CFL 0.00771, SL -3.2696E-03, M 6.97073E+15, S 35.2427, T 6.2459, Me -7.01E-10, Se -9.90E-07, Te -1.00E-05
24, 731596.000, 0, En 2.3222260224258834E-05, CFL 0.00834, SL -4.4878E-03, M 6.97072E+15, S 35.2427, T 6.2457, Me -1.14E-09, Se -1.40E-06, Te -1.42E-05
30, 731596.250, 0, En 2.8141564688335571E-05, CFL 0.00697, SL -5.5233E-03, M 6.97072E+15, S 35.2428, T 6.2454, Me -1.17E-09, Se -1.93E-06, Te -1.96E-05
36, 731596.500, 0, En 3.5463133196222812E-05, CFL 0.00719, SL -6.4934E-03, M 6.97072E+15, S 35.2428, T 6.2451, Me -1.19E-09, Se -2.38E-06, Te -2.42E-05
42, 731596.750, 0, En 4.0871903202982405E-05, CFL 0.00769, SL -7.1812E-03, M 6.97072E+15, S 35.2428, T 6.2453, Me -1.11E-09, Se -2.80E-06, Te -2.86E-05
48, 731597.000, 0, En 4.6240478947958968E-05, CFL 0.00900, SL -7.7400E-03, M 6.97072E+15, S 35.2428, T 6.2453, Me -8.74E-10, Se -3.06E-06, Te -3.14E-05
6, 731595.250, 0, En 1.9430731566546388E-06, CFL 0.00273, SL -1.0976E-03, M 6.97073E+15, S 35.2427, T 6.2460, Me -8.57E-10, Se -2.86E-07, Te -2.66E-06
12, 731595.500, 0, En 4.1720467725151035E-06, CFL 0.00286, SL -2.1342E-03, M 6.97073E+15, S 35.2427, T 6.2457, Me -7.46E-10, Se -6.81E-07, Te -6.81E-06
18, 731595.750, 0, En 1.1685557354771320E-05, CFL 0.00769, SL -3.2696E-03, M 6.97073E+15, S 35.2427, T 6.2459, Me -7.01E-10, Se -9.90E-07, Te -1.00E-05
24, 731596.000, 0, En 2.3175399507961748E-05, CFL 0.00833, SL -4.4877E-03, M 6.97072E+15, S 35.2427, T 6.2457, Me -1.14E-09, Se -1.40E-06, Te -1.42E-05
30, 731596.250, 0, En 2.8121131207009207E-05, CFL 0.00696, SL -5.5232E-03, M 6.97072E+15, S 35.2428, T 6.2454, Me -1.17E-09, Se -1.93E-06, Te -1.96E-05
36, 731596.500, 0, En 3.5453054955347525E-05, CFL 0.00719, SL -6.4933E-03, M 6.97072E+15, S 35.2428, T 6.2451, Me -1.19E-09, Se -2.38E-06, Te -2.42E-05
42, 731596.750, 0, En 4.0859910168740299E-05, CFL 0.00767, SL -7.1811E-03, M 6.97072E+15, S 35.2428, T 6.2453, Me -1.11E-09, Se -2.80E-06, Te -2.86E-05
48, 731597.000, 0, En 4.6183029943438057E-05, CFL 0.00894, SL -7.7396E-03, M 6.97072E+15, S 35.2428, T 6.2453, Me -8.74E-10, Se -3.06E-06, Te -3.14E-05
21 changes: 12 additions & 9 deletions generic_tracers/generic_COBALT.F90
Original file line number Diff line number Diff line change
Expand Up @@ -906,20 +906,20 @@ subroutine user_add_params(param_file)
! Phytoplankton mortality terms differ by whether they are density-dependent (i.e., linear versus quadratic),
! temperature-dependent, and whether they vary depending on the condition (or stress) of the phytoplankton. The
! level of stress is defined based on the achieved growth rate relative to the maximum growth rate. By default,
! stress-dependent mortality begins to increase from 0 when this ratio falls below 0.25 (frac_mu_stress = 0.25).
! stress-dependent mortality begins to increase from 0 when this ratio falls below 0.4 (frac_mu_stress = 0.4).
!
call get_param(param_file, "generic_COBALT", "frac_mu_stress_Sm", phyto(SMALL)%frac_mu_stress, &
"fraction of max growth when stress-dependent losses initiate for small phytoplankton", &
units="none", default=0.25)
units="none", default=0.4)
call get_param(param_file, "generic_COBALT", "frac_mu_stress_Di", phyto(DIAZO)%frac_mu_stress, &
"fraction of max growth when stress-dependent losses initiate for diazotrophs", &
units="none", default=0.25)
units="none", default=0.4)
call get_param(param_file, "generic_COBALT", "frac_mu_stress_Lg", phyto(LARGE)%frac_mu_stress, &
"fraction of max growth when stress-dependent losses initiate for large phytoplankton", &
units="none", default=0.25)
units="none", default=0.4)
call get_param(param_file, "generic_COBALT", "frac_mu_stress_Md", phyto(MEDIUM)%frac_mu_stress, &
"fraction of max growth when stress-dependent losses initiate for medium phytoplankton", &
units="none", default=0.25)
units="none", default=0.4)
!
! Phytoplankton aggregation is a density-dependent (quadratic) mortality term that is more effective for large
! phytoplankton, following Jackson (1990). Aggregation rates increase with stress (e.g., Waite et al, 1992).
Expand Down Expand Up @@ -3423,7 +3423,7 @@ subroutine generic_COBALT_update_from_source(tracer_list,Temp,Salt,rho_dzt,dzt,h
phyto(n)%theta(i,j,k) = theta_temp
phyto(n)%bresp(i,j,k) = bresp_temp*P_C_max_temp
phyto(n)%mu(i,j,k) = P_C_m_temp/(1.0 + cobalt%zeta)*phyto(n)%irrlim(i,j,k) - phyto(n)%bresp(i,j,k)
phyto(n)%P_C_max(i,j,k) = P_C_max_temp*cobalt%expkT(i,j,k)
phyto(n)%P_C_max(i,j,k) = P_C_max_temp
phyto(n)%alpha(i,j,k) = alpha_temp
endif
enddo
Expand Down Expand Up @@ -3514,14 +3514,17 @@ subroutine generic_COBALT_update_from_source(tracer_list,Temp,Salt,rho_dzt,dzt,h
!
do k = 1, nk ; do j = jsc, jec ; do i = isc, iec !{
do n = 1, NUM_PHYTO !{
if (phyto(n)%q_fe_2_n(i,j,k).lt.phyto(n)%fe_2_n_max) then
! Take up iron if below maximum guota and day averaged growth is positive
charliestock marked this conversation as resolved.
Show resolved Hide resolved
if ( (phyto(n)%q_fe_2_n(i,j,k).lt.phyto(n)%fe_2_n_max).and.(phyto(n)%f_mu_mem(i,j,k).gt.0.0) ) then
! Scaling fe uptake with the maximum photosynthesis allows for luxury iron uptake when other nutrients
! are limiting but iron is not
! are limiting but iron is not. Added light dependence to prevent excessive iron scavenging while sinking
phyto(n)%juptake_fe(i,j,k) = phyto(n)%P_C_max(i,j,k)*cobalt%expkT(i,j,k)*phyto(n)%f_n(i,j,k)* &
(1.0 - exp(-phyto(n)%alpha(i,j,k)*cobalt%f_irr_aclm(i,j,k)*phyto(n)%theta(i,j,k)/ &
max(phyto(n)%liebig_lim(i,j,k)*phyto(n)%P_C_max(i,j,k)*cobalt%expkT(i,j,k),epsln)))* &
phyto(n)%felim(i,j,k)*cobalt%fe_2_n_upt_fac
phyto(n)%jexuloss_fe(i,j,k) = 0.0
else
! if you've exceeded the maximum quota, stop uptake and exude extra
! if you've exceeded the maximum quota or day averaged growth is negative, stop uptake and exude extra
phyto(n)%juptake_fe(i,j,k) = 0.0
phyto(n)%jexuloss_fe(i,j,k) = cobalt%expkT(i,j,k)*phyto(n)%bresp(i,j,k)*phyto(n)%f_fe(i,j,k)
endif
Expand Down
Loading