Skip to content

Multiple sources and allocation

A single energy center typically holds more than one heat source — a base-load unit plus a peaking unit, or a primary source plus a back-up. TESSA models each source separately so the dispatcher can choose between them at each hour, the cost engine can sum CAPEX and OPEX correctly, and the report can attribute energy and emissions to each fuel.

This page explains how sources are ordered, how the merit-order dispatch algorithm works, and how load is shared when a network has multiple energy centers. For the data fields on each source, see Networks and heat sources data model. For how heat distribution feeds into the rest of the simulation, see Heat loss and simulation.

Sources within one energy center

flowchart TD EC["⚙️ Energy center"] EC --> HS1["🔥 Source 1 — order 1<br/>e.g. heat pump (base load)"] EC --> HS2["🔥 Source 2 — order 2<br/>e.g. gas boiler (peaking)"] EC --> HS3["🔥 Source 3 — order 3<br/>e.g. electric boiler (back-up)"] classDef ec fill:#ffccbc,stroke:#bf360c,stroke-width:2px,color:#bf360c classDef src fill:#fff3e0,stroke:#ED6000,stroke-width:2px,color:#bf360c class EC ec class HS1,HS2,HS3 src

Each source has an order — a positive integer that determines where it sits in the dispatch sequence. Order 1 is the baseload source (runs first, runs most); order 2 picks up whatever order 1 cannot cover; and so on. A source with order ≤ 0 is treated as disabled and is never dispatched.

Sources are created with sequential order numbers in the order they are added to the energy center. You can change the order at any time using the Allocation strategy setter tool.

Merit-order dispatch

TESSA currently uses a single dispatch strategy: MERIT_ORDER.

At each of the 8760 hourly timesteps, the dispatcher works through the sources at an energy center in ascending order number:

flowchart TD A["Hour t: net demand at EC = P_demand"] A --> B["Load source with order 1<br/>up to its rated_power_useful"] B --> C{Demand met?} C -->|No| D["Load source with order 2<br/>up to its rated_power_useful"] D --> E{Demand met?} E -->|No| F["Load source with order 3<br/>…"] F --> G{Demand met?} G -->|No| R["⚠️ Residual Load Source<br/>tracks unmet demand"] C -->|Yes| Z["✅ Hour t complete"] E -->|Yes| Z G -->|Yes| Z R --> Z classDef dispatch fill:#fff3e0,stroke:#ED6000,stroke-width:1.5px,color:#bf360c classDef warn fill:#ffccbc,stroke:#bf360c,stroke-width:2px,color:#bf360c classDef done fill:#a5d6a7,stroke:#1b5e20,stroke-width:2px,color:#1b5e20 class A,B,D,F dispatch class R warn class Z done

Each source fills up to its rated_power_useful (its installed capacity delivered to the network). Any remaining demand passes to the next source in the order. This continues until either the demand is met or all sources are exhausted.

The residual load source

If the combined installed capacity of all sources at an energy center is insufficient to meet peak demand, TESSA automatically creates a virtual "Residual Load Source" attached to the first energy center. It has no fuel cost and no emissions in the model — it simply tracks the unmet shortfall hour by hour.

The presence of a residual load source in your results is a signal that the installed portfolio is undersized. You should add capacity (increase a source's rated power, or add a new source) and remove the virtual residual source before finalising the study.

Ordering principles

The merit-order concept maps directly to economic and operational logic:

Order Typical source type Why
1 Heat pump, geothermal, waste heat Low marginal cost; run as many hours as possible
2 Biomass boiler, solar thermal Medium marginal cost; fills gaps left by order 1
3 Gas boiler, oil boiler High marginal cost; peak shaving only
4+ Electric boiler, emergency back-up Very high marginal cost or limited availability

TESSA does not enforce this convention — you can assign any order you choose. The dispatcher simply uses the integer values you set.

Setting and changing source order

When you add sources to an energy center they receive order numbers 1, 2, 3, … in the sequence they are added. To change the order:

  1. Open the energy center in the network editor.
  2. Select a source and use the Allocation strategy setter tool.
  3. Enter the new order number. The tool validates that no two active sources share the same order.

Only MERIT_ORDER is currently supported. Equal-share and fixed-fraction dispatch are on the product roadmap.

Multiple energy centers in one network

A network can have more than one energy center. Each energy center dispatches its own source portfolio independently; the load that each EC sees is determined by the hydraulic solution.

flowchart LR EC1["⚙️ Energy center 1<br/>HP + gas boiler"] EC2["⚙️ Energy center 2<br/>gas boiler (peaking)"] EC1 -->|backbone| J1["●"] EC2 -->|backbone| J2["●"] J1 ---|trunk| J2 J1 -->|connector| BS1["🔌 Substation A"] J1 -->|connector| BS2["🔌 Substation B"] J2 -->|connector| BS3["🔌 Substation C"] J2 -->|connector| BS4["🔌 Substation D"] classDef ec fill:#ffccbc,stroke:#bf360c,stroke-width:2px,color:#bf360c classDef bs fill:#ffe0b2,stroke:#e65100,stroke-width:1.5px,color:#bf360c classDef cp fill:#ffffff,stroke:#bf360c,stroke-width:1.5px,color:#bf360c class EC1,EC2 ec class BS1,BS2,BS3,BS4 bs class J1,J2 cp

There is no explicit "zone" assignment in TESSA. The hydraulic solver determines which energy center supplies which substations based on pipe resistances — substations near EC 1 are naturally served by EC 1, and substations near EC 2 by EC 2, but the boundary shifts with load and temperature. In a typical design:

  • EC 1 (lower marginal cost) runs at higher utilisation and serves the core network.
  • EC 2 (higher marginal cost) activates at peak hours and may serve a subzone that is hydraulically closer to it.

If you want to force a particular supply zone, you do so through the network topology — by not running a backbone between the two energy centers, each EC serves only the substations directly connected to it.

Source results after dispatch

After simulation, each source carries a full set of hourly and annual results:

Field Description
rated_power_useful Capacity delivering heat to the network (kW)
rated_power_final Corresponding final energy consumption (kW)
annual_energy_useful Annual heat supplied to the network (kWh)
annual_energy_final Annual fuel or electricity consumed (kWh)
full_load_hours Equivalent full-load hours

The hourly supply curve (one row per hour of the year) records power, energy, fuel consumption, and CO₂ emissions at each timestep. These roll up into the scenario report's source breakdown and the financial model's fuel cost calculation.

Where to go next