fix: fix template name consistency
[e-mobility-charging-stations-simulator.git] / src / utils / ElectricUtils.ts
index 7df3db730af0d04b4580f3898a07dc5e87f1f295..c4fdfa10142c1d7fde8a1fdb685686813f20d91d 100644 (file)
@@ -1,38 +1,70 @@
+// Copyright Jerome Benoit. 2021-2024. 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;
+// eslint-disable-next-line @typescript-eslint/no-extraneous-class
+export class ACElectricUtils {
+  private constructor () {
+    // This is intentional
   }
 
-  static powerPerPhase(V: number, Iph: number, cosPhi = 1): number {
-    const powerPerPhase = V * Iph * cosPhi;
+  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 {
+    const powerPerPhase = V * Iph * cosPhi
     if (cosPhi === 1) {
-      return powerPerPhase;
+      return powerPerPhase
     }
-    return Math.round(powerPerPhase);
+    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(amperage)
+  }
+
+  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(power);
+    return Math.round(amperagePerPhase)
+  }
+}
+
+/**
+ * Targeted to DC related values calculation.
+ */
+// eslint-disable-next-line @typescript-eslint/no-extraneous-class
+export class DCElectricUtils {
+  private constructor () {
+    // This is intentional
+  }
+
+  static power (V: number, I: number): number {
+    return V * I
   }
 
-  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 amperage (P: number, V: number): number {
+    const amperage = P / V
+    if (P % V === 0) {
+      return amperage
     }
-    return Math.round(powerPerPhase);
+    return Math.round(amperage)
   }
 }