test: add ElectricUtils.ts tests
[e-mobility-charging-stations-simulator.git] / src / utils / ElectricUtils.ts
CommitLineData
edd13439 1// Copyright Jerome Benoit. 2021-2023. All Rights Reserved.
c8eeb62b 2
b2acff85 3/**
6bf6769e 4 * Rationale: https://wiki.piment-noir.org/doku.php/en:cs:modelling_multi-phased_electrical_system_interconnexion
cb31c873
JB
5 */
6
7/**
b2acff85 8 * Targeted to AC related values calculation.
b2acff85 9 */
cb31c873 10export class ACElectricUtils {
d5bd1c00
JB
11 private constructor() {
12 // This is intentional
13 }
14
bc4da6e1
JB
15 static powerTotal(nbOfPhases: number, V: number, Iph: number, cosPhi = 1): number {
16 return nbOfPhases * ACElectricUtils.powerPerPhase(V, Iph, cosPhi);
3f40bc9c
JB
17 }
18
6af9012e 19 static powerPerPhase(V: number, Iph: number, cosPhi = 1): number {
3f40bc9c
JB
20 const powerPerPhase = V * Iph * cosPhi;
21 if (cosPhi === 1) {
22 return powerPerPhase;
23 }
24 return Math.round(powerPerPhase);
25 }
26
bc4da6e1
JB
27 static amperageTotal(nbOfPhases: number, Iph: number): number {
28 return nbOfPhases * Iph;
3f40bc9c
JB
29 }
30
cb31c873
JB
31 static amperageTotalFromPower(P: number, V: number, cosPhi = 1): number {
32 const amperage = P / (V * cosPhi);
3f40bc9c 33 if (cosPhi === 1 && P % V === 0) {
cb31c873 34 return amperage;
3f40bc9c 35 }
cb31c873 36 return Math.round(amperage);
3f40bc9c
JB
37 }
38
cb31c873
JB
39 static amperagePerPhaseFromPower(nbOfPhases: number, P: number, V: number, cosPhi = 1): number {
40 const amperage = ACElectricUtils.amperageTotalFromPower(P, V, cosPhi);
41 const amperagePerPhase = amperage / nbOfPhases;
42 if (amperage % nbOfPhases === 0) {
43 return amperagePerPhase;
3f40bc9c 44 }
cb31c873
JB
45 return Math.round(amperagePerPhase);
46 }
47}
48
49/**
50 * Targeted to DC related values calculation.
51 */
52export class DCElectricUtils {
17e9e8ce
JB
53 private constructor() {
54 // This is intentional
55 }
56
cb31c873
JB
57 static power(V: number, I: number): number {
58 return V * I;
59 }
60
61 static amperage(P: number, V: number): number {
62 const amperage = P / V;
63 if (P % V === 0) {
64 return amperage;
65 }
66 return Math.round(amperage);
3f40bc9c
JB
67 }
68}