@open3cl/engine 1.10.1 → 1.11.1
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/11_ecs.js +0 -1
- package/11_ecs.spec.js +0 -12
- package/9_chauffage.js +15 -0
- package/9_chauffage.spec.js +51 -1
- package/engine.js +1 -1
- package/package.json +1 -1
package/11_ecs.js
CHANGED
|
@@ -96,7 +96,6 @@ function calc_auxiliaire_distribution_ecs_immeuble(de, di, surfaceImmeuble, becs
|
|
|
96
96
|
// Étape 3 : Calcul de Lb pour l'installation i
|
|
97
97
|
// Lb = 1.2 × (1.1 × Sh_inst/nombre_niveaux + 4 × nombre_niveaux)
|
|
98
98
|
const Lb = 1.2 * (1.1 * (Sh_inst / Niv_inst) + 4 * Niv_inst);
|
|
99
|
-
di.lb = Lb;
|
|
100
99
|
|
|
101
100
|
// Étape 4 : DeltaPb = 0.2 × Lb + 10
|
|
102
101
|
const DeltaPb = 0.2 * Lb + 10;
|
package/11_ecs.spec.js
CHANGED
|
@@ -744,18 +744,6 @@ describe('calc_ecs - auxiliaires de distribution ECS (immeuble)', () => {
|
|
|
744
744
|
return ecs.donnee_intermediaire;
|
|
745
745
|
}
|
|
746
746
|
|
|
747
|
-
test('réseau bouclé : longueur de bouclage lb exposée dans la donnée intermédiaire', () => {
|
|
748
|
-
const di = donneeIntermediaireImmeuble({
|
|
749
|
-
enum_type_installation_id: '2',
|
|
750
|
-
enum_bouclage_reseau_ecs_id: '2',
|
|
751
|
-
surface_habitable: 100,
|
|
752
|
-
nombre_niveau_installation_ecs: '2'
|
|
753
|
-
});
|
|
754
|
-
|
|
755
|
-
// Lb = 1,2 × (1,1 × 100 / 2 + 4 × 2) = 75,6 m
|
|
756
|
-
expect(di.lb).toBeCloseTo(75.6, 9);
|
|
757
|
-
});
|
|
758
|
-
|
|
759
747
|
test.each([
|
|
760
748
|
['réseau avec traçage', { enum_type_installation_id: '2', enum_bouclage_reseau_ecs_id: '3' }],
|
|
761
749
|
[
|
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.1';
|
|
40
40
|
|
|
41
41
|
const dpeSanitizerService = new DpeSanitizerService();
|
|
42
42
|
|