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

  1. 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
  1. 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

EGAPCFACE 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

  1. Document thoroughly — Include comments with policy source (Budget year, legislation) and coverage details
  2. Phase-out clearly — Use separate year loops for different credit levels
  3. Handle stacking — Decide if ITCs add, multiply, or cap
  4. Test incrementally — Add one ITC at a time, run the model, verify outputs
  5. Verify unit matching — Ensure xUnGCCC reductions match GCCCN by plant/area
  6. 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.