CP Saskatchewan¶
At a glance¶
| Publication / project partner | A Nuclear Grand Bargain / Clean Prosperity |
| Analysis period | 2026 |
| Question | How Saskatchewan's electricity system develops to 2050 under no additional climate policy, under a Canada-Saskatchewan agreement, and under a net-zero pathway, and what role nuclear plays in each |
| Linkage | Electricity supply and demand (CIMS-COPPER-SILVER) |
| Scenarios | Fourteen linkage scenario folders SK_* on the CP_SK branch, built on three CIMS scenarios |
| Contact | Aaron Hoyle, aaron@openinsights.ca |
Model versions¶
| Component | Repository | Branch | Commit | Notes |
|---|---|---|---|---|
| M3-linkages (runner + linkage scenarios) | https://gitlab.com/sesit/M3-linkages | CP_SK |
147a8cb (2026-09-23) |
Single-commit snapshot: the SK_* scenario folders plus runner changes. |
| CIMS (model + scenarios) | https://gitlab.com/sesit/cims-models-fork | CP_SK |
ff13cfd1 (2026-09-23) |
Single-commit snapshot of the Saskatchewan model files and the three CIMS scenarios. |
| COPPER | https://gitlab.com/sesit/copper | lmp_testing_clean |
||
| SILVER | https://gitlab.com/sesit/silver | dev |
||
| IDEA dashboard | https://gitlab.com/sesit/idea-dash | main |
Optional, for viewing outputs. |
How the three repositories fit together¶
The linkage scenario folder in M3-linkages is the single place where a run is defined, but it treats COPPER and CIMS differently:
- COPPER has no scenario of its own. The
[Models.COPPER.Config]block in the M3-linkagesconfig.tomlis written over COPPER's configuration, and the scenario-specific input files listed under[General.Scenario_Input_Files].COPPERare copied from the linkage scenario folder into COPPER's run. You do not need a matching scenario folder in the COPPER repository. - CIMS keeps its own scenario. The M3-linkages config names a CIMS
scenario (
base_scenario) that exists, with its own configuration, in the cims-models-fork repository. The[Models.CIMS.Config]block only adjusts the policy flags the linkage passes through. - SILVER is configured from the
[Models.SILVER.Config]block in the same way as COPPER.
Scenarios¶
CIMS scenarios (cims-models-fork, branch CP_SK)¶
| CIMS scenario | Meaning |
|---|---|
CP_SK_No_climate_policy |
No additional climate policy beyond what is in place today |
CP_SK_MOU_succeeds |
The Canada-Saskatchewan memorandum of understanding is implemented |
CP_SK_Net_zero |
A net-zero electricity pathway for Saskatchewan |
Linkage scenarios (M3-linkages, branch CP_SK)¶
Each row is one folder under scenarios/ on the CP_SK branch. Every folder
runs the full CIMS-COPPER-SILVER chain; the columns show what each one changes
relative to SK_1. Prices are federal carbon prices in $/t CO2e; capacities
are Saskatchewan minimum build requirements passed to COPPER.
| Linkage scenario | CIMS scenario | Carbon price 2025 to 2050 | OBPS tightening | Saskatchewan nuclear minimum | Saskatchewan wind and solar limit | Coal | Other inputs |
|---|---|---|---|---|---|---|---|
SK_1 |
No climate policy | 143 rising to 170 | To 2030 | None | Proportional wind build, 50 % | Refurbishment of 1,140 MW from 2030; 140 MW coal CCS from 2040 | Older technology table (generation_type_data_old.csv) |
SK_1_rerun |
No climate policy | 143 rising to 170 | To 2030 | None | Proportional wind build, 50 % | As SK_1 |
Adds gas-cogeneration and nuclear refurbishment technologies; sector_specific_scaling = false |
SK_1_refurb |
No climate policy | 143 rising to 170 | To 2030 | None | Proportional wind build, 50 % | As SK_1 |
Same inputs as SK_1_rerun |
SK_2 |
MOU succeeds | 50, 65, 97.5, then 130 | Continues to 2050 | None | Proportional wind build, 50 % | No minimum | |
SK_3 |
Net zero | 70, 120, then 170; Alberta and Saskatchewan at 0.765 of federal | Faster, to 2050 | None | Proportional wind build, 50 % | No minimum | Saskatchewan emissions limit of zero in 2050 (provincial_carbon_limit.csv); convergence tolerance 10 % |
SK_4 |
No climate policy | 143 rising to 170 | To 2030 | None | Variable-renewable share capped at 15 %; wind and solar capacity caps (renewable_portfolio_max.csv) |
No minimum | |
SK_7 |
MOU succeeds | 50, 65, 97.5, then 130 | Continues to 2050 | None | Share capped at 15 %; wind and solar capacity caps | No minimum | |
SK_8 |
MOU succeeds | 50, 65, 97.5, then 130 | Continues to 2050 | None | Share capped at 30 % | No minimum | |
SK_9 |
MOU succeeds | 50, 65, 97.5, then 130 | Continues to 2050 | None | Share capped at 40 % | No minimum | |
SK_10 |
No climate policy | 143 rising to 170 | To 2030 | SMR 300 MW by 2035, 600 MW by 2040; large nuclear 1,000 MW by 2045, 2,000 MW by 2050 | Share capped at 30 %; wind and solar capacity caps and floors to 2030 | No minimum | |
SK_11 |
MOU succeeds | 50, 65, 97.5, then 130 | Continues to 2050 | As SK_10 |
Share capped at 30 % | No minimum | |
SK_11_tweak |
MOU succeeds | 50, 65, 97.5, then 130 | Continues to 2050, modified schedule | As SK_10 |
Share capped at 40 % | No minimum | |
SK_12 |
No climate policy | 143 rising to 170 | To 2030 | As SK_10 |
Share capped at 30 % | No minimum | Config lists renewable portfolio files that are not in the folder |
SK_13 |
MOU succeeds | 50, 65, 97.5, then 130 | Continues to 2050 | As SK_10 |
Share capped at 30 % | No minimum |
What is varied. The scenarios form three families. The SK_1 family is
the no-additional-policy world: the federal carbon price follows its
legislated path (143 $/t in 2025, the 2025 to 2029 average, and 170 $/t from
2030), output-based pricing stops tightening after 2030, and COPPER is
required to keep Saskatchewan's coal fleet running through refurbishment and
a small carbon-capture retrofit. The MOU family (SK_2, SK_7 to SK_9,
SK_11, SK_13) represents the Canada-Saskatchewan agreement: a lower
carbon price path (50 $/t in 2025 rising to 130 $/t by 2040), output-based
pricing that keeps tightening to 2050, and no obligation to keep coal.
SK_3 is the net-zero case, with a Saskatchewan emissions limit of zero in
2050, a faster tightening schedule and both Alberta and Saskatchewan paying
0.765 of the federal price.
Within the no-policy and MOU families, two further levers are explored.
Wind and solar are constrained either through a cap on the variable-renewable
share of Saskatchewan's system (15 %, 30 % or 40 %) or through explicit
capacity caps and, in SK_10, floors through 2030. Nuclear is introduced as
a minimum build: 300 MW of small modular reactors by 2035 and 600 MW by 2040,
then 1,000 MW of large nuclear by 2045 and 2,000 MW by 2050 (SK_10 to
SK_13). The _rerun, _refurb and _tweak folders are re-runs of a base
case with a refurbishment technology set or an adjusted tightening schedule.
Which folders appear in the published report is recorded with the outputs.
Assumptions and data¶
Every assumption below is set in the linkage scenario folder on the CP_SK
branch, either in config.toml or in one of the CSV input files it lists.
Links point at the SK_1 copy; the other folders carry the same files with
the differences shown in the scenario table.
| Assumption | Value | Where it is set |
|---|---|---|
| Models run and convergence | CIMS, COPPER and SILVER; CIMS-COPPER iterated until provincial electricity prices differ by under 5 % (10 % in SK_3) |
config.toml, [General] and [Models.CIMS.Acceptable_Rate_Difference] |
| CIMS scenario | One of the three CIMS scenarios above | config.toml, base_scenario; scenario definition in cims-models-fork |
| Output-based pricing applied in CIMS | On | config.toml, [Models.CIMS.Config.Capacity_Expansion_Linkage], OBPS_flag |
| Federal Clean Electricity Regulations | Not applied (CER_flag = false) |
same block |
| Net-zero flag in CIMS | Off (the net-zero case is expressed through the CIMS scenario and the emissions limit) | same block |
| Investment tax credits in CIMS | Carbon capture 50 %, clean technology 30 %, clean electricity 15 % | same block, ITC_* |
| Coal phase-out | National phase-out off; province-specific schedule read from file | same block and provincial_phase_out.csv |
| 2025 electricity price scaling | CIMS 2025 prices scaled to observed (2025_price_scaling = true) |
config.toml, [Models.CIMS] |
| CIMS results extracted | Saskatchewan only | config.toml, [Models.CIMS.Config.Output_Preferences] |
| Federal carbon price | 143 $/t (2025) rising to 170 $/t (2030 on); MOU family 50, 65, 97.5, 130; net zero 70, 120, 170 | config.toml, [Models.COPPER.Config.Carbon.ctax] |
| Provincial carbon price scaling | Alberta 0.4 of federal (0.765 for Alberta and Saskatchewan in SK_3) |
config.toml, [Models.COPPER.Config.Carbon.ctax_prov] |
| Provincial emissions limit | Saskatchewan zero in 2050 (SK_3 only) |
provincial_carbon_limit.csv |
| Output-based pricing standards and tightening | Standards by fuel and region, tightening to 2030 or to 2050 by family | obps_standards.csv |
| Maximum capacity by technology, province and period | For example no nuclear in British Columbia | max_capacity_limits.csv |
| Minimum capacity by technology, province and period | Saskatchewan geothermal 30 MW (2030) to 180 MW (2040 on); coal refurbishment and CCS (SK_1 family); nuclear (SK_10 to SK_13); British Columbia gas minimums |
min_capacity_limits.csv |
| Technology costs and performance | Capital cost, fixed and variable O&M, efficiency, capacity-factor bounds, ITC eligibility by technology | generation_type_data.csv |
| Technology cost evolution | Capital-cost index by technology and period | price_evolution.csv |
| Capacity values | Seasonal capacity credit by technology and province | capacity_value_winter.csv, capacity_value_summer.csv |
| Fuel prices and emission factors | Base price and CO2 factor by fuel | fuel_type_data.csv |
| Saskatchewan wind and solar limits | Proportional wind build at 50 % (SK_1 family, SK_2, SK_3), or a variable-renewable share cap of 15, 30 or 40 % |
config.toml, [Models.COPPER.Config.Electrical_grid] |
| Wind and solar capacity caps and floors | Per-period caps (SK_4, SK_7, SK_10) and floors to 2030 (SK_10) |
renewable_portfolio_max.csv, renewable_portfolio_min.csv |
| Generator disaggregation | Saskatchewan, every period 2025 to 2050 | config.toml, [Models.COPPER.Config.Disaggregation_Settings] |
| Locational marginal prices for renewables, Alberta R30, transmission tax credit | All off | config.toml, [Models.COPPER.Config.Regulations] and [...Economics.ITC] |
| SILVER dispatch | Copper-plate transmission, no optimal power flow | config.toml, [Models.SILVER.Config] |
| CODERS data | Demand and VRE year 2021; API pull off (use_coders = false), so CODERS-derived inputs must be present locally |
config.toml, [CODERS] |
How to replicate¶
- Install the linkage following the
CIMS-COPPER-SILVER setup guide,
then check out the branches in the table above rather than the runner
defaults:
console git checkout CP_SK # in M3-linkages git -C dependencies/cims-models-fork checkout CP_SK git -C dependencies/copper checkout lmp_testing_clean git -C dependencies/silver checkout dev - Edit each
scenarios/SK_*/config.tomlyou intend to run: therepo_pathandenv_nameentries are the analyst's cluster paths and environment names and must point at your own checkouts and Conda environments. Set the CODERSapi_keyto your own key if you switchuse_coderson. - Run a scenario:
console conda activate m3linkages_env python linkage.py -sc SK_1On a cluster, uselinkage.shorlinkage_batch.shfrom theCP_SKbranch, which submits several scenarios in sequence.
Outputs¶
Visualisation dashboard coming soon.
Open items¶
- [ ] Pin the COPPER and SILVER commits the published runs used.
- [ ] Record which
SK_*folders appear in the report.