{{ group_info[ui.group].desc }}
| Time | Set point | Price | |
|---|---|---|---|
|
°C
|
p
|
| Time | Set point | Duration | Mod. limit |
|---|---|---|---|
|
°C
|
s
|
%
|
Set duration to 0 to disable a window. Modulation limits below the heat pump minimum modulation ({{ heatpump.minimum_modulation }}%) are raised to it.
Draw profile: showers 07:00 ({{ (dhw.daily_volume*0.4).toFixed(0) }} L), bath 19:00 ({{ (dhw.daily_volume*0.3).toFixed(0) }} L), 3× washing up ({{ (dhw.daily_volume*0.1).toFixed(0) }} L each), mixed volumes.
The max electrical power limit caps the whole unit's electrical input (compressor + pump {{ heatpump.pumps }} W + standby {{ heatpump.standby }} W), the electrical-side equivalent of a maximum modulation limit. The heat output the cap allows is solved from the COP at the operating point, so the heat it permits rises and falls with the COP: mild weather and low flow temperatures buy more heat per watt than cold weather does. Like the flow temperature limiter it modulates the unit down rather than switching it off, so it can hold the compressor below the minimum modulation output ({{ heatpump.minimum_modulation * heatpump.capacity / 100 | toFixed(0) }} W) that the cycling control would otherwise enforce.
The emitter spec is sized from the design flow temperature with the radiator equation: emitters big enough to emit the design heat loss ({{ building.heat_loss }} W) into a room at the design room temperature, when supplied at the design flow temperature. The design system DT is the drop across the emitters when the flow rate carries the whole design heat loss.
Curve automatically selected based on building heat loss, internal gains and heat emitter spec.
Simple mode pipework is exposed to
the live outside air temperature.
Heat loss is quoted on BS 5422 Table 20A's own basis — a horizontal pipe at
60 °C in still air at 15 °C (ΔT 45 K), high-emissivity outer surface
— so it can be read against the table's limit of
{{ insul_limit }} W/m for {{ primary.pipe }} mm pipe.
✔ meets it, ≈ within 5% (inside the method's uncertainty),
✘ over. The simulation itself uses the assembly's own U′ against live
temperatures, not this figure.
| Stage | Length m | Construction | Ambient | °C / depth mm | |
|---|---|---|---|---|---|
| tracked |
Heat loss is quoted on BS 5422 Table 20A's basis (60 °C pipe,
15 °C still air, ΔT 45 K) against the table's limit for that pipe size:
✔ meets it, ≈ within 5%, ✘ over.
Stage order = heat pump → building; the heat pump itself sits in
the first stage's environment. Outside air and Indoor stages track
the live simulated temperatures. Buried stages follow the seasonal ground
temperature at their depth — at 200–400 mm the soil still swings within
~12% of the surface's annual swing, roughly a week behind it, so a shallow buried
run is nearly as cold as the air in January.
| Buried as | Depth mm | Swing kept | Lag | U′ with soil |
|---|---|---|---|---|
| {{ g.label }} | {{ g.depth }} | {{ g.kept }}% | {{ g.lag }} days | {{ g.u_pipe | toFixed(3) }} → {{ g.u | toFixed(3) }} ({{ g.u_drop }}% lower) |
Damping depth {{ ground_damping_depth | toFixed(2) }} m. Soil conductivity 0.4 dry peat, 0.8 dry sand, 1.2 damp loam, 2.0 wet clay — it sets both how far the seasonal swing reaches down and the soil resistance in series with the lagging, which is why it is one input rather than two. The offset is the surface energy balance: paving has no evaporative cooling and absorbs more shortwave than grass, running ~2 K above the air annual mean.
The unit's own heat exchanger and internal pipework, sitting in the first stage's environment — {{ (primary.unit_UA * 30) | toFixed(0) }} W at ΔT 30 K, cooling with a time constant of {{ unit_time_constant | toFixed(1) }} h once the pump stops. A product property, independent of the pipework chosen above.
Layer 1: external, Layer 3: internal.
| Layer | Proportion | W/K | kWh/K |
|---|---|---|---|
| {{ index + 1 }} |
%
|
W/K
|
kWh/K
|
Solar gains, PV output and battery storage use the annual dataset, switch to full year mode to explore them.
Annual mode replays the Llanberis 2024 dataset (temperature, humidity, solar and Agile prices). Use the design temperatures below when choosing a design flow temperature for heat emitters.
{{ validator.error }}
Run the model in full year mode to fill in the model column.
This system has {{ validator_sys_days.toFixed(1) }} days of data; the ×365 column scales its electricity and heat linearly to a full year.
| Stat | System | ×365 | Model | Δ model − system | Unit |
|---|---|---|---|---|---|
| {{ r.head }} | |||||
| {{ r.label }} | {{ r.sys }} | {{ r.scaled }} | {{ r.model }} | {{ r.delta }} | {{ r.unit }} |
Stats are calculated as on heatpumpmonitor.org: space and hot water only count while the unit draws at least 200 W; weighted averages are heat-energy weighted; % of Carnot uses flow +2 / outside −6 offsets over running data. The model meters heat at the heat pump connections (point 1).
| Metering point | Heat | SPF/COP | vs source |
|---|---|---|---|
| At source (condenser, pre unit volume) | {{ results.heat_kwh | toFixed(3) }} kWh | {{ (results.heat_kwh / results.elec_kwh) | toFixed(2) }} | 100 % |
| Point 1 · heat pump connections | {{ results.heat_kwh_m1 | toFixed(3) }} kWh | {{ (results.heat_kwh_m1 / results.elec_kwh) | toFixed(2) }} | {{ (100 * results.heat_kwh_m1 / results.heat_kwh) | toFixed(1) }} % |
| Point 2 · building entry, after primaries (main) | {{ results.heat_kwh_m2 | toFixed(3) }} kWh | {{ (results.heat_kwh_m2 / results.elec_kwh) | toFixed(2) }} | {{ (100 * results.heat_kwh_m2 / results.heat_kwh) | toFixed(1) }} % |
Primary pipework + heat pump volume standing loss: {{ results.primary_loss_kwh | toFixed(3) }} kWh. The source → point 1 gap is the unit's own standing loss; the point 1 → point 2 gap is heat lost from the primary pipework (while flowing, plus stranded loop charge that cools between cycles).
| Measurement | Flow temperature | vs design |
|---|---|---|
| Design flow temperature | {{ heatpump.design_flowT | degC }} | — |
| Maximum during space heating | {{ coldest_day.space.max | degC }} | {{ (coldest_day.space.max - heatpump.design_flowT) | deltaK }} |
| Weighted average · space heating only | {{ coldest_day.space.weighted | degC }} | {{ (coldest_day.space.weighted - heatpump.design_flowT) | deltaK }} |
| Average · space heating only | {{ coldest_day.space.mean | degC }} | {{ (coldest_day.space.mean - heatpump.design_flowT) | deltaK }} |
| Weighted average · space and water heating | {{ coldest_day.combined.weighted | degC }} | {{ (coldest_day.combined.weighted - heatpump.design_flowT) | deltaK }} |
| Average · space and water heating | {{ coldest_day.combined.mean | degC }} | {{ (coldest_day.combined.mean - heatpump.design_flowT) | deltaK }} |
Coldest day: {{ coldest_day.label }}, mean outside {{ coldest_day.mean_outsideT | degC }} (minimum {{ coldest_day.min_outsideT | degC }}). Running hours that day: {{ coldest_day.space.hours | toFixed(1) }} h space heating, {{ coldest_day.combined.hours | toFixed(1) }} h space and water. Averages only count steps where the unit is running (≥ 200 W), so standing losses between cycles do not pull them down. The weighted averages weight each step by the heat delivered — the same basis heatpumpmonitor.org publishes flow temperatures on — so they sit above the plain time average whenever the hardest working periods run hottest.
| Name | Mean temp | Max temp | Electric | Heat @ M2 | COP @ M2 | Cost | Solar offset | Solar saving | Agile (2024) |
|---|---|---|---|---|---|---|---|---|---|
| Baseline | {{ baseline.mean_room_temp | toFixed(2) }} °C | {{ baseline.max_room_temp | toFixed(2) }} °C | {{ baseline.elec_kwh | toFixed(3) }} kWh | {{ baseline.heat_kwh_m2 | toFixed(3) }} kWh | {{ (baseline.heat_kwh_m2 / baseline.elec_kwh) | toFixed(2) }} | £{{ baseline.total_cost | toFixed(2) }} | {{ baseline.solar_elec_kwh | toFixed(3) }} kWh | £{{ baseline.solar_cost | toFixed(2) }} | £{{ baseline.agile_cost | toFixed(2) }} |
| Current | {{ results.mean_room_temp | toFixed(2) }} °C | {{ results.max_room_temp | toFixed(2) }} °C | {{ results.elec_kwh | toFixed(3) }} kWh | {{ results.heat_kwh_m2 | toFixed(3) }} kWh | {{ (results.heat_kwh_m2 / results.elec_kwh) | toFixed(2) }} | £{{ results.total_cost | toFixed(2) }} | {{ results.solar_elec_kwh | toFixed(3) }} kWh | £{{ results.solar_cost | toFixed(2) }} | £{{ results.agile_cost | toFixed(2) }} |
| Saving | {{ (results.mean_room_temp - baseline.mean_room_temp) | toFixed(2) }} °C | {{ (results.max_room_temp - baseline.max_room_temp) | toFixed(2) }} °C | {{ (results.elec_kwh - baseline.elec_kwh) * -1 | toFixed(3) }} kWh ({{ ((results.elec_kwh - baseline.elec_kwh) / baseline.elec_kwh * -100) | toFixed(1) }}%) | {{ (results.heat_kwh_m2 - baseline.heat_kwh_m2) * -1 | toFixed(3) }} kWh ({{ ((results.heat_kwh_m2 - baseline.heat_kwh_m2) / baseline.heat_kwh_m2 * -100) | toFixed(1) }}%) | {{ ((results.heat_kwh_m2 / results.elec_kwh) - (baseline.heat_kwh_m2 / baseline.elec_kwh)) | toFixed(2) }} | £{{ (results.total_cost - baseline.total_cost) * -1 | toFixed(2) }} | {{ (results.solar_elec_kwh - baseline.solar_elec_kwh) | toFixed(3) }} kWh | £{{ (results.solar_cost - baseline.solar_cost) | toFixed(2) }} | £{{ (results.agile_cost - baseline.agile_cost) * -1 | toFixed(2) }} |
Use Save as baseline (above) to keep the current results for comparison as you change parameters.
| Flow temperature | Outside temperature | FlowT − outsideT | % Carnot | |
|---|---|---|---|---|
| Full simulation | {{ stats.flowT_weighted | toFixed(2) }} °C | {{ stats.outsideT_weighted | toFixed(2) }} °C | {{ stats.flowT_minus_outsideT_weighted | toFixed(2) }} °C | {{ stats.wa_prc_carnot * 100 | toFixed(1) }} % |
| Selected window only | {{ stats.window_flowT_weighted | toFixed(2) }} °C | {{ stats.window_outsideT_weighted | toFixed(2) }} °C | {{ stats.window_flowT_minus_outsideT_weighted | toFixed(2) }} °C |