@@ -98,6 +98,27 @@ namespace GridKit
9898 }
9999 };
100100
101+ class ExternalResidualBranch final : public PhasorDynamics::Branch<ScalarT, IdxT>
102+ {
103+ public:
104+ using BranchT = PhasorDynamics::Branch<ScalarT, IdxT>;
105+ using BranchT::BranchT;
106+
107+ int evaluateExternalResidual () override final
108+ {
109+ ++external_residual_evaluations_;
110+ return 0 ;
111+ }
112+
113+ std::size_t externalResidualEvaluations () const
114+ {
115+ return external_residual_evaluations_;
116+ }
117+
118+ private:
119+ std::size_t external_residual_evaluations_{0 };
120+ };
121+
101122 public:
102123 SystemTests () = default ;
103124 ~SystemTests () = default ;
@@ -206,12 +227,24 @@ namespace GridKit
206227 PhasorDynamics::Bus<ScalarT, IdxT> bus2 (Vr2, Vi2);
207228 system.addBus (&bus2);
208229
209- PhasorDynamics::Branch<ScalarT, IdxT> branch (&bus1, &bus2, R, X, G, B);
230+ ExternalResidualBranch branch (&bus1, &bus2, R, X, G, B);
210231 system.addComponent (&branch);
211232
212- system.allocate ();
213- system.initialize ();
214- system.evaluateResidual ();
233+ success *= system.allocate () == 0 ;
234+ success *= system.initialize () == 0 ;
235+
236+ const auto external_residual_evaluations = branch.externalResidualEvaluations ();
237+
238+ success *= system.evaluateResidual () == 0 ;
239+ success *= branch.externalResidualEvaluations () == external_residual_evaluations + 1 ;
240+
241+ success *= isEqual (bus1.Ir (), Ir1);
242+ success *= isEqual (bus1.Ii (), Ii1);
243+ success *= isEqual (bus2.Ir (), Ir2);
244+ success *= isEqual (bus2.Ii (), Ii2);
245+
246+ success *= system.evaluateResidual () == 0 ;
247+ success *= branch.externalResidualEvaluations () == external_residual_evaluations + 2 ;
215248
216249 success *= isEqual (bus1.Ir (), Ir1);
217250 success *= isEqual (bus1.Ii (), Ii1);
0 commit comments