/// <summary> /// Computes an estimated value of three phase current flow through the transformer based on estimated values of the high side and low side node voltages. /// </summary> public void ComputeThreePhaseEstimatedCurrentFlow() { if (m_parentSubstation.ParentDivision.ParentCompany.ParentModel.CurrentFlowPostProcessingSetting == CurrentFlowPostProcessingSetting.ProcessOnlyMeasuredBranches) { if ((FromNodeCurrent.IncludeInEstimator || ToNodeCurrent.IncludeInEstimator) && FromNode.IsObserved && ToNode.IsObserved) { DenseMatrix Vi = DenseMatrix.OfArray(new Complex[3, 1]); DenseMatrix Vj = DenseMatrix.OfArray(new Complex[3, 1]); Vi[0, 0] = FromNode.Voltage.PhaseA.Estimate.PerUnitComplexPhasor; Vi[1, 0] = FromNode.Voltage.PhaseB.Estimate.PerUnitComplexPhasor; Vi[2, 0] = FromNode.Voltage.PhaseC.Estimate.PerUnitComplexPhasor; Vj[0, 0] = ToNode.Voltage.PhaseA.Estimate.PerUnitComplexPhasor; Vj[1, 0] = ToNode.Voltage.PhaseB.Estimate.PerUnitComplexPhasor; Vj[2, 0] = ToNode.Voltage.PhaseC.Estimate.PerUnitComplexPhasor; DenseMatrix Iij = (ThreePhaseSeriesAdmittance * (1 / (EffectiveComplexMultiplier.Magnitude * EffectiveComplexMultiplier.Magnitude))) * Vi - ThreePhaseSeriesAdmittance * (1 / EffectiveComplexMultiplier.Conjugate()) * Vj; DenseMatrix Iji = -(ThreePhaseSeriesAdmittance * (1 / EffectiveComplexMultiplier)) * Vi + ThreePhaseSeriesAdmittance * Vj; FromNodeCurrent.PhaseA.Estimate.PerUnitComplexPhasor = Iij[0, 0]; FromNodeCurrent.PhaseB.Estimate.PerUnitComplexPhasor = Iij[1, 0]; FromNodeCurrent.PhaseC.Estimate.PerUnitComplexPhasor = Iij[2, 0]; ToNodeCurrent.PhaseA.Estimate.PerUnitComplexPhasor = Iji[0, 0]; ToNodeCurrent.PhaseB.Estimate.PerUnitComplexPhasor = Iji[1, 0]; ToNodeCurrent.PhaseC.Estimate.PerUnitComplexPhasor = Iji[2, 0]; } else { FromNodeCurrent.PhaseA.Estimate.Magnitude = 0; FromNodeCurrent.PhaseA.Estimate.AngleInDegrees = 0; ToNodeCurrent.PhaseA.Estimate.Magnitude = 0; ToNodeCurrent.PhaseA.Estimate.AngleInDegrees = 0; FromNodeCurrent.PhaseB.Estimate.Magnitude = 0; FromNodeCurrent.PhaseB.Estimate.AngleInDegrees = 0; ToNodeCurrent.PhaseB.Estimate.Magnitude = 0; ToNodeCurrent.PhaseB.Estimate.AngleInDegrees = 0; FromNodeCurrent.PhaseC.Estimate.Magnitude = 0; FromNodeCurrent.PhaseC.Estimate.AngleInDegrees = 0; ToNodeCurrent.PhaseC.Estimate.Magnitude = 0; ToNodeCurrent.PhaseC.Estimate.AngleInDegrees = 0; } } else if (m_parentSubstation.ParentDivision.ParentCompany.ParentModel.CurrentFlowPostProcessingSetting == CurrentFlowPostProcessingSetting.ProcessBranchesByNodeObservability) { if (FromNode.IsObserved && ToNode.IsObserved) { DenseMatrix Vi = DenseMatrix.OfArray(new Complex[3, 1]); DenseMatrix Vj = DenseMatrix.OfArray(new Complex[3, 1]); Vi[0, 0] = FromNode.Voltage.PhaseA.Estimate.PerUnitComplexPhasor; Vi[1, 0] = FromNode.Voltage.PhaseB.Estimate.PerUnitComplexPhasor; Vi[2, 0] = FromNode.Voltage.PhaseC.Estimate.PerUnitComplexPhasor; Vj[0, 0] = ToNode.Voltage.PhaseA.Estimate.PerUnitComplexPhasor; Vj[1, 0] = ToNode.Voltage.PhaseB.Estimate.PerUnitComplexPhasor; Vj[2, 0] = ToNode.Voltage.PhaseC.Estimate.PerUnitComplexPhasor; DenseMatrix Iij = (ThreePhaseSeriesAdmittance * (1 / (EffectiveComplexMultiplier.Magnitude * EffectiveComplexMultiplier.Magnitude))) * Vi - ThreePhaseSeriesAdmittance * (1 / EffectiveComplexMultiplier.Conjugate()) * Vj; DenseMatrix Iji = -(ThreePhaseSeriesAdmittance * (1 / EffectiveComplexMultiplier)) * Vi + ThreePhaseSeriesAdmittance * Vj; FromNodeCurrent.PhaseA.Estimate.PerUnitComplexPhasor = Iij[0, 0]; FromNodeCurrent.PhaseB.Estimate.PerUnitComplexPhasor = Iij[1, 0]; FromNodeCurrent.PhaseC.Estimate.PerUnitComplexPhasor = Iij[2, 0]; ToNodeCurrent.PhaseA.Estimate.PerUnitComplexPhasor = Iji[0, 0]; ToNodeCurrent.PhaseB.Estimate.PerUnitComplexPhasor = Iji[1, 0]; ToNodeCurrent.PhaseC.Estimate.PerUnitComplexPhasor = Iji[2, 0]; } else { FromNodeCurrent.PhaseA.Estimate.Magnitude = 0; FromNodeCurrent.PhaseA.Estimate.AngleInDegrees = 0; ToNodeCurrent.PhaseA.Estimate.Magnitude = 0; ToNodeCurrent.PhaseA.Estimate.AngleInDegrees = 0; FromNodeCurrent.PhaseB.Estimate.Magnitude = 0; FromNodeCurrent.PhaseB.Estimate.AngleInDegrees = 0; ToNodeCurrent.PhaseB.Estimate.Magnitude = 0; ToNodeCurrent.PhaseB.Estimate.AngleInDegrees = 0; FromNodeCurrent.PhaseC.Estimate.Magnitude = 0; FromNodeCurrent.PhaseC.Estimate.AngleInDegrees = 0; ToNodeCurrent.PhaseC.Estimate.Magnitude = 0; ToNodeCurrent.PhaseC.Estimate.AngleInDegrees = 0; } } }
/// <summary> /// Computes an estimated value of positive sequence current flow through the transformer based on estimated values of the high side and low side node voltages. /// </summary> public void ComputePositiveSequenceEstimatedCurrentFlow() { if (m_parentSubstation.ParentDivision.ParentCompany.ParentModel.CurrentFlowPostProcessingSetting == CurrentFlowPostProcessingSetting.ProcessOnlyMeasuredBranches) { if ((FromNodeCurrent.IncludeInPositiveSequenceEstimator || ToNodeCurrent.IncludeInPositiveSequenceEstimator) && FromNode.IsObserved && ToNode.IsObserved) { Complex Vi = FromNode.Voltage.PositiveSequence.Estimate.PerUnitComplexPhasor; Complex Vj = ToNode.Voltage.PositiveSequence.Estimate.PerUnitComplexPhasor; Complex Iij = (PositiveSequenceSeriesAdmittance / (EffectiveComplexMultiplier.Magnitude * EffectiveComplexMultiplier.Magnitude)) * Vi - PositiveSequenceSeriesAdmittance / EffectiveComplexMultiplier.Conjugate() * Vj; Complex Iji = -(PositiveSequenceSeriesAdmittance / EffectiveComplexMultiplier) * Vi + PositiveSequenceSeriesAdmittance * Vj; FromNodeCurrent.PositiveSequence.Estimate.PerUnitComplexPhasor = Iij; ToNodeCurrent.PositiveSequence.Estimate.PerUnitComplexPhasor = Iji; } else { FromNodeCurrent.PositiveSequence.Estimate.Magnitude = 0; FromNodeCurrent.PositiveSequence.Estimate.AngleInDegrees = 0; ToNodeCurrent.PositiveSequence.Estimate.Magnitude = 0; ToNodeCurrent.PositiveSequence.Estimate.AngleInDegrees = 0; } } else if (m_parentSubstation.ParentDivision.ParentCompany.ParentModel.CurrentFlowPostProcessingSetting == CurrentFlowPostProcessingSetting.ProcessBranchesByNodeObservability) { if (FromNode.IsObserved && ToNode.IsObserved) { Complex Vi = FromNode.Voltage.PositiveSequence.Estimate.PerUnitComplexPhasor; Complex Vj = ToNode.Voltage.PositiveSequence.Estimate.PerUnitComplexPhasor; Complex Iij = (PositiveSequenceSeriesAdmittance / (EffectiveComplexMultiplier.Magnitude * EffectiveComplexMultiplier.Magnitude)) * Vi - PositiveSequenceSeriesAdmittance / EffectiveComplexMultiplier.Conjugate() * Vj; Complex Iji = -(PositiveSequenceSeriesAdmittance / EffectiveComplexMultiplier) * Vi + PositiveSequenceSeriesAdmittance * Vj; FromNodeCurrent.PositiveSequence.Estimate.PerUnitComplexPhasor = Iij; ToNodeCurrent.PositiveSequence.Estimate.PerUnitComplexPhasor = Iji; } else { FromNodeCurrent.PositiveSequence.Estimate.Magnitude = 0; FromNodeCurrent.PositiveSequence.Estimate.AngleInDegrees = 0; ToNodeCurrent.PositiveSequence.Estimate.Magnitude = 0; ToNodeCurrent.PositiveSequence.Estimate.AngleInDegrees = 0; } } }