Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(fix-250): Fix auxiliaire_distribution_ch for ch with circulator #261

Merged
merged 1 commit into from
Nov 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 9 additions & 7 deletions src/15_conso_aux.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,15 @@ export function conso_aux_gen(di, de, type, bch, bch_dep, Sh) {
/**
* 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 de {Donnee_entree} donnée du générateur de chauffage
* @param di {Donnee_intermediaire} donnée intermédiaire du générateur de 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) {
export function conso_aux_distribution_ch(em_ch, de, di, surfaceHabitable, zcId, caId, ilpa, GV) {
const ca = enums.classe_altitude[caId];
const zc = enums.zone_climatique[zcId];

Expand All @@ -59,6 +60,7 @@ export function conso_aux_distribution_ch(em_ch, di, surfaceHabitable, zcId, caI

const Pcircem19 = getPuissanceCirculateur(
em_ch,
de,
di,
surfaceHabitable,
GV,
Expand All @@ -71,12 +73,13 @@ export function conso_aux_distribution_ch(em_ch, di, surfaceHabitable, zcId, caI
/**
* 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 de {Donnee_entree} donnée du générateur de chauffage
* @param di {Donnee_intermediaire} donnée intermédiaire du générateur de 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) {
function getPuissanceCirculateur(em_ch, de, di, surfaceHabitable, GV, Tbase) {
const typeEmetteur = parseInt(em_ch[0].donnee_entree.enum_type_emission_distribution_id);
const temperatureEmetteur = parseInt(em_ch[0].donnee_entree.enum_temp_distribution_ch_id);

Expand Down Expand Up @@ -107,7 +110,7 @@ function getPuissanceCirculateur(em_ch, di, surfaceHabitable, GV, Tbase) {
Fcot = 0.802;
}

const nbNiveauChauffage = em_ch[0].donnee_entree.nombre_niveau_installation_ch || 1;
const nbNiveauChauffage = de.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);
Expand All @@ -116,8 +119,7 @@ function getPuissanceCirculateur(em_ch, di, surfaceHabitable, GV, Tbase) {
const deltaPemnom = 0.15 * Lem + deltaPem;

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

// Chute nominale de température de dimensionnement
// 4 - température de distribution de chauffage haute
Expand Down
26 changes: 22 additions & 4 deletions src/9_chauffage.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import { requestInput, tv, tvColumnIDs } from './utils.js';
import { calc_emetteur_ch } from './9_emetteur_ch.js';
import { calc_generateur_ch, type_generateur_ch } from './9_generateur_ch.js';
import {
calc_generateur_ch,
hasConsoForAuxDistribution,
type_generateur_ch
} from './9_generateur_ch.js';

export default function calc_chauffage(
dpe,
Expand All @@ -26,9 +30,6 @@ export default function calc_chauffage(

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

Expand All @@ -49,12 +50,21 @@ export default function calc_chauffage(

const Fch = tv_ch_facteur_couverture_solaire(de, zc_id);

// Nombre de générateurs avec une consommation des auxiliaires de distribution
const nbGenWithAuxConsoDistribution = gen_ch.reduce((acc, gen) => {
if (hasConsoForAuxDistribution(gen.donnee_entree.enum_type_generateur_ch_id)) {
acc++;
}
return acc;
}, 0);

gen_ch.forEach((gen, _pos) => {
const prorataGenerateur =
nbCascadeAndCombustion > 1 ? gen.donnee_intermediaire.pn / Pnominal : 1;

gen.donnee_entree.ratio_virtualisation = de.ratio_virtualisation || 1;
gen.donnee_entree.surface_chauffee = de.surface_chauffee || Sh;
gen.donnee_entree.nombre_niveau_installation_ch = de.nombre_niveau_installation_ch || 1;
gen.donnee_entree.fch = Fch || 0.5;

calc_generateur_ch(
Expand All @@ -73,6 +83,14 @@ export default function calc_chauffage(
ac,
ilpa
);

// Si plusieurs générateurs de chauffage, la consommation des auxiliares est répartie sur chacun d'eux
if (
gen.donnee_intermediaire.conso_auxiliaire_distribution_ch &&
nbGenWithAuxConsoDistribution > 0
) {
gen.donnee_intermediaire.conso_auxiliaire_distribution_ch /= nbGenWithAuxConsoDistribution;
}
});

di.conso_ch = gen_ch.reduce((acc, gen_ch) => acc + gen_ch.donnee_intermediaire.conso_ch, 0);
Expand Down
10 changes: 5 additions & 5 deletions src/9_conso_ch.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,14 @@ function coef_ch(Fch) {
1: 0.25 * (1 - Fch)
},
'installation de chauffage avec chaudière en relève de pac': {
0: 0.75,
1: 0.25
0: 0.8,
1: 0.2
},
'installation de chauffage avec chaudière en relève de pac avec insert ou poêle bois en appoint':
{
0: 0.75 * 0.8,
1: 0.25 * 0.8,
2: 0.2
0: 0.8 * 0.75,
1: 0.2 * 0.75,
2: 0.25
},
'installation de chauffage collectif avec base + appoint': {
0: 0.75 * (1 - Fch),
Expand Down
39 changes: 23 additions & 16 deletions src/9_generateur_ch.js
Original file line number Diff line number Diff line change
Expand Up @@ -182,27 +182,34 @@ export function calc_generateur_ch(

/**
* 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);
if (hasConsoForAuxDistribution(de.enum_type_generateur_ch_id)) {
conso_aux_distribution_ch(em_ch, de, 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;
gen_ch.donnee_utilisateur = du;
}

/**
* 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
*
*/
export function hasConsoForAuxDistribution(enum_type_generateur_ch_id) {
return (
enum_type_generateur_ch_id >= 106 ||
(enum_type_generateur_ch_id >= 55 && enum_type_generateur_ch_id <= 97) ||
[48, 49, 50, 51, 52].includes(enum_type_generateur_ch_id) ||
(enum_type_generateur_ch_id >= 4 && enum_type_generateur_ch_id <= 19)
);
}