Skip to content

Commit 9a46d05

Browse files
committed
Jacobian via dependency tracking for LoadTest.
1 parent 6909bca commit 9a46d05

File tree

7 files changed

+59
-2
lines changed

7 files changed

+59
-2
lines changed

src/Model/PhasorDynamics/Bus/BusInfinite.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ namespace GridKit
195195
// Available template instantiations
196196
template class BusInfinite<double, long int>;
197197
template class BusInfinite<double, size_t>;
198+
template class BusInfinite<Sparse::Variable, long int>;
198199
template class BusInfinite<Sparse::Variable, size_t>;
199200

200201
} // namespace PhasorDynamics

src/Model/PhasorDynamics/BusBase.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
#include <vector>
44

5-
#include <Model/Evaluator.hpp>
65
#include <LinearAlgebra/SparsityPattern/Variable.hpp>
6+
#include <Model/Evaluator.hpp>
77

88
namespace GridKit
99
{

src/Model/PhasorDynamics/Component.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include <vector>
44

5+
#include <LinearAlgebra/SparsityPattern/Variable.hpp>
56
#include <Model/Evaluator.hpp>
67

78
namespace GridKit

src/Model/PhasorDynamics/Load/Load.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@ namespace GridKit
173173
// Available template instantiations
174174
template class Load<double, long int>;
175175
template class Load<double, size_t>;
176+
template class Load<Sparse::Variable, long int>;
177+
template class Load<Sparse::Variable, size_t>;
176178

177179
} // namespace PhasorDynamics
178180
} // namespace GridKit

src/Utilities/Testing.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,6 @@ namespace GridKit
232232
for (const auto& pair_a : a)
233233
{
234234
auto it = b.find(pair_a.first);
235-
std::cout << pair_a.second << ", " << it->second << std::endl;
236235
fail += !isEqual(pair_a.second, it->second);
237236
}
238237

tests/UnitTests/PhasorDynamics/LoadTests.hpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <iomanip>
44
#include <iostream>
55

6+
#include <LinearAlgebra/SparsityPattern/Variable.hpp>
67
#include <Model/PhasorDynamics/Bus/Bus.hpp>
78
#include <Model/PhasorDynamics/Bus/BusInfinite.hpp>
89
#include <Model/PhasorDynamics/Load/Load.hpp>
@@ -65,6 +66,58 @@ namespace GridKit
6566

6667
return success.report(__func__);
6768
}
69+
70+
TestOutcome jacobian()
71+
{
72+
TestStatus success = true;
73+
74+
real_type R{2.0}; ///< Load resistance
75+
real_type X{4.0}; ///< Load reactance
76+
77+
Sparse::Variable Vr{10.0}; ///< Bus real voltage
78+
Sparse::Variable Vi{20.0}; ///< Bus imaginary voltage
79+
80+
Vr.setVariableNumber(0); ///< Independent variables: first
81+
Vi.setVariableNumber(1); ///< Independent variables: second
82+
83+
PhasorDynamics::BusInfinite<Sparse::Variable, IdxT> bus(Vr, Vi);
84+
85+
PhasorDynamics::Load<Sparse::Variable, IdxT> load(&bus, R, X);
86+
load.evaluateResidual(); ///< Computes the residual and the Jacobian values by tracking
87+
///< the dependencies
88+
89+
std::vector<Sparse::Variable> residuals{bus.Ir(), bus.Ii()};
90+
std::vector<Sparse::Variable::DependencyMap> ref = analyticalJacobian(R, X);
91+
92+
/// Compare dependencies computed automatically to the ones computed analytically
93+
for (size_t i = 0; i < residuals.size(); ++i)
94+
{
95+
Sparse::Variable res = residuals[i];
96+
const Sparse::Variable::DependencyMap& dependencies = res.getDependencies();
97+
success *= (GridKit::Testing::isEqual(dependencies, ref[i]));
98+
}
99+
100+
return success.report(__func__);
101+
}
102+
private:
103+
std::vector<Sparse::Variable::DependencyMap> analyticalJacobian(const real_type R,
104+
const real_type X)
105+
{
106+
const real_type b = -X / (R * R + X * X);
107+
const real_type g = R / (R * R + X * X);
108+
109+
real_type dIr_dVr = -g;
110+
real_type dIr_dVi = -b;
111+
112+
real_type dIi_dVr = b;
113+
real_type dIi_dVi = -g;
114+
115+
std::vector<Sparse::Variable::DependencyMap> dependencies(2);
116+
dependencies[0] = {{0, dIr_dVr}, {1, dIr_dVi}};
117+
dependencies[1] = {{0, dIi_dVr}, {1, dIi_dVi}};
118+
119+
return dependencies;
120+
}
68121
};
69122

70123
} // namespace Testing

tests/UnitTests/PhasorDynamics/runLoadTests.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ int main()
1010

1111
result += test.constructor();
1212
result += test.residual();
13+
result += test.jacobian();
1314

1415
return result.summary();
1516
}

0 commit comments

Comments
 (0)