Files
enok/src/klima/korreksjon.rs
T

43 lines
1.4 KiB
Rust
Raw Normal View History

//! 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,
})
}