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 {
@@ -328,51 +325,46 @@ namespace GridKit
328325 template <typename scalar_type, typename index_type>
329326 void Branch<scalar_type, index_type>::initializeParameters(const ModelDataT& data)
330327 {
331- readRealParameter (data, ModelDataT::Parameters::R, R_ );
332- readRealParameter (data, ModelDataT::Parameters::X, X_ );
333- readRealParameter (data, ModelDataT::Parameters::G, G_ );
334- readRealParameter (data, ModelDataT::Parameters::B, B_ );
335- readRealParameter (data, ModelDataT::Parameters::tap, tap_);
336- readRealParameter (data, ModelDataT::Parameters::phase, phase_);
328+ using P = typename ModelDataT::Parameters;
337329
338- if (data.ports .contains (ModelDataT::Ports::bus1 ))
330+ if (data.parameters .contains (P::R ))
339331 {
340- bus1_id_ = data.ports .at (ModelDataT::Ports::bus1 );
332+ R_ = std::get<RealT>( data.parameters .at (P::R) );
341333 }
342-
343- if (data.ports .contains (ModelDataT::Ports::bus2))
334+ if (data.parameters .contains (P::X))
344335 {
345- bus2_id_ = data.ports .at (ModelDataT::Ports::bus2 );
336+ X_ = std::get<RealT>( data.parameters .at (P::X) );
346337 }
347- }
348-
349- template <typename scalar_type, typename index_type>
350- bool Branch<scalar_type, index_type>::readRealParameter(const ModelDataT& data,
351- typename ModelDataT::Parameters parameter,
352- RealT& target)
353- {
354- if (!data.parameters .contains (parameter))
338+ if (data.parameters .contains (P::G))
355339 {
356- return false ;
340+ G_ = std::get<RealT>(data. parameters . at (P::G)) ;
357341 }
358-
359- const auto & value = data.parameters .at (parameter);
360- if (const auto * real_value = std::get_if<RealT>(&value))
342+ if (data.parameters .contains (P::B))
361343 {
362- target = *real_value;
363- return true ;
344+ B_ = std::get<RealT>(data.parameters .at (P::B));
345+ }
346+ if (data.parameters .contains (P::tap))
347+ {
348+ tap_ = std::get<RealT>(data.parameters .at (P::tap));
349+ }
350+ if (data.parameters .contains (P::phase))
351+ {
352+ phase_ = std::get<RealT>(data.parameters .at (P::phase));
353+ }
354+ if (data.parameters .contains (P::closed))
355+ {
356+ closed_ = std::get<bool >(data.parameters .at (P::closed));
364357 }
365358
366- if (const auto * integer_value = std::get_if<IdxT>(&value ))
359+ if (data. ports . contains (ModelDataT::Ports::bus1 ))
367360 {
368- target = static_cast <RealT>(*integer_value);
369- return true ;
361+ bus1_id_ = data.ports .at (ModelDataT::Ports::bus1);
370362 }
371363
372- Log::error () << " Branch: parameter " << magic_enum::enum_name (parameter )
373- << " must be numeric \n " ;
374- parameter_error_count_ += 1 ;
375- return false ;
364+ if (data. ports . contains (ModelDataT::Ports::bus2) )
365+ {
366+ bus2_id_ = data. ports . at (ModelDataT::Ports::bus2) ;
367+ }
376368 }
377369
378370 template <typename scalar_type, typename index_type>
@@ -454,14 +446,15 @@ namespace GridKit
454446 template <typename scalar_type, typename index_type>
455447 void Branch<scalar_type, index_type>::setDerivedParams()
456448 {
457- g11_ = RealT{0.0 };
458- b11_ = RealT{0.0 };
459- g12_ = RealT{0.0 };
460- b12_ = RealT{0.0 };
461- g21_ = RealT{0.0 };
462- b21_ = RealT{0.0 };
463- g22_ = RealT{0.0 };
464- b22_ = RealT{0.0 };
449+ g11_ = RealT{0.0 };
450+ b11_ = RealT{0.0 };
451+ g12_ = RealT{0.0 };
452+ b12_ = RealT{0.0 };
453+ g21_ = RealT{0.0 };
454+ b21_ = RealT{0.0 };
455+ g22_ = RealT{0.0 };
456+ b22_ = RealT{0.0 };
457+ in_service_factor_ = closed_ ? RealT{1.0 } : RealT{0.0 };
465458
466459 const RealT denom = R_ * R_ + X_ * X_ ;
467460 if (denom == RealT{0.0 } || tap_ == RealT{0.0 })
@@ -478,17 +471,17 @@ namespace GridKit
478471 const RealT g_diag = -(g_br + RealT{0.5 } * G_ );
479472 const RealT b_diag = -(b_br + RealT{0.5 } * B_ );
480473
481- g11_ = g_diag * inv_tap * inv_tap;
482- b11_ = b_diag * inv_tap * inv_tap;
474+ g11_ = in_service_factor_ * g_diag * inv_tap * inv_tap;
475+ b11_ = in_service_factor_ * b_diag * inv_tap * inv_tap;
483476
484- g12_ = (g_br * cos_ph - b_br * sin_ph) * inv_tap;
485- b12_ = (b_br * cos_ph + g_br * sin_ph) * inv_tap;
477+ g12_ = in_service_factor_ * (g_br * cos_ph - b_br * sin_ph) * inv_tap;
478+ b12_ = in_service_factor_ * (b_br * cos_ph + g_br * sin_ph) * inv_tap;
486479
487- g21_ = (g_br * cos_ph + b_br * sin_ph) * inv_tap;
488- b21_ = (b_br * cos_ph - g_br * sin_ph) * inv_tap;
480+ g21_ = in_service_factor_ * (g_br * cos_ph + b_br * sin_ph) * inv_tap;
481+ b21_ = in_service_factor_ * (b_br * cos_ph - g_br * sin_ph) * inv_tap;
489482
490- g22_ = g_diag;
491- b22_ = b_diag;
483+ g22_ = in_service_factor_ * g_diag;
484+ b22_ = in_service_factor_ * b_diag;
492485 }
493486
494487 } // namespace PhasorDynamics
0 commit comments