Skip to content
Open
6 changes: 3 additions & 3 deletions core/datainput.gms
Original file line number Diff line number Diff line change
Expand Up @@ -290,9 +290,9 @@ fm_dataglob("inco0", "oae_ng") = fm_dataglob("inco0", "oae_ng") / (cm_33_OAE_eff
fm_dataglob("inco0", "oae_el") = fm_dataglob("inco0", "oae_el") / (cm_33_OAE_eff / sm_c_2_co2);

*** convert inco0, floorcost and omv to REMIND units by applying a factor 0.001
*** category energy technology ccs technology process-based industry
*** input data unit $/kW $/(tC/a) $/(t/a)
*** REMIND unit T$/TW T$/(GtC/a) T$/(Gt/a)
*** category energy technology ccs technology process-based industry weathering
*** input data unit $/kW $/(tC/a) $/(t/a) $/(t rocks/a)
*** REMIND unit T$/TW T$/(GtC/a) T$/(Gt/a) T$/(Gt rocks/a)
Comment thread
tabeado marked this conversation as resolved.
Outdated
fm_dataglob("inco0",te) = s_DpKW_2_TDpTW * fm_dataglob("inco0",te);
fm_dataglob("floorcost",te) = s_DpKW_2_TDpTW * fm_dataglob("floorcost",te);
fm_dataglob("omv",te) = s_DpKWa_2_TDpTWa * fm_dataglob("omv",te);
Expand Down
15 changes: 11 additions & 4 deletions core/input/generisdata_tech.prn
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
*** SOF ./core/input/generisdata_tech.prn
$ontext
tech_stat technology status: how close a technology is to market readiness. Scale: 0-3, with 0 'I can go out and build a GW plant today' to 3 'Still some research necessary'
inco0 Initial investment costs given in $[2015] / kW[output] capacity; for dac/prc cc: $[2015] / (tC[captured]/a); for other indutry prc: $[2015]/(t[output]/a)
inco0 Initial investment costs given in $[2015] / kW[output] capacity; for dac/prc cc: $[2015] / (tC[captured]/a); for other indutry prc: $[2015]/(t[output]/a); for weathering: $[2015]/(t rock/a)
Comment thread
tabeado marked this conversation as resolved.
Outdated
Comment thread
tabeado marked this conversation as resolved.
Outdated
floorcost Floor investment costs, given in $[2015] / kW[output]; for dac: $[2015] / (tC[captured]/a)
constrTme Construction time in years, needed to calculate turn-key cost premium compared to overnight costs
lifetime Average lifetime of a technology, given in years. Effective maximum lifetime is longer than that.
Expand Down Expand Up @@ -155,14 +155,14 @@ lifetime 30 30 45 45 45

*** carbon management
+ ccsinjeon ccsinjeoff weathering dac oae_ng oae_el
tech_stat 0 0 4
inco0 350 525 0.01 18800 200 400
tech_stat 0 0 1 4
inco0 350 525 43 18800 200 400
floorcost 4800
constrTme 3 5
lifetime 40 40 20 20 25 25
mix0 1.00 1.00
eta 1.00 1.00 1.00 1.00 1.00 1.00
omf 0.06 0.12 0.84 0.025 0.35 0.17
omf 0.06 0.12 0.59 0.025 0.35 0.17
ccap0 0.0008
learn 0.15

Expand Down Expand Up @@ -303,6 +303,13 @@ Ocean Liming - oae
Costs per tC removed is calculated in the code as it depends on the efficiency (tCO2/tCaO; exogenous):
cost (USD/tC) = inco0 (USD/tCaO) / ( efficiency (tCO2/tCaO) / 3.66 (tCO2/tC) )

Enhanced Rock Weathering - weathering
Parameterization based on Strefler et al (2018) doi.org/10.1088/1748-9326/aaa9c4
annuity factor = 0.08 for lifetime of 20 years and r = 0.05; capacity factor = 0.69
inco0: 5 (USD/t rock) * 0.69 / 0.08 = 43 USD/t rock/a for mining and production
Comment thread
tabeado marked this conversation as resolved.
omf: O&M cost from rock mining & production (25 USD/t rock) and transportation & distribution (12 USD/t rock), i.e. 37/(43/0.69) = 0.86
Comment thread
tabeado marked this conversation as resolved.
Outdated
To use the upper Capital Cost estimate from Strefler et al, 15 USD/t rock, set inco0 = 129 and omf = 0.2

Gas to Liquids (GtL) Fischer-Tropsch Process - gasftrec/gasftcrec
efficiency eta = 0.60 (0.57 with capture), estimation at higher end of efficiency spectrum
Details in Issue 518/PR 2034
Expand Down
11 changes: 9 additions & 2 deletions main.gms
Original file line number Diff line number Diff line change
Expand Up @@ -1086,10 +1086,17 @@ parameter
;
cm_gs_ew = 20; !! def = 20 !! regexp = is.numeric
*'

parameter
cm_LimRock "limit amount of rock spread each year [Gt]"
cm_33_EW_rockRemPot "Maximum CO2 removal potential per ton of rock."
Comment thread
tabeado marked this conversation as resolved.
Outdated
Comment thread
tabeado marked this conversation as resolved.
Outdated
;
cm_LimRock = 1000; !! def = 1000
cm_33_EW_rockRemPot = 0.3; !! def = 0.3 t CO2 / t basalt
*' Theoretical potential is influenced by the chemical composition of the rock, in particular calcium and magnesium content.
*' * (0.3): 0.3 t CO2 / t basalt is the commonly used average, see e.g. Strefler et al 2018 (SI-A Table A-1)
*' * (0.2-0.4): 0.2 and 0.4 t CO2 / t basalt are a lower and upper bound in Strefler et al 2018 (SI-A Table A-1)
*' The theoretical potential may not be reached due to different loss pathways (dissolution through strong acids;
*' secondary mineral formation (esp. clays); secondary carbonate formation (where carbon retention is only temporary)) which
*' strongly depend on the local soil conditions. Reduction below 50% of the theoretical potential is well possible.
*'
parameter
cm_33_EW_upScalingRateLimit "Annual growth rate limit on upscaling of mining & spreading rocks on fields"
Expand Down
9 changes: 4 additions & 5 deletions modules/33_carbonRemoval/portfolio/datainput.gms
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,9 @@ s33_step = 2.5;
*' @code
*' fix costs [T$/Gt stone]. Data from strefler et al. in $/t stone: mining, crushing, grinding (5.0 investment costs, 25.1 O&M costs), spreading (12.1 O&M costs)
s33_costs_fix = 0.0422;
s33_co2_rem_pot = 0.3 * 12/44; !! default for basalt, for Olivine 1.1
s33_rockRemPot = cm_33_EW_rockRemPot * 12/44; !! default for basalt is 0.3 t CO2/t rock, for Olivine 1.1 t CO2/t rock. Converted to t C/t rock.
Comment thread
tabeado marked this conversation as resolved.
Outdated
*' Sources for loss pathways that would reduce the total removal potential per ton rock:
*' https://www.carbon-drawdown.de/blog/2026-7-18-where-does-the-co-removal-potential-of-enhanced-weathering-actually-go; https://cdrxiv.org/preprint/417

*' rock weathering rate (i.e. fraction of rock weathering per year) at ambient temperature (25 degree C), based on
*' eq 2 in strefler, amann et al. (2018):
Expand All @@ -54,17 +56,14 @@ p33_rock_weath_rate("2") = s33_rock_weath_rate_ambientT * 0.29;
p33_fedem("weathering", "feels") = 6.62 * cm_gs_ew**(-1.16);
p33_fedem("weathering", "fedie") = 0.3;

*' Factor distributing the global rock limit across regions according to population
p33_LimRock(regi) = pm_pop("2005",regi) / sum(regi2,pm_pop("2005",regi2));

*' Annual growth rate limit on upscaling of mining & spreading rocks on fields
p33_EW_upScalingLimit(ttot) = cm_33_EW_upScalingRateLimit;

*' Calculation of short term limit on rocks spread on field in terms of Gt rocks that can be spread.
p33_EW_shortTermEW_Limit(regi) = cm_33_EW_shortTermLimit * sum(rlf, f33_maxProdGradeRegiWeathering(regi, rlf));

*' Narrative switch: what share of cropland can be used for EW?
parameter f33_EW_maxShareOfCropland(ext_regi) "Maximum share of cropland available for enhanced weathering by region" / %cm_33_EW_maxShareOfCropland% /;
parameter f33_EW_maxShareOfCropland(ext_regi) "Maximum share of suitable cropland available for enhanced weathering by region" / %cm_33_EW_maxShareOfCropland% /;
p33_EW_maxShareOfCropland(regi) = 1; !! if no value is assigned to GLO, the default share is set to 100%
p33_EW_maxShareOfCropland(regi) = f33_EW_maxShareOfCropland("GLO"); !! if a value is assigned to GLO, this value is set for all regions
loop(ext_regi$f33_EW_maxShareOfCropland(ext_regi),
Expand Down
4 changes: 1 addition & 3 deletions modules/33_carbonRemoval/portfolio/declarations.gms
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ scalars
*** Multiple options
sm_capture_rate_cdrmodule "CO2 capture rate for CDR energy and process emissions, i.e. fegas use in OAE and DAC and for calcination emissions in oae" / 0.9 /
*** EW
s33_co2_rem_pot "specific carbon removal potential [Gt C per Gt ground rock]"
s33_rockRemPot "specific carbon removal potential [Gt C per Gt ground rock]"
Comment thread
tabeado marked this conversation as resolved.
Outdated
s33_rock_weath_rate_ambientT "fraction of stone weathering per year at ambient temperature (25 degree C)"
s33_costs_fix "fixed costs for mining, grinding, spreading [T$/Gt stone]"
s33_step "size of bins in v33_weathering_onfield [Gt stone]"
Comment thread
tabeado marked this conversation as resolved.
Outdated
Expand All @@ -24,7 +24,6 @@ parameters
*** Multiple options
p33_fedem(all_te,all_enty) "final energy demand of each technology [EJ/GtC] (for EW the unit is [EJ/Gt stone])"
Comment thread
tabeado marked this conversation as resolved.
Outdated
*** EW
p33_LimRock(all_regi) "regional share of EW limit [fraction], calculated ex ante for a maximal annual amount of 8 Gt rock in D:\projects\CEMICS\paper_technical\supply_curve_transport_remind_regions.m"
Comment thread
tabeado marked this conversation as resolved.
p33_rock_weath_rate(rlf) "fraction of stone weathering per year depending on climate grade (warm or temperate)"
p33_EW_upScalingLimit(ttot) "Annual growth rate limit on upscaling of mining & spreading rocks on fields"
p33_EW_shortTermEW_Limit(all_regi) "Limit on 2030 potential for enhanced weathering, defined in Gt rocks, based on % of land on which EW is applied"
Expand Down Expand Up @@ -89,7 +88,6 @@ q33_EW_omcosts(ttot,all_regi) "calculates O&M costs for spreading ground rocks
q33_EW_FEdemand(ttot,all_regi,all_enty) "calculates final energy demand from enhanced weathering"
q33_EW_potential(ttot,all_regi,rlf) "limits the total potential of EW per region and grade"
q33_EW_emi(ttot,all_regi) "calculates amount of carbon captured by EW"
q33_EW_LimEmi(ttot,all_regi) "limits EW to a maximal annual amount of ground rock of cm_LimRock"
q33_EW_upscaling_rate(ttot, all_regi) "limits spreading of rock to a steep but credible upscaling rate"
q33_EW_ShortTermBound(ttot,all_regi) "Limits short term potential for enhanced weathering"

Expand Down
12 changes: 1 addition & 11 deletions modules/33_carbonRemoval/portfolio/equations.gms
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ q33_EW_emi(t,regi)..
vm_emiCdrTeDetail(t,regi, "weathering")
=e=
sum((rlf_cz33, rlf),
- v33_EW_onfield_tot(t,regi,rlf_cz33,rlf) * s33_co2_rem_pot * p33_rock_weath_rate(rlf_cz33)
- v33_EW_onfield_tot(t,regi,rlf_cz33,rlf) * s33_rockRemPot * p33_rock_weath_rate(rlf_cz33)
)
;

Expand Down Expand Up @@ -189,16 +189,6 @@ q33_EW_potential(t,regi,rlf_cz33)..
;


***---------------------------------------------------------------------------
*' An annual limit for the maximum global amount of rocks spread [Gt] can be set via cm_LimRock,
*' e.g. due to sustainability concerns.
***---------------------------------------------------------------------------
q33_EW_LimEmi(t,regi)..
sum((rlf_cz33, rlf), v33_EW_onfield(t,regi,rlf_cz33,rlf))
=l=
cm_LimRock * p33_LimRock(regi)
;

***---------------------------------------------------------------------------
*' Short term bound on spreading of rock
***---------------------------------------------------------------------------
Expand Down
3 changes: 1 addition & 2 deletions modules/33_carbonRemoval/portfolio/realization.gms
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@
*' on crop fields where it weathers in reaction with water and atmospheric CO2. Electricity is needed to grind the
*' rocks and diesel is needed for transportation and spreading on crop fields. The weathering process leads to an exponential
*' decay over time of the spread rocks. There is an upper limit on the amount of rock that can be on the fields, so that
*' in equilibrium only the part that decays in one timestep can be replaced in the next. In addition, an arbitrary
*' limit of the amount of rock spread each year can be set in cm_LimRock. Costs consist of costs for capital, O&M,
*' in equilibrium only the part that decays in one timestep can be replaced in the next. Costs consist of costs for capital, O&M,
*' distribution and transport (grades depend on region specific transport distance from mine to fields).
Comment thread
tabeado marked this conversation as resolved.
Outdated
*'
*' (OAE) Ocean alkalinity enhancement via ocean liming draws down CO2 from the atmosphere by adding (hydrated) lime
Expand Down
2 changes: 0 additions & 2 deletions standalone/MOFEX/MOFEX.gms
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,6 @@ c_export_tax_scen "choose which oil export tax is used in the model. 0 = none
cm_iterative_target_adj "whether or not a tax or a budget target should be iteratively adjusted depending on actual emission or forcing level"
cm_gdximport_target "whether or not the starting value for iteratively adjusted budgets, tax scenarios, or forcing targets (emiscen 5,6,8,9) should be read in from the input.gdx"
cm_gs_ew "grain size (for enhanced weathering, CDR module) [micrometre]"
cm_LimRock "limit amount of rock spread each year [Gt]"
Comment thread
tabeado marked this conversation as resolved.
cm_expoLinear_yearStart "time at which carbon price increases linearly instead of exponentially"
Comment thread
tabeado marked this conversation as resolved.
Outdated

c_budgetCO2FFI "carbon budget for CO2 emissions from FFI (in GtCO2)"
Expand Down Expand Up @@ -299,7 +298,6 @@ cm_iterative_target_adj = 0; !! def = 0
cm_gdximport_target = 0; !! def = 0
$setglobal c_SSP_forcing_adjust forcing_SSP2 !! def = forcing_SSP2
cm_gs_ew = 20; !! def = 20
cm_LimRock = 1000; !! def = 1000
cm_expoLinear_yearStart = 2050; !! def = 2050
Comment thread
tabeado marked this conversation as resolved.
Outdated
c_budgetCO2FFI = 1000; !! def = 1000
c_abtrdy = 2010; !! def = 2010
Expand Down
2 changes: 0 additions & 2 deletions standalone/template.gms
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,6 @@ c_export_tax_scen "choose which oil export tax is used in the model. 0 = none
cm_iterative_target_adj "whether or not a tax or a budget target should be iteratively adjusted depending on actual emission or forcing level"
cm_gdximport_target "whether or not the starting value for iteratively adjusted budgets, tax scenarios, or forcing targets (emiscen 5,6,8,9) should be read in from the input.gdx"
cm_gs_ew "grain size (for enhanced weathering, CDR module) [micrometre]"
cm_LimRock "limit amount of rock spread each year [Gt]"
Comment thread
tabeado marked this conversation as resolved.
cm_expoLinear_yearStart "time at which carbon price increases linearly instead of exponentially"
Comment thread
tabeado marked this conversation as resolved.
Outdated

c_budgetCO2FFI "carbon budget for CO2 emissions from FFI (in GtCO2)"
Expand Down Expand Up @@ -253,7 +252,6 @@ cm_iterative_target_adj = 0; !! def = 0
cm_gdximport_target = 0; !! def = 0
$setglobal c_SSP_forcing_adjust forcing_SSP2 !! def = forcing_SSP2
cm_gs_ew = 20; !! def = 20
cm_LimRock = 1000; !! def = 1000
cm_expoLinear_yearStart = 2050; !! def = 2050
Comment thread
tabeado marked this conversation as resolved.
Outdated
c_budgetCO2FFI = 1000; !! def = 1000
c_abtrdy = 2010; !! def = 2010
Expand Down
2 changes: 0 additions & 2 deletions standalone/trade/trade.gms
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,6 @@ c_export_tax_scen "choose which oil export tax is used in the model. 0 = none
cm_iterative_target_adj "whether or not a tax or a budget target should be iteratively adjusted depending on actual emission or forcing level"
cm_gdximport_target "whether or not the starting value for iteratively adjusted budgets, tax scenarios, or forcing targets (emiscen 5,6,8,9) should be read in from the input.gdx"
cm_gs_ew "grain size (for enhanced weathering, CDR module) [micrometre]"
cm_LimRock "limit amount of rock spread each year [Gt]"
Comment thread
tabeado marked this conversation as resolved.
cm_expoLinear_yearStart "time at which carbon price increases linearly instead of exponentially"
Comment thread
tabeado marked this conversation as resolved.
Outdated

c_budgetCO2FFI "carbon budget for CO2 emissions from FFI (in GtCO2)"
Expand Down Expand Up @@ -304,7 +303,6 @@ cm_iterative_target_adj = 0; !! def = 0
cm_gdximport_target = 0; !! def = 0
$setglobal c_SSP_forcing_adjust forcing_SSP2 !! def = forcing_SSP2
cm_gs_ew = 20; !! def = 20
cm_LimRock = 1000; !! def = 1000
cm_expoLinear_yearStart = 2050; !! def = 2050
Comment thread
tabeado marked this conversation as resolved.
Outdated
c_budgetCO2FFI = 1000; !! def = 1000
c_abtrdy = 2010; !! def = 2010
Expand Down