-
Notifications
You must be signed in to change notification settings - Fork 26
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
macrozooplankton mortality modified by light and sea ice #374
Comments
@kristenkrumhardt and I talked about this a bit earlier today and the plan we came up with is
That's just a rough roadmap we came up with from walking through the existing code, I'm certainly open to suggestions. The variable names / values are not set in stone, but that's what I plan to use in the first pass. And it's a minor point, but I'm on the fence about whether or not we should roll in the #335 fix now that there will be more logic behind computing |
Slight change of plans from what's outlined above -- rather than make local variables for the The code snippet below comes from my enhancement/new_zoo_mortality_func branch, which currently keeps select case (zooplankton_settings(zoo_ind)%mort_coeff_iopt)
case (mort_coeff_iopt_sw_and_ice)
associate(&
surf_sw => interior_tendency_forcings(interior_tendency_forcing_ind%surf_shortwave_id)%field_1d(1,:), &
ice_frac => interior_tendency_forcings(interior_tendency_forcing_ind%ifrac_id)%field_0d(:) &
)
! TODO: Determine relationship between surf_sw, ice_frac, and mort rates
! if ((sum(surf_sw).le.1._r8) .and. (ice_frac(1).gt.0.9_r8)) then
! z_mort_0 = 0.85_r8*zooplankton_settings(zoo_ind)%z_mort_0
! z_mort2_0 = 0.85_r8*zooplankton_settings(zoo_ind)%z_mort2_0
! else
! z_mort_0 = zooplankton_settings(zoo_ind)%z_mort_0
! z_mort2_0 = zooplankton_settings(zoo_ind)%z_mort2_0
! end if
z_mort_0 = zooplankton_settings(zoo_ind)%z_mort_0
z_mort2_0 = zooplankton_settings(zoo_ind)%z_mort2_0
end associate
case DEFAULT
z_mort_0 = zooplankton_settings(zoo_ind)%z_mort_0
z_mort2_0 = zooplankton_settings(zoo_ind)%z_mort2_0
end select
zoo_loss(zoo_ind,:) = (z_mort2_0 * Zprime(zoo_ind,:)**zoo_mort2_exp &
+ z_mort_0 * Zprime(zoo_ind,:)) * Tfunc_zoo(zoo_ind,:) @kristenkrumhardt after Cheyenne comes back up, let's talk about about how to set up a sandbox for you to to make changes in. I think adding ice fraction to the list of interior tendency forcings will be handled fine by POP since it already needs to know what to do with that forcing for the surface fluxes, so hopefully you just need to uncomment and modify the |
Just a word of caution here: I think it makes sense to explore the effect of this parameterization before totally dialing in the technical details of the implementation. In that sense, I would proceed with augmenting the interface to pass the requisite fields (i.e., PAR, IFRAC), then punt on everything else until we think we know what actually works. |
@matt-long we are passing Another thing to add to the associate statement is the PAR column fractions -- in my commented out example |
I think PAR/SW may not be the best thing to use: what we really want is day length or zenith angle. |
Agreed. So we actually need 1) day of year and 2) latitude (which we have already read into MARBL from POP for the great calcite belt/alk project) . After doing more reading on the subject, studies that report on krill diapause during winter say that it's triggered by day length (not a mean daily light level). |
Just to make sure I'm understanding this right - are the two options (1) Adding zenith angle as a forcing field (if this option is turned on), or If so, I think (1) would be easier -- for (2) I could see having "day of year" as an optional argument to I think this forcing update would be tricky to figure out in the stand-alone driver (I might need to recreate the initial condition / forcing netCDF file to include zenith angle for each column or have the driver itself compute zenith angle assuming we are running on Jan 1), but it should be straightforward to have POP do. |
I think option 1 would be completely fine. I just to figure out at what zenith angle to trigger the diapause.. I'll work on getting some studies together that have latitude and day length when krill diapause is triggered, then we can calculate it... |
Can we assume that zenith angle is readily available to pass to MARBL in other models? I think if it's straightforward in POP, we should start there. |
POP has a So there are details to work out, but it is definitely available in POP already. |
What about MOM? We might want to compute day length in the driver. |
I haven't looked for similar functions in MOM yet, but once we settle on a formula I'll either search through the code or ask @ashao . From Wikipedia, the most trustworthy of sources, it looks like the length of the day can be computed using one of the share-code routines I mentioned above:
Obviously I'll play with that a little bit to make sure I haven't messed up the sign or the min / max, but I could see adding a |
Here's gist with a purported day-length computation: @kristenkrumhardt, that data is beautiful! |
We would like to some zooplankton mortality rates to be modified by surface shortwave radiation and sea ice fraction. This would be helpful for simulating the sea ice dependence and diapause during winter of antarctic krill (macrozooplankton).
The text was updated successfully, but these errors were encountered: