mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
§5 slice 2: (71) losses_monthly_w — -40×N const-tuple
SAP10.2 Table 5 "Losses" row: -40 × N watts year-round. Captures cold-water inflow + evaporation heat sinks. Verified against the Elmhurst U985-0001-000490 worksheet (71)m row. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
3ec56216b0
commit
021f43ba67
2 changed files with 41 additions and 1 deletions
|
|
@ -33,6 +33,7 @@ from typing import Final, Optional
|
|||
|
||||
_MONTHS_IN_YEAR: Final[int] = 12
|
||||
_METABOLIC_GAIN_W_PER_OCCUPANT_COL_A: Final[float] = 60.0
|
||||
_LOSSES_W_PER_OCCUPANT_COL_A: Final[float] = -40.0
|
||||
|
||||
|
||||
def metabolic_monthly_w(*, n_occupants: float) -> tuple[float, ...]:
|
||||
|
|
@ -45,6 +46,17 @@ def metabolic_monthly_w(*, n_occupants: float) -> tuple[float, ...]:
|
|||
for _ in range(_MONTHS_IN_YEAR))
|
||||
|
||||
|
||||
def losses_monthly_w(*, n_occupants: float) -> tuple[float, ...]:
|
||||
"""SAP 10.2 §5 line (71) — internal-gain losses in watts per month.
|
||||
|
||||
Table 5: losses = -40 × N watts (constant year-round). Comprises heat
|
||||
sunk to incoming cold water + evaporation from washing/showering. Sign
|
||||
is negative — these reduce the dwelling's net internal gains.
|
||||
"""
|
||||
return tuple(_LOSSES_W_PER_OCCUPANT_COL_A * n_occupants
|
||||
for _ in range(_MONTHS_IN_YEAR))
|
||||
|
||||
|
||||
_METABOLIC_W_PER_OCCUPANT: Final[float] = 60.0
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,10 @@ Table 5a + Appendix L (lighting/appliances/cooking) + Appendix J Table 1b
|
|||
|
||||
import pytest
|
||||
|
||||
from domain.sap.worksheet.internal_gains import metabolic_monthly_w
|
||||
from domain.sap.worksheet.internal_gains import (
|
||||
losses_monthly_w,
|
||||
metabolic_monthly_w,
|
||||
)
|
||||
|
||||
|
||||
def test_metabolic_gains_are_60w_per_occupant_constant_across_months() -> None:
|
||||
|
|
@ -34,3 +37,28 @@ def test_metabolic_gains_are_60w_per_occupant_constant_across_months() -> None:
|
|||
assert len(monthly) == 12
|
||||
for m, value in enumerate(monthly):
|
||||
assert value == pytest.approx(60.0 * n, abs=1e-9), f"month {m+1}"
|
||||
|
||||
|
||||
def test_losses_are_negative_40n_constant_across_months() -> None:
|
||||
"""SAP 10.2 Table 5 row "Losses": -40 × N watts year-round.
|
||||
|
||||
The losses comprise heat lost to incoming cold water + evaporation
|
||||
(washing, showering, etc.). The sign is negative — internal gains
|
||||
are reduced.
|
||||
|
||||
Verified against the Elmhurst U985-0001-000490 worksheet (71)m row,
|
||||
which shows -85.8725 W flat across all months. For 000490's N=2.1468:
|
||||
-40 × 2.1468 = -85.872 W
|
||||
matches the worksheet to within 4-d.p. display rounding.
|
||||
"""
|
||||
# Arrange
|
||||
n = 2.1468
|
||||
|
||||
# Act
|
||||
monthly = losses_monthly_w(n_occupants=n)
|
||||
|
||||
# Assert
|
||||
assert len(monthly) == 12
|
||||
for m, value in enumerate(monthly):
|
||||
assert value == pytest.approx(-40.0 * n, abs=1e-9), f"month {m+1}"
|
||||
assert value < 0, "Losses must be negative (heat-loss convention)"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue