3. Soil carbon: a permanent loss on land that hasn't changed

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)
Reproduce this Open in Colab (R runtime; section 3)
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.
Test: test-critical-03-soc-stock-change.R · Proposed change: F03.diff · Open an issue in CIAT/cleaned

Comments

Comments are GitHub Discussions on peetmate/cleaned-review; sign in with GitHub to post.