Dear all,
I had created an issue on github where “only” Ian replied. Jürgen advised me to ask it again on the forum to reach a larger user base.
We are working to include plant hydraulics in CABLE-POP (starting from the code of Martin de Kauwe and Manon Sabot). We came across a few points in cable_canopy that we do not understand.
Here the points that are in common between the CABLE main branch and the CABLE-POP_TRENDY branch:
-
The stomatal conductance models are supposed to depend on the humidity at the surface of the leaf. It is like this in Wang and Leuning (1998) and also in the CABLE documentation (Kowalczyk et al. 2006, Eq. 67).
In the code, the variable is calleddsx
. I should beesat(T_leaf) - e_s
withe_s
the actual vapour pressure at the leaf surface. However,dsx
is ratheresat(T_leaf) - e_v
withe_v
the actual vapour pressure of the canopy air-space (met%qvair
). The update of the variable indryLeaf
is:dsx(i) = met%dva(i) + air%dsatdk(i) * (tlfx(i)-met%tvair(i))
on line 548 in src/science/canopy/cbl_dryLeaf.F90 in MAIN and on line 2259 in core/biogeophys/cable_canopy.F90 in CABLE-POP_TRENDY.met%dva
is(qstvair - met%qvair) * const
.
Q: Is this a deliberate change?
Q: Do you know why?
Q: When did this happen? I have code from 2015 that already has this change.
Q: Do you think it is worth it reinstalling the dependence on surface vapour pressure. -
There are x- and y-variables in the code, such as
tlfx
andtlfy
for leaf temperature. The y-variables will be written to the output variables at the end ofdryLeaf
such ascanopy%frday = 12.0 * SUM(rdy, 2)
for leaf respiration. The y-variables are only updated in the iterations if the change in leaf temperature was smaller than any change of leaf temperature before in the iterations.There is also a line that does reduce the calculated change in temperature after 5 iterations (of 20) to avoid oscillations between states.
tlfx(i) = ( 0.5 * ( MAX( 0, k-5 ) / ( k - 4.9999 ) ) ) *tlfxx(i) + &
( 1.0 - ( 0.5 * ( MAX( 0, k-5 ) / ( k - 4.9999 ) ) ) ) &
* tlfx(i)
So there should be oscillations in leaf temperature changes that are not suppressed by the regularisation of it to have a difference between x- and y-variables at the end. We ended up with oscillations in stomatal conductance, transpiration, etc. when including a new stomatal conductance model (Tuzet) because the regularisation after 5 iterations does only reduce the change in leaf temperature but not the other variables.
Q: Why is only leaf temperature stabilised and not Cs and Ds as well?
Q: If stabilisation worked, the difference between x- and y-variables would make no sense. What is your experience?
Q: There are 4 outer iterations in define_canopy and 20 inner iterations in dryLeaf. Given that the y-variables are supposedly the “correct” output, should the inner iterations not start with the y-variables then (they start with the x-variables currently)?
- The CO2 compensation point (
Gamma
notGamma*
) is set to 0:co2cp3 = 0
.
Q: Is there a reason? Is it supposed to be not necessary? Is it simply laziness to redo the quadratic equations?
There is one more remark for CABLE-POP:
- Vanessa rewrote the Leuning model to reduce the correlation between the two parameters
a1
andD0
, which is large. This makes sense if you optimise parameters.
However, the terma1 / (1 + D / D0)
was rewritten to1 / (1 / a1 + D / D0)
. The latterD0
should then be seen asa1*D0
. But it is still around 1.5 kPa in the parameter file (rather than be around 13 kPa). So this should be changed somewhere.
Q: We could adapt the parameter file. Or we could just undo the change and stay with the current parameters, which are easier to interpret.
Kind regards,
Matthias