Skip to content

Commit 9cea097

Browse files
committed
Vectcorize der and eval
Signed-off-by: Didier Vidal <[email protected]>
1 parent 50ae81a commit 9cea097

10 files changed

+459
-164
lines changed

src/main/java/com/powsybl/openloadflow/ac/equations/ClosedBranchSide1ActiveFlowEquationTerm.java

+52
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.powsybl.openloadflow.ac.equations.vector.AcVectorEngine;
1111
import com.powsybl.openloadflow.equations.Variable;
1212
import com.powsybl.openloadflow.equations.VariableSet;
13+
import com.powsybl.openloadflow.equations.VectorEngine;
1314
import com.powsybl.openloadflow.network.LfBranch;
1415
import com.powsybl.openloadflow.network.LfBus;
1516
import com.powsybl.openloadflow.util.Fortescue;
@@ -35,6 +36,22 @@ public ClosedBranchSide1ActiveFlowEquationTerm(LfBranch branch, LfBus bus1, LfBu
3536
super(branch, bus1, bus2, variableSet, deriveA1, deriveR1, sequenceType, acVectorEnginee);
3637
}
3738

39+
@Override
40+
public VectorEngine.VecToVal getVecToVal(Variable<AcVariableType> v) {
41+
if (v == v1Var) {
42+
return ClosedBranchSide1ActiveFlowEquationTerm::vec2dp1dv1;
43+
} else if (v == v2Var) {
44+
return ClosedBranchSide1ActiveFlowEquationTerm::vec2dp1dv2;
45+
} else if (v == ph1Var) {
46+
return ClosedBranchSide1ActiveFlowEquationTerm::vec2dp1dph1;
47+
} else if (v == ph2Var) {
48+
return ClosedBranchSide1ActiveFlowEquationTerm::vec2dp1dph2;
49+
} else if (v == null) {
50+
return ClosedBranchSide1ActiveFlowEquationTerm::vec2p1;
51+
}
52+
return null;
53+
}
54+
3855
public static double calculateSensi(double g1, double y, double ksi,
3956
double v1, double ph1, double a1, double r1, double v2, double ph2,
4057
double dph1, double dph2, double dv1, double dv2, double da1, double dr1) {
@@ -54,22 +71,57 @@ protected double calculateSensi(double dph1, double dph2, double dv1, double dv2
5471
return calculateSensi(g1(), y(), ksi(), v1(), ph1(), a1(), r1(), v2(), ph2(), dph1, dph2, dv1, dv2, da1, dr1);
5572
}
5673

74+
public static double vec2p1(double v1, double v2, double sinKsi, double cosKsi, double sinTheta2, double cosTheta2,
75+
double sinTheta1, double cosTheta1,
76+
double b1, double b2, double g1, double g2, double y,
77+
double g12, double b12, double a1, double r1) {
78+
return p1(y, sinKsi, g1, v1, r1, v2, sinTheta1);
79+
}
80+
5781
public static double p1(double y, double sinKsi, double g1, double v1, double r1, double v2, double sinTheta) {
5882
return r1 * v1 * (g1 * r1 * v1 + y * r1 * v1 * sinKsi - y * R2 * v2 * sinTheta);
5983
}
6084

85+
public static double vec2dp1dv1(double v1, double v2, double sinKsi, double cosKsi, double sinTheta2, double cosTheta2,
86+
double sinTheta1, double cosTheta1,
87+
double b1, double b2, double g1, double g2, double y,
88+
double g12, double b12, double a1, double r1) {
89+
return dp1dv1(y, sinKsi, g1, v1, r1, v2, sinTheta1);
90+
}
91+
6192
public static double dp1dv1(double y, double sinKsi, double g1, double v1, double r1, double v2, double sinTheta) {
6293
return r1 * (2 * g1 * r1 * v1 + 2 * y * r1 * v1 * sinKsi - y * R2 * v2 * sinTheta);
6394
}
6495

96+
public static double vec2dp1dv2(double v1, double v2, double sinKsi, double cosKsi, double sinTheta2, double cosTheta2,
97+
double sinTheta1, double cosTheta1,
98+
double b1, double b2, double g1, double g2, double y,
99+
double g12, double b12, double a1, double r1) {
100+
return dp1dv2(y, v1, r1, sinTheta1);
101+
}
102+
65103
public static double dp1dv2(double y, double v1, double r1, double sinTheta) {
66104
return -y * r1 * R2 * v1 * sinTheta;
67105
}
68106

107+
public static double vec2dp1dph1(double v1, double v2, double sinKsi, double cosKsi, double sinTheta2, double cosTheta2,
108+
double sinTheta1, double cosTheta1,
109+
double b1, double b2, double g1, double g2, double y,
110+
double g12, double b12, double a1, double r1) {
111+
return dp1dph1(y, v1, r1, v2, cosTheta1);
112+
}
113+
69114
public static double dp1dph1(double y, double v1, double r1, double v2, double cosTheta) {
70115
return y * r1 * R2 * v1 * v2 * cosTheta;
71116
}
72117

118+
public static double vec2dp1dph2(double v1, double v2, double sinKsi, double cosKsi, double sinTheta2, double cosTheta2,
119+
double sinTheta1, double cosTheta1,
120+
double b1, double b2, double g1, double g2, double y,
121+
double g12, double b12, double a1, double r1) {
122+
return dp1dph2(y, v1, r1, v2, cosTheta1);
123+
}
124+
73125
public static double dp1dph2(double y, double v1, double r1, double v2, double cosTheta) {
74126
return -dp1dph1(y, v1, r1, v2, cosTheta);
75127
}

src/main/java/com/powsybl/openloadflow/ac/equations/ClosedBranchSide1ReactiveFlowEquationTerm.java

+52
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.powsybl.openloadflow.ac.equations.vector.AcVectorEngine;
1111
import com.powsybl.openloadflow.equations.Variable;
1212
import com.powsybl.openloadflow.equations.VariableSet;
13+
import com.powsybl.openloadflow.equations.VectorEngine;
1314
import com.powsybl.openloadflow.network.LfBranch;
1415
import com.powsybl.openloadflow.network.LfBus;
1516
import com.powsybl.openloadflow.util.Fortescue;
@@ -35,6 +36,22 @@ public ClosedBranchSide1ReactiveFlowEquationTerm(LfBranch branch, LfBus bus1, Lf
3536
super(branch, bus1, bus2, variableSet, deriveA1, deriveR1, sequenceType, acVectorEnginee);
3637
}
3738

39+
@Override
40+
public VectorEngine.VecToVal getVecToVal(Variable<AcVariableType> v) {
41+
if (v == v1Var) {
42+
return ClosedBranchSide1ReactiveFlowEquationTerm::vec2dq1dv1;
43+
} else if (v == v2Var) {
44+
return ClosedBranchSide1ReactiveFlowEquationTerm::vec2dq1dv2;
45+
} else if (v == ph1Var) {
46+
return ClosedBranchSide1ReactiveFlowEquationTerm::vec2dq1dph1;
47+
} else if (v == ph2Var) {
48+
return ClosedBranchSide1ReactiveFlowEquationTerm::vec2dq1dph2;
49+
} else if (v == null) {
50+
return ClosedBranchSide1ReactiveFlowEquationTerm::vec2q1;
51+
}
52+
return null;
53+
}
54+
3855
public static double calculateSensi(double y, double ksi, double b1,
3956
double v1, double ph1, double r1, double a1, double v2, double ph2,
4057
double dph1, double dph2, double dv1, double dv2, double da1, double dr1) {
@@ -55,24 +72,59 @@ protected double calculateSensi(double dph1, double dph2, double dv1, double dv2
5572
return calculateSensi(y(), ksi(), b1(), v1(), ph1(), r1(), a1(), v2(), ph2(), dph1, dph2, dv1, dv2, da1, dr1);
5673
}
5774

75+
public static double vec2q1(double v1, double v2, double sinKsi, double cosKsi, double sinTheta2, double cosTheta2,
76+
double sinTheta1, double cosTheta1,
77+
double b1, double b2, double g1, double g2, double y,
78+
double g12, double b12, double a1, double r1) {
79+
return q1(y, cosKsi, b1, v1, r1, v2, cosTheta1);
80+
}
81+
5882
public static double q1(double y, double cosKsi, double b1, double v1, double r1, double v2, double cosTheta) {
5983
return r1 * v1 * (-b1 * r1 * v1 + y * r1 * v1 * cosKsi
6084
- y * R2 * v2 * cosTheta);
6185
}
6286

87+
public static double vec2dq1dv1(double v1, double v2, double sinKsi, double cosKsi, double sinTheta2, double cosTheta2,
88+
double sinTheta1, double cosTheta1,
89+
double b1, double b2, double g1, double g2, double y,
90+
double g12, double b12, double a1, double r1) {
91+
return dq1dv1(y, cosKsi, b1, v1, r1, v2, cosTheta1);
92+
}
93+
6394
public static double dq1dv1(double y, double cosKsi, double b1, double v1, double r1, double v2, double cosTheta) {
6495
return r1 * (-2 * b1 * r1 * v1 + 2 * y * r1 * v1 * cosKsi
6596
- y * R2 * v2 * cosTheta);
6697
}
6798

99+
public static double vec2dq1dv2(double v1, double v2, double sinKsi, double cosKsi, double sinTheta2, double cosTheta2,
100+
double sinTheta1, double cosTheta1,
101+
double b1, double b2, double g1, double g2, double y,
102+
double g12, double b12, double a1, double r1) {
103+
return dq1dv2(y, v1, r1, cosTheta1);
104+
}
105+
68106
public static double dq1dv2(double y, double v1, double r1, double cosTheta) {
69107
return -y * r1 * R2 * v1 * cosTheta;
70108
}
71109

110+
public static double vec2dq1dph1(double v1, double v2, double sinKsi, double cosKsi, double sinTheta2, double cosTheta2,
111+
double sinTheta1, double cosTheta1,
112+
double b1, double b2, double g1, double g2, double y,
113+
double g12, double b12, double a1, double r1) {
114+
return dq1dph1(y, v1, r1, v2, sinTheta1);
115+
}
116+
72117
public static double dq1dph1(double y, double v1, double r1, double v2, double sinTheta) {
73118
return -y * r1 * R2 * v1 * v2 * sinTheta;
74119
}
75120

121+
public static double vec2dq1dph2(double v1, double v2, double sinKsi, double cosKsi, double sinTheta2, double cosTheta2,
122+
double sinTheta1, double cosTheta1,
123+
double b1, double b2, double g1, double g2, double y,
124+
double g12, double b12, double a1, double r1) {
125+
return dq1dph2(y, v1, r1, v2, sinTheta1);
126+
}
127+
76128
public static double dq1dph2(double y, double v1, double r1, double v2, double sinTheta) {
77129
return -dq1dph1(y, v1, r1, v2, sinTheta);
78130
}

src/main/java/com/powsybl/openloadflow/ac/equations/ClosedBranchSide2ActiveFlowEquationTerm.java

+13-19
Original file line numberDiff line numberDiff line change
@@ -49,21 +49,10 @@ public VectorEngine.VecToVal getVecToVal(Variable<AcVariableType> v) {
4949
}
5050
if (v == ph2Var) {
5151
return ClosedBranchSide2ActiveFlowEquationTerm::vec2dp2dph2;
52+
} else if (v == null) {
53+
return ClosedBranchSide2ActiveFlowEquationTerm::vec2p2;
5254
}
5355
return null;
54-
// TODO return for eval
55-
// acVectorEnginee.vecToP2[element.getNum()] = ClosedBranchSide2ActiveFlowEquationTerm::vec2p2;}
56-
}
57-
58-
@Override
59-
public int getVectorIndex(Variable<AcVariableType> v) {
60-
if (v == v1Var || v == ph1Var) {
61-
return acVectorEnginee.bus2D1PerLoc[element.getNum()];
62-
}
63-
if (v == v2Var || v == ph2Var) {
64-
return acVectorEnginee.bus2D2PerLoc[element.getNum()];
65-
}
66-
return -1;
6756
}
6857

6958
public static double calculateSensi(double y, double ksi, double g2,
@@ -85,7 +74,8 @@ protected double calculateSensi(double dph1, double dph2, double dv1, double dv2
8574
return calculateSensi(y(), ksi(), g2(), v1(), ph1(), r1(), a1(), v2(), ph2(), dph1, dph2, dv1, dv2, da1, dr1);
8675
}
8776

88-
public static double vec2p2(double v1, double v2, double sinKsi, double sinTheta2, double cosTheta2, double b1, double b2, double g1, double g2, double y,
77+
public static double vec2p2(double v1, double v2, double sinKsi, double cosKsi, double sinTheta2, double cosTheta2,
78+
double sinTheta1, double cosTheta1, double b1, double b2, double g1, double g2, double y,
8979
double g12, double b12, double a1, double r1) {
9080
return p2(y, sinKsi, g2, v1, r1, v2, sinTheta2);
9181
}
@@ -94,7 +84,8 @@ public static double p2(double y, double sinKsi, double g2, double v1, double r1
9484
return R2 * v2 * (g2 * R2 * v2 - y * r1 * v1 * sinTheta + y * R2 * v2 * sinKsi);
9585
}
9686

97-
public static double vec2dp2dv1(double v1, double v2, double sinKsi, double sinTheta2, double cosTheta2,
87+
public static double vec2dp2dv1(double v1, double v2, double sinKsi, double cosKsi, double sinTheta2, double cosTheta2,
88+
double sinTheta1, double cosTheta1,
9889
double b1, double b2, double g1, double g2, double y,
9990
double g12, double b12, double a1, double r1) {
10091
return dp2dv1(y, r1, v2, sinTheta2);
@@ -104,7 +95,8 @@ public static double dp2dv1(double y, double r1, double v2, double sinTheta) {
10495
return -y * r1 * R2 * v2 * sinTheta;
10596
}
10697

107-
public static double vec2dp2dv2(double v1, double v2, double sinKsi, double sinTheta2, double cosTheta2,
98+
public static double vec2dp2dv2(double v1, double v2, double sinKsi, double cosKsi, double sinTheta2, double cosTheta2,
99+
double sinTheta1, double cosTheta1,
108100
double b1, double b2, double g1, double g2, double y,
109101
double g12, double b12, double a1, double r1) {
110102
return dp2dv2(y, sinKsi, g2, v1, r1, v2, sinTheta2);
@@ -114,16 +106,18 @@ public static double dp2dv2(double y, double sinKsi, double g2, double v1, doubl
114106
return R2 * (2 * g2 * R2 * v2 - y * r1 * v1 * sinTheta + 2 * y * R2 * v2 * sinKsi);
115107
}
116108

117-
public static double vec2dp2dph1(double v1, double v2, double sinKsi, double sinTheta2, double cosTheta2, double b1, double b2, double g1, double g2, double y,
118-
double g12, double b12, double a1, double r1) {
109+
public static double vec2dp2dph1(double v1, double v2, double sinKsi, double cosKsi, double sinTheta2, double cosTheta2, double sinTheta1, double cosTheta1,
110+
double b1, double b2, double g1, double g2, double y,
111+
double g12, double b12, double a1, double r1) {
119112
return dp2dph1(y, v1, r1, v2, cosTheta2);
120113
}
121114

122115
public static double dp2dph1(double y, double v1, double r1, double v2, double cosTheta) {
123116
return -y * r1 * R2 * v1 * v2 * cosTheta;
124117
}
125118

126-
public static double vec2dp2dph2(double v1, double v2, double sinKsi, double sinTheta2, double cosTheta2, double b1, double b2, double g1, double g2, double y,
119+
public static double vec2dp2dph2(double v1, double v2, double sinKsi, double cosKsi, double sinTheta2, double cosTheta2, double sinTheta1, double cosTheta1,
120+
double b1, double b2, double g1, double g2, double y,
127121
double g12, double b12, double a1, double r1) {
128122
return dp2dph2(y, v1, r1, v2, cosTheta2);
129123
}

src/main/java/com/powsybl/openloadflow/ac/equations/ClosedBranchSide2ReactiveFlowEquationTerm.java

+54
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.powsybl.openloadflow.ac.equations.vector.AcVectorEngine;
1111
import com.powsybl.openloadflow.equations.Variable;
1212
import com.powsybl.openloadflow.equations.VariableSet;
13+
import com.powsybl.openloadflow.equations.VectorEngine;
1314
import com.powsybl.openloadflow.network.LfBranch;
1415
import com.powsybl.openloadflow.network.LfBus;
1516
import com.powsybl.openloadflow.util.Fortescue;
@@ -35,6 +36,24 @@ public ClosedBranchSide2ReactiveFlowEquationTerm(LfBranch branch, LfBus bus1, Lf
3536
super(branch, bus1, bus2, variableSet, deriveA1, deriveR1, sequenceType, acVectorEnginee);
3637
}
3738

39+
@Override
40+
public VectorEngine.VecToVal getVecToVal(Variable<AcVariableType> v) {
41+
if (v == v1Var) {
42+
return ClosedBranchSide2ReactiveFlowEquationTerm::vec2dq2dv1;
43+
} else if (v == v2Var) {
44+
return ClosedBranchSide2ReactiveFlowEquationTerm::vec2dq2dv2;
45+
} else if (v == ph1Var) {
46+
return ClosedBranchSide2ReactiveFlowEquationTerm::vec2dq2dph1;
47+
} else if (v == ph2Var) {
48+
return ClosedBranchSide2ReactiveFlowEquationTerm::vec2dq2dph2;
49+
} else if (v == null) {
50+
return ClosedBranchSide2ReactiveFlowEquationTerm::vec2q2;
51+
}
52+
return null;
53+
// TODO return for eval
54+
// acVectorEnginee.vecToP2[element.getNum()] = ClosedBranchSide2ActiveFlowEquationTerm::vec2p2;}
55+
}
56+
3857
public static double calculateSensi(double y, double ksi, double b2,
3958
double v1, double ph1, double r1, double a1, double v2, double ph2,
4059
double dph1, double dph2, double dv1, double dv2, double da1, double dr1) {
@@ -54,22 +73,57 @@ protected double calculateSensi(double dph1, double dph2, double dv1, double dv2
5473
return calculateSensi(y(), ksi(), b2(), v1(), ph1(), r1(), a1(), v2(), ph2(), dph1, dph2, dv1, dv2, da1, dr1);
5574
}
5675

76+
public static double vec2q2(double v1, double v2, double sinKsi, double cosKsi, double sinTheta2, double cosTheta2,
77+
double sinTheta1, double cosTheta1,
78+
double b1, double b2, double g1, double g2, double y,
79+
double g12, double b12, double a1, double r1) {
80+
return q2(y, cosKsi, b2, v1, r1, v2, cosTheta2);
81+
}
82+
5783
public static double q2(double y, double cosKsi, double b2, double v1, double r1, double v2, double cosTheta) {
5884
return R2 * v2 * (-b2 * R2 * v2 - y * r1 * v1 * cosTheta + y * R2 * v2 * cosKsi);
5985
}
6086

87+
public static double vec2dq2dv1(double v1, double v2, double sinKsi, double cosKsi, double sinTheta2, double cosTheta2,
88+
double sinTheta1, double cosTheta1,
89+
double b1, double b2, double g1, double g2, double y,
90+
double g12, double b12, double a1, double r1) {
91+
return dq2dv1(y, r1, v2, cosTheta2);
92+
}
93+
6194
public static double dq2dv1(double y, double r1, double v2, double cosTheta) {
6295
return -y * r1 * R2 * v2 * cosTheta;
6396
}
6497

98+
public static double vec2dq2dv2(double v1, double v2, double sinKsi, double cosKsi, double sinTheta2, double cosTheta2,
99+
double sinTheta1, double cosTheta1,
100+
double b1, double b2, double g1, double g2, double y,
101+
double g12, double b12, double a1, double r1) {
102+
return dq2dv2(y, cosKsi, b2, v1, r1, v2, cosTheta2);
103+
}
104+
65105
public static double dq2dv2(double y, double cosKsi, double b2, double v1, double r1, double v2, double cosTheta) {
66106
return R2 * (-2 * b2 * R2 * v2 - y * r1 * v1 * cosTheta + 2 * y * R2 * v2 * cosKsi);
67107
}
68108

109+
public static double vec2dq2dph1(double v1, double v2, double sinKsi, double cosKsi, double sinTheta2, double cosTheta2,
110+
double sinTheta1, double cosTheta1,
111+
double b1, double b2, double g1, double g2, double y,
112+
double g12, double b12, double a1, double r1) {
113+
return dq2dph1(y, v1, r1, v2, sinTheta2);
114+
}
115+
69116
public static double dq2dph1(double y, double v1, double r1, double v2, double sinTheta) {
70117
return y * r1 * R2 * v1 * v2 * sinTheta;
71118
}
72119

120+
public static double vec2dq2dph2(double v1, double v2, double sinKsi, double cosKsi, double sinTheta2, double cosTheta2,
121+
double sinTheta1, double cosTheta1,
122+
double b1, double b2, double g1, double g2, double y,
123+
double g12, double b12, double a1, double r1) {
124+
return dq2dph2(y, v1, r1, v2, sinTheta2);
125+
}
126+
73127
public static double dq2dph2(double y, double v1, double r1, double v2, double sinTheta) {
74128
return -dq2dph1(y, v1, r1, v2, sinTheta);
75129
}

0 commit comments

Comments
 (0)