fix: use unbiased standard deviation formula
[e-mobility-charging-stations-simulator.git] / src / utils / ElectricUtils.ts
index 7df3db730af0d04b4580f3898a07dc5e87f1f295..b0f8dff412ba6984f5443155339d40f0b4ec5691 100644 (file)
@@ -1,10 +1,19 @@
+// Copyright Jerome Benoit. 2021-2023. All Rights Reserved.
+
+/**
+ * Rationale: https://wiki.piment-noir.org/doku.php/en:cs:modelling_multi-phased_electrical_system_interconnexion
+ */
+
 /**
  * Targeted to AC related values calculation.
- * To use for DC, always consider cosPhi = 1 and do not use per phase helpers
  */
-export default class ElectricUtils {
-  static ampTotal(nbOfPhases: number, Iph: number): number {
-    return nbOfPhases * Iph;
+export class ACElectricUtils {
+  private constructor() {
+    // This is intentional
+  }
+
+  static powerTotal(nbOfPhases: number, V: number, Iph: number, cosPhi = 1): number {
+    return nbOfPhases * ACElectricUtils.powerPerPhase(V, Iph, cosPhi);
   }
 
   static powerPerPhase(V: number, Iph: number, cosPhi = 1): number {
@@ -15,24 +24,45 @@ export default class ElectricUtils {
     return Math.round(powerPerPhase);
   }
 
-  static powerTotal(nbOfPhases: number, V: number, Iph: number, cosPhi = 1): number {
-    return nbOfPhases * ElectricUtils.powerPerPhase(V, Iph, cosPhi);
+  static amperageTotal(nbOfPhases: number, Iph: number): number {
+    return nbOfPhases * Iph;
   }
 
-  static ampTotalFromPower(P: number, V: number, cosPhi = 1): number {
-    const power = P / (V * cosPhi);
+  static amperageTotalFromPower(P: number, V: number, cosPhi = 1): number {
+    const amperage = P / (V * cosPhi);
     if (cosPhi === 1 && P % V === 0) {
-      return power;
+      return amperage;
     }
-    return Math.round(power);
+    return Math.round(amperage);
   }
 
-  static ampPerPhaseFromPower(nbOfPhases: number, P: number, V: number, cosPhi = 1): number {
-    const power = ElectricUtils.ampTotalFromPower(P, V, cosPhi);
-    const powerPerPhase = power / nbOfPhases;
-    if (power % nbOfPhases === 0) {
-      return powerPerPhase;
+  static amperagePerPhaseFromPower(nbOfPhases: number, P: number, V: number, cosPhi = 1): number {
+    const amperage = ACElectricUtils.amperageTotalFromPower(P, V, cosPhi);
+    const amperagePerPhase = amperage / nbOfPhases;
+    if (amperage % nbOfPhases === 0) {
+      return amperagePerPhase;
     }
-    return Math.round(powerPerPhase);
+    return Math.round(amperagePerPhase);
+  }
+}
+
+/**
+ * Targeted to DC related values calculation.
+ */
+export class DCElectricUtils {
+  private constructor() {
+    // This is intentional
+  }
+
+  static power(V: number, I: number): number {
+    return V * I;
+  }
+
+  static amperage(P: number, V: number): number {
+    const amperage = P / V;
+    if (P % V === 0) {
+      return amperage;
+    }
+    return Math.round(amperage);
   }
 }