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:
bl
2026-09-15 20:05:20 +02:00
co-authored by Claude Opus 5
parent cb64c91b19
commit d02a3d9666
16 changed files with 601 additions and 39 deletions
+22 -11
View File
@@ -188,17 +188,20 @@ pub fn simuler(l: &Lost, v: &Vaerdata, tilskudd: Systemtilskudd) -> Result<Times
}
for t in timer {
let klokke = t % 24;
let driftsdag = l.laster.driftsdag(t);
let t_ute = v.t_ute[t];
let t_himmel = sol::himmeltemperatur(v, t);
// ── laster ──────────────────────────────────────────────
let bel = l.laster.belysning[klokke] * l.bra;
let utstyr_el = l.laster.utstyr_effekt[klokke] * l.bra;
let utstyr_varme = l.laster.utstyr_varme[klokke] * l.bra;
let personer = l.laster.personer[klokke] * l.bra;
let vv = l.laster.varmtvann[klokke] * l.bra;
let pumper = l.laster.pumper[klokke] * l.bra;
let vifter = ventilasjon::vifteeffekt(l, klokke);
// Lastprofilene gjelder driftsdager; på andre dager er bygningen ute av bruk.
let skala = if driftsdag { l.bra } else { 0.0 };
let bel = l.laster.belysning[klokke] * skala;
let utstyr_el = l.laster.utstyr_effekt[klokke] * skala;
let utstyr_varme = l.laster.utstyr_varme[klokke] * skala;
let personer = l.laster.personer[klokke] * skala;
let vv = l.laster.varmtvann[klokke] * skala;
let pumper = l.laster.pumper[klokke] * skala;
let vifter = ventilasjon::vifteeffekt(l, t);
// Vifteeffekten ender som varme i lufta (ISO 52016-1: hele SFP-effekten).
let internlast = bel + utstyr_varme + personer + tilskudd.tappevann + vifter;
@@ -211,21 +214,28 @@ pub fn simuler(l: &Lost, v: &Vaerdata, tilskudd: Systemtilskudd) -> Result<Times
}
// ── ventilasjon ─────────────────────────────────────────
let q_vent = ventilasjon::luftmengde(l, klokke);
let q_vent = ventilasjon::luftmengde(l, t);
let h_ve = q_vent * RHO_C_LUFT;
let t_sup_hx = ventilasjon::tilluftstemperatur(l, t_ute, t_a_forrige);
let (t_sup, vent_varme) =
let kjol_tilluft = l
.ventilasjon
.tilluft_kjoling
.filter(|&k| ventilasjon::i_drift(l, t) && t_sup_hx > k);
let (t_sup, vent_varme, vent_kjol) =
if l.ventilasjon.varmebatteri && t_sup_hx < l.ventilasjon.tilluft_settpunkt {
(
l.ventilasjon.tilluft_settpunkt,
h_ve * (l.ventilasjon.tilluft_settpunkt - t_sup_hx),
0.0,
)
} else if let Some(k) = kjol_tilluft {
(k, 0.0, h_ve * (t_sup_hx - k))
} else {
(t_sup_hx, 0.0)
(t_sup_hx, 0.0, 0.0)
};
// ── settpunkt ───────────────────────────────────────────
let sett_varme = if l.laster.oppvarming_driftstid.aktiv(klokke) {
let sett_varme = if driftsdag && l.laster.driftstider.oppvarming.aktiv(klokke) {
l.settpunkt_oppvarming
} else {
l.settpunkt_natt
@@ -339,6 +349,7 @@ pub fn simuler(l: &Lost, v: &Vaerdata, tilskudd: Systemtilskudd) -> Result<Times
ts.romoppvarming[t] = fi.max(0.0);
ts.romkjoling[t] = (-fi).max(0.0);
ts.ventilasjonsvarme[t] = vent_varme;
ts.ventilasjonskjoling[t] = vent_kjol;
ts.varmtvann[t] = vv;
ts.vifter[t] = vifter;
ts.pumper[t] = pumper;