Heat pumps
In plain terms
A heat pump turns electricity into heat very efficiently. If it is paired with a thermal storage (a hot-water buffer), when it consumes electricity becomes flexible: it can run when the grid has room and store the heat for later. Without a buffer it simply follows the heat demand.
Data
Heat-pump data is held in HeatPump:
cop_df— the time-varying coefficient of performance (COP) per heat pump.heat_demand_df— the heat demand to be served, per heat pump / building, per time step.thermal_storage_units_df— thermal-storage capacity, efficiency and initial state of charge, where present.
COP and heat-demand series can be set from the OEP or from your own data via
set_cop() and
set_heat_demand(). Heat pumps appear in
topology.loads_df with type == "heat_pump".
Operation
apply_heat_pump_operating_strategy()
(operating_strategy()) currently
implements the "uncontrolled" strategy: the electrical load directly follows the
heat demand,
This sets the heat pump’s series in timeseries.loads_active_power.
Flexible operation (for optimisation)
When a heat pump has a thermal storage and is passed to
pm_optimize() via flexible_hps, the OPF may decouple
electrical consumption from heat demand within the storage limits. The thermal
state of energy evolves as it is charged (heat produced by the pump, scaled by the
store’s efficiency \(\eta\)) and discharged (heat demand served),
so the pump can pre-heat the buffer when it is grid-friendly and coast later. The store also has standing losses (the OPF applies a per-hour self-discharge factor), and the COP couples the electrical power the grid sees to the thermal power the building needs.
Fig. 9 A heat pump with thermal storage. The pump turns grid electricity \(P_{el}\) into heat \(P_{heat}=\mathrm{COP}\cdot P_{el}\); the store buffers the difference to the heat demand \(\dot Q_{heat}\) (right axis = energy in the store). So the pump can pre-heat when the grid has room and coast later.