From 86fb987f089c93ecd230f838bc0e23af9b7619cf Mon Sep 17 00:00:00 2001 From: Anne Tilloy Date: Mon, 22 Mar 2021 17:10:01 +0100 Subject: [PATCH 1/2] Fix current magnitude equation. Signed-off-by: Anne Tilloy --- .../ClosedBranchSide2CurrentMagnitudeEquationTerm.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/powsybl/openloadflow/ac/equations/ClosedBranchSide2CurrentMagnitudeEquationTerm.java b/src/main/java/com/powsybl/openloadflow/ac/equations/ClosedBranchSide2CurrentMagnitudeEquationTerm.java index 512c408ea6..1e386ad1aa 100644 --- a/src/main/java/com/powsybl/openloadflow/ac/equations/ClosedBranchSide2CurrentMagnitudeEquationTerm.java +++ b/src/main/java/com/powsybl/openloadflow/ac/equations/ClosedBranchSide2CurrentMagnitudeEquationTerm.java @@ -58,8 +58,8 @@ public void update(double[] x) { double sinPh2 = FastMath.sin(ph2); double cosPh2Ksi = FastMath.cos(ph2 + ksi); double sinPh2Ksi = FastMath.sin(ph2 + ksi); - double theta = ksi - (a1Var != null && a1Var.isActive() ? x[a1Var.getRow()] : branch.getPiModel().getA1()) - + A2 + ph1; + double theta = ksi + (a1Var != null && a1Var.isActive() ? x[a1Var.getRow()] : branch.getPiModel().getA1()) + - A2 + ph1; double sinTheta = FastMath.sin(theta); double cosTheta = FastMath.cos(theta); From b888728b76d47f636843d3bab322651e226165da Mon Sep 17 00:00:00 2001 From: Anne Tilloy Date: Tue, 23 Mar 2021 07:35:31 +0100 Subject: [PATCH 2/2] Clean code. Signed-off-by: Anne Tilloy --- ...edBranchSide1CurrentMagnitudeEquationTerm.java | 15 +++++++++------ ...edBranchSide2CurrentMagnitudeEquationTerm.java | 13 ++++++++----- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/powsybl/openloadflow/ac/equations/ClosedBranchSide1CurrentMagnitudeEquationTerm.java b/src/main/java/com/powsybl/openloadflow/ac/equations/ClosedBranchSide1CurrentMagnitudeEquationTerm.java index 268519818d..e3d2e6f248 100644 --- a/src/main/java/com/powsybl/openloadflow/ac/equations/ClosedBranchSide1CurrentMagnitudeEquationTerm.java +++ b/src/main/java/com/powsybl/openloadflow/ac/equations/ClosedBranchSide1CurrentMagnitudeEquationTerm.java @@ -59,22 +59,25 @@ public void update(double[] x) { double cosPh1Ksi = FastMath.cos(ph1 + ksi); double sinPh1Ksi = FastMath.sin(ph1 + ksi); double theta = ksi - (a1Var != null && a1Var.isActive() ? x[a1Var.getRow()] : branch.getPiModel().getA1()) - + A2 + ph2; + + A2 + ph2; double sinTheta = FastMath.sin(theta); double cosTheta = FastMath.cos(theta); - double reI1 = r1 * (w1 * (g1 * cosPh1 - b1 * sinPh1 + y * sinPh1Ksi) - w2 * sinTheta) * CURRENT_NORMALIZATION_FACTOR; - double imI1 = r1 * (w1 * (g1 * sinPh1 + b1 * cosPh1 - y * cosPh1Ksi) + w2 * cosTheta) * CURRENT_NORMALIZATION_FACTOR; + double interReI1 = g1 * cosPh1 - b1 * sinPh1 + y * sinPh1Ksi; + double interImI1 = g1 * sinPh1 + b1 * cosPh1 - y * cosPh1Ksi; + + double reI1 = r1 * (w1 * interReI1 - w2 * sinTheta) * CURRENT_NORMALIZATION_FACTOR; + double imI1 = r1 * (w1 * interImI1 + w2 * cosTheta) * CURRENT_NORMALIZATION_FACTOR; i1 = Math.hypot(reI1, imI1); - double dreI1dv1 = r1 * r1 * (g1 * cosPh1 - b1 * sinPh1 + y * sinPh1Ksi) * CURRENT_NORMALIZATION_FACTOR; + double dreI1dv1 = r1 * r1 * interReI1 * CURRENT_NORMALIZATION_FACTOR; double dreI1dv2 = r1 * (-y * R2 * sinTheta) * CURRENT_NORMALIZATION_FACTOR; double dreI1dph1 = r1 * w1 * (-g1 * sinPh1 - b1 * cosPh1 + y * cosPh1Ksi) * CURRENT_NORMALIZATION_FACTOR; double dreI1dph2 = r1 * (-w2 * cosTheta) * CURRENT_NORMALIZATION_FACTOR; - double dimI1dv1 = r1 * r1 * (g1 * sinPh1 + b1 * cosPh1 - y * cosPh1Ksi) * CURRENT_NORMALIZATION_FACTOR; + double dimI1dv1 = r1 * r1 * interImI1 * CURRENT_NORMALIZATION_FACTOR; double dimI1dv2 = r1 * (y * R2 * cosTheta) * CURRENT_NORMALIZATION_FACTOR; - double dimI1dph1 = r1 * w1 * (g1 * cosPh1 - b1 * sinPh1 + y * sinPh1Ksi) * CURRENT_NORMALIZATION_FACTOR; + double dimI1dph1 = r1 * w1 * interReI1 * CURRENT_NORMALIZATION_FACTOR; double dimI1dph2 = r1 * (-w2 * sinTheta) * CURRENT_NORMALIZATION_FACTOR; di1dv1 = (reI1 * dreI1dv1 + imI1 * dimI1dv1) / i1; diff --git a/src/main/java/com/powsybl/openloadflow/ac/equations/ClosedBranchSide2CurrentMagnitudeEquationTerm.java b/src/main/java/com/powsybl/openloadflow/ac/equations/ClosedBranchSide2CurrentMagnitudeEquationTerm.java index 1e386ad1aa..8951206c7d 100644 --- a/src/main/java/com/powsybl/openloadflow/ac/equations/ClosedBranchSide2CurrentMagnitudeEquationTerm.java +++ b/src/main/java/com/powsybl/openloadflow/ac/equations/ClosedBranchSide2CurrentMagnitudeEquationTerm.java @@ -63,18 +63,21 @@ public void update(double[] x) { double sinTheta = FastMath.sin(theta); double cosTheta = FastMath.cos(theta); - double reI2 = R2 * (w2 * (g2 * cosPh2 - b2 * sinPh2 + y * sinPh2Ksi) - w1 * sinTheta) * CURRENT_NORMALIZATION_FACTOR; - double imI2 = R2 * (w2 * (g2 * sinPh2 + b2 * cosPh2 - y * cosPh2Ksi) + w1 * cosTheta) * CURRENT_NORMALIZATION_FACTOR; + double interReI2 = g2 * cosPh2 - b2 * sinPh2 + y * sinPh2Ksi; + double interImI2 = g2 * sinPh2 + b2 * cosPh2 - y * cosPh2Ksi; + + double reI2 = R2 * (w2 * interReI2 - w1 * sinTheta) * CURRENT_NORMALIZATION_FACTOR; + double imI2 = R2 * (w2 * interImI2 + w1 * cosTheta) * CURRENT_NORMALIZATION_FACTOR; i2 = Math.hypot(reI2, imI2); - double dreI2dv2 = R2 * R2 * (g2 * cosPh2 - b2 * sinPh2 + y * sinPh2Ksi) * CURRENT_NORMALIZATION_FACTOR; + double dreI2dv2 = R2 * R2 * interReI2 * CURRENT_NORMALIZATION_FACTOR; double dreI2dv1 = R2 * (-y * r1 * sinTheta) * CURRENT_NORMALIZATION_FACTOR; double dreI2dph2 = R2 * w2 * (-g2 * sinPh2 - b2 * cosPh2 + y * cosPh2Ksi) * CURRENT_NORMALIZATION_FACTOR; double dreI2dph1 = R2 * (-w1 * cosTheta) * CURRENT_NORMALIZATION_FACTOR; - double dimI2dv2 = R2 * R2 * (g2 * sinPh2 + b2 * cosPh2 - y * cosPh2Ksi) * CURRENT_NORMALIZATION_FACTOR; + double dimI2dv2 = R2 * R2 * interImI2 * CURRENT_NORMALIZATION_FACTOR; double dimI2dv1 = R2 * (y * r1 * cosTheta) * CURRENT_NORMALIZATION_FACTOR; - double dimI2dph2 = R2 * w2 * (g2 * cosPh2 - b2 * sinPh2 + y * sinPh2Ksi) * CURRENT_NORMALIZATION_FACTOR; + double dimI2dph2 = R2 * w2 * interReI2 * CURRENT_NORMALIZATION_FACTOR; double dimI2dph1 = R2 * (-w1 * sinTheta) * CURRENT_NORMALIZATION_FACTOR; di2dv2 = (reI2 * dreI2dv2 + imI2 * dimI2dv2) / i2;