88 */
99
1010#include < cmath>
11- #include < variant>
12-
13- #include < magic_enum/magic_enum.hpp>
1411
1512#include < GridKit/Model/PhasorDynamics/Branch/Branch.hpp>
1613#include < GridKit/Model/PhasorDynamics/Branch/BranchData.hpp>
@@ -147,7 +144,7 @@ namespace GridKit
147144 template <typename scalar_type, typename index_type>
148145 int Branch<scalar_type, index_type>::verify() const
149146 {
150- int ret = parameter_error_count_ ;
147+ int ret = 0 ;
151148
152149 auto check = [&](bool condition, const char * message)
153150 {
@@ -310,51 +307,46 @@ namespace GridKit
310307 template <typename scalar_type, typename index_type>
311308 void Branch<scalar_type, index_type>::initializeParameters(const ModelDataT& data)
312309 {
313- readRealParameter (data, ModelDataT::Parameters::R, R_ );
314- readRealParameter (data, ModelDataT::Parameters::X, X_ );
315- readRealParameter (data, ModelDataT::Parameters::G, G_ );
316- readRealParameter (data, ModelDataT::Parameters::B, B_ );
317- readRealParameter (data, ModelDataT::Parameters::tap, tap_);
318- readRealParameter (data, ModelDataT::Parameters::phase, phase_);
310+ using P = typename ModelDataT::Parameters;
319311
320- if (data.ports .contains (ModelDataT::Ports::bus1 ))
312+ if (data.parameters .contains (P::R ))
321313 {
322- bus1_id_ = data.ports .at (ModelDataT::Ports::bus1 );
314+ R_ = std::get<RealT>( data.parameters .at (P::R) );
323315 }
324-
325- if (data.ports .contains (ModelDataT::Ports::bus2))
316+ if (data.parameters .contains (P::X))
326317 {
327- bus2_id_ = data.ports .at (ModelDataT::Ports::bus2 );
318+ X_ = std::get<RealT>( data.parameters .at (P::X) );
328319 }
329- }
330-
331- template <typename scalar_type, typename index_type>
332- bool Branch<scalar_type, index_type>::readRealParameter(const ModelDataT& data,
333- typename ModelDataT::Parameters parameter,
334- RealT& target)
335- {
336- if (!data.parameters .contains (parameter))
320+ if (data.parameters .contains (P::G))
337321 {
338- return false ;
322+ G_ = std::get<RealT>(data. parameters . at (P::G)) ;
339323 }
340-
341- const auto & value = data.parameters .at (parameter);
342- if (const auto * real_value = std::get_if<RealT>(&value))
324+ if (data.parameters .contains (P::B))
343325 {
344- target = *real_value;
345- return true ;
326+ B_ = std::get<RealT>(data.parameters .at (P::B));
327+ }
328+ if (data.parameters .contains (P::tap))
329+ {
330+ tap_ = std::get<RealT>(data.parameters .at (P::tap));
331+ }
332+ if (data.parameters .contains (P::phase))
333+ {
334+ phase_ = std::get<RealT>(data.parameters .at (P::phase));
335+ }
336+ if (data.parameters .contains (P::closed))
337+ {
338+ closed_ = std::get<bool >(data.parameters .at (P::closed));
346339 }
347340
348- if (const auto * integer_value = std::get_if<IdxT>(&value ))
341+ if (data. ports . contains (ModelDataT::Ports::bus1 ))
349342 {
350- target = static_cast <RealT>(*integer_value);
351- return true ;
343+ bus1_id_ = data.ports .at (ModelDataT::Ports::bus1);
352344 }
353345
354- Log::error () << " Branch: parameter " << magic_enum::enum_name (parameter )
355- << " must be numeric \n " ;
356- parameter_error_count_ += 1 ;
357- return false ;
346+ if (data. ports . contains (ModelDataT::Ports::bus2) )
347+ {
348+ bus2_id_ = data. ports . at (ModelDataT::Ports::bus2) ;
349+ }
358350 }
359351
360352 template <typename scalar_type, typename index_type>
@@ -436,14 +428,15 @@ namespace GridKit
436428 template <typename scalar_type, typename index_type>
437429 void Branch<scalar_type, index_type>::setDerivedParams()
438430 {
439- g11_ = RealT{0.0 };
440- b11_ = RealT{0.0 };
441- g12_ = RealT{0.0 };
442- b12_ = RealT{0.0 };
443- g21_ = RealT{0.0 };
444- b21_ = RealT{0.0 };
445- g22_ = RealT{0.0 };
446- b22_ = RealT{0.0 };
431+ g11_ = RealT{0.0 };
432+ b11_ = RealT{0.0 };
433+ g12_ = RealT{0.0 };
434+ b12_ = RealT{0.0 };
435+ g21_ = RealT{0.0 };
436+ b21_ = RealT{0.0 };
437+ g22_ = RealT{0.0 };
438+ b22_ = RealT{0.0 };
439+ in_service_factor_ = closed_ ? RealT{1.0 } : RealT{0.0 };
447440
448441 const RealT denom = R_ * R_ + X_ * X_ ;
449442 if (denom == RealT{0.0 } || tap_ == RealT{0.0 })
@@ -460,17 +453,17 @@ namespace GridKit
460453 const RealT g_diag = -(g_br + RealT{0.5 } * G_ );
461454 const RealT b_diag = -(b_br + RealT{0.5 } * B_ );
462455
463- g11_ = g_diag * inv_tap * inv_tap;
464- b11_ = b_diag * inv_tap * inv_tap;
456+ g11_ = in_service_factor_ * g_diag * inv_tap * inv_tap;
457+ b11_ = in_service_factor_ * b_diag * inv_tap * inv_tap;
465458
466- g12_ = (g_br * cos_ph - b_br * sin_ph) * inv_tap;
467- b12_ = (b_br * cos_ph + g_br * sin_ph) * inv_tap;
459+ g12_ = in_service_factor_ * (g_br * cos_ph - b_br * sin_ph) * inv_tap;
460+ b12_ = in_service_factor_ * (b_br * cos_ph + g_br * sin_ph) * inv_tap;
468461
469- g21_ = (g_br * cos_ph + b_br * sin_ph) * inv_tap;
470- b21_ = (b_br * cos_ph - g_br * sin_ph) * inv_tap;
462+ g21_ = in_service_factor_ * (g_br * cos_ph + b_br * sin_ph) * inv_tap;
463+ b21_ = in_service_factor_ * (b_br * cos_ph - g_br * sin_ph) * inv_tap;
471464
472- g22_ = g_diag;
473- b22_ = b_diag;
465+ g22_ = in_service_factor_ * g_diag;
466+ b22_ = in_service_factor_ * b_diag;
474467 }
475468
476469 } // namespace PhasorDynamics
0 commit comments