1 Commits
Author SHA1 Message Date
blandClaude Opus 5 8e9544dd24 Kontroller mot de tretten publiserte referansebyggene
test / test (push) Successful in 1m20s
Multiconsults notat for DiBK gir geometri, komponentverdier og beregnet netto energibehov for
bygningskategoriene bak energirammene i TEK17. Sju av dem, de vi har normerte verdier for, er
gjengitt i eksempler/referansebygg/ og regnes om igjen av en ny test.

Resultatet er at enok regner gjennomgående for lavt, fra 15 til 43 prosent, i snitt 28.
Varmetapstallet for småhuset treffer publisert verdi, og de faste postene stemmer nøyaktig,
så avviket ligger i den dynamiske delen. README beskriver hva som er kontrollert, hva avviket
trolig kommer av, og hva tallene kan brukes til inntil videre.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015GeH3y8fwTaTudaD88P57o
2026-09-21 20:55:05 +02:00
9 changed files with 834 additions and 13 deletions
+45 -13
View File
@@ -444,22 +444,54 @@ Motoren er kontrollert mot uavhengige referanser:
| Normerte energiposter for småhus | varmtvann 25,1, belysning 11,4, teknisk utstyr 17,5 kWh/(m²·år) |
| Faste energiposter for yrkesbyggene | belysning, utstyr og varmtvann treffer energibudsjettene i kildene |
### Kjent avvik
### Kontroll mot de publiserte referansebyggene
Standard Norges lanseringseksempel for NS 3031:2025 oppgir 46,2 kWh/(m²·år) romoppvarming og
106,4 kWh/(m²·år) netto energibehov for TEK17-referansebygget beregnet med Simien 8. enok
beregner 27,1 og 86,6 for den samme bygningen.
Multiconsult for DiBK, «Grunnlag og forutsetninger for beregnede energirammer» (13.11.2015),
gir geometri, komponentverdier og beregnet netto energibehov for bygningskategoriene som
ligger til grunn for energirammene i TEK17, beregnet med Simien etter NS 3031:2014. Modellene
er gjengitt i `eksempler/referansebygg/`, og `tests/referansebygg_2015.rs` regner dem om igjen:
Varmetapsbudsjettet, de normerte energipostene, solinnstrålingen og energibalansen stemmer
hver for seg, så avviket ligger i hvor stor del av solvarmen som nyttiggjøres. NS 3031:2025
Tillegg A er ikke offentlig tilgjengelig, så de normerte solfaktorene, skjermings­forutsetningene
og timesprofilene Simien bruker, lar seg ikke etterprøve her. `tests/referansebygg.rs` låser
dagens verdier slik at endringer i motoren blir synlige, og oppdateres når standardens
forutsetninger er tilgjengelige.
| Bygg | enok | Publisert | Avvik |
| --- | ---: | ---: | ---: |
| Småhus | 85,3 | 107,5 | 20,6 % |
| Boligblokk | 77,6 | 91,8 | 15,5 % |
| Barnehage | 80,1 | 132,0 | 39,3 % |
| Kontorbygning | 93,5 | 115,3 | 18,9 % |
| Skolebygning | 72,8 | 106,8 | 31,8 % |
| Idrettsbygning | 106,7 | 144,3 | 26,0 % |
| Kulturbygning | 73,2 | 128,0 | 42,8 % |
| **Snitt** | | | **27,9 %** |
Bruk derfor tallene til å sammenligne tiltak mot hverandre og til å se hvor varmen forsvinner.
Til en energiattest som skal leveres til Enova må resultatet kontrolleres mot et validert
beregningsprogram.
Netto energibehov, kWh/(m²·år), Oslo-klima. Kjør `cargo test --release --test
referansebygg_2015 -- --nocapture` for tabellen.
**enok regner gjennomgående for lavt.** Avviket er systematisk og går én vei, så det kommer
neppe av inndataene for den enkelte kategorien. Dette er kontrollert:
- Varmetapstallet for småhuset blir 0,70 W/(m²K) mot publisert 0,69, så geometri og
U-verdier i modellene er riktig gjengitt.
- De faste postene, varmtvann, belysning og teknisk utstyr, treffer de normerte verdiene
nøyaktig.
- Solinnstrålingen avviker under 1 % fra pvlib, og energibalansen går opp.
Avviket ligger dermed i den dynamiske delen: romoppvarming og ventilasjonsvarme. De to mest
sannsynlige årsakene er hvor stor del av sol- og internvarmen som regnes nyttiggjort, der
NS 3031:2025 Tillegg A gir timesprofiler og solfaktorer som ikke er offentlig tilgjengelige,
og luftmengdene i NS 3031 tabell B.1, som er anslått for flere yrkesbyggkategorier.
Standard Norges lanseringseksempel for NS 3031:2025 peker samme vei: det oppgir 46,2
kWh/(m²·år) romoppvarming og 106,4 kWh/(m²·år) netto energibehov for et TEK17-småhus, mot
enoks 27,1 og 86,6.
### Hva tallene kan brukes til
Sammenligning av tiltak mot hverandre, og å se hvor varmen forsvinner. Et systematisk avvik
som dette slår omtrent likt ut på alle alternativene, så rekkefølgen mellom tiltak står seg.
Den absolutte energikarakteren gjør den ikke. En energiattest skal lages av en godkjent
ekspert i Enovas system, med et beregningsprogram som er validert for formålet, og enok er
ikke validert av noen. Bruk derfor karakteren her som en indikasjon, og kontroller den mot et
validert program før den brukes til noe.
## Datagrunnlag
+99
View File
@@ -0,0 +1,99 @@
# Barnehage — referansebygg for energirammene i TEK17.
#
# Geometri og komponentverdier fra Multiconsult for DiBK, «Grunnlag og forutsetninger for
# beregnede energirammer» (128298-RIEn-NOT-001, 13. november 2015), tabell 1 og 2. Notatet
# oppgir beregnet netto energibehov 132.0 kWh/(m²·år) for denne modellen, beregnet
# med Simien etter NS 3031:2014. Filen er enoks gjengivelse av den samme modellen.
#
# Forenklinger: taket er regnet flatt, og veggarealet er omkrets × etasjehøyde × antall
# etasjer minus vindusarealet.
[bygning]
navn = "Barnehage (referansebygg TEK17)"
kategori = "barnehage"
byggeaar = 2017
oppvarmet_bra = 300.0
oppvarmet_volum = 960.0
[klima]
kommune = "Oslo"
[[flate]]
navn = "Yttervegger"
type = "vegg"
areal = 205.0
u_verdi = 0.18
masseklasse = "middels"
[[flate]]
navn = "Tak"
type = "tak"
areal = 300.0
u_verdi = 0.13
masseklasse = "middels"
[[flate]]
navn = "Gulv på grunn"
type = "gulv"
areal = 300.0
u_verdi = 0.10
mot = "grunn"
omkrets = 80.0
masseklasse = "tung"
kommentar = "U-verdien i notatet er oppgitt inkludert varmemotstanden i grunnen"
[[vindu]]
navn = "Vinduer nord"
areal = 22.5
orientering = 0
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
[[vindu]]
navn = "Vinduer øst"
areal = 15.0
orientering = 90
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
[[vindu]]
navn = "Vinduer sør"
areal = 22.5
orientering = 180
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
[[vindu]]
navn = "Vinduer vest"
areal = 15.0
orientering = 270
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
[kuldebroer]
normalisert = 0.07
[infiltrasjon]
n50 = 0.6
skjerming = "moderat"
[ventilasjon]
type = "balansert"
luftmengde = 8.0
gjenvinning = 0.85
sfp = 1.5
[drift]
belysning_effekt = 6.4
[distribusjon]
type = "punkt"
[[oppvarming.kilde]]
type = "direkte_el"
andel_rom = 1.0
andel_tappevann = 1.0
+83
View File
@@ -0,0 +1,83 @@
# Boligblokk — referansebygg for energirammene i TEK17.
#
# Geometri og komponentverdier fra Multiconsult for DiBK, «Grunnlag og forutsetninger for
# beregnede energirammer» (128298-RIEn-NOT-001, 13. november 2015), tabell 1 og 2. Notatet
# oppgir beregnet netto energibehov 91.8 kWh/(m²·år) for denne modellen, beregnet
# med Simien etter NS 3031:2014. Filen er enoks gjengivelse av den samme modellen.
#
# Forenklinger: taket er regnet flatt, og veggarealet er omkrets × etasjehøyde × antall
# etasjer minus vindusarealet.
[bygning]
navn = "Boligblokk (referansebygg TEK17)"
kategori = "boligblokk"
byggeaar = 2017
oppvarmet_bra = 900.0
oppvarmet_volum = 2430.0
[klima]
kommune = "Oslo"
[[flate]]
navn = "Yttervegger"
type = "vegg"
areal = 495.0
u_verdi = 0.18
masseklasse = "middels"
[[flate]]
navn = "Tak"
type = "tak"
areal = 300.0
u_verdi = 0.13
masseklasse = "middels"
[[flate]]
navn = "Gulv på grunn"
type = "gulv"
areal = 300.0
u_verdi = 0.10
mot = "grunn"
omkrets = 80.0
masseklasse = "tung"
kommentar = "U-verdien i notatet er oppgitt inkludert varmemotstanden i grunnen"
[[vindu]]
navn = "Vinduer nord"
areal = 112.5
orientering = 0
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
[[vindu]]
navn = "Vinduer sør"
areal = 112.5
orientering = 180
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
[kuldebroer]
normalisert = 0.07
[infiltrasjon]
n50 = 0.6
skjerming = "moderat"
[ventilasjon]
type = "balansert"
luftmengde = 1.5
gjenvinning = 0.8
sfp = 1.5
[drift]
belysning_effekt = 1.95
[distribusjon]
type = "punkt"
[[oppvarming.kilde]]
type = "direkte_el"
andel_rom = 1.0
andel_tappevann = 1.0
+104
View File
@@ -0,0 +1,104 @@
# Idrettsbygning — referansebygg for energirammene i TEK17.
#
# Geometri og komponentverdier fra Multiconsult for DiBK, «Grunnlag og forutsetninger for
# beregnede energirammer» (128298-RIEn-NOT-001, 13. november 2015), tabell 1 og 2. Notatet
# oppgir beregnet netto energibehov 144.3 kWh/(m²·år) for denne modellen, beregnet
# med Simien etter NS 3031:2014. Filen er enoks gjengivelse av den samme modellen.
#
# Forenklinger: taket er regnet flatt, og veggarealet er omkrets × etasjehøyde × antall
# etasjer minus vindusarealet.
[bygning]
navn = "Idrettsbygning (referansebygg TEK17)"
kategori = "idrettsbygg"
byggeaar = 2017
oppvarmet_bra = 3200.0
oppvarmet_volum = 25600.0
[klima]
kommune = "Oslo"
[[flate]]
navn = "Yttervegger"
type = "vegg"
areal = 1192.0
u_verdi = 0.18
masseklasse = "middels"
[[flate]]
navn = "Tak"
type = "tak"
areal = 3200.0
u_verdi = 0.13
masseklasse = "middels"
[[flate]]
navn = "Gulv på grunn"
type = "gulv"
areal = 3200.0
u_verdi = 0.10
mot = "grunn"
omkrets = 240.0
masseklasse = "tung"
kommentar = "U-verdien i notatet er oppgitt inkludert varmemotstanden i grunnen"
[[vindu]]
navn = "Vinduer nord"
areal = 240.0
orientering = 0
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
solskjerming = { type = "automatisk", faktor = 0.125 }
[[vindu]]
navn = "Vinduer øst"
areal = 160.0
orientering = 90
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
solskjerming = { type = "automatisk", faktor = 0.125 }
[[vindu]]
navn = "Vinduer sør"
areal = 240.0
orientering = 180
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
solskjerming = { type = "automatisk", faktor = 0.125 }
[[vindu]]
navn = "Vinduer vest"
areal = 160.0
orientering = 270
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
solskjerming = { type = "automatisk", faktor = 0.125 }
[kuldebroer]
normalisert = 0.07
[infiltrasjon]
n50 = 0.6
skjerming = "moderat"
[ventilasjon]
type = "balansert"
luftmengde = 6.4
gjenvinning = 0.85
sfp = 1.5
kjolebatteri = true
[drift]
belysning_effekt = 6.4
[distribusjon]
type = "radiator"
[[oppvarming.kilde]]
type = "direkte_el"
andel_rom = 1.0
andel_tappevann = 1.0
+104
View File
@@ -0,0 +1,104 @@
# Kontorbygning — referansebygg for energirammene i TEK17.
#
# Geometri og komponentverdier fra Multiconsult for DiBK, «Grunnlag og forutsetninger for
# beregnede energirammer» (128298-RIEn-NOT-001, 13. november 2015), tabell 1 og 2. Notatet
# oppgir beregnet netto energibehov 115.3 kWh/(m²·år) for denne modellen, beregnet
# med Simien etter NS 3031:2014. Filen er enoks gjengivelse av den samme modellen.
#
# Forenklinger: taket er regnet flatt, og veggarealet er omkrets × etasjehøyde × antall
# etasjer minus vindusarealet.
[bygning]
navn = "Kontorbygning (referansebygg TEK17)"
kategori = "kontorbygg"
byggeaar = 2017
oppvarmet_bra = 3600.0
oppvarmet_volum = 11520.0
[klima]
kommune = "Oslo"
[[flate]]
navn = "Yttervegger"
type = "vegg"
areal = 780.0
u_verdi = 0.18
masseklasse = "middels"
[[flate]]
navn = "Tak"
type = "tak"
areal = 1200.0
u_verdi = 0.13
masseklasse = "middels"
[[flate]]
navn = "Gulv på grunn"
type = "gulv"
areal = 1200.0
u_verdi = 0.10
mot = "grunn"
omkrets = 160.0
masseklasse = "tung"
kommentar = "U-verdien i notatet er oppgitt inkludert varmemotstanden i grunnen"
[[vindu]]
navn = "Vinduer nord"
areal = 270.0
orientering = 0
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
solskjerming = { type = "automatisk", faktor = 0.125 }
[[vindu]]
navn = "Vinduer øst"
areal = 180.0
orientering = 90
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
solskjerming = { type = "automatisk", faktor = 0.125 }
[[vindu]]
navn = "Vinduer sør"
areal = 270.0
orientering = 180
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
solskjerming = { type = "automatisk", faktor = 0.125 }
[[vindu]]
navn = "Vinduer vest"
areal = 180.0
orientering = 270
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
solskjerming = { type = "automatisk", faktor = 0.125 }
[kuldebroer]
normalisert = 0.07
[infiltrasjon]
n50 = 0.6
skjerming = "moderat"
[ventilasjon]
type = "balansert"
luftmengde = 8.0
gjenvinning = 0.85
sfp = 1.5
kjolebatteri = true
[drift]
belysning_effekt = 6.4
[distribusjon]
type = "radiator"
[[oppvarming.kilde]]
type = "direkte_el"
andel_rom = 1.0
andel_tappevann = 1.0
+104
View File
@@ -0,0 +1,104 @@
# Kulturbygning — referansebygg for energirammene i TEK17.
#
# Geometri og komponentverdier fra Multiconsult for DiBK, «Grunnlag og forutsetninger for
# beregnede energirammer» (128298-RIEn-NOT-001, 13. november 2015), tabell 1 og 2. Notatet
# oppgir beregnet netto energibehov 128.0 kWh/(m²·år) for denne modellen, beregnet
# med Simien etter NS 3031:2014. Filen er enoks gjengivelse av den samme modellen.
#
# Forenklinger: taket er regnet flatt, og veggarealet er omkrets × etasjehøyde × antall
# etasjer minus vindusarealet.
[bygning]
navn = "Kulturbygning (referansebygg TEK17)"
kategori = "kulturbygg"
byggeaar = 2017
oppvarmet_bra = 2400.0
oppvarmet_volum = 7680.0
[klima]
kommune = "Oslo"
[[flate]]
navn = "Yttervegger"
type = "vegg"
areal = 520.0
u_verdi = 0.18
masseklasse = "middels"
[[flate]]
navn = "Tak"
type = "tak"
areal = 1200.0
u_verdi = 0.13
masseklasse = "middels"
[[flate]]
navn = "Gulv på grunn"
type = "gulv"
areal = 1200.0
u_verdi = 0.10
mot = "grunn"
omkrets = 160.0
masseklasse = "tung"
kommentar = "U-verdien i notatet er oppgitt inkludert varmemotstanden i grunnen"
[[vindu]]
navn = "Vinduer nord"
areal = 180.0
orientering = 0
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
solskjerming = { type = "automatisk", faktor = 0.125 }
[[vindu]]
navn = "Vinduer øst"
areal = 120.0
orientering = 90
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
solskjerming = { type = "automatisk", faktor = 0.125 }
[[vindu]]
navn = "Vinduer sør"
areal = 180.0
orientering = 180
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
solskjerming = { type = "automatisk", faktor = 0.125 }
[[vindu]]
navn = "Vinduer vest"
areal = 120.0
orientering = 270
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
solskjerming = { type = "automatisk", faktor = 0.125 }
[kuldebroer]
normalisert = 0.07
[infiltrasjon]
n50 = 0.6
skjerming = "moderat"
[ventilasjon]
type = "balansert"
luftmengde = 8.0
gjenvinning = 0.85
sfp = 1.5
kjolebatteri = true
[drift]
belysning_effekt = 6.4
[distribusjon]
type = "radiator"
[[oppvarming.kilde]]
type = "direkte_el"
andel_rom = 1.0
andel_tappevann = 1.0
+104
View File
@@ -0,0 +1,104 @@
# Skolebygning — referansebygg for energirammene i TEK17.
#
# Geometri og komponentverdier fra Multiconsult for DiBK, «Grunnlag og forutsetninger for
# beregnede energirammer» (128298-RIEn-NOT-001, 13. november 2015), tabell 1 og 2. Notatet
# oppgir beregnet netto energibehov 106.8 kWh/(m²·år) for denne modellen, beregnet
# med Simien etter NS 3031:2014. Filen er enoks gjengivelse av den samme modellen.
#
# Forenklinger: taket er regnet flatt, og veggarealet er omkrets × etasjehøyde × antall
# etasjer minus vindusarealet.
[bygning]
navn = "Skolebygning (referansebygg TEK17)"
kategori = "skolebygg"
byggeaar = 2017
oppvarmet_bra = 2400.0
oppvarmet_volum = 7680.0
[klima]
kommune = "Oslo"
[[flate]]
navn = "Yttervegger"
type = "vegg"
areal = 520.0
u_verdi = 0.18
masseklasse = "middels"
[[flate]]
navn = "Tak"
type = "tak"
areal = 1200.0
u_verdi = 0.13
masseklasse = "middels"
[[flate]]
navn = "Gulv på grunn"
type = "gulv"
areal = 1200.0
u_verdi = 0.10
mot = "grunn"
omkrets = 160.0
masseklasse = "tung"
kommentar = "U-verdien i notatet er oppgitt inkludert varmemotstanden i grunnen"
[[vindu]]
navn = "Vinduer nord"
areal = 180.0
orientering = 0
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
solskjerming = { type = "automatisk", faktor = 0.125 }
[[vindu]]
navn = "Vinduer øst"
areal = 120.0
orientering = 90
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
solskjerming = { type = "automatisk", faktor = 0.125 }
[[vindu]]
navn = "Vinduer sør"
areal = 180.0
orientering = 180
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
solskjerming = { type = "automatisk", faktor = 0.125 }
[[vindu]]
navn = "Vinduer vest"
areal = 120.0
orientering = 270
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
solskjerming = { type = "automatisk", faktor = 0.125 }
[kuldebroer]
normalisert = 0.07
[infiltrasjon]
n50 = 0.6
skjerming = "moderat"
[ventilasjon]
type = "balansert"
luftmengde = 8.0
gjenvinning = 0.85
sfp = 1.5
kjolebatteri = true
[drift]
belysning_effekt = 8.0
[distribusjon]
type = "radiator"
[[oppvarming.kilde]]
type = "direkte_el"
andel_rom = 1.0
andel_tappevann = 1.0
+99
View File
@@ -0,0 +1,99 @@
# Småhus — referansebygg for energirammene i TEK17.
#
# Geometri og komponentverdier fra Multiconsult for DiBK, «Grunnlag og forutsetninger for
# beregnede energirammer» (128298-RIEn-NOT-001, 13. november 2015), tabell 1 og 2. Notatet
# oppgir beregnet netto energibehov 107.5 kWh/(m²·år) for denne modellen, beregnet
# med Simien etter NS 3031:2014. Filen er enoks gjengivelse av den samme modellen.
#
# Forenklinger: taket er regnet flatt, og veggarealet er omkrets × etasjehøyde × antall
# etasjer minus vindusarealet.
[bygning]
navn = "Småhus (referansebygg TEK17)"
kategori = "smaahus"
byggeaar = 2017
oppvarmet_bra = 160.0
oppvarmet_volum = 459.2
[klima]
kommune = "Oslo"
[[flate]]
navn = "Yttervegger"
type = "vegg"
areal = 188.2
u_verdi = 0.18
masseklasse = "middels"
[[flate]]
navn = "Tak"
type = "tak"
areal = 80.0
u_verdi = 0.13
masseklasse = "middels"
[[flate]]
navn = "Gulv på grunn"
type = "gulv"
areal = 80.0
u_verdi = 0.10
mot = "grunn"
omkrets = 36.0
masseklasse = "tung"
kommentar = "U-verdien i notatet er oppgitt inkludert varmemotstanden i grunnen"
[[vindu]]
navn = "Vinduer nord"
areal = 12.0
orientering = 0
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
[[vindu]]
navn = "Vinduer øst"
areal = 8.0
orientering = 90
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
[[vindu]]
navn = "Vinduer sør"
areal = 12.0
orientering = 180
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
[[vindu]]
navn = "Vinduer vest"
areal = 8.0
orientering = 270
u_verdi = 0.80
g_verdi = 0.40
karmandel = 0.20
[kuldebroer]
normalisert = 0.05
[infiltrasjon]
n50 = 0.6
skjerming = "moderat"
[ventilasjon]
type = "balansert"
luftmengde = 1.2
gjenvinning = 0.8
sfp = 1.5
[drift]
belysning_effekt = 1.95
[distribusjon]
type = "punkt"
[[oppvarming.kilde]]
type = "direkte_el"
andel_rom = 1.0
andel_tappevann = 1.0
+92
View File
@@ -0,0 +1,92 @@
//! Kontroll mot de publiserte referansebyggene for energirammene i TEK17.
//!
//! Multiconsult for DiBK, «Grunnlag og forutsetninger for beregnede energirammer»
//! (128298-RIEn-NOT-001, 13. november 2015), gir geometri (tabell 1), komponentverdier
//! (tabell 2) og beregnet netto energibehov (tabell 3) for tretten bygningskategorier,
//! beregnet med Simien etter NS 3031:2014. Modellene er gjengitt i `eksempler/referansebygg/`.
//!
//! Dette er den eneste kontrollen der hele beregningen kan sammenlignes med et publisert
//! resultat for flere bygningskategorier. Testen låser dagens avvik, slik at det blir synlig
//! både når motoren nærmer seg de publiserte tallene og når noe gjør avviket større.
//!
//! Kjør `cargo test --release referansebygg_2015 -- --nocapture` for hele tabellen.
use enok::data::Datakilde;
use enok::{inndata, kjor};
use std::path::Path;
/// Fil, publisert netto energibehov, og enoks verdi slik den er i dag, kWh/(m²·år).
const BYGG: [(&str, f64, f64); 7] = [
("smaahus", 107.5, 85.3),
("boligblokk", 91.8, 77.6),
("barnehage", 132.0, 80.1),
("kontorbygg", 115.3, 93.5),
("skolebygg", 106.8, 72.8),
("idrettsbygg", 144.3, 106.7),
("kulturbygg", 128.0, 73.2),
];
fn netto(navn: &str) -> f64 {
let sti = format!("eksempler/referansebygg/{navn}.toml");
let b = inndata::les_bygning(Path::new(&sti)).unwrap();
let r = kjor::kjor(&b, &Datakilde::default()).unwrap();
r.budsjett.netto_spesifikk(r.lost.bra)
}
/// Verdiene skal ikke endre seg uten at noen har ment det.
#[test]
fn referansebyggene_gir_de_samme_tallene() {
println!(
"\n {:14}{:>10}{:>12}{:>9}",
"bygg", "enok", "publisert", "avvik"
);
let mut avvik = Vec::new();
for (navn, publisert, laast) in BYGG {
let n = netto(navn);
println!(
" {navn:14}{n:10.1}{publisert:12.1}{:8.1} %",
100.0 * (n - publisert) / publisert
);
avvik.push(100.0 * (n - publisert) / publisert);
assert!(
(n - laast).abs() < 1.0,
"{navn}: {n:.1} kWh/(m²·år), låst verdi {laast:.1}"
);
}
let snitt = avvik.iter().sum::<f64>() / avvik.len() as f64;
println!(" {:14}{:>10}{:>12}{snitt:8.1} %\n", "snitt", "", "");
}
/// Varmetapstallet for småhuset skal treffe den publiserte verdien for TEK17-nivå.
///
/// Geometri og U-verdier er dermed riktig gjengitt, og avviket i netto energibehov ligger i
/// den dynamiske beregningen, ikke i inndataene.
#[test]
fn varmetapstallet_for_smaahuset_stemmer() {
let b = inndata::les_bygning(Path::new("eksempler/referansebygg/smaahus.toml")).unwrap();
let r = kjor::kjor(&b, &Datakilde::default()).unwrap();
let publisert = 0.69;
assert!(
(r.varmetap.totalt - publisert).abs() < 0.03,
"varmetapstall {:.2}, publisert {publisert:.2}",
r.varmetap.totalt
);
}
/// De faste postene følger av normerte verdier og skal stemme uavhengig av motoren.
#[test]
fn faste_poster_i_referansebyggene() {
let post = |r: &kjor::Resultat, nr: &str| {
r.budsjett
.poster
.iter()
.find(|p| p.nr == nr)
.map(|p| p.netto / r.lost.bra)
.unwrap_or(0.0)
};
let b = inndata::les_bygning(Path::new("eksempler/referansebygg/smaahus.toml")).unwrap();
let r = kjor::kjor(&b, &Datakilde::default()).unwrap();
assert!((post(&r, "2") - 25.1).abs() < 0.2, "varmtvann");
assert!((post(&r, "5") - 11.4).abs() < 0.2, "belysning");
assert!((post(&r, "6") - 17.5).abs() < 0.2, "teknisk utstyr");
}