-
Notifications
You must be signed in to change notification settings - Fork 15
Description
This is mostly to help avoid the confusion noted in this comment:
Lines 1131 to 1132 in 1a7481b
// TBD We seem to be conflating maintResp and rSoil in the non-microbe | |
// case, need to dig in. With that said... |
I think the issue is that 'maintResp' has two meanings because it operates at two levels of abstraction (with and w/o microbes). w/o microbes, rSoil = maintResp
; with microbes, rSoil = maintResp + growthResp
If this is the case, the solution may simply be in naming, i.e. split fluxes.maintRespiration
into distinct fluxes: fluxes.microbeMaintRespiration
and fluxes.soilMaintRespiration
for the different cases.
1. First - this is a tangent, but helps with clarity
de-conflate the base resp from the temp effect
Lines 1165 to 1166 in 1a7481b
tempEffect = params.baseMicrobeResp * pow(params.microbeQ10, tsoil / 10); | |
fluxes.maintRespiration = envi.microbeC * moistEffect * tempEffect; |
(since params.baseMicrobeResp is not part of the temp effect)
should be:
tempEffect = pow(params.microbeQ10, tsoil / 10);
fluxes.maintRespiration = envi.microbeC * params.baseMicrobeResp * moistEffect * tempEffect;
2. Then de-conflate the different modes of maintresp (soil vs microbe), split fluxes.maintRespiration
into fluxes.microbeMaintRespiration
and fluxes.soilMaintRespiration
:
tempEffect = pow(params.microbeQ10, tsoil / 10);
fluxes.microbeMaintRespiration = envi.microbeC * params.baseMicrobeResp * moistEffect * tempEffect;
And
Lines 1227 to 1234 in 1a7481b
envi.microbeC += (microbeEff * fluxes.microbeIngestion + fluxes.soilPulse - | |
fluxes.maintRespiration) * | |
climate->length; | |
// rSoil is maintenance resp + growth (microbe) resp | |
// :: from [4], eq (5.10) for microbe term | |
fluxes.rSoil = | |
fluxes.maintRespiration + (1 - microbeEff) * fluxes.microbeIngestion; |
becomes
envi.microbeC += (microbeEff * fluxes.microbeIngestion + fluxes.soilPulse -
fluxes.microbeMaintRespiration) *
climate->length;
fluxes.rSoil =
fluxes.microbeMaintRespiration + (1 - microbeEff) * fluxes.microbeIngestion;
2.3 Analogously in the soil resp case
Lines 1169 to 1170 in 1a7481b
tempEffect = params.baseSoilResp * pow(params.soilRespQ10, tsoil / 10); | |
fluxes.maintRespiration = envi.soil * moistEffect * tempEffect; |
becomes
tempEffect = pow(params.soilRespQ10, tsoil / 10);
fluxes.soilMaintRespiration = envi.soil * params.baseSoilResp * moistEffect * tempEffect;
and finally,
Line 1239 in 1a7481b
fluxes.rSoil = fluxes.maintRespiration; |
Becomes
fluxes.soilMaintRespiration = envi.soil * moistEffect * tempEffect;
// and
fluxes.rSoil = fluxes.soilMaintRespiration;