Policy - Investment Tax Credits
Developing an Investment Tax Credit (ITC) Policy
An ITC policy file reduces the effective capital costs of specific electricity generation technologies based on technology type, geographic area, and time period. The Electric_ITCs.jl file shows how to implement this by modifying overnight construction costs.
Key Variables to Modify
- GCCCN[Plant,Area,Year] - Overnight Construction Costs ($/KW)
- 3D array: Plant type × Geographic area × Year
- Default source: EGInput/GCCCN from the database
- Modification pattern:
|
Reduction[plant,area,year] = 0.30 # 30% cost reduction (ITC rate) GCCCN[plant,area,year] = GCCCN[plant,area,year]*(1-Reduction[plant,area,year]) |
- Impact: Lowers the capital cost per MW of new capacity, making the technology more economically attractive to build
- xUnGCCC[Unit,Year] - Unit-Level Capital Costs (1985 $/KW)
- 2D array: Generating unit × Year
- Default source: EGInput/xUnGCCC from the database
- Modification pattern: Match GCCCN reductions at the unit level by looking up the unit's plant type and area
- Impact: Ensures both plant-type-level and individual unit-level capital costs are consistently reduced
Implementation Steps
Step 1: Define ITC Parameters
For each ITC, determine:
- Coverage: Which technologies (e.g., "NGCCS", "OnshoreWind") and areas (e.g., "AB", "BC")
- Credit Rate: % cost reduction (e.g., 30%, 15%, 10%)
- Time Period: When is it active (e.g., 2024-2033 full rate, 2034 half rate, 2035+ expired)
- Cost Basis: Do you reduce 100% of plant cost or a fraction? (Example: CCUS counts only 50% of plant cost)
Step 2: Initialize Reduction Matrix
|
Reduction::VariableArray{3} = zeros(Float32,length(Plant),length(Area),length(Year)) # Reduction fraction |
Initialize the Reduction variable to zero. This variable will accumulate the total ITC reduction for each plant-area-year combination.
Step 3: Apply ITC Rules Using Select() for Filtering
|
areas = Select(Area,["AB","BC","SK"]) # Geographic filter plants = Select(Plant,["NGCCS","CoalCCS"]) # Plant/Technology filter years = collect(Yr(2024):Yr(2030)) # Time period for year in years, area in areas, plant in plants # # 50% credit on 50% of capital costs (e.g., CCUS equipment portion) # Reduction[plant,area,year] = Reduction[plant,area,year]+0.50*0.50 end |
Key considerations:
- Stacking: ITCs can add together if multiple policies apply to the same technology
- Partial cost basis: For CCUS, multiply by 0.5 if only equipment costs are eligible
- Phase-out: Use separate year ranges for different credit levels
Step 4: Apply Reductions to Both Cost Variables (GCCCN by plant type and xUnGCCC by unit)
|
# # Plant-level costs # for year in Years, area in Areas, plant in Plants GCCCN[plant,area,year] = GCCCN[plant,area,year]*(1-Reduction[plant,area,year]) end # # Unit-level costs # for unit in Units plant = Select(Plant,UnPlant[unit]) area = Select(Area,UnArea[unit]) for year in Years xUnGCCC[unit,year] = xUnGCCC[unit,year]*(1-Reduction[plant,area,year]) end end |
Step 5: Write Modified Data to Database
|
WriteDisk(db,"EGInput/GCCCN",GCCCN) WriteDisk(db,"EGInput/xUnGCCC",xUnGCCC) |
Cascading Impacts When the Model Runs
The reduced capital costs flow through the model in this sequence:
1. Capacity Expansion Decisions (ECapacityExpansion.jl)
- Calculation: Marginal cost of energy (MCE) $/MWh is computed from GCCCN via capital charge rate (CCR)
- Decision: Model compares MCE to expected electricity market price
- Outcome: More subsidized capacity gets built if MCE < market price
- Affected variables: UnGCCI (capacity initiated), GCDev (capacity developed)
2. Capital Charge Calculations (ECosts.jl)
- Calculation: Annual capital cost = GCCCN × Capital Charge Rate (CCR)
- CCR depends on: debt/equity ratio, interest rates, asset life, depreciation
- Impact: Lower GCCCN → lower fixed costs per MW
- Affected variables: UnAFC (average fixed costs $/KW), MFC (marginal fixed costs)
3. Cost of Energy Metrics (ECosts.jl, EGenerationSummary.jl)
- Calculation:
- ACE (Average Cost of Energy) = Fixed costs + variable costs
- MVC (Marginal Variable Costs) used for dispatch
- Impact: Lower capital costs make subsidized tech more competitive in market
- Affected variables: ACE, AFC, AVC, MCE
4. Generation Dispatch & Mix (EDispatch.jl, EDispatchLP.jl)
- Mechanism: Hourly/seasonal dispatch prioritizes units with lowest marginal cost
- Outcome: Subsidized low-variable-cost tech (renewables, NGCCS) generates more
- Affected variables: UnEG (generation by unit), EGA (generation by plant), PCF (capacity factor)
5. Electricity Market Prices (ElectricPrice.jl)
- Mechanism: Increased low-cost generation shifts the supply curve rightward
- Outcome: Spot market equilibrium price decreases
- Affected variables: HDPrA (spot price $/MWh), HDPrDP (decision price for new construction)
6. Competitive Impact on Other Technologies (Repeat cycle)
- Mechanism: Lower electricity prices reduce economic returns on conventional capacity
- Outcome: Coal/gas units may not be built; older units may retire early
- Affected variables: GCPAPrior (cumulative capacity by plant), generation mix shifts long-term
7. System-Wide Emission Changes (EPollution.jl)
- Outcome: Emissions likely decrease if subsidizing clean tech, but effect depends on:
- What else is displaced (coal vs. nuclear vs. gas)
- Backstop technologies available
- Overall demand growth
- Affected variables: EGPA (generation by technology), emission intensities
8. Economic Impacts (MEconomy.jl, Supply.jl)
- Outcome: Lower electricity prices reduce input costs for industrial sectors
- Affected variables: Sector production costs, wages, GDP growth, trade
Example: CCUS ITC (25% effective)
Policy: 50% credit on 50% of NGCCS plant cost (2024-2030)
Impact chain:
|
GCCCN[NGCCS,AB,2025] reduced 25% ↓ MCE drops $10-15/MWh (lower capital charge) ↓ Capacity expansion builds more NGCCS in AB 2024-2030 ↓ System generation mix shifts: more NGCCS, less coal ↓ Electricity price drops $2-5/MWh (market supply effect) ↓ Conventional generators' margins compress ↓ By 2035: Structural change — NGCCS is major system resource ↓ Emissions: Mixed impact (CCUS offsets fossil use, but less nuclear/wind built) ↓ Consumer cost: Lower bills, but tax-funded credit cost |
Engine Files You Need to Understand the Impacts
|
File |
What it Does |
Key Variables |
|
ECapacityExpansion.jl |
Decides if/how much new capacity to build based on economics |
GCCR, UnGCCI, GCDev |
|
ECosts.jl |
Computes all cost components (capital, O&M, fuel) for generation |
ACE, AFC, MVC, UnAFC |
|
EDispatch.jl |
Runs hourly economic dispatch (merit order) |
UnEG (generation), dispatch decisions |
|
ElectricPrice.jl |
Determines spot market price and decision prices |
HDPrA (hourly spot price), HDPrDP |
|
EGenerationSummary.jl |
Aggregates generation and costs by technology/plant |
EGA, PCF, ACE by plant |
|
EPollution.jl |
Tracks emissions by fuel/technology |
Pollution outputs |
|
MEconomy.jl |
Economy-wide impacts (production, trade, GDP) |
Economy-wide variables |
You have all these files in your workspace in Engine.
Best Practices
- Document thoroughly — Include comments with policy source (Budget year, legislation) and coverage details
- Phase-out clearly — Use separate year loops for different credit levels
- Handle stacking — Decide if ITCs add, multiply, or cap
- Test incrementally — Add one ITC at a time, run the model, verify outputs
- Verify unit matching — Ensure xUnGCCC reductions match GCCCN by plant/area
- Check geographic coverage — Use Select() to confirm you're targeting the right regions
When to Use This Approach
✅ Use for: Government investment credits, technology-specific capital grants, regional development incentives
❌ Use instead: Carbon pricing (FPEmissions), operating subsidies (Subsidy), feed-in tariffs (FIT), mandates (RnGoal)
Key Takeaway
By reducing GCCCN and xUnGCCC, you make capital-intensive technologies economically competitive, causing the model to build more of them. This cascades through dispatch (lower variable costs), prices (market effect), and long-term generation mix. The engine files that are referenced above let you trace and validate these impacts.