Replies: 2 comments 14 replies
-
@j-emberton I'm thinking that we move to a new Productivity abstract base class, with then derived class signatures something like: class TwoLeafProductivity(ProductivityABC):
def __init__(self, pmodel: PModel | SubdailyPModel, ppfd: NDArray, fapar: NDArray, beam_angle: NDArray):
... |
Beta Was this translation helpful? Give feedback.
-
Just to unpack that last paragraph, we need something to make it easy for users to get solar azimuth and altitude.
|
Beta Was this translation helpful? Give feedback.
-
As we discussed on 16th May (@MarionBWeinzierl and @AmyOctoCat weren't there), Keith Bloomfield in Colin's group (@kjbloom) is interested in adding a new canopy representation to
pyrealm
. This is different from the canopy model that @AmyOctoCat is working on in #231 as part of the community development in #227 and elsewhere.The key difference here affects what currently happens in
PModel.estimate_productivity
. That is currently implements what is usually called a "bigleaf" model: all of the incident sunlight is basically expected to be orthogonal to a single continuous leaf surface. The incoming radiation is µmol m2 s1, so the predictions are all rates based on a single big square leaf with overhead light.Keith wants to implement what is known as a "two leaf, two stream" model. This represent the canopy as two partitions of sunlight and shade leaves and then also partitions direct and diffuse light. There is the added complexity that you can consider the beam azimuth of the light, which affects how the light interacts with the canopy. We could apply that to get proper diurnal conditions at subdaily timescales but also more accurately estimate GPP at a daily scale by using the correct azimuth angle for solar noon given the latitude.
I think we can replace the
pmodel.estimate_productivity
method with alternative canopy classes (e.g. BigleafProductivity, TwoLeafProductivity) and those should be useable with both the standard and subdaily PModel implementations.The two leaf model would then also need users to specify beam angle as well as FAPAR and PPFD, so we’d need to provide methods to estimate those angles from latitude and time of day. There is the solar functionality in the upcoming v1.0.0 of pyrealm - it adds SPLASH - but that is currently focussed on daily solar fluxes. We might be able to re-factor some of it to produce the subdaily angles, but I’ve no problem using existing packages, as long as they support calculations for arrays of multiple sites.
Keith has provided a draft implementation using R:
Beta Was this translation helpful? Give feedback.
All reactions