To prepare HadCM3B for CMIP7, the terrestrial carbon cycle required tuning to bring key variables (GPP, NPP, soil carbon, vegetation carbon) in line with modern observations. Two parallel tuning efforts were undertaken: Seb ran a large parameter ensemble to identify well-performing members, while Yousheng worked on the model configuration itself (land-use, soil parameters) and used Seb’s results to select final candidates.
Seb’s tuning used the hadcm3b-ensemble-validator framework to download, process, and score HadCM3B ensemble output against observational targets for the terrestrial carbon cycle. Ensembles were created and submitted via the companion hadcm3b-ensemble-generator on BC4. In total ~2974 members were run across 28 ensemble phases.
Each member varies a subset of TRIFFID/JULES land carbon cycle parameters across PFTs (broadleaf trees, needleleaf trees, C3 grass, C4 grass, shrubs):
| Parameter | Description |
|---|---|
ALPHA |
Quantum efficiency of photosynthesis |
G_AREA |
Leaf area index — area scaling |
LAI_MIN |
Minimum leaf area index |
NL0 |
Top-leaf nitrogen concentration |
R_GROW |
Growth respiration fraction |
TLOW / TUPP |
Lower/upper temperature limits for photosynthesis |
V_CRIT_ALPHA |
Critical soil moisture for vegetation stress |
F0 |
Ci/Ca ratio at zero humidity deficit |
Q10 |
Soil respiration temperature sensitivity |
KAPS |
Specific decomposition rate of soil carbon |
Runs were carried out in three broad phases, moving from wide random exploration to focused refinement around the best-performing regions of parameter space.
Phase 1 — Initial exploration (~50 members)
| Ensemble | Members | Score range | Notes |
|---|---|---|---|
xpzn |
26 | 0.30–0.57 | Very early exploration; wide GPP range (85–186 PgC/yr) |
xqap |
25 | 0.21–0.44 | Early CMIP7-era test; scores generally low |
Phase 2 — Large random sampling (~1600 members)
Broad Latin hypercube / random sampling across the full parameter space to map out model sensitivity.
| Ensemble | Members | Score range | GPP range | Notes |
|---|---|---|---|---|
xqab_random |
260 | 0.13–0.66 | 58–205 PgC/yr | First large random sweep |
xqac_soils |
101 | 0.51–0.74 | 117–119 PgC/yr | Soil-parameter-focused sweep; narrower GPP |
xqaq |
257 | 0.15–0.66 | 73–195 PgC/yr | Second large random sweep |
xqar |
257 | 0.14–0.67 | 65–196 PgC/yr | Third large random sweep |
xqau |
257 | 0.15–0.66 | 74–198 PgC/yr | Fourth large random sweep |
random_sampling_combined aggregates all 771 members from xqaq, xqar, xqau for joint analysis.
Phase 3 — Focused refinement (~1300 members, 51 members per sub-ensemble)
Using the best-scoring members from Phase 2 as starting points, a grid of 51-member sub-ensembles was run with tighter parameter ranges, centred on promising regions. These are grouped by their parent random sweep:
| Sub-ensemble group | Ensembles | Typical score range | GPP range |
|---|---|---|---|
xqaq* refinements |
xqaqg, xqaQh, xqaQs, xQaqc, Xqaqp, XqaqW |
0.47–0.75 | 107–126 PgC/yr |
xqar* refinements |
XQarc, xqaRd, xqare, Xqarh, XqArn, Xqarp, XqaRq, xqaRw |
0.46–0.75 | 113–122 PgC/yr |
xqau* refinements |
XqAuc, XqAuf, XqauI, xqauj, Xqaul, xQaup |
0.47–0.74 | 108–122 PgC/yr |
After scoring all Phase 3 members against observational targets (GPP, CVeg, CSoil, regional RECCAP metrics), 23 top-performing ensemble configurations were identified:
XqaqW, Xqarh, XqAuc, xQaup, XqaRq, XqAuf, Xqaul, xqare, xQaqc, Xqarp, Xqaqp, xqaRw, XQarc, xqaqg, XqauI, xqaQs, xqauj, xqaQh, xqaRd, XqArn
These 23 form the candidate pool passed to Yousheng for final selection. Parameter files for each are in id_lists/top_random_candidates_parameters.json in the validator repository.
Yousheng’s tuning focused on diagnosing and fixing the model configuration, working through a series of targeted changes before selecting candidates from Seb’s shortlist.
Initial preindustrial runs (e.g. xqgtc, xqhuc) showed terrestrial carbon cycle states far from observations. The root causes were identified and fixed — see CMIP7 model for the full list of mod changes.
Land-use ancillaries were updated and tested. Time-varying Hyde land-use data were introduced (experiment xqcni onwards), requiring the disturb_grid_fix.mf77 mod and the mod1702_cdj_2024.mf77 update to treat the disturbance field as a fraction rather than a rate.
The land carbon cycle mod was updated from the default (znamelist_hadcm3m21_land_cc.mod) to a corrected version (/user/home/nd20983/um_updates/znamelist_hadcm3m21_land_cc_v2.mod), which picks up the correct soil parameter configuration. This was the primary fix that brought GPP, NPP, soil carbon and vegetation carbon back towards observed values.
Seb’s top 23 candidates span a wide range of V_CRIT_ALPHA (0.31–0.58). However, due to constraints in the new HadCM3B configuration, V_CRIT_ALPHA must remain close to the default value of 0.343. The top 23 were therefore filtered to those with V_CRIT_ALPHA ≲ 0.37, recorded in input_params/hadcm3_selected_parameter_sets_28_Jan2026.csv in the ensemble-generator repository. This gave 4 candidates from Seb’s ensemble, plus 2 baseline/variant runs, submitted as experiments xqjcg–xqjcl (param table: param_tables/xqjc.json).
| Experiment | Source | V_CRIT_ALPHA | Notes |
|---|---|---|---|
| xqjcg | baseline (xpznj) | 0.343 | Default parameter set |
| xqjch | xqaQh | 0.361 | From Seb’s top 23 |
| xqjci | XqArn | 0.326 | From Seb’s top 23 |
| xqjcj | xqAuj | 0.314 | From Seb’s top 23 |
| xqjck | xqarY | 0.344 | From Seb’s top 23 |
| xqjcl | baseline variant | 0.343 | As xqjcg but lower NL0 |
Full per-PFT parameters for all 6 candidates (BL / NL / C3 / C4 / Shrub):
| Param | xqjcg | xqjch | xqjci | xqjcj | xqjck | xqjcl |
|---|---|---|---|---|---|---|
| ALPHA (BL) | 0.0800 | 0.0782 | 0.0409 | 0.0631 | 0.0900 | 0.0800 |
| G_AREA (BL) | 0.0040 | 0.0079 | 0.0068 | 0.0073 | 0.0077 | 0.0040 |
| F0 (BL/NL) | 0.875 | 0.875 | 0.875 | 0.875 | 0.875 | 0.875 |
| LAI_MIN (BL) | 4.000 | 2.763 | 2.106 | 3.188 | 3.595 | 4.000 |
| NL0 (BL) | 0.0500 | 0.0403 | 0.0403 | 0.0402 | 0.0431 | 0.0350 |
| R_GROW | 0.250 | 0.170 | 0.218 | 0.276 | 0.294 | 0.250 |
| TLOW (BL) | 0.0 | −2.7 | 4.5 | 3.4 | −5.0 | 0.0 |
| TUPP (BL) | 36.0 | 33.3 | 40.5 | 39.4 | 31.0 | 36.0 |
| V_CRIT_ALPHA | 0.343 | 0.361 | 0.326 | 0.314 | 0.344 | 0.343 |
Validation uses utils_cmip7 against CMIP6 ensemble means and RECCAP2 observations. Results are stored in validation_outputs/ in the utils_cmip7 repository.
Observational targets: GPP ~120 PgC/yr, NPP ~55–65 PgC/yr, CVeg ~450–550 PgC, CSoil ~1200 PgC. Bias shown in parentheses relative to target (midpoint used for ranges).
| Experiment | Spin-up | Score | GPP (PgC/yr, target 120) | NPP (PgC/yr, target 55–65) | CVeg (PgC, target 450–550) | CSoil (PgC, target 1200) |
|---|---|---|---|---|---|---|
| xqjcg | eqbm | 0.689 | 135.2 (+13%) | 68.3 (+14%) | 720.0 (+44%) | 1292.3 (+8%) |
| xqjch | eqbm | 0.833 | 106.7 (−11%) | 62.2 (in range) | 444.4 (−11%) | 1176.4 (−2%) |
| xqjci | eqbm | 0.833 | 101.4 (−16%) | 49.8 (−17%) | 460.6 (−8%) | 952.8 (−21%) |
| xqjcj | eqbm | 0.870 | 110.3 (−8%) | 53.6 (−11%) | 446.2 (−11%) | 1039.9 (−13%) |
| xqjck | eqbm | 0.763 | 110.1 (−8%) | 56.8 (in range) | 339.5 (−32%) | 1100.3 (−8%) |
| xqjcl | eqbm | 0.830 | 98.4 (−18%) | 50.1 (−17%) | 483.2 (in range) | 984.8 (−18%) |
| xqjlb | dyn | 0.811 | 108.5 (−10%) | 63.6 (in range) | 507.3 (in range) | 1156.6 (−4%) |
| xqjlc | dyn | 0.856 | 112.6 (−6%) | 54.8 (−9%) | 516.8 (in range) | 1055.8 (−12%) |
Global mean vegetation fractions — bias shown relative to IGBP observations (BL 0.173, NL 0.068, C3 0.256, C4 0.100, bare soil 0.288):
| Experiment | Spin-up | BL | NL | C3 | C4 | Bare soil |
|---|---|---|---|---|---|---|
| xqjcg | eqbm | 0.232 (+34%) | 0.104 (+53%) | 0.145 (−43%) | 0.118 (+18%) | 0.176 (−39%) |
| xqjch | eqbm | 0.201 (+16%) | 0.057 (−16%) | 0.190 (−26%) | 0.145 (+45%) | 0.178 (−38%) |
| xqjci | eqbm | 0.214 (+24%) | 0.075 (+10%) | 0.224 (−13%) | 0.086 (−14%) | 0.201 (−30%) |
| xqjcj | eqbm | 0.192 (+11%) | 0.052 (−24%) | 0.226 (−12%) | 0.112 (+12%) | 0.190 (−34%) |
| xqjck | eqbm | 0.159 (−8%) | 0.045 (−34%) | 0.190 (−26%) | 0.175 (+75%) | 0.178 (−38%) |
| xqjcl | eqbm | 0.211 (+22%) | 0.046 (−32%) | 0.244 (−5%) | 0.102 (+2%) | 0.190 (−34%) |
| xqjlb | dyn | 0.205 (+19%) | 0.056 (−17%) | 0.195 (−24%) | 0.144 (+43%) | 0.189 (−34%) |
| xqjlc | dyn | 0.203 (+18%) | 0.055 (−19%) | 0.232 (−10%) | 0.110 (+9%) | 0.206 (−28%) |
xqjcg (the baseline default) performs worst — CVeg is far too high (720 PgC vs target ~500 PgC) and BL/NL fractions are substantially too high, indicating the untuned parameter set gives excessive tree cover.
xqjcj is the top-scoring equilibrium candidate (0.870), with GPP, CVeg, and CSoil all close to observational targets and the most realistic vegetation fractions.
xqjck has unrealistically low CVeg (340 PgC) despite reasonable GPP and score, suggesting the parameter combination suppresses vegetation carbon storage too strongly.
xqjci and xqjcl produce slightly low GPP (~98–101 PgC/yr) and CSoil (~952–985 PgC), falling short of the lower end of observational targets.
xqjlc (dynamic spin-up with xqjcj parameters) is the 2nd-highest scoring experiment overall (0.856). It has the best vegetation fractions of the dynamic spin-up runs — C3 bias only −10% and C4 bias +9%, both substantially more realistic than xqjlb. CVeg (517 PgC) and CSoil (1056 PgC) are within or close to target ranges.
xqjlb (dynamic spin-up with xqjch parameters) scores 0.811, lower than its equilibrium counterpart (0.833). C4 fraction is notably overestimated (+43%), and C3 remains underestimated (−24%), similar to the equilibrium xqjch.
The ppe_xqjlb analysis in utils_cmip7 evaluates all 8 candidates (6 equilibrium xqjc* + 2 dynamic xqjl) in the context of the full ~788-member combined dataset (Phase 2 + 3 ensemble members plus xqjc/xqjl* runs). The heatmap below shows the top 30 runs ranked by overall score, with the highlighted experiments (and the two spin-up baselines xqhuc/xqhua) marked by red boxes:

Columns show match-to-observations (1.0 = perfect, green = better) for spatial RMSE (BL, NL, C3, C4, bare-soil fractions), global carbon cycle (GPP, CVeg, NPP, CSoil) and global-mean vegetation fractions. Key observations:
Regional bias heatmaps from utils_cmip7 compare each candidate against RECCAP2 observations across 10 regions. Each section is collapsible.
The equilibrium TRIFFID runs (xqjcg–xqjcl) use an accelerated equilibrium spin-up which may not reflect the carbon cycle state that a transient (dynamic TRIFFID) spin-up would produce. To test this, two dynamic spin-up experiments were run from the preindustrial spin-up xqhuc, using the parameter sets from the two strongest equilibrium candidates:
| Experiment | Source params | V_CRIT_ALPHA | Spin-up type | Score |
|---|---|---|---|---|
| xqjlb | xqjch | 0.361 | Dynamic TRIFFID, 200 yr | 0.811 |
| xqjlc | xqjcj | 0.314 | Dynamic TRIFFID, 200 yr | 0.856 |
The figure below shows the temporal evolution of key diagnostics during the 200-year dynamic TRIFFID spin-ups for xqjlb (red dashed) and xqjlc (blue solid), both starting from the preindustrial spin-up xqhuc.

The two spin-ups behave very similarly. The main concern is the ongoing decline in trees, CVeg, and CSoil — the dynamic vegetation and soil carbon pools have not fully equilibrated after 200 years, though GPP, NEP, and ocean flux are stable. This is a common feature of HadCM3B-ES spin-ups with TRIFFID dynamic vegetation.
Key findings from the dynamic spin-up experiments:
CVeg increases under dynamic spin-up: both experiments show ~60–70 PgC higher CVeg than their equilibrium counterparts (507 vs 444 for xqjlb/xqjch; 517 vs 446 for xqjlc/xqjcj). This shifts CVeg from slightly below target into the target range (450–550 PgC).
CSoil is relatively stable: xqjlb (1157 PgC) is close to xqjch (1176 PgC); xqjlc (1056 PgC) is close to xqjcj (1040 PgC). The dynamic spin-up does not dramatically shift soil carbon.
GPP and NPP are similar: differences between equilibrium and dynamic spin-up are within ~2 PgC/yr for both metrics.
xqjlc confirms xqjcj as the best parameter set: it ranks 2nd overall out of 788 experiments (behind only xqjcj itself), with the most realistic vegetation fractions of any dynamic run (C3 −10%, C4 +9%).
xqjlb underperforms its equilibrium counterpart: score drops from 0.833 (xqjch) to 0.811 (xqjlb), mainly due to increased C4 overestimation (+43% vs +45%) and higher CVeg bias.
Persistent regional weaknesses: South Asia (GPP −58 to −60%) and South East Asia (GPP −29 to −35%) remain problematic across all experiments, suggesting a structural model bias unrelated to the tuned parameters.