Legg til barnehage, kontor-, skole-, idretts- og kulturbygg
Driftstidene har nå dager per uke og uker per år, og lastene gjelder bare på driftsdager. Normerte verdier for de nye kategoriene er hentet fra publiserte Simien-utskrifter og DiBK-utredninger og kontrollert mot energibudsjettene i de samme kildene. Boligblokk har fått egne verdier i stedet for en kopi av småhus. Balanserte anlegg kan ha kjølebatteri, og varmegjenvinneren reguleres ned når den ellers ville varmet tilluften over settpunktet. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015GeH3y8fwTaTudaD88P57o
This commit is contained in:
+41
-8
@@ -130,6 +130,8 @@ pub struct LostVentilasjon {
|
||||
pub sfp: f64,
|
||||
pub varmebatteri: bool,
|
||||
pub tilluft_settpunkt: f64,
|
||||
/// Kjølebatteri: tilluften holdes på denne temperaturen i driftstiden.
|
||||
pub tilluft_kjoling: Option<f64>,
|
||||
pub driftstid: crate::data::Tidsrom,
|
||||
}
|
||||
|
||||
@@ -142,7 +144,15 @@ pub struct LostLaster {
|
||||
pub personer: [f64; 24],
|
||||
pub varmtvann: [f64; 24],
|
||||
pub pumper: [f64; 24],
|
||||
pub oppvarming_driftstid: crate::data::Tidsrom,
|
||||
/// Driftstider med driftsdager og driftsuker. Profilene over gjelder bare på driftsdager.
|
||||
pub driftstider: crate::data::Driftstider,
|
||||
}
|
||||
|
||||
impl LostLaster {
|
||||
/// Om time `t` i året faller på en driftsdag.
|
||||
pub fn driftsdag(&self, t: usize) -> bool {
|
||||
self.driftstider.driftsdag(t / 24)
|
||||
}
|
||||
}
|
||||
|
||||
const R_SI: f64 = 0.13;
|
||||
@@ -326,7 +336,10 @@ impl Lost {
|
||||
let innvendig_varmekapasitet = b.drift.innvendig_varmekapasitet.unwrap_or(10_000.0);
|
||||
|
||||
// Vinduslufting brukes når bygningen ikke har kjøleanlegg.
|
||||
let lufting = if b.lufting.ingen || settpunkt_kjoling.is_some() {
|
||||
let lufting = if b.lufting.ingen
|
||||
|| settpunkt_kjoling.is_some()
|
||||
|| ventilasjon.tilluft_kjoling.is_some()
|
||||
{
|
||||
None
|
||||
} else {
|
||||
// Uten oppgitt grense brukes den normerte settpunkttemperaturen for kjøling.
|
||||
@@ -724,6 +737,22 @@ fn los_ventilasjon(v: &Ventilasjon, n: &Normerte, logg: &mut Vec<Forutsetning>)
|
||||
let varmebatteri = v
|
||||
.varmebatteri
|
||||
.unwrap_or(matches!(v.typ, VentilasjonType::Balansert));
|
||||
// Kjølebatteriet holder konstant tilluftstemperatur i driftstiden, slik DiBKs modellbygg
|
||||
// for energirammene er regnet (Multiconsult 2014, avsnitt 7.3).
|
||||
let tilluft_kjoling = (v.kjolebatteri == Some(true)).then(|| {
|
||||
v.tilluft_kjoling.unwrap_or_else(|| {
|
||||
let t = n
|
||||
.settpunkt
|
||||
.ventilasjon_tilluft_kjoling
|
||||
.unwrap_or(n.settpunkt.ventilasjon_tilluft);
|
||||
logg.push(Forutsetning {
|
||||
felt: "ventilasjon.tilluft_kjoling".into(),
|
||||
verdi: format!("{t:.0} °C"),
|
||||
kilde: format!("normert tilluftstemperatur, {}", n.kilde),
|
||||
});
|
||||
t
|
||||
})
|
||||
});
|
||||
LostVentilasjon {
|
||||
typ: v.typ,
|
||||
luftmengde,
|
||||
@@ -732,6 +761,7 @@ fn los_ventilasjon(v: &Ventilasjon, n: &Normerte, logg: &mut Vec<Forutsetning>)
|
||||
sfp,
|
||||
varmebatteri,
|
||||
tilluft_settpunkt: n.settpunkt.ventilasjon_tilluft,
|
||||
tilluft_kjoling,
|
||||
driftstid: n.driftstid.ventilasjon,
|
||||
}
|
||||
}
|
||||
@@ -754,9 +784,11 @@ fn los_laster(b: &Bygning, n: &Normerte, logg: &mut Vec<Forutsetning>) -> LostLa
|
||||
logg.push(Forutsetning {
|
||||
felt: "belysning".into(),
|
||||
verdi: format!(
|
||||
"{:.2} W/m² i {:.0} h/døgn",
|
||||
"{:.2} W/m² i {:.0} h/døgn, {} dager/uke, {} uker/år",
|
||||
n.belysning.effekt,
|
||||
n.driftstid.belysning.timer()
|
||||
n.driftstid.belysning.timer(),
|
||||
n.driftstid.dager_per_uke,
|
||||
n.driftstid.uker_per_aar
|
||||
),
|
||||
kilde: format!("normert, {}", n.kilde),
|
||||
});
|
||||
@@ -772,16 +804,17 @@ fn los_laster(b: &Bygning, n: &Normerte, logg: &mut Vec<Forutsetning>) -> LostLa
|
||||
.drift
|
||||
.personer_varmetilskudd
|
||||
.unwrap_or(n.personer.varmetilskudd);
|
||||
let driftsdager = n.driftstid.driftsdager_per_aar() as f64;
|
||||
let tappevann = b.tappevann.energibehov.map(|kwh| {
|
||||
// kWh/(m²·år) → W/m² i driftstiden.
|
||||
kwh * 1000.0 / (365.0 * n.driftstid.varmtvann.timer())
|
||||
// kWh/(m²·år) → W/m² i driftstiden på driftsdager.
|
||||
kwh * 1000.0 / (driftsdager * n.driftstid.varmtvann.timer())
|
||||
});
|
||||
let vv = tappevann.unwrap_or_else(|| {
|
||||
logg.push(Forutsetning {
|
||||
felt: "tappevann.energibehov".into(),
|
||||
verdi: format!(
|
||||
"{:.1} kWh/(m²·år)",
|
||||
n.varmtvann.effekt * n.driftstid.varmtvann.timer() * 365.0 / 1000.0
|
||||
n.varmtvann.effekt * n.driftstid.varmtvann.timer() * driftsdager / 1000.0
|
||||
),
|
||||
kilde: format!("normert, {}", n.kilde),
|
||||
});
|
||||
@@ -801,6 +834,6 @@ fn los_laster(b: &Bygning, n: &Normerte, logg: &mut Vec<Forutsetning>) -> LostLa
|
||||
personer: profil(personer, n.driftstid.personer, n.profil_personer),
|
||||
varmtvann: profil(vv, n.driftstid.varmtvann, n.profil_varmtvann),
|
||||
pumper: profil(pumpeeffekt, n.driftstid.oppvarming, None),
|
||||
oppvarming_driftstid: n.driftstid.oppvarming,
|
||||
driftstider: n.driftstid.clone(),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user