@open3cl/engine 1.10.1 → 1.11.0
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.
- package/9_chauffage.js +15 -0
- package/9_chauffage.spec.js +51 -1
- package/engine.js +1 -1
- package/package.json +1 -1
package/9_chauffage.js
CHANGED
|
@@ -41,6 +41,20 @@ export function isEmetteurAppointIndividuel(instChDe, idx) {
|
|
|
41
41
|
);
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Longueur par défaut du réseau de l'installation de chauffage (m), même formule que la
|
|
46
|
+
* longueur de bouclage de l'installation ECS :
|
|
47
|
+
* Lb = 4 × (Sh / Niv)^0,5 + 6 × (Niv − 0,5)
|
|
48
|
+
* @see Methode_de_calcul_3CL_DPE_2021-338.pdf - §15.2.3
|
|
49
|
+
* @param {number} surfaceInstallation surface chauffée par l'installation (m²)
|
|
50
|
+
* @param {number} nombreNiveau nombre de niveaux desservis par l'installation
|
|
51
|
+
* @returns {number}
|
|
52
|
+
*/
|
|
53
|
+
export function calc_lb_installation_ch(surfaceInstallation, nombreNiveau) {
|
|
54
|
+
const niv = Number(nombreNiveau) || 1;
|
|
55
|
+
return 4 * Math.pow(surfaceInstallation / niv, 0.5) + 6 * (niv - 0.5);
|
|
56
|
+
}
|
|
57
|
+
|
|
44
58
|
export default function calc_chauffage(
|
|
45
59
|
dpe,
|
|
46
60
|
ch,
|
|
@@ -67,6 +81,7 @@ export default function calc_chauffage(
|
|
|
67
81
|
|
|
68
82
|
di.besoin_ch = bch;
|
|
69
83
|
di.besoin_ch_depensier = bch_dep;
|
|
84
|
+
di.lb = calc_lb_installation_ch(de.surface_chauffee || Sh, de.nombre_niveau_installation_ch);
|
|
70
85
|
|
|
71
86
|
const em_ch = ch.emetteur_chauffage_collection.emetteur_chauffage;
|
|
72
87
|
em_ch.forEach((em_ch, idx) => {
|
package/9_chauffage.spec.js
CHANGED
|
@@ -62,7 +62,8 @@ const {
|
|
|
62
62
|
generateursPrincipauxCascade,
|
|
63
63
|
ratioDimensionnement,
|
|
64
64
|
reseauCirculateurUnique,
|
|
65
|
-
isEmetteurAppointIndividuel
|
|
65
|
+
isEmetteurAppointIndividuel,
|
|
66
|
+
calc_lb_installation_ch
|
|
66
67
|
} = await import('./9_chauffage.js');
|
|
67
68
|
const { requestInput, tv, tvColumnIDs } = await import('./utils.js');
|
|
68
69
|
const { calc_emetteur_ch } = await import('./9_emetteur_ch.js');
|
|
@@ -185,6 +186,8 @@ describe('calc_chauffage - cas nominal (1 générateur, 1 émetteur)', () => {
|
|
|
185
186
|
expect(ch.donnee_intermediaire).toStrictEqual({
|
|
186
187
|
besoin_ch: 1000,
|
|
187
188
|
besoin_ch_depensier: 1200,
|
|
189
|
+
// 4 × (100 / 1)^0,5 + 6 × (1 − 0,5) = 43
|
|
190
|
+
lb: 43,
|
|
188
191
|
conso_ch: 100,
|
|
189
192
|
conso_ch_depensier: 120
|
|
190
193
|
});
|
|
@@ -237,6 +240,53 @@ describe('calc_chauffage - cas nominal (1 générateur, 1 émetteur)', () => {
|
|
|
237
240
|
});
|
|
238
241
|
});
|
|
239
242
|
|
|
243
|
+
/**
|
|
244
|
+
* Longueur du réseau de l'installation de chauffage, même formule que la longueur de
|
|
245
|
+
* bouclage ECS : Lb = 4 × (Sh / Niv)^0,5 + 6 × (Niv − 0,5)
|
|
246
|
+
* @see : Methode_de_calcul_3CL_DPE_2021-338.pdf - §15.2.3
|
|
247
|
+
*/
|
|
248
|
+
describe('calc_lb_installation_ch - longueur du réseau de chauffage', () => {
|
|
249
|
+
test.each([
|
|
250
|
+
['1 niveau, 100 m²', 100, 1, 43],
|
|
251
|
+
['1 niveau, 50 m²', 50, 1, 31.284271247461902],
|
|
252
|
+
['3 niveaux, 100 m²', 100, 3, 38.09401076758503]
|
|
253
|
+
])('%s', (_libelle, surface, niveaux, attendu) => {
|
|
254
|
+
// valeurs de référence de régression
|
|
255
|
+
expect(calc_lb_installation_ch(surface, niveaux)).toBeCloseTo(attendu, 9);
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
test.each([undefined, 0, null])('nombre de niveaux %s : repli sur 1 niveau', (niveaux) => {
|
|
259
|
+
expect(calc_lb_installation_ch(100, niveaux)).toBe(43);
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
test('nombre de niveaux saisi en chaîne', () => {
|
|
263
|
+
expect(calc_lb_installation_ch(100, '3')).toBeCloseTo(38.09401076758503, 9);
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
describe('calc_chauffage - longueur lb dans la donnée intermédiaire de l’installation', () => {
|
|
268
|
+
test('surface chauffée et nombre de niveaux de l’installation utilisés', () => {
|
|
269
|
+
const ch = installation([generateur()], [emetteur('1')], {
|
|
270
|
+
surface_chauffee: 100,
|
|
271
|
+
nombre_niveau_installation_ch: 3
|
|
272
|
+
});
|
|
273
|
+
appel(ch, { Sh: 500 });
|
|
274
|
+
expect(ch.donnee_intermediaire.lb).toBeCloseTo(38.09401076758503, 9);
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
test('surface chauffée absente : repli sur la surface habitable Sh', () => {
|
|
278
|
+
const ch = installation([generateur()], [emetteur('1')], { surface_chauffee: 0 });
|
|
279
|
+
appel(ch, { Sh: 50 });
|
|
280
|
+
expect(ch.donnee_intermediaire.lb).toBeCloseTo(31.284271247461902, 9);
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
test('aucun impact sur le besoin transmis au générateur', () => {
|
|
284
|
+
const ch = installation([generateur()], [emetteur('1')], { nombre_niveau_installation_ch: 3 });
|
|
285
|
+
appel(ch);
|
|
286
|
+
expect(vi.mocked(calc_generateur_ch).mock.calls[0][5]).toBe(1000);
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
|
|
240
290
|
describe('calc_chauffage - mise à l’échelle du besoin selon la surface', () => {
|
|
241
291
|
test('besoin ajusté au prorata surface_chauffee / Sh quand elles diffèrent', () => {
|
|
242
292
|
const ch = installation([generateur()], [emetteur('1')]);
|
package/engine.js
CHANGED
|
@@ -36,7 +36,7 @@ import DpeSanitizerService from './dpe-sanitizer.service.js';
|
|
|
36
36
|
import { reconstituerRdimDpeGenereImmeuble } from './17.2_rdim_dpe_genere_immeuble.js';
|
|
37
37
|
import { reconstituerRdimEcsIndividuelleUnique } from './11_rdim_ecs_individuelle_unique.js';
|
|
38
38
|
|
|
39
|
-
const LIB_VERSION = '1.
|
|
39
|
+
const LIB_VERSION = '1.11.0';
|
|
40
40
|
|
|
41
41
|
const dpeSanitizerService = new DpeSanitizerService();
|
|
42
42
|
|