@open3cl/engine 1.3.5 → 1.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -81,20 +81,25 @@ export function calc_Qdw_j(instal_ecs, becs_j) {
81
81
 
82
82
  const type_installation = requestInput(de, du, 'type_installation');
83
83
 
84
- const Qdw_ind_vc = calc_Qdw_ind_j(becs_j);
84
+ const Qdw_ind_vc = calc_Qdw_ind_j(instal_ecs, becs_j);
85
85
  const Qdw_coll_vc = calc_Qdw_col_j(instal_ecs, becs_j, type_installation);
86
86
 
87
- return (Qdw_ind_vc + Qdw_coll_vc) * 0.48;
87
+ return Qdw_ind_vc + Qdw_coll_vc;
88
88
  }
89
89
 
90
90
  // 15.2.3
91
- export function calc_Qdw_ind_j(becs_j) {
92
- return (0.1 * becs_j) / 8760.0;
91
+ /**
92
+ * @param instal_ecs {InstallationEcsItem}
93
+ * @param becs_j {number}
94
+ */
95
+ export function calc_Qdw_ind_j(instal_ecs, becs_j) {
96
+ const Rat_ecs = instal_ecs.generateur_ecs_collection.generateur_ecs.length > 1 ? 0.5 : 1;
97
+ return 0.1 * Rat_ecs * becs_j;
93
98
  }
94
99
 
95
100
  export function calc_Qdw_col_j(instal_ecs, becs_j, type_installation) {
96
101
  if (type_installation.includes('installation collective')) {
97
- return (0.112 * becs_j) / 8760.0;
102
+ return 0.112 * becs_j;
98
103
  }
99
104
  return 0;
100
105
  }
package/9_besoin_ch.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import enums from './enums.js';
2
2
  import tvs from './tv.js';
3
- import { calc_Qdw_j } from './14_generateur_ecs.js';
4
3
  import { calc_besoin_ecs_j } from './11_besoin_ecs.js';
5
4
  import { calc_Qrec_gen_j } from './9_generateur_ch.js';
6
5
  import { calc_ai_j, calc_as_j } from './6.1_apport_gratuit.js';
@@ -18,7 +17,9 @@ export default function calc_besoin_ch(
18
17
  instal_ecs,
19
18
  instal_ch,
20
19
  bv,
21
- ets
20
+ ets,
21
+ th,
22
+ nbLogements
22
23
  ) {
23
24
  const ca = enums.classe_altitude[ca_id];
24
25
  const zc = enums.zone_climatique[zc_id];
@@ -48,10 +49,8 @@ export default function calc_besoin_ch(
48
49
  * 11.4 Plusieurs systèmes d’ECS (limité à 2 systèmes différents par logement)
49
50
  * Les besoins en ECS pour chaque générateur sont / 2
50
51
  */
51
- const prorataEcs = instal_ecs.length > 1 ? 0.5 : 1;
52
+ const prorataEcs = instal_ecs.length > 1 ? 1 / instal_ecs.length : 1;
52
53
 
53
- let Qdw_total_ecs = 0;
54
- let Qdw_total_ecs_dep = 0;
55
54
  let Qgw_total_ecs = 0;
56
55
  instal_ecs.forEach((instal_ecs) => {
57
56
  let Qgw;
@@ -78,15 +77,16 @@ export default function calc_besoin_ch(
78
77
  Qgw_total_ecs += (0.48 * Qgw * (instal_ecs.donnee_entree.rdim || 1)) / 8760;
79
78
  });
80
79
 
81
- for (const mois of mois_liste) {
82
- // en kw/h
83
- const becsj = calc_besoin_ecs_j(ca, mois, zc, nadeq, false) * prorataEcs;
84
- // en kw/h
85
- const becs_j_dep = calc_besoin_ecs_j(ca, mois, zc, nadeq, true) * prorataEcs;
86
-
87
- Qdw_total_ecs += instal_ecs.reduce((acc, ecs) => acc + calc_Qdw_j(ecs, becsj), 0);
88
- Qdw_total_ecs_dep += instal_ecs.reduce((acc, ecs) => acc + calc_Qdw_j(ecs, becs_j_dep), 0);
89
- }
80
+ const { Qrec, Qrec_dep, sumNref19, sumNref21 } = calc_qrec(
81
+ instal_ecs,
82
+ nadeq,
83
+ prorataEcs,
84
+ ilpa,
85
+ ca,
86
+ zc,
87
+ th,
88
+ nbLogements
89
+ );
90
90
 
91
91
  /**
92
92
  * Création de la liste des générateurs de chauffage pour lesquels il y a une récupération d'énergie
@@ -144,8 +144,8 @@ export default function calc_besoin_ch(
144
144
  pertes_generateur_ch_recup += gen_recup;
145
145
  pertes_generateur_ch_recup_depensier += gen_recup_dep;
146
146
 
147
- const pertes_distribution_ecs_recup_j = nref19 * Qdw_total_ecs * 1000;
148
- const pertes_distribution_ecs_recup_j_dep = nref21 * Qdw_total_ecs_dep * 1000;
147
+ const pertes_distribution_ecs_recup_j = (Qrec * nref19) / sumNref19;
148
+ const pertes_distribution_ecs_recup_j_dep = (Qrec_dep * nref21) / sumNref21;
149
149
  pertes_distribution_ecs_recup += pertes_distribution_ecs_recup_j;
150
150
  pertes_distribution_ecs_recup_depensier += pertes_distribution_ecs_recup_j_dep;
151
151
 
@@ -153,6 +153,7 @@ export default function calc_besoin_ch(
153
153
  pertes_stockage_ecs_recup += pertes_stockage_ecs_recup_j;
154
154
  const pertes_stockage_ecs_recup_j_dep = nref21 * Qgw_total_ecs;
155
155
 
156
+ // Normalement en wh
156
157
  besoin_ch_mois[mois] = bvj * dh19j;
157
158
  besoin_ch_mois_dep[mois] = bvj_dep * dh21j;
158
159
  besoin_ch_mois[mois] -=
@@ -160,8 +161,9 @@ export default function calc_besoin_ch(
160
161
  besoin_ch_mois_dep[mois] -=
161
162
  pertes_distribution_ecs_recup_j_dep + pertes_stockage_ecs_recup_j_dep + gen_recup_dep;
162
163
  besoin_ch_mois[mois] = Math.max(besoin_ch_mois[mois], 0);
163
- besoin_ch += besoin_ch_mois[mois] / 1000;
164
164
 
165
+ // Besoin de chauffage final en kwh
166
+ besoin_ch += besoin_ch_mois[mois] / 1000;
165
167
  besoin_ch_depensier += besoin_ch_mois_dep[mois] / 1000;
166
168
  }
167
169
 
@@ -182,6 +184,57 @@ export default function calc_besoin_ch(
182
184
  };
183
185
  }
184
186
 
187
+ function calc_qrec(instal_ecs, nadeq, prorataEcs, ilpa, ca, zc, th, nbLogements) {
188
+ const Nref21 = tvs.nref21[ilpa];
189
+ const Nref19 = tvs.nref19[ilpa];
190
+
191
+ let sumNref19 = 0;
192
+ let sumNref21 = 0;
193
+
194
+ for (const mois of mois_liste) {
195
+ const nref19 = Nref19[ca][mois][zc];
196
+ const nref21 = Nref21[ca][mois][zc];
197
+ sumNref19 += nref19;
198
+ sumNref21 += nref21;
199
+ }
200
+
201
+ let Qrec = 0;
202
+ let Qrec_dep = 0;
203
+ let total_becs_rdim = 0;
204
+ let total_becs_dep_rdim = 0;
205
+ instal_ecs.forEach((ecs) => {
206
+ let becs_int = 0;
207
+ let becs_dep_int = 0;
208
+ const isInstallationSimple = ecs.donnee_entree.enum_type_installation_id === '1';
209
+ const Tau = isInstallationSimple ? 0.1 : 0.212;
210
+ if (th === 'immeuble' && ecs.donnee_entree.rdim > 1) {
211
+ prorataEcs = ecs.donnee_entree.rdim / nbLogements;
212
+ }
213
+ for (const mois of mois_liste) {
214
+ // en kwh
215
+ becs_int += calc_besoin_ecs_j(ca, mois, zc, nadeq, false) * prorataEcs;
216
+
217
+ // en kwh
218
+ becs_dep_int += calc_besoin_ecs_j(ca, mois, zc, nadeq, true) * prorataEcs;
219
+ }
220
+
221
+ if (th !== 'immeuble') {
222
+ Qrec += ((0.48 * sumNref19 * Tau * becs_int) / 8760) * 1000;
223
+ Qrec_dep += ((0.48 * sumNref21 * Tau * becs_dep_int) / 8760) * 1000;
224
+ } else {
225
+ total_becs_rdim += Tau * becs_int * 1000;
226
+ total_becs_dep_rdim += Tau * becs_dep_int * 1000;
227
+ }
228
+ });
229
+
230
+ if (th === 'immeuble') {
231
+ Qrec = ((0.48 * sumNref19) / 8760) * total_becs_rdim;
232
+ Qrec_dep = ((0.48 * sumNref21) / 8760) * total_becs_dep_rdim;
233
+ }
234
+
235
+ return { Qrec, Qrec_dep, sumNref19, sumNref21 };
236
+ }
237
+
185
238
  function calc_Fj(GV, asj, aij, dhj, inertie) {
186
239
  if (dhj === 0) return 0;
187
240
 
package/9_chauffage.js CHANGED
@@ -260,8 +260,9 @@ function tv_ch_facteur_couverture_solaire(de, zc_id) {
260
260
  * @param GV {number} déperdition de l'enveloppe
261
261
  * @param zcId {string} id de la zone climatique du bien
262
262
  * @param caId {string} id de la classe d'altitude du bien
263
+ * @param th {string} type d'habitation
263
264
  */
264
- export function tauxChargeForGenerator(installationChauffage, GV, caId, zcId) {
265
+ export function tauxChargeForGenerator(installationChauffage, GV, caId, zcId, th) {
265
266
  // Récupération des installations de chauffage avec générateur à combustion
266
267
  const installChauffageWithCombustion = [];
267
268
  installationChauffage.forEach((ch) => {
@@ -293,8 +294,9 @@ export function tauxChargeForGenerator(installationChauffage, GV, caId, zcId) {
293
294
 
294
295
  installChauffageWithCombustion.forEach((installCh) => {
295
296
  (installCh.donnee_utilisateur.genCombustion || []).forEach((gen) => {
296
- gen.donnee_utilisateur.cdimref = Pn / (GV * (19 - tbase));
297
- gen.donnee_utilisateur.cdimrefDep = Pn / (GV * (21 - tbase));
297
+ const GV_ratio = th === 'immeuble' ? GV * (1 / (installCh.donnee_entree.rdim || 1)) : GV;
298
+ gen.donnee_utilisateur.cdimref = Pn / (GV_ratio * (19 - tbase));
299
+ gen.donnee_utilisateur.cdimrefDep = Pn / (GV_ratio * (21 - tbase));
298
300
  });
299
301
  });
300
302
  }
package/README.md CHANGED
@@ -167,32 +167,32 @@ deperdition_mur,
167
167
 
168
168
  Résultats des tests de corpus avec le mode de compatibilité activé.
169
169
 
170
- | Version librairie | corpus | Nb en dessous du taux d'erreur | Taux de réussite | Détail des valeurs |
171
- | :------------------ | ------------------------------------- | ------------------------------ | ----------------------- | ------------------------------------------------------------------------------------------------------------------- |
172
- | <ins>**1.2.3**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4489**<ins> | <ins>**45%**<ins> | |
173
- | 1.2.3 | dpe_immeuble_chauffage_individuel.csv | 3257 | 32% | |
174
- | 1.2.3 | dpe_immeuble_chauffage_collectif.csv | 5279 | 53% | |
175
- | 1.2.3 | dpe_immeuble_chauffage_mixte.csv | 2728 | 27% | |
176
- | <ins>**1.2.8**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**489**<ins> | <ins>**45%**<ins> | |
177
- | 1.2.8 | dpe_immeuble_chauffage_individuel.csv | 5275 (+2018) | 53% (+21%) | |
178
- | 1.2.8 | dpe_immeuble_chauffage_collectif.csv | 5747 (+468) | 57% (+4%) | |
179
- | 1.2.8 | dpe_immeuble_chauffage_mixte.csv | 3142 (+414) | 31% (+4%) | |
180
- | <ins>**1.3.1**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4508 (+19)**<ins> | <ins>**45%**<ins> | |
181
- | 1.3.1 | dpe_immeuble_chauffage_individuel.csv | 5459 (+184) | 55% (+2%) | |
182
- | 1.3.1 | dpe_immeuble_chauffage_collectif.csv | 5848 (+101) | 58% (+1%) | |
183
- | 1.3.1 | dpe_immeuble_chauffage_mixte.csv | 4018 (+876) | 40% (+9%) | |
184
- | <ins>**1.3.2**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4519 (+11)**<ins> | <ins>**45%**<ins> | |
185
- | 1.3.2 | dpe_immeuble_chauffage_individuel.csv | 5476 (+17) | 55% | |
186
- | 1.3.2 | dpe_immeuble_chauffage_collectif.csv | 5869 (+21) | 58% | |
187
- | 1.3.2 | dpe_immeuble_chauffage_mixte.csv | 4040 (+22) | 40% | |
188
- | <ins>**1.3.3**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4522 (+3)**<ins> | <ins>**45%**<ins> | |
189
- | 1.3.3 | dpe_immeuble_chauffage_individuel.csv | 5488 (+12) | 55% | |
190
- | 1.3.3 | dpe_immeuble_chauffage_collectif.csv | 5869 | 58% | |
191
- | 1.3.3 | dpe_immeuble_chauffage_mixte.csv | 4082 (+42) | 40% | |
192
- | <ins>**1.3.4**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4600 (+79)**<ins> | <ins>**46% (+1%)**<ins> | [Voir le détail](https://open3cl.github.io/engine/reports/corpus?corpus_file=corpus_dpe.csv) |
193
- | 1.3.4 | dpe_immeuble_chauffage_individuel.csv | 5488 | 55% | [Voir le détail](https://open3cl.github.io/engine/reports/corpus?corpus_file=dpe_immeuble_chauffage_individuel.csv) |
194
- | 1.3.4 | dpe_immeuble_chauffage_collectif.csv | 5876 (+7) | 58% | [Voir le détail](https://open3cl.github.io/engine/reports/corpus?corpus_file=dpe_immeuble_chauffage_collectif.csv) |
195
- | 1.3.4 | dpe_immeuble_chauffage_mixte.csv | 4082 (-7) | 40% | [Voir le détail](https://open3cl.github.io/engine/reports/corpus?corpus_file=dpe_immeuble_chauffage_mixte.csv) |
170
+ | Version librairie | corpus | Nb en dessous du taux d'erreur | Taux de réussite | Détail des valeurs |
171
+ | :------------------ | ------------------------------------- | ------------------------------ | ----------------- | ------------------------------------------------------------------------------------------------------------------- |
172
+ | <ins>**1.2.3**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4489**<ins> | <ins>**45%**<ins> | |
173
+ | 1.2.3 | dpe_immeuble_chauffage_individuel.csv | 3257 | 32% | |
174
+ | 1.2.3 | dpe_immeuble_chauffage_collectif.csv | 5279 | 53% | |
175
+ | 1.2.3 | dpe_immeuble_chauffage_mixte.csv | 2728 | 27% | |
176
+ | <ins>**1.2.8**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**489**<ins> | <ins>**45%**<ins> | |
177
+ | 1.2.8 | dpe_immeuble_chauffage_individuel.csv | 5275 (+2018) | 53% (+21%) | |
178
+ | 1.2.8 | dpe_immeuble_chauffage_collectif.csv | 5747 (+468) | 57% (+4%) | |
179
+ | 1.2.8 | dpe_immeuble_chauffage_mixte.csv | 3142 (+414) | 31% (+4%) | |
180
+ | <ins>**1.3.1**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4508 (+19)**<ins> | <ins>**45%**<ins> | |
181
+ | 1.3.1 | dpe_immeuble_chauffage_individuel.csv | 5459 (+184) | 55% (+2%) | |
182
+ | 1.3.1 | dpe_immeuble_chauffage_collectif.csv | 5848 (+101) | 58% (+1%) | |
183
+ | 1.3.1 | dpe_immeuble_chauffage_mixte.csv | 4018 (+876) | 40% (+9%) | |
184
+ | <ins>**1.3.2**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4519 (+11)**<ins> | <ins>**45%**<ins> | |
185
+ | 1.3.2 | dpe_immeuble_chauffage_individuel.csv | 5476 (+17) | 55% | |
186
+ | 1.3.2 | dpe_immeuble_chauffage_collectif.csv | 5869 (+21) | 58% | |
187
+ | 1.3.2 | dpe_immeuble_chauffage_mixte.csv | 4040 (+22) | 40% | |
188
+ | <ins>**1.3.5**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4522 (+3)**<ins> | <ins>**45%**<ins> | |
189
+ | 1.3.5 | dpe_immeuble_chauffage_individuel.csv | 5488 (+12) | 55% |
190
+ | 1.3.5 | dpe_immeuble_chauffage_collectif.csv | 5869 | 58% | |
191
+ | 1.3.5 | dpe_immeuble_chauffage_mixte.csv | 4082 (+42) | 40% | |
192
+ | <ins>**1.3.6**<ins> | <ins>**corpus_dpe.csv**<ins> | <ins>**4522**<ins> | <ins>**45%**<ins> | [Voir le détail](https://open3cl.github.io/engine/reports/corpus?corpus_file=corpus_dpe.csv) |
193
+ | 1.3.6 | dpe_immeuble_chauffage_individuel.csv | 5650 (+162) | 56% | [Voir le détail](https://open3cl.github.io/engine/reports/corpus?corpus_file=dpe_immeuble_chauffage_individuel.csv) |
194
+ | 1.3.6 | dpe_immeuble_chauffage_collectif.csv | 5894 (+25) | 59% (+1%) | [Voir le détail](https://open3cl.github.io/engine/reports/corpus?corpus_file=dpe_immeuble_chauffage_collectif.csv) |
195
+ | 1.3.6 | dpe_immeuble_chauffage_mixte.csv | 4141 (+59) | 41% (+1%) | [Voir le détail](https://open3cl.github.io/engine/reports/corpus?corpus_file=dpe_immeuble_chauffage_mixte.csv) |
196
196
 
197
197
  ## Roadmap
198
198
 
package/engine.js CHANGED
@@ -429,7 +429,9 @@ export function calcul_3cl(dpe) {
429
429
  ecs,
430
430
  instal_ch,
431
431
  bv_list,
432
- ets
432
+ ets,
433
+ th,
434
+ dpe.logement.caracteristique_generale.nombre_appartement
433
435
  );
434
436
  apport_et_besoin = { ...apport_et_besoin, ...besoin_ch };
435
437
 
@@ -442,7 +444,7 @@ export function calcul_3cl(dpe) {
442
444
  * 13.2.1.2 Présence d’un ou plusieurs générateurs à combustion indépendants
443
445
  * Calcul des taux de charge pour chacun des générateurs de chauffage
444
446
  */
445
- tauxChargeForGenerator(instal_ch, GV, ca_id, zc_id);
447
+ tauxChargeForGenerator(instal_ch, GV, ca_id, zc_id, th);
446
448
 
447
449
  instal_ch.forEach((ch) => {
448
450
  calc_chauffage(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open3cl/engine",
3
- "version": "1.3.5",
3
+ "version": "1.3.7",
4
4
  "description": "Open Source 3CL-DPE engine",
5
5
  "main": "index.js",
6
6
  "directories": {