Skip to content

Carbon

Overview

SWAT+ offers three soil carbon representations. The choice is set by the integer bsn_cc%cswat in codes.bsn:

cswat Model Pools
0 Static (legacy) Single residue + humus, C is not tracked as a state
1 C-FARM Single active soil carbon pool with first-order turnover
2 Century Three litter pools and three soil C pools (microbial, slow, passive) following Parton et al. (1993, 1994)

The carbon model controls how plant residue, manure, tillage, and grazing inputs are routed into the soil and the subsequent CO2, N and P fluxes.

Process equations

Static (cswat = 0)

Mineralisation and immobilisation are computed in nut_nminrl.f90. There is no explicit soil C state. Plant residue carbon is implicit through the 0.42 * biomass conversion. Residue decomposes at rate

decr = max(decr_min, min(1, rsdco_pl * ca * csf))

with 80% of mineralised N going to NO3 and 20% to active humus N. See nutrient cycling.

C-FARM (cswat = 1)

Selected when bsn_cc%cswat = 1. A single active soil organic carbon pool is updated daily through residue inputs, microbial decomposition, and tillage-driven mixing. The tillage method is set by bsn_cc%idc_till:

idc_till Method
1 DSSAT-style
2 EPIC-style
3 Kemanian (default)
4 DNDC-style

In hru_control.f90, when cswat = 1:

call cbn_surfrsd_decomp
call cbn_rsd_transfer
call cbn_zhang2

Surface residue decomposes in cbn_surfrsd_decomp.f90 using the combined temperature-moisture factor csf from the N cycle. Below-ground residue is partitioned to soil pools through cbn_rsd_transfer.f90. The cbn_zhang2.f90 routine then runs the Century-style multi-pool turnover that C-FARM and Century share.

C-FARM also adds the plant biomass increment as carbon (hpc_d(j)%npp_c) and accumulates respiratory CO2.

Tillage residue mixing uses mgt_newtillmix_cswat1.f90 (vs mgt_newtillmix_cswat0.f90 for the static model). Tillage activity decays over till_eff_days days, controlled per layer by soil(j)%ly(ly)%tillagef_tillmix.

Century (cswat = 2)

The full Century pool scheme as implemented in cbn_zhang2.f90. Pools:

  • Litter: structural (ls), metabolic (lm), with the structural pool further split into lignin (lsl) and non-lignin
  • Soil organic carbon: microbial biomass (bm), slow humus (hs), passive humus (hp)

For each pool, potential transformation under optimal conditions uses a first-order rate (the *_para rates in carbon_module.f90). Daily realised transformation is

rate(layer) = rate_optimal * cs
cs = sqrt(cdg * sut) * xbm * ox     (cs capped at 10)

cdg and sut are the temperature and water factors from the N cycle. ox is the oxygen factor

ox = 1 - OX_aa * depth / (depth + exp(OX_aa - OX_bb * depth))

with OX_aa = 10.0, OX_bb = 0.035. xbm is the texture and structure factor: 1 in the surface litter and 1 - 0.75 * (silt + clay) elsewhere.

Default Parton optimal rates (per day):

Pool Surface Subsurface
Microbial biomass (BMR) 0.0164 0.02
Slow humus (HSR) - 0.000548
Passive humus (HPR) - 0.000012
Metabolic litter (LMR) 0.0405 0.0507
Structural litter (LSR) 0.0107 0.0132

CO2 allocations on transformation:

From To CO2 (surface) To CO2 (subsurface)
Biomass 0.60 0.85 - 0.68 * (silt+clay)
Metabolic litter 0.60 0.55
Non-lignin structural 0.60 0.55
Lignin structural 0.30 0.30
Slow humus 0.55 0.55
Passive humus 0.55 0.55

Biomass-to-passive humus allocation in subsurface layers: 0.003 + 0.032 * clay. Slow-to-passive allocation: max(0.001, PRMT_45 - 0.00009 * clay) with PRMT_45 = 0.003.

Microbial-biomass leaching uses a water-balance form

abl = 1 - exp(-vflow / (0.01 * st + KOC * bd))

with KOC = 4000 (organic carbon partition coefficient, part_DOC_para).

Lignin shape factor for structural litter: xlslf = exp(-3 * lslf) where lslf is lignin fraction of structural litter.

C:N ratios are kept within Parton bounds for each pool and the transformation can release or consume mineral N depending on the deficit (cpn1..cpn5 and sum1..sum5).

The basins_carbon.tes file overrides the Parton defaults. Read by carbon_read.f90 into cbn_tes (carbon_module.f90). The optional carbon_coef.cbn file (carbon_coef_read.f90) lets a user provide per-layer coefficients.

DOC and DIC

The Century implementation accumulates dissolved organic carbon (DOC) and dissolved inorganic carbon (DIC) percolation. Defaults peroc_DIC_para = 0.95, peroc_DOC_para = 0.70, hlife_doc_para = 50 days for DOC half-life in groundwater. Source: carbon_module.f90, cbn_zhang2.f90.

Switches and parameters

File Field Default Effect
codes.bsn cswat 0 0 = static, 1 = C-FARM, 2 = Century
codes.bsn idc_till 3 Tillage method when cswat = 1
basins_carbon.tes (full Century coefficient set) see carbon_module.f90 Overrides Parton defaults
carbon_coef.cbn per-layer Century coefficients optional Layer-by-layer overrides

Notable Century coefficients (from carbon_module.f90):

Name Default Meaning
CFB_para 0.42 Carbon fraction of residue
er_POC_para 1.5 POC enrichment ratio
peroc_DOC_para 0.70 DOC percolation coefficient
peroc_DIC_para 0.95 DIC percolation coefficient
part_DOC_para 4000 DOC partition coefficient
hlife_doc_para 50 days DOC half-life in groundwater
ALSLCO2_para 0.30 Lignin-to-CO2 allocation
APCO2_para 0.55 Passive humus to CO2
ASCO2_para 0.55 Slow humus to CO2
BMR_para_sur / BMR_para_sub 0.0164 / 0.02 Microbial biomass turnover (d^-1)
HPR_para 0.000012 Passive humus turnover (d^-1)
HSR_para 0.000548 Slow humus turnover (d^-1)
PRMT_45_para 0.003 Slow-to-passive allocation coefficient
PRMT_51_para 1.0 Microbial activity coefficient for top layer
OX_aa_para 10.0 Oxygen factor coefficient
OX_bb_para 0.035 Oxygen factor coefficient

Implementation

Core: cbn_zhang2.f90 (Century pool transformations), cbn_surfrsd_decomp.f90 (surface residue), cbn_rsd_decomp.f90 (sub-surface residue, used in legacy paths), cbn_rsd_transfer.f90 (residue routing into Century pools).

Inputs: carbon_module.f90 (data types and defaults), carbon_read.f90 (basins_carbon.tes), carbon_coef_read.f90 (carbon_coef.cbn).

Tillage: mgt_newtillmix_cswat0.f90, mgt_newtillmix_cswat1.f90, mgt_newtillmix_wet.f90, mgt_tillfactor.f90, mgt_biomix.f90.

Driver in hru_control.f90 switches by bsn_cc%cswat. Outputs are written by output_landscape_init.f90 and soil_nutcarb_write.f90. The cbn_diagnostics flag in carbon_module.f90 controls verbose layer printout.