Objective
The traditional way (and simplest) to heat our homes in Alberta is with a gas fired furnace. However, this is not the only way. An Air Source Heat Pump (ASHP) is essentially a refrigeration unit that tries to cool off the outside air, and push the heat into the house. Heat pumps are fairly common in areas that do not have an extensive natural gas distribution, and are a bit warmer than Alberta.
Heat pumps have traditionally been limited to areas with mild winters (over 0 C). This is to prevent frost buildup on the unit. However, there have been advances in defrosting techniques and Cold Climate Air Source Heat Pump (CCASHP) have been used sucessfully down to -25 C. You can find CCASHP units in Manitoba, and it gets pretty cold there.
The objective of this study is to determine if a cold climate air source heat pump (CCASHP) is effective in Calgary, in terms of a) effective CO2 emissions, and b) utility cost.
Making a long story short
Even though Alberta produces electricity by burning natural gas in a CCGT, and Calgary winters are a bit cold, the cold climate air source heat pump should yield a 30% savings on CO2 emissions over an efficient natural gas furnace. I suspect the gas furnace is still needed on those infrequent hours where the air temperature is below -25 C.
But the gas furnace still wins (in Calgary) in terms of utility cost (40% savings). As well, installing a gas furnace is less expensive than installing a heat pump.
The analysis follows. How hard can this be? I get the feeling we might end up shaving a yak [3].
Get COP data for the heat pump
I found some data for the COP (coefficient of performance) for air source heat pumps.
Data from Shen [1]:

This has two different data sets for the overall performance (including thaw cycles). The top one (green) shows high COP, but there is only data down to 17 F (-8 C). I don’t know if this heat pump can operate at really low temperatures. The bottom two sets (black and fuscia) have a lower COP but the data extends down to -10 F (-23 C), which is applicable for most of the winter conditions in Calgary.
Data from an experimental heat pump [2] is available for a wide range of operating conditions (down to -13 F, or -25 C).

Plotting all data sets….

We will use the research data (red line) for estimating the COP as a function of ambient temperature.
This is nice, but the ambient temperature changes during the heating season.
Heat required for house in winter months
The gas bill for my house is

I also found the average outside temperature for these months (from Environment Canada).
Row | Month | GJ | ambientT |
---|---|---|---|
0 | September | 3 | 13.2 |
1 | October | 13 | 3.1 |
2 | November | 16 | -0.2 |
3 | December | 19 | -2.4 |
4 | January | 21 | -4.2 |
5 | February | 27 | -11.2 |

This is fairly linear, as we expect.
Now create a simple linear model to relate heat demand as a function of ambient temperature. The data shows a minimum fuel demand of 2 GJ/month in the summer (no furnace heat needed). Also, I will assume that the house heat is 75% of the natural gas fuel value: this is the efficiency of my furnace.

And we have a function to calculate the heat rate needed by the house (in kJ/hr) as a function of ambient temperature (in deg C).
Great, but this is for monthly averages, and we know the ambient temperature changes from hour to hour.
Hourly data for ambient temperature
I compiled 12 years of hourly data for Calgary International Airport (Station ID 3031094). Then I created 30 bins for the ambient temperature and determined the number of hours in each bin.

The temperature distribution is bimodal, with one peak near 1 C, and the other peak near 12 C. This may illustrate the frequency of chinooks in Calgary.
The temperature at the midpoint of each bin is needed for modeling work.
Now, normalize the data to determine the number of hours where the ambient temperature falls in each bin.
Now we have the number of hours that we can expect to see the temperature as it falls in a given bin. We expect to see a temperature between -30.1 to -32.5 C about 6.9 hours per year. We see temperatures below -25 C about 65 hours per year.
It is time to compile the data for our task. We will start with the ambient temperature bins and the number of hours for each bin.
Index | t_C | designHours |
---|---|---|
0 | -31.2860 | 6.865597 |
1 | -28.9550 | 22.438782 |
2 | -26.6585 | 36.756064 |
3 | -24.3615 | 50.905893 |
4 | -22.0650 | 74.768031 |
5 | -19.7685 | 108.175023 |
6 | -17.4715 | 124.585476 |
7 | -15.1750 | 164.104525 |
8 | -12.8785 | 214.591784 |
9 | -10.5815 | 250.259400 |
10 | -8.2850 | 293.629882 |
11 | -5.9885 | 364.881387 |
12 | -3.6915 | 498.258177 |
13 | -1.3950 | 613.382524 |
14 | 0.9015 | 676.010170 |
15 | 3.1985 | 654.994743 |
16 | 5.4950 | 634.732858 |
17 | 7.7915 | 642.770631 |
18 | 10.0885 | 666.130407 |
19 | 12.3850 | 680.196509 |
20 | 14.6815 | 564.151167 |
21 | 16.9785 | 459.325216 |
22 | 19.2750 | 356.676161 |
23 | 21.5715 | 270.688739 |
24 | 23.8685 | 168.123411 |
25 | 26.1650 | 103.067689 |
26 | 28.4615 | 43.537935 |
27 | 30.7585 | 13.228834 |
28 | 33.0550 | 2.428077 |
29 | 35.3515 | 0.334907 |
Excellent, but we need the heat rate for each of the temperature bins.
Heat rate for each temperature bin
Now we can determine the heat rate needed for each of the temperature bins. This comes from the graph of the required heating rate vs ambient temperature.
Index | t_C | designHours | designHeatRate |
---|---|---|---|
0 | -31.2860 | 6.865597 | 47321.013336 |
1 | -28.9550 | 22.438782 | 44898.722686 |
2 | -26.6585 | 36.756064 | 42512.283185 |
3 | -24.3615 | 50.905893 | 40125.324102 |
4 | -22.0650 | 74.768031 | 37738.884601 |
Nice, but we need the total amount of heat (kJ) for each of these bins, not the heat rate.
Heat for each temperature bin
We already have the number of hours for each temperature bin. We can multiply the heat rate by the number of hours to get the amount of heat needed for each temperature bin.
Index | t_C | designHours | designHeatRate | designHeat |
---|---|---|---|---|
0 | -31.2860 | 6.865597 | 47321.013336 | 3.248870e+05 |
1 | -28.9550 | 22.438782 | 44898.722686 | 1.007473e+06 |
2 | -26.6585 | 36.756064 | 42512.283185 | 1.562584e+06 |
3 | -24.3615 | 50.905893 | 40125.324102 | 2.042615e+06 |
4 | -22.0650 | 74.768031 | 37738.884601 | 2.821662e+06 |
5 | -19.7685 | 108.175023 | 35352.445099 | 3.824252e+06 |
Now we need to find the amount of electrical energy needed to move this much heat (for each of the temperature bins).
Determining the COP for each of the temperature bins
We will use the graph of COP vs temperature to look up the COP for each of the temperature bins. Divide the amount of heat needed for each bin by the corresponding COP and we get the amount of electrical energy needed for each temperature bin.
Index | t_C | designHours | designHeatRate | designHeat | heatpumpCOP | heatpumpElec |
---|---|---|---|---|---|---|
0 | -31.2860 | 6.865597 | 47321.013336 | 3.248870e+05 | 1.843021 | 1.762796e+05 |
1 | -28.9550 | 22.438782 | 44898.722686 | 1.007473e+06 | 1.875765 | 5.370996e+05 |
2 | -26.6585 | 36.756064 | 42512.283185 | 1.562584e+06 | 1.908024 | 8.189541e+05 |
3 | -24.3615 | 50.905893 | 40125.324102 | 2.042615e+06 | 1.940290 | 1.052737e+06 |
4 | -22.0650 | 74.768031 | 37738.884601 | 2.821662e+06 | 1.972550 | 1.430464e+06 |
5 | -19.7685 | 108.175023 | 35352.445099 | 3.824252e+06 | 2.004809 | 1.907539e+06 |
6 | -17.4715 | 124.585476 | 32965.486016 | 4.107021e+06 | 2.106234 | 1.949936e+06 |
We are getting closer, but we need the cost of the electrical power and the amount of natural gas needed to generate the power with a combined cycle gas turbine (CCGT).
Cost of energy
Since we are comparing the same fuel (methane) for heating our home with a furnace or driving a CCGT, we can compare only the amount of energy (kJ or GJ) associated with the fuel, either burned in a furnace use used to drive a CCGT.
But since we are interested in the amount of CO2 associated with heating our home, we will determine the CO2 intensity for natural gas (methane).
# get the CO2 intensity for burning methane
fuelHHV = 55385.0 # kJ/kg, HHV
ch4IntensityCO2 = 44.0/16.0
fuelCO2Intensity = ch4IntensityCO2 / fuelHHV
fuelCO2Intensity # kg CO2 per kJ
-> 4.965243296921549e-05
# we need the fuel needed to produce 1 kJ of electricity from a CCGT.
# Assume this is what provides our electricity
CCGTHeatRate = 7649.0 # BTU per kW.hr from NatGas
copCCGT = CCGTHeatRate * 1.0550559 / 3600.0 # BTU / (kJ/s . hr) * 1.055e3 kJ/MMBTU * 1 hr / 3600 sec
copFurnace = 0.9 # 90% efficient furnace
copCCGT # this is kJ of natural gas fuel per kJ of electricity
-> 2.2417007164166667
And we also need natural gas prices. These are taken straight from my fuel bill, and consider all of the charges that are pro-rated by GJ of gas usage.
fuelPrice = ((193.65-8.52)/(11.86+9.21)) # $ per GJ, and this is equivalent to about 0.03 $ per kW.hr
# wholesale gas price is about 3.5$ per GJ for this point in time
# and we will have electricity price in $ per GJ
# $ per (kJ/s . hr) * 1 hr / 3600 sec * 1e6 kJ/1 GJ
elecPrice = (1e6/3600.0) * (217.46 - 20.97 - 7.48 - 6.92)/(941.7+346.3) # total utility bill less local access fee, admin charge rate riders
fuelPrice, elecPrice # Dollars per GJ, this is about right.
-> (8.78642619838633, 39.2706176673568)
Electricity is about 4.5 times more expensive than natural gas on an energy basis. This difference in cost reflects the efficiency of producing electricity from natural gas (about 40% for a CCGT) and the payment of the capital needed to produce the power.
Now we need to apply these cost values. We will drop the temperature bins that do not require heat.
Index | t_C | designHours | designHeatRate | designHeat | heatpumpCOP | heatpumpElec | heatpumpGasFuel | furnaceFuel | heatpumpElecCost | furnaceFuelCost |
---|---|---|---|---|---|---|---|---|---|---|
0 | -31.2860 | 6.865597 | 47321.013336 | 3.248870e+05 | 1.843021 | 1.762796e+05 | 3.951661e+05 | 3.609856e+05 | 6.922609 | 3.171773 |
1 | -28.9550 | 22.438782 | 44898.722686 | 1.007473e+06 | 1.875765 | 5.370996e+05 | 1.204017e+06 | 1.119414e+06 | 21.092234 | 9.835649 |
2 | -26.6585 | 36.756064 | 42512.283185 | 1.562584e+06 | 1.908024 | 8.189541e+05 | 1.835850e+06 | 1.736205e+06 | 32.160834 | 15.255034 |
3 | -24.3615 | 50.905893 | 40125.324102 | 2.042615e+06 | 1.940290 | 1.052737e+06 | 2.359921e+06 | 2.269573e+06 | 41.341633 | 19.941433 |
4 | -22.0650 | 74.768031 | 37738.884601 | 2.821662e+06 | 1.972550 | 1.430464e+06 | 3.206673e+06 | 3.135180e+06 | 56.175224 | 27.547029 |
5 | -19.7685 | 108.175023 | 35352.445099 | 3.824252e+06 | 2.004809 | 1.907539e+06 | 4.276132e+06 | 4.249168e+06 | 74.910249 | 37.335005 |
6 | -17.4715 | 124.585476 | 32965.486016 | 4.107021e+06 | 2.106234 | 1.949936e+06 | 4.371172e+06 | 4.563356e+06 | 76.575177 | 40.095594 |
I think we are almost done with this yak.
Checking results
First we will look at the amount of energy needed to keep our house warm, and which temperature consumes the majority of the heat.

In Calgary, most of our heat is needed between 5 and -15 C, seen with the blue line for the furnace fuel requirement.
The heat pump is quite efficient at -5 C. At this temperature, the CCGT needs about half of the natural gas fuel to create the electricity that drives the heat pump.
The fuel benefit for the heat pump drops to nothing as the temperature drops to -15 C.
What about cost?

The air source heat pump is more expensive to run than a natural gas furnace. Where the gas furnace has a clear maximum cost for temperatures between -5 to 2 C, the heat pump has a broader region of high operating costs, from -15 to 2 C. While the number of hours drops off at temperatures lower than -5 C, the heat pump becomes less effective.
It is useful to look at temperature range that represents the majority of our heating requirements.

The amount of natural gas energy needed for the gas furnace or the electrical power to drive the heat pump is identical below -15 C. Above -10 C the efficiency of the heat pump over the gas furnace is clear.
We can calculate the total CO2 emissions for the heating season for both the heat pump and furnace
- Heat pump: 3790 kg/year
- Furnace: 5419 kg/hr
Over the entire heating season, the heat pump is associated with a 30% reducion in CO2 emissions (from the CCGT power plant) compared to the CO2 emissions from the gas furnace .
Cost tells a different story.

The heat pump is always more expensive to operate than a natural gas furnace. Over the heating season, the heat pump is 40% more expensive to operate (in fuel cost) than the natural gas furnace.
After thoughts
I did not expect an air source heat pump to be a viable option for Calgary, in terms of overall fuel consumption (CO2 emissions) or cost. I was surprised by the result.
Even though Alberta produces electricity by burning natural gas in a CCGT, and Calgary winters are a bit cold, the cold climate air source heat pump should yield a 30% savings on CO2 emissions over an efficient natural gas furnace. I suspect the gas furnace is still needed on those infrequent hours where the air temperature is below -25 C.
But the gas furnace still wins (in Calgary) in terms of utility cost. As well, installing a gas furnace is less expensive than installing a heat pump.
The results depend on the ambient temperature. Edmonton has colder winters than Calgary. I expect the furnace to be the winner in terms of both CO2 emissions and fuel cost in Edmonton.
However, people living near warmer cities such as Lethbridge and Medicine Hat may find that a cold climate heat pump is cost effective, and offers a significant reduction in CO2 emissions.
Happy yak shaving.
References
- Shen, High Efficiency Cold Climate Heat Pump, 2017 Building Technologies Office Peer Review (2017)
- Tom Marsik and others, Air Source Heat Pumps in Cold Climates, NREL, CCHRC (slide 9) (2018)
- Yak shaving, https://americanexpress.io/yak-shaving/
Jupyter Code
Coming…
Hi Kevin, I hope you are doing well. Very interesting analysis. I recently bought a house in Oliver, BC (much warmer than Calgary) and it has a dual heating system: heat pump and a natural gas furnace. The system is nicely built and the heat pump condenser sits on the hot side of the furnace. This is going to be our first winter in BC and I am still trying to fully understand how the thermostat “decides” which system to “fire”. Anyway, I am glad to conclude from your analysis that a heat pump is a good choice for a place like Okanagan. Just to be picky, if by any chance you are going to review this blog post, could you please add units to the tables? Also, is the last chart (Cumulative Cost but it shows GJ fuel on Y axis) correct? Cheers, Denis