77 *
88 */
99
10- #include < variant>
11-
12- #include < magic_enum/magic_enum.hpp>
13-
10+ #include < GridKit/Model/ParameterReader.hpp>
1411#include < GridKit/Model/PhasorDynamics/Branch/Branch.hpp>
1512#include < GridKit/Model/PhasorDynamics/Branch/BranchData.hpp>
1613#include < GridKit/Model/PhasorDynamics/Bus/Bus.hpp>
@@ -109,8 +106,6 @@ namespace GridKit
109106 {
110107 Model::ConfigurationChecks checks (" Branch" );
111108
112- checks.check (parameter_error_count_ == 0 , " model data has invalid parameters" );
113-
114109 checks.check (bus1_ != nullptr , " bus1 pointer is null" );
115110 checks.check (bus2_ != nullptr , " bus2 pointer is null" );
116111
@@ -311,14 +306,16 @@ namespace GridKit
311306 using Parameter = typename ModelDataT::Parameters;
312307 using Buses = typename ModelDataT::Buses;
313308
314- readRealParameter (data, Parameter::R, R_ );
315- readRealParameter (data, Parameter::X, X_ );
316- readRealParameter (data, Parameter::G, G_ );
317- readRealParameter (data, Parameter::B, B_ );
318- readRealParameter (data, Parameter::Gmag, Gmag_);
319- readRealParameter (data, Parameter::Bmag, Bmag_);
320- readRealParameter (data, Parameter::tap, tap_);
321- readRealParameter (data, Parameter::phase, phase_);
309+ const Model::ParameterReader reader (data, " Branch" );
310+
311+ R_ = reader.readReal (Parameter::R).value_or (R_ );
312+ X_ = reader.readReal (Parameter::X).value_or (X_ );
313+ G_ = reader.readReal (Parameter::G).value_or (G_ );
314+ B_ = reader.readReal (Parameter::B).value_or (B_ );
315+ Gmag_ = reader.readReal (Parameter::Gmag).value_or (Gmag_);
316+ Bmag_ = reader.readReal (Parameter::Bmag).value_or (Bmag_);
317+ tap_ = reader.readReal (Parameter::tap).value_or (tap_);
318+ phase_ = reader.readReal (Parameter::phase).value_or (phase_);
322319
323320 if (data.buses .contains (Buses::bus1))
324321 {
@@ -331,35 +328,6 @@ namespace GridKit
331328 }
332329 }
333330
334- template <typename scalar_type, typename index_type>
335- bool Branch<scalar_type, index_type>::readRealParameter(const ModelDataT& data,
336- typename ModelDataT::Parameters parameter,
337- RealT& target)
338- {
339- if (!data.parameters .contains (parameter))
340- {
341- return false ;
342- }
343-
344- const auto & value = data.parameters .at (parameter);
345- if (const auto * real_value = std::get_if<RealT>(&value))
346- {
347- target = *real_value;
348- return true ;
349- }
350-
351- if (const auto * integer_value = std::get_if<IdxT>(&value))
352- {
353- target = static_cast <RealT>(*integer_value);
354- return true ;
355- }
356-
357- Log::error () << " Branch: parameter " << magic_enum::enum_name (parameter)
358- << " must be numeric\n " ;
359- parameter_error_count_ += 1 ;
360- return false ;
361- }
362-
363331 template <typename scalar_type, typename index_type>
364332 const Model::VariableMonitorBase* Branch<scalar_type, index_type>::getMonitor() const
365333 {
0 commit comments