IPCC 2006 Eq. 2.25 (Vol 4 Ch 2, p. 2.30) calculates soil carbon change from a change in land use or management between two points in time: ΔC = (SOC₀ − SOC₍₀₋T₎)/D. The package applies the stock-change factors to the measured stock every year (R/soc.R:125-132). So any cropland whose factors are below 1 shows a carbon loss every year, even if nothing has changed.
| 1 ha, unchanged cropland | IPCC | Current | Fixed |
|---|---|---|---|
| t C per year | 0.00 | -7.02 | 0.00 |
The fix adds optional *_previous inputs for the previous land use and management. If they aren't given, the change is 0, as Eq. 2.25 requires. This changes the method, so the authors need to agree it (see the fix log).
--- a/R/soc.R 2026-09-29 10:31:04
+++ b/R/soc.R 2026-09-29 10:31:04
@@ -33,6 +33,12 @@
#' @export
soil_organic_carbon <- function(para, stock_change_para, land_required, biomass) {
+
+ # Previous land use / management key; defaults to the current one (no change).
+ soc_prev_key <- function(para, key) {
+ k <- para[[paste0(key, "_previous")]]
+ if (is.null(k) || length(k) == 0 || is.na(k) || !nzchar(k)) para[[key]] else k
+ }
co2_conversion_factor <- 44 / 12
@@ -122,12 +128,27 @@
para[["cropland_orgmatter"]],
"cropland_orgmatter"
),
+ prev_factor_land_use = lookup_soc_factor(
+ crop_landuse_tbl,
+ soc_prev_key(para, "cropland_system"),
+ "cropland_system"
+ ),
+ prev_factor_management = lookup_soc_factor(
+ crop_tillage_tbl,
+ soc_prev_key(para, "cropland_tillage"),
+ "cropland_tillage"
+ ),
+ prev_factor_input = lookup_soc_factor(
... (90 more lines in results/F03.diff)
Rscript reproduce_critical_issues.R 3 using reproduce_critical_issues.R (installs what it needs into its own library and cleaned @ 800d53a). Add CLEANED_FIXES=proposed_fixes.R with proposed_fixes.R for the fixed column.
Comments
Comments are GitHub Discussions on peetmate/cleaned-review; sign in with GitHub to post.