enok leser en bygningsbeskrivelse i TOML, henter typisk klimaår for kommunen, simulerer 8760 timer etter NS-EN ISO 52016-1 og skriver energirapport, CSV og JSON. Motor - Femnodemodell for opake bygningsdeler, tonodemodell for vinduer, luftnode og strålingsnode per sone, implisitt løsning per time med egen tett LU-løser. - Varme- og kjølebehov ved eksakt interpolasjon mellom to løsninger, siden systemet er lineært. Vinduslufting for bygninger uten kjøleanlegg. - Solberegning etter ISO 52010-1, kontrollert mot pvlib med avvik under 1 prosent. Beregningsgang - Beregningspunktene A til E: netto, brutto, tilført, levert per energibærer og vektet levert energi, med solceller, klimakorrigering og effektbehov. - Energikarakter etter Enovas skala fra 1.1.2026, med arealkorreksjon. Inndata - TOML med scenarier for tiltak, og import fra IFC, gbXML og regneark. - Normerte verdier, karakterskala, vektingsfaktorer og klimadata i data/, som kan overstyres med --data. Kontroll - Stasjonært varmetap mot U·A·ΔT innenfor 2 prosent, energibalansen innenfor 2 prosent, varmetapsbudsjettet for TEK17-referansebygget identisk med publisert tabell. Kjent avvik i romoppvarming mot Simien 8 er dokumentert i README. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015GeH3y8fwTaTudaD88P57o
44 lines
1.4 KiB
Rust
44 lines
1.4 KiB
Rust
//! Klimakorrigering av beregnet energiytelse til referanseklima (Oslo).
|
|
//!
|
|
//! NS 3031:2025 fjernet normert Oslo-klima fra selve beregningen og innførte i stedet
|
|
//! klimakorrigeringsfaktorer: `EP_NORM = EP_LOK / KF`, der korrigeringen gjelder de
|
|
//! klimaavhengige energipostene (romoppvarming, ventilasjonsvarme, romkjøling,
|
|
//! ventilasjonskjøling). Øvrige poster er uendret.
|
|
|
|
use crate::data::Klimakorreksjon;
|
|
use crate::modell::Kategori;
|
|
|
|
/// Resultat av klimakorrigering for én bygning.
|
|
#[derive(serde::Serialize, Clone, Debug)]
|
|
pub struct Korrigering {
|
|
pub sted: String,
|
|
pub faktor: f64,
|
|
/// Klimaavhengige poster før korrigering, kWh/m².
|
|
pub klimaavhengig_lokalt: f64,
|
|
/// Klimaavhengige poster etter korrigering, kWh/m².
|
|
pub klimaavhengig_normert: f64,
|
|
}
|
|
|
|
impl Korrigering {
|
|
/// Korrigerer en total energiytelse: trekker ut de klimaavhengige postene, deler på KF,
|
|
/// og legger dem tilbake.
|
|
pub fn korriger_total(&self, total_lokalt: f64) -> f64 {
|
|
total_lokalt - self.klimaavhengig_lokalt + self.klimaavhengig_normert
|
|
}
|
|
}
|
|
|
|
pub fn korriger(
|
|
tabell: &Klimakorreksjon,
|
|
sted: &str,
|
|
kategori: Kategori,
|
|
klimaavhengig_lokalt: f64,
|
|
) -> Option<Korrigering> {
|
|
let faktor = tabell.faktor(sted, kategori)?;
|
|
Some(Korrigering {
|
|
sted: sted.to_string(),
|
|
faktor,
|
|
klimaavhengig_lokalt,
|
|
klimaavhengig_normert: klimaavhengig_lokalt / faktor,
|
|
})
|
|
}
|