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-linkages config.toml is written over COPPER's configuration, and the scenario-specific input files listed under [General.Scenario_Input_Files].COPPER are 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

  1. 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
  2. Edit each scenarios/SK_*/config.toml you intend to run: the repo_path and env_name entries are the analyst's cluster paths and environment names and must point at your own checkouts and Conda environments. Set the CODERS api_key to your own key if you switch use_coders on.
  3. Run a scenario: console conda activate m3linkages_env python linkage.py -sc SK_1 On a cluster, use linkage.sh or linkage_batch.sh from the CP_SK branch, 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.