using static DecimalMath.DecimalEx; namespace InnovEnergy.Lib.Units.Composite; public record Ac3Phase(AcPhase L1, AcPhase L2, AcPhase L3, Frequency Frequency) { public ApparentPower ApparentPower => L1.ApparentPower + L2.ApparentPower + L3.ApparentPower; public ReactivePower ReactivePower => L1.ReactivePower + L2.ReactivePower + L3.ReactivePower; public Power ActivePower => L1.ActivePower + L2.ActivePower + L3.ActivePower; public Angle Phi => ATan2(ReactivePower, ActivePower); public static Ac3Phase operator +(Ac3Phase left, Ac3Phase right) { var f = (left.Frequency + right.Frequency) / 2m; // TODO: check that l & r approximately equal var l1 = left.L1 + right.L1; var l2 = left.L2 + right.L2; var l3 = left.L3 + right.L3; return new Ac3Phase(l1, l2, l3, f); } }