Skip to content

Commit

Permalink
reformating cpp-files
Browse files Browse the repository at this point in the history
PPSE/17
  • Loading branch information
sudo-ac committed Sep 23, 2024
1 parent 7e669f6 commit ae63296
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 84 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,9 @@

namespace power_grid_model {

using AllComponents = ComponentList<Node, Line, Link, GenericBranch, Transformer, ThreeWindingTransformer, Shunt, Source, SymGenerator,
AsymGenerator, SymLoad, AsymLoad, SymPowerSensor, AsymPowerSensor, SymVoltageSensor,
AsymVoltageSensor, Fault, TransformerTapRegulator>;
using AllComponents =
ComponentList<Node, Line, Link, GenericBranch, Transformer, ThreeWindingTransformer, Shunt, Source, SymGenerator,
AsymGenerator, SymLoad, AsymLoad, SymPowerSensor, AsymPowerSensor, SymVoltageSensor,
AsymVoltageSensor, Fault, TransformerTapRegulator>;

} // namespace power_grid_model
Original file line number Diff line number Diff line change
Expand Up @@ -37,35 +37,33 @@ class GenericBranch final : public Branch {
static constexpr char const* name = "genericbranch";

explicit GenericBranch(GenericBranchInput const& genericbranch_input, double u1_rated, double u2_rated)
: Branch{genericbranch_input},
sn_{genericbranch_input.sn},
r1_{genericbranch_input.r1},
x1_{genericbranch_input.x1},
b1_{genericbranch_input.b1},
g1_{genericbranch_input.g1},
ratio_{is_nan(genericbranch_input.ratio) ? 1.0 : genericbranch_input.ratio},
shift_{is_nan(genericbranch_input.shift) ? 0.0 : fmod(genericbranch_input.shift, 2 * M_PI)},
base_i_from_{base_power_3p / u1_rated / sqrt3},
base_i_to_{base_power_3p / u2_rated / sqrt3},
z_grounding_from_{
calculate_z_pu(genericbranch_input.r_grounding_from, genericbranch_input.x_grounding_from, u1_rated)},
z_grounding_to_{
calculate_z_pu(genericbranch_input.r_grounding_to, genericbranch_input.x_grounding_to, u2_rated)} {
: Branch{genericbranch_input},
sn_{genericbranch_input.sn},
r1_{genericbranch_input.r1},
x1_{genericbranch_input.x1},
b1_{genericbranch_input.b1},
g1_{genericbranch_input.g1},
ratio_{is_nan(genericbranch_input.ratio) ? 1.0 : genericbranch_input.ratio},
shift_{is_nan(genericbranch_input.shift) ? 0.0 : fmod(genericbranch_input.shift, 2 * M_PI)},
base_i_from_{base_power_3p / u1_rated / sqrt3},
base_i_to_{base_power_3p / u2_rated / sqrt3},
z_grounding_from_{
calculate_z_pu(genericbranch_input.r_grounding_from, genericbranch_input.x_grounding_from, u1_rated)},
z_grounding_to_{
calculate_z_pu(genericbranch_input.r_grounding_to, genericbranch_input.x_grounding_to, u2_rated)} {

double const base_y_to = base_i_to_ * base_i_to_ / base_power_1p;
y1_series_ = 1.0 / (r1_ + 1.0i*x1_) / base_y_to;
y1_shunt_ = (g1_ + 1.0i*b1_) / base_y_to;

y1_series_ = 1.0 / (r1_ + 1.0i * x1_) / base_y_to;
y1_shunt_ = (g1_ + 1.0i * b1_) / base_y_to;
}

// override getter
double base_i_from() const override { return base_i_from_; }
double base_i_to() const override { return base_i_to_; }
double loading(double max_s , double /*max_i*/) const override { return is_nan(sn_) ? 0.0 : (max_s / sn_); };
double loading(double max_s, double /*max_i*/) const override { return is_nan(sn_) ? 0.0 : (max_s / sn_); };
double phase_shift() const override { return shift_; }
bool is_param_mutable() const override { return false; }


template <symmetry_tag sym>
BranchOutput<sym> get_output(BranchSolverOutput<sym> const& branch_solver_output) const {
// result object
Expand Down Expand Up @@ -102,7 +100,7 @@ class GenericBranch final : public Branch {
double g1_;
double ratio_;
double shift_;

double base_i_from_;
double base_i_to_;

Expand All @@ -120,14 +118,12 @@ class GenericBranch final : public Branch {
return {r / base_z, x / base_z};
}


BranchCalcParam<symmetric_t> sym_calc_param() const override {
return calc_param_y_sym(y1_series_, y1_shunt_, ratio_*std::exp(1.0i * shift_));
return calc_param_y_sym(y1_series_, y1_shunt_, ratio_ * std::exp(1.0i * shift_));
}

BranchCalcParam<asymmetric_t> asym_calc_param() const override {
// the following code section adapts the calculation from the transformer.cpp for a YNyn equivalent


// positive sequence (param1)
auto const param1 = calc_param_y_sym(y1_series_, y1_shunt_, ratio_ * std::exp(1.0i * shift_));
Expand All @@ -137,9 +133,9 @@ class GenericBranch final : public Branch {
// zero sequence, default zero
BranchCalcParam<symmetric_t> param0{};


// calculate the zero sequence parameters (YNyn equivalent)
DoubleComplex const z0_series = 1.0 / y1_series_ + 3.0 * (z_grounding_to_ + z_grounding_from_ / ratio_ / ratio_);
DoubleComplex const z0_series =
1.0 / y1_series_ + 3.0 * (z_grounding_to_ + z_grounding_from_ / ratio_ / ratio_);
DoubleComplex const y0_series = 1.0 / z0_series;
param0 = calc_param_y_sym(y0_series, y1_shunt_, ratio_ * std::exp(1.0i * shift_));

Expand Down
2 changes: 1 addition & 1 deletion tests/cpp_unit_tests/test_all_components.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
#include <power_grid_model/component/branch.hpp>
#include <power_grid_model/component/branch3.hpp>
#include <power_grid_model/component/fault.hpp>
#include <power_grid_model/component/line.hpp>
#include <power_grid_model/component/genericbranch.hpp>
#include <power_grid_model/component/line.hpp>
#include <power_grid_model/component/link.hpp>
#include <power_grid_model/component/load_gen.hpp>
#include <power_grid_model/component/node.hpp>
Expand Down
104 changes: 49 additions & 55 deletions tests/cpp_unit_tests/test_genericbranch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,36 +31,33 @@ ComplexTensor<asymmetric_t> get_a_inv() {

TEST_CASE("Test genericbranch") {
GenericBranchInput const input{.id = 1,
.from_node = 2,
.to_node = 3,
.from_status = 1,
.to_status = 1,
.r1 = 0.016,
.x1 = 0.16,
.b1 = 0.0,
.g1 = 0.0,
.r_grounding_from = nan,
.x_grounding_from = nan,
.r_grounding_to = nan,
.x_grounding_to = nan,
.ratio = 1.0,
.shift = 0.0,
.sn = 30e6};
.from_node = 2,
.to_node = 3,
.from_status = 1,
.to_status = 1,
.r1 = 0.016,
.x1 = 0.16,
.b1 = 0.0,
.g1 = 0.0,
.r_grounding_from = nan,
.x_grounding_from = nan,
.r_grounding_to = nan,
.x_grounding_to = nan,
.ratio = 1.0,
.shift = 0.0,
.sn = 30e6};

GenericBranch branch{input, u1, u2};
double const base_y = base_i_to * base_i_to / base_power_1p;


DoubleComplex const y1_series = 1.0 / (input.r1 + 1.0i*input.x1) / base_y;
DoubleComplex const y1_shunt = (input.g1 + 1.0i*input.b1) / base_y;
double const base_y = base_i_to * base_i_to / base_power_1p;

DoubleComplex const y1_series = 1.0 / (input.r1 + 1.0i * input.x1) / base_y;
DoubleComplex const y1_shunt = (input.g1 + 1.0i * input.b1) / base_y;

// symmetric
DoubleComplex const yff1 = y1_series + 0.5 * y1_shunt;
DoubleComplex const yft1 = -y1_series;


SUBCASE("General"){
SUBCASE("General") {
CHECK(branch.from_node() == 2);
CHECK(branch.to_node() == 3);
CHECK(branch.from_status() == true);
Expand All @@ -70,46 +67,44 @@ TEST_CASE("Test genericbranch") {
CHECK(branch.status(BranchSide::to) == branch.to_status());
CHECK(branch.base_i_from() == doctest::Approx(base_i_from));
CHECK(branch.base_i_to() == doctest::Approx(base_i_to));
CHECK(branch.phase_shift() == 0.0);
CHECK(branch.phase_shift() == 0.0);
CHECK(!branch.is_param_mutable());
}

SUBCASE("Symmetric parameters") {
BranchCalcParam<symmetric_t> param = branch.calc_param<symmetric_t>();
CHECK(cabs(param.yff() - yff1) < numerical_tolerance);
CHECK(cabs(param.ytt() - yff1) < numerical_tolerance);
CHECK(cabs(param.ytf() - yft1) < numerical_tolerance);
CHECK(cabs(param.yft() - yft1) < numerical_tolerance);
BranchCalcParam<symmetric_t> param = branch.calc_param<symmetric_t>();
CHECK(cabs(param.yff() - yff1) < numerical_tolerance);
CHECK(cabs(param.ytt() - yff1) < numerical_tolerance);
CHECK(cabs(param.ytf() - yft1) < numerical_tolerance);
CHECK(cabs(param.yft() - yft1) < numerical_tolerance);
}


}
TEST_CASE("Test YNyn12") {
ComplexTensor<asymmetric_t> const A = get_a();
ComplexTensor<asymmetric_t> const A_inv = get_a_inv();

GenericBranchInput const input{.id = 1,
.from_node = 2,
.to_node = 3,
.from_status = 1,
.to_status = 1,
.r1 = 0.016,
.x1 = 0.16,
.b1 = 0.0,
.g1 = 0.0,
.r_grounding_from = 0.5,
.x_grounding_from = 2.0,
.r_grounding_to = 1.0,
.x_grounding_to = 4.0,
.ratio = 1.05,
.shift = 0.0,
.sn = 30e6};
.from_node = 2,
.to_node = 3,
.from_status = 1,
.to_status = 1,
.r1 = 0.016,
.x1 = 0.16,
.b1 = 0.0,
.g1 = 0.0,
.r_grounding_from = 0.5,
.x_grounding_from = 2.0,
.r_grounding_to = 1.0,
.x_grounding_to = 4.0,
.ratio = 1.05,
.shift = 0.0,
.sn = 30e6};

double const u1_rated{u1};
double const u2_rated{u2};

GenericBranch YNyn12{input, u1_rated, u2_rated};
double const k = input.ratio; // magnitude of komplex transformer ratio
double const k = input.ratio; // magnitude of komplex transformer ratio
DoubleComplex const tap_ratio = k * std::exp(1.0i * (input.shift)); // komplex transformer ratio

double const base_y_from = base_i_from / (u1_rated / sqrt3);
Expand All @@ -121,23 +116,23 @@ TEST_CASE("Test YNyn12") {
DoubleComplex const z_1_series = (z_real + 1i * z_imag) * base_y_to;
DoubleComplex const z_2_series = z_1_series;
DoubleComplex const z_0_series = z_1_series + 3.0 * (z_grounding_to + z_grounding_from / k / k);

ComplexTensor<asymmetric_t> z_diagonal;
z_diagonal << z_0_series, 0.0, 0.0, 0.0, z_1_series, 0.0, 0.0, 0.0, z_2_series;

ComplexTensor<asymmetric_t> const z_series = dot(A, z_diagonal, A_inv);

DoubleComplex const y_1_shunt = (input.g1 + 1.0i*input.b1) / base_y_to;
DoubleComplex const y_1_shunt = (input.g1 + 1.0i * input.b1) / base_y_to;

ComplexTensor<asymmetric_t> y_shunt_diagonal;
y_shunt_diagonal << y_1_shunt, 0.0, 0.0, 0.0, y_1_shunt, 0.0, 0.0, 0.0, y_1_shunt;
ComplexTensor<asymmetric_t> const y_shunt = dot(A, y_shunt_diagonal, A_inv);

ComplexTensor<asymmetric_t> const y_tt = inv(z_series) + 0.5 * y_shunt;
ComplexTensor<asymmetric_t> const y_tt = inv(z_series) + 0.5 * y_shunt;
ComplexTensor<asymmetric_t> const y_ff = (1.0 / k / k) * y_tt;
ComplexTensor<asymmetric_t> const y_ft = (-1.0 / conj(tap_ratio))*inv(z_series);
ComplexTensor<asymmetric_t> const y_tf = (-1.0 / tap_ratio)*inv(z_series);
ComplexTensor<asymmetric_t> const y_ft = (-1.0 / conj(tap_ratio)) * inv(z_series);
ComplexTensor<asymmetric_t> const y_tf = (-1.0 / tap_ratio) * inv(z_series);

BranchCalcParam<asymmetric_t> const param = YNyn12.calc_param<asymmetric_t>();

CHECK((cabs(param.value[0] - y_ff) < numerical_tolerance).all());
Expand All @@ -148,5 +143,4 @@ TEST_CASE("Test YNyn12") {
SUBCASE("Test genericbranch loading") { CHECK(YNyn12.loading(60.0e6, 0.0) == doctest::Approx(2.0)); }
}


} // namespace power_grid_model

0 comments on commit ae63296

Please sign in to comment.