Skip to content

Commit

Permalink
feat(feat-250): Add auxiliaire_distribution_ch for ch with circulator
Browse files Browse the repository at this point in the history
  • Loading branch information
Jérôme GAVIGNET committed Nov 25, 2024
1 parent d8e6d19 commit a8772cc
Show file tree
Hide file tree
Showing 5 changed files with 151 additions and 8 deletions.
95 changes: 95 additions & 0 deletions src/15_conso_aux.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import enums from './enums.js';
import tvs from './tv.js';
import { mois_liste } from './utils.js';

const G = {
'chaudière gaz': 20,
Expand All @@ -23,3 +25,96 @@ export function conso_aux_gen(di, de, type, bch, bch_dep) {
di[`conso_auxiliaire_generation_${type}`] = (Paux_g_ch * bch) / di.pn || 0;
di[`conso_auxiliaire_generation_${type}_depensier`] = (Paux_g_ch * bch_dep) / di.pn || 0;
}

/**
* Calcul de la consommation des auxiliaires de distribution de chauffage
* @param em_ch { EmetteurChauffageItem[]}
* @param di {Donnee_intermediaire} donnée intermédiaire d'une installation_chauffage
* @param surfaceHabitable {number}
* @param zcId {number} id de la zone climatique du bien
* @param caId {number} id de la classe d'altitude du bien
* @param ilpa {number} 1 si bien à inertie lourde, 0 sinon
* @param GV {number} déperdition de l'enveloppe
*/
export function conso_aux_distribution_ch(em_ch, di, surfaceHabitable, zcId, caId, ilpa, GV) {
const ca = enums.classe_altitude[caId];
const zc = enums.zone_climatique[zcId];

const Nref19 = tvs.nref19[ilpa];

let nref19 = 0;

for (const mois of mois_liste) {
nref19 += Nref19[ca][mois][zc];
}

const Pcircem19 = getPuissanceCirculateur(em_ch, di, surfaceHabitable, GV, 19);

di[`conso_auxiliaire_distribution_ch`] = (Pcircem19 * nref19) / 1000;
}

/**
* 15.2.1 Puissance des circulateurs de chauffage
* @param em_ch { EmetteurChauffageItem[]}
* @param di {Donnee_intermediaire} donnée intermédiaire d'une installation_chauffage
* @param surfaceHabitable {number}
* @param GV {number} déperdition de l'enveloppe
* @param Tbase {number} température
*/
function getPuissanceCirculateur(em_ch, di, surfaceHabitable, GV, Tbase) {
const typeEmetteur = parseInt(em_ch[0].donnee_entree.enum_type_emission_distribution_id);

// Perte de charge de l’émetteur
let deltaPem = 35;
let Fcot = 0.802;

/**
* 15.2.1 Puissance des circulateurs de chauffage
* Plancher/plafond chauffant => deltaPemnom = 15
* Radiateurs monotube => deltaPemnom = 30
* Radiateurs autres => deltaPemnom = 10
*/
if ([6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 43, 44].includes(typeEmetteur)) {
deltaPem = 15;
Fcot = 0.156;
} else if ([24, 25, 26, 27, 28, 29, 30, 31].includes(typeEmetteur)) {
deltaPem = 30;
} else if ([10, 19, 32, 33, 34, 35, 36, 37, 38, 39, 45].includes(typeEmetteur)) {
deltaPem = 10;
}

/**
* En présence de plusieurs types d’émetteurs, le coefficient Fcot le plus défavorable sera pris, c’est-à-dire pour
* l’émetteur « Autre ».
*/
if (em_ch.length > 1) {
Fcot = 0.802;
}

const nbNiveauChauffage = em_ch[0].donnee_entree.nombre_niveau_installation_ch || 1;

// Calcul de la longueur du réseau le plus défavorisé
const Lem = 5 * Fcot * (nbNiveauChauffage + (surfaceHabitable / nbNiveauChauffage) ** 0.5);

// Pertes de charge du réseau (kPa)
const deltaPemnom = 0.15 * Lem + deltaPem;

// Ratio du besoin couvert par l’équipement
const ratioSurfaceChauffage =
(em_ch[0].donnee_entree.surface_chauffee || surfaceHabitable) / surfaceHabitable;

// Chute nominale de température de dimensionnement
const deltaDim = 7.5;

// Puissance nominale en chaud (kW)
const Pnc = 10 ** -3 * GV * (20 - Tbase);

const Qvemnom = (Pnc * ratioSurfaceChauffage) / (1.163 * deltaDim);

return Math.max(
30,
6.44 *
((deltaPemnom * Qvemnom) / Math.max(1, surfaceHabitable / 400)) ** 0.676 *
Math.max(1, surfaceHabitable / 400)
);
}
12 changes: 9 additions & 3 deletions src/9_chauffage.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ export default function calc_chauffage(
GV,
Sh,
hsp,
ac
ac,
ilpa
) {
const de = ch.donnee_entree;
const di = {};
Expand All @@ -24,7 +25,12 @@ export default function calc_chauffage(
di.besoin_ch_depensier = bch_dep;

const em_ch = ch.emetteur_chauffage_collection.emetteur_chauffage;
em_ch.forEach((em_ch) => calc_emetteur_ch(em_ch, de, map_id, inertie_id));
em_ch.forEach((em_ch) => {
em_ch.donnee_intermediaire.nombre_niveau_installation_ch =
ch.donnee_entree.nombre_niveau_installation_ch || 1;
em_ch.donnee_intermediaire.surface_chauffee = ch.donnee_entree.surface_chauffee || Sh;
calc_emetteur_ch(em_ch, de, map_id, inertie_id);
});

const cfg_id = requestInput(de, du, 'cfg_installation_ch');
const gen_ch = ch.generateur_chauffage_collection.generateur_chauffage;
Expand Down Expand Up @@ -64,7 +70,7 @@ export default function calc_chauffage(
ca_id,
zc_id,
ac,
prorataGenerateur
ilpa
);
});

Expand Down
27 changes: 25 additions & 2 deletions src/9_generateur_ch.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import enums from './enums.js';
import { requestInput, requestInputID, tv, tvColumnIDs } from './utils.js';
import { conso_aux_gen } from './15_conso_aux.js';
import { conso_aux_distribution_ch, conso_aux_gen } from './15_conso_aux.js';
import { conso_ch } from './9_conso_ch.js';
import { calc_generateur_combustion_ch } from './13.2_generateur_combustion_ch.js';
import { scopOrCop } from './12.4_pac.js';
Expand Down Expand Up @@ -90,7 +90,8 @@ export function calc_generateur_ch(
hsp,
ca_id,
zc_id,
ac
ac,
ilpa
) {
const de = gen_ch.donnee_entree;
const du = gen_ch.donnee_utilisateur || {};
Expand Down Expand Up @@ -178,6 +179,28 @@ export function calc_generateur_ch(
}

conso_aux_gen(di, de, 'ch', bch, bch_dep);

/**
* 15 Calcul des consommations d’auxiliaires des installations de chauffage (Caux_ch) et d’ECS (Caux_ecs)
*
* Les consommations des auxiliaires de distribution de chauffage et d’ECS sont prises nulles pour les installations
* individuelles en l’absence d’un circulateur externe au générateur. On exclut donc les générateurs suivants :
*
* >= 4 - exclusion des PAC air / air
* >= 20 && <= 47 - exclusion des poêles
* 53, 54 - exclusion des radiateurs gaz
* >= 98 && <= 105 - exclusion des émetteurs à effet joule, radiateurs électriques, plafonds / planchers électriques
*
*/
if (
de.enum_type_generateur_ch_id >= 106 ||
(de.enum_type_generateur_ch_id >= 55 && de.enum_type_generateur_ch_id <= 97) ||
[48, 49, 50, 51, 52].includes(de.enum_type_generateur_ch_id) ||
(de.enum_type_generateur_ch_id >= 4 && de.enum_type_generateur_ch_id <= 19)
) {
conso_aux_distribution_ch(em_ch, di, Sh, zc_id, ca_id, ilpa, GV);
}

conso_ch(di, de, du, _pos, cfg_ch, em_ch, GV, Sh, hsp, bch, bch_dep);

gen_ch.donnee_intermediaire = di;
Expand Down
6 changes: 5 additions & 1 deletion src/conso.js
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,11 @@ function calc_conso_pond(
const conso = gen_ch.donnee_intermediaire.conso_auxiliaire_generation_ch_depensier || 0;
return acc + getConso(coef, 'électricité auxiliaire', conso);
}, 0);
ret.auxiliaire_distribution_ch = 0;

ret.auxiliaire_distribution_ch = gen_ch.reduce((acc, gen_ch) => {
const conso = gen_ch.donnee_intermediaire.conso_auxiliaire_distribution_ch || 0;
return acc + getConso(coef, 'électricité auxiliaire', conso);
}, 0);

ret.ch = getChauffageConso(gen_ch, 'conso_ch', coef, prorataChauffage);

Expand Down
19 changes: 17 additions & 2 deletions src/engine.js
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,21 @@ export function calcul_3cl(dpe) {
// needed for apport_et_besoin
instal_ch.forEach((ch) => {
ch.donnee_entree.ficheTechniqueComptage = ficheTechniqueComptage;
calc_chauffage(dpe, ch, ca_id, zc_id, inertie_id, map_id, 0, 0, GV, ShChauffageAndEcs, hsp, ac);
calc_chauffage(
dpe,
ch,
ca_id,
zc_id,
inertie_id,
map_id,
0,
0,
GV,
ShChauffageAndEcs,
hsp,
ac,
ilpa
);
});

const bv_list = env.baie_vitree_collection.baie_vitree;
Expand Down Expand Up @@ -368,7 +382,8 @@ export function calcul_3cl(dpe) {
GV,
ShChauffageAndEcs,
hsp,
ac
ac,
ilpa
);
});

Expand Down

0 comments on commit a8772cc

Please sign in to comment.