Skip to content

Commit

Permalink
Merge pull request jzck#255 from RedFroggy/215Verandas
Browse files Browse the repository at this point in the history
feat(feat-215): Add verandas for surface_sud_equivalente calculation
  • Loading branch information
jgavignet authored Nov 26, 2024
2 parents 6a1ef91 + 3b2ea6c commit 26a7c42
Show file tree
Hide file tree
Showing 14 changed files with 13,483 additions and 36 deletions.
4 changes: 2 additions & 2 deletions src/10_besoin_fr.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export function calc_besoin_fr_j(Sh, GV, inertie, aij_fr, asj_fr, nrefj, textmoy
return bfr;
}

export default function calc_besoin_fr(ca, zc, Sh, nadeq, GV, inertie, bv) {
export default function calc_besoin_fr(ca, zc, Sh, nadeq, GV, inertie, bv, ets) {
const Nref26 = tvs.nref26;
const Nref28 = tvs.nref28;
const e_fr_26 = tvs.e_fr_26;
Expand All @@ -47,7 +47,7 @@ export default function calc_besoin_fr(ca, zc, Sh, nadeq, GV, inertie, bv) {

const aij_fr = calc_ai_j(Sh, nadeq, nref28);
const aij_fr_dep = calc_ai_j(Sh, nadeq, nref26);
const ssej = calc_sse_j(bv, zc, mois);
const ssej = calc_sse_j(bv, ets, ca, zc, mois);
const asj_fr = calc_as_j(ssej, ej_fr_28);
const asj_fr_dep = calc_as_j(ssej, ej_fr_26);

Expand Down
4 changes: 2 additions & 2 deletions src/6.1_apport_gratuit.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ export function calc_ai(ilpa, ca, zc, Sh, nadeq) {
return ret;
}

export function calc_as(ilpa, ca, zc, bv) {
export function calc_as(ilpa, ca, zc, bv, ets) {
const e = tvs.e[ilpa];
const e_fr_28 = tvs.e_fr_28;

Expand All @@ -49,7 +49,7 @@ export function calc_as(ilpa, ca, zc, bv) {
/* apport_solaire_fr_depensier: 0 */
};
for (const mois of mois_liste) {
const ssej = calc_sse_j(bv, zc, mois);
const ssej = calc_sse_j(bv, ets, ca, zc, mois);
const ej = e[ca][mois][zc];
const ej_fr_28 = e_fr_28[ca][mois][zc];

Expand Down
109 changes: 84 additions & 25 deletions src/6.2_surface_sud_equivalente.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,38 +2,97 @@ import enums from './enums.js';
import tvs from './tv.js';
import { mois_liste } from './utils.js';

export function calc_sse_j(bv_list, zc, mois) {
const c1 = tvs.c1;

export function calc_sse_j(bv_list, ets, ca, zc, mois) {
const ssej = bv_list.reduce((acc, bv) => {
const type_adjacence = enums.type_adjacence[bv.donnee_entree.enum_type_adjacence_id];
const typeAdjacence = parseInt(bv.donnee_entree.enum_type_adjacence_id);

/**
* @TODO implémenter les facteurs solaires pour les espaces tampons solarisés
* 6.3 Traitement des espaces tampons solarisés
* 10 - 'espace tampon solarisé (véranda,loggia fermée)'
*/
if (
type_adjacence !== 'extérieur' &&
type_adjacence !== 'espace tampon solarisé (véranda,loggia fermée)'
)
if (typeAdjacence === 10) {
const bver = ets.donnee_intermediaire.bver;
const T = ets.donnee_intermediaire.coef_transparence_ets;

/**
* Surface sud équivalente représentant l’impact des apports solaires associés au rayonnement solaire
* traversant directement l’espace tampon pour arriver dans la partie habitable du logement
* Calculés pour les baies vitrées qui séparent le logement de l'espace tampon
* @type {number}
*/
const Ssdj = getBaiesSurEspaceTampon(bv_list).reduce((acc, bv) => {
return acc + T * getSsd(bv, zc, mois, bv.donnee_intermediaire.sw);
}, 0);

/**
* Surface sud équivalente représentant les apports solaires indirects dans le logement
*/
const Sstj = ets.baie_ets_collection.baie_ets.reduce((acc, bv) => {
return acc + getSsd(bv, zc, mois, 0.8 * T + 0.024);
}, 0);

/**
* Surface sud équivalente représentant l’impact des apports solaires associés au rayonnement
* solaire entrant dans la partie habitable du logement après de multiples réflexions dans l’espace tampon solarisé
* @type {number}
*/
const Ssindj = Sstj - Ssdj;

/**
* Impact de l’espace tampon solarisé sur les apports solaires à travers les baies vitrées qui séparent le logement
* de l'espace tampon
* @type {number}
*/
const SseVerandaj = Ssdj + Ssindj * bver;

return acc + SseVerandaj;
}

// Pour les fenêtres qui ne donnent pas sur l'extérieur, pas de surface sud équivalente
if (typeAdjacence !== 1) {
return acc;
const de = bv.donnee_entree;
const di = bv.donnee_intermediaire;

const orientation = enums.orientation[de.enum_orientation_id];
const inclinaison = enums.inclinaison_vitrage[de.enum_inclinaison_vitrage_id];
let oi = `${orientation} ${inclinaison}`;
if (inclinaison === 'horizontal') oi = 'horizontal';
const c1j = c1[zc][mois][oi];

const fe1 = di.fe1;
const fe2 = di.fe2;
const ssei = acc + de.surface_totale_baie * c1j * di.sw * fe1 * fe2;
return ssei;
}

return acc + getSsd(bv, zc, mois, bv.donnee_intermediaire.sw);
}, 0);
return ssej;
}

export function calc_sse(zc, bv_list) {
const sse = mois_liste.reduce((acc, mois) => acc + calc_sse_j(bv_list, zc, mois), 0);
return sse;
/**
* Retourne la liste des baies vitrées qui donnent sur l'espace tampon solarisé
* @param baiesVitrees {BaieVitreeItem[]}
*/
function getBaiesSurEspaceTampon(baiesVitrees) {
return baiesVitrees.filter((bv) => bv.donnee_entree.enum_type_adjacence_id === '10');
}

/**
* Calcul de la surface sur équivalente pour la baie vitrée bv pendant le mois $mois
*
* @param bv {BaieVitreeItem}
* @param zc {string} zone climatique du logement
* @param mois {string} mois au cours duquel calculer la surface sur équivalente de la baie vitrée
* @param coeff {number} coefficient à appliquer à cette surface sud
* @returns {number}
*/
function getSsd(bv, zc, mois, coeff) {
const c1 = tvs.c1;

const de = bv.donnee_entree;
const di = bv.donnee_intermediaire || {};

const orientation = enums.orientation[de.enum_orientation_id];
const inclinaison = enums.inclinaison_vitrage[de.enum_inclinaison_vitrage_id];
let oi = `${orientation} ${inclinaison}`;
if (inclinaison === 'horizontal') oi = 'horizontal';
const c1j = c1[zc][mois][oi];

const fe1 = di.fe1 || 1;
const fe2 = di.fe2 || 1;

return de.surface_totale_baie * c1j * coeff * fe1 * fe2;
}

export function calc_sse(ca, zc, bv_list, ets) {
return mois_liste.reduce((acc, mois) => acc + calc_sse_j(bv_list, ets, ca, zc, mois), 0);
}
5 changes: 3 additions & 2 deletions src/9_besoin_ch.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ export default function calc_besoin_ch(
nadeq,
instal_ecs,
instal_ch,
bv
bv,
ets
) {
const ca = enums.classe_altitude[ca_id];
const zc = enums.zone_climatique[zc_id];
Expand Down Expand Up @@ -121,7 +122,7 @@ export default function calc_besoin_ch(
sumDh21 += dh21j;
const aij = calc_ai_j(Sh, nadeq, nref19);
const aij_dep = calc_ai_j(Sh, nadeq, nref21);
const ssej = calc_sse_j(bv, zc, mois);
const ssej = calc_sse_j(bv, ets, ca, zc, mois);
const ej = e[ca][mois][zc];
const asj = calc_as_j(ssej, ej);
const Fj = calc_Fj(GV, asj, aij, dh19j, inertie);
Expand Down
7 changes: 4 additions & 3 deletions src/apport_et_besoin.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,14 @@ export default function calc_apport_et_besoin(
const inertie = enums.classe_inertie[enveloppe.inertie.enum_classe_inertie_id];

const bv = enveloppe.baie_vitree_collection.baie_vitree;
const ets = enveloppe.ets_collection.ets;

const nadeq = nadeqService.calculateNadeq(logement);

const besoin_ecs = calc_besoin_ecs(ca, zc, nadeq);
const besoin_fr = calc_besoin_fr(ca, zc, Sh, nadeq, GV, inertie, bv);
const besoin_fr = calc_besoin_fr(ca, zc, Sh, nadeq, GV, inertie, bv, ets);
const apport_interne = calc_ai(ilpa, ca, zc, Sh, nadeq);
const apport_solaire = calc_as(ilpa, ca, zc, bv);
const apport_solaire = calc_as(ilpa, ca, zc, bv, ets);

if (clim.length === 0) {
besoin_fr.besoin_fr = 0;
Expand All @@ -45,7 +46,7 @@ export default function calc_apport_et_besoin(
nadeq,
v40_ecs_journalier: nadeq * 56,
v40_ecs_journalier_depensier: nadeq * 79,
surface_sud_equivalente: calc_sse(zc, bv),
surface_sud_equivalente: calc_sse(ca, zc, bv, ets),
...besoin_ecs,
...apport_interne,
...apport_solaire,
Expand Down
5 changes: 4 additions & 1 deletion src/engine.js
Original file line number Diff line number Diff line change
Expand Up @@ -352,6 +352,8 @@ export function calcul_3cl(dpe) {
});

const bv_list = env.baie_vitree_collection.baie_vitree;
const ets = env.ets_collection.ets;

const besoin_ch = calc_besoin_ch(
ilpa,
ca_id,
Expand All @@ -362,7 +364,8 @@ export function calcul_3cl(dpe) {
apport_et_besoin.nadeq,
ecs,
instal_ch,
bv_list
bv_list,
ets
);
apport_et_besoin = { ...apport_et_besoin, ...besoin_ch };

Expand Down
9 changes: 8 additions & 1 deletion test/corpus.json
Original file line number Diff line number Diff line change
Expand Up @@ -174,5 +174,12 @@
"2262E0004883G",
"2262E0019708L",
"2469E0234270E",
"2469E2650374G"
"2469E2650374G",
"2362E0595026C",
"2213E0033125P",
"2162E1023160S",
"2262E0020943Y",
"2364E0984413P",
"2213E1322779R",
"2464E1550878T"
]
19 changes: 19 additions & 0 deletions test/fixtures/2162E1023160S.xml

Large diffs are not rendered by default.

Loading

0 comments on commit 26a7c42

Please sign in to comment.