Geometri fra IFC, grunnmodell etter ISO 13370 og uoppvarmede soner
test / test (push) Failing after 3s
test / test (push) Failing after 3s
Importen er prøvd mot en virkelig IFC-fil fra Vectorworks Architect 2026 og avdekket tre feil og ett hull. IFC-import - Lengdeenheten hentes nå gjennom prosjektets enhetsoppsett. Filen inneholder to lengdeenheter, og oppslaget traff tilfeldig den ene. - Arealer regnes av geometrien, siden modellen ikke har mengder for vegger og dekker. Trekantene grupperes etter retning, og den største gruppen er delens hovedflate. Metoden gir riktig areal også når vinduer er skåret ut av veggen. - Materialsjikt eksporteres som hver sin geometridel. Deler som ligger i samme plan og overlapper hverandre telles én gang, ellers ble en vegg talt sju ganger. - Himmelretningen følger flatenormalen i stedet for et anslag ut fra tyngdepunktet. - Flater med samme konstruksjon og himmelretning slås sammen, og rommene listes med areal, siden IFC ikke sier hvilke som er oppvarmet. Grunnen og kjelleren - Flater mot grunnen regnes etter NS-EN ISO 13370. En kjellervegg deles i en del over terreng og en nedgravd del, etter høydene `over_terreng` og `dybde`. - Uoppvarmede soner får egen temperatur time for time etter NS-EN ISO 13789, med varmetilskudd fra distribusjonstap og beredere som står der. Uisolerte varmerør i en kjeller teller dermed både som tap og som varme som holder etasjeskilleren varm. - Varmetapsbudsjettet oppgir konstruksjonens egen U-verdi, slik NS 3031 Tabell 3 og energikravene i TEK er formulert, mens timesberegningen bruker grunnens demping. Nordhusstykket 5 er modellert av IFC-geometrien med kjelleren som egen sone. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015GeH3y8fwTaTudaD88P57o
This commit is contained in:
+55
-1
@@ -53,6 +53,11 @@ pub struct Bygning {
|
||||
pub klima: Klima,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub flate: Vec<Flate>,
|
||||
/// Uoppvarmede soner, typisk kjeller eller loft, med egen temperaturberegning.
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub sone: Vec<Sone>,
|
||||
#[serde(default)]
|
||||
pub grunn: Grunn,
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub vindu: Vec<Vindu>,
|
||||
#[serde(default)]
|
||||
@@ -212,11 +217,20 @@ pub struct Flate {
|
||||
/// Solabsorptans for utvendig overflate. Utelatt: 0,6.
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub absorptans: Option<f64>,
|
||||
/// For gulv mot grunn / kjellervegg mot grunn: eksponert omkrets (m) og dybde under terreng (m).
|
||||
/// Gulv mot grunn: eksponert omkrets, m. Brukes i den karakteristiske dimensjonen B′.
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub omkrets: Option<f64>,
|
||||
/// Dybde under terreng, m. For gulv: gulvets dybde. For kjellervegg: veggens nedgravde høyde.
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub dybde: Option<f64>,
|
||||
/// Kjellervegg: høyden som står over terreng, m. Den delen regnes som vanlig yttervegg,
|
||||
/// og arealet deles mellom over og under terreng i forhold til høydene.
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub over_terreng: Option<f64>,
|
||||
/// Navnet på den uoppvarmede sonen flaten vender mot, når `mot = "uoppvarmet"`.
|
||||
/// Uten dette brukes temperaturfaktoren `b_faktor` i stedet.
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub sone: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub kommentar: Option<String>,
|
||||
}
|
||||
@@ -276,6 +290,46 @@ fn nitti() -> f64 {
|
||||
90.0
|
||||
}
|
||||
|
||||
/// Grunnforhold for beregning etter NS-EN ISO 13370.
|
||||
#[derive(Deserialize, Serialize, Clone, Debug, Default)]
|
||||
pub struct Grunn {
|
||||
/// Varmeledningsevne for jorda, W/(m·K). Utelatt: 2,0 (leire eller silt).
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub ledningsevne: Option<f64>,
|
||||
}
|
||||
|
||||
/// En uoppvarmet sone, typisk kjeller, loft eller garasje.
|
||||
///
|
||||
/// Sonen har ingen egen oppvarming, men får varme fra den oppvarmede delen gjennom
|
||||
/// etasjeskilleren og fra varmerør og bereder som står der. Temperaturen regnes ut time for
|
||||
/// time av varmebalansen etter NS-EN ISO 13789, slik at et varmt rørnett i kjelleren både
|
||||
/// teller som tap fra varmeanlegget og som varme som holder etasjeskilleren varm.
|
||||
#[derive(Deserialize, Serialize, Clone, Debug)]
|
||||
pub struct Sone {
|
||||
pub navn: String,
|
||||
/// Luftvolum, m³. Brukes til ventilasjonstapet fra sonen.
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub volum: Option<f64>,
|
||||
/// Luftvekslinger per time mot det fri. Utelatt: 0,3 for en kjeller.
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub luftveksling: Option<f64>,
|
||||
/// Sonens egne flater mot det fri og mot grunnen.
|
||||
#[serde(default, rename = "flate", skip_serializing_if = "Vec::is_empty")]
|
||||
pub flater: Vec<Flate>,
|
||||
/// Andel av varmeanleggets distribusjonstap som avgis i denne sonen. Utelatt: 1,0 når
|
||||
/// bygningen har vannbåren varme og sonen er den eneste uoppvarmede.
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub andel_distribusjonstap: Option<f64>,
|
||||
/// Andel av tappevannsanleggets tap som avgis her.
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub andel_tappevannstap: Option<f64>,
|
||||
/// Fast varmetilskudd i sonen, W. For eksempel kappetap fra en kjel.
|
||||
#[serde(default)]
|
||||
pub fast_effekt: f64,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub kommentar: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Serialize, Clone, Debug, Default)]
|
||||
pub struct Kuldebroer {
|
||||
/// Normalisert kuldebroverdi, W/(m²K) av oppvarmet BRA. Utelatt: verdi etter byggeår.
|
||||
|
||||
Reference in New Issue
Block a user