Skill netto energibehov fra varmeanleggets systemtap
test / test (push) Successful in 1m19s

Netto energibehov skal ikke avhenge av varmeanlegget, men enok lot systemtapet fra tappevann
og varmedistribusjon telle som varmetilskudd i rommene. Det er riktig etter ISO 52000-1 og
NS 3031:2025 for et bygg som skal beskrive faktisk energibruk, men ikke for energirammene,
som er netto tall. «drift.systemtap_som_tilskudd» styrer det nå, og referansebyggene settes
opp uten. Snittavviket mot de publiserte verdiene går fra 27,9 til 26,4 prosent.

Samtidig er det dokumentert hva avviket kommer av. Beregningen er kontrollert mot en
uavhengig bin-beregning rett av klimafilen: under de samme forutsetningene gir enok 49,5
mot bin-beregningens 51,5 kWh/(m²·år). Varmetapet er altså riktig, og avviket ligger i
varmetilskuddene, som er målt hver for seg i README.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015GeH3y8fwTaTudaD88P57o
This commit is contained in:
bl
2026-09-22 16:32:35 +02:00
co-authored by Claude Opus 5
parent 8e9544dd24
commit 1cdbd494e2
13 changed files with 283 additions and 29 deletions
+14 -3
View File
@@ -173,18 +173,29 @@ pub fn kjor_med_klima(
.map(|s| s.andel_tappevannstap)
.sum::<f64>()
.min(1.0);
// Uten gjenvinnbart systemtap blir netto energibehov uavhengig av varmeanlegget, slik
// energirammene i TEK er regnet. Med, slik ISO 52000-1 og NS 3031:2025 beskriver det,
// varmer tapet rommene det står i.
let med = if lost.systemtap_som_tilskudd {
1.0
} else {
0.0
};
let tilskudd = Systemtilskudd {
tappevann: tappevannstap * systemer_oppsett.tappevann_tap_i_sone * (1.0 - sone_tappevann),
tappevann: med
* tappevannstap
* systemer_oppsett.tappevann_tap_i_sone
* (1.0 - sone_tappevann),
sone_fast: lost
.soner
.iter()
.map(|s| s.fast_effekt + tappevannstap * s.andel_tappevannstap)
.map(|s| s.fast_effekt + med * tappevannstap * s.andel_tappevannstap)
.collect(),
sone_andel_romvarme: lost
.soner
.iter()
.map(|s| {
s.andel_distribusjonstap * systemer_oppsett.distribusjon_tap_ut
med * s.andel_distribusjonstap * systemer_oppsett.distribusjon_tap_ut
/ (1.0 - systemer_oppsett.distribusjon_tap_ut).max(1e-6)
})
.collect(),
+4
View File
@@ -114,6 +114,8 @@ pub struct Lost {
pub lufting: Option<(f64, f64)>,
pub regulering: Regulering,
pub innvendig_varmekapasitet: f64,
/// Teller systemtapet fra tappevann og varmedistribusjon som varmetilskudd i sonene?
pub systemtap_som_tilskudd: bool,
pub maks_varmeeffekt: Option<f64>,
pub maks_kjoleeffekt: Option<f64>,
pub albedo: f64,
@@ -334,6 +336,7 @@ impl Lost {
};
let innvendig_varmekapasitet = b.drift.innvendig_varmekapasitet.unwrap_or(10_000.0);
let systemtap_som_tilskudd = b.drift.systemtap_som_tilskudd.unwrap_or(true);
// Vinduslufting brukes når bygningen ikke har kjøleanlegg.
let lufting = if b.lufting.ingen
@@ -402,6 +405,7 @@ impl Lost {
lufting,
regulering: Regulering::Operativ,
innvendig_varmekapasitet,
systemtap_som_tilskudd,
maks_varmeeffekt: b.oppvarming.maks_effekt,
maks_kjoleeffekt: b.kjoling.maks_effekt,
albedo: b.klima.albedo.unwrap_or(0.2),
+7
View File
@@ -668,6 +668,13 @@ pub struct Drift {
/// Effektiv innvendig varmekapasitet for luft og inventar, J/(m²K). Utelatt: 10 000 (ISO 52016-1).
#[serde(default, skip_serializing_if = "Option::is_none")]
pub innvendig_varmekapasitet: Option<f64>,
/// Skal varmetapet fra tappevanns- og varmeanlegget telle som varmetilskudd i rommene?
///
/// Utelatt: ja, slik ISO 52000-1 og NS 3031:2025 beskriver gjenvinnbart systemtap. Sett
/// den til `false` for et netto energibehov som er uavhengig av varmeanlegget, slik
/// energirammene i TEK er regnet.
#[serde(default, skip_serializing_if = "Option::is_none")]
pub systemtap_som_tilskudd: Option<bool>,
}
#[derive(Deserialize, Serialize, Clone, Debug)]