Skip to content

Commit eb01480

Browse files
Merge pull request #1366 from PowerGridModel/pgm/improvement/remove-not-used-get-output-overload
Remove the voltage overload for branch and appliaces for get_output
2 parents 62de1f3 + f35844d commit eb01480

11 files changed

Lines changed: 0 additions & 371 deletions

File tree

power_grid_model_c/power_grid_model/include/power_grid_model/component/appliance.hpp

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,6 @@ class Appliance : public Base {
100100
ComplexValue<asymmetric_t> const iabc{i};
101101
return get_sc_output(iabc);
102102
}
103-
template <symmetry_tag sym> ApplianceOutput<sym> get_output(ComplexValue<sym> const& u) const {
104-
if constexpr (is_symmetric_v<sym>) {
105-
return get_output<symmetric_t>(sym_u2si(u));
106-
} else {
107-
return get_output<asymmetric_t>(asym_u2si(u));
108-
}
109-
}
110103
template <symmetry_tag sym>
111104
ApplianceShortCircuitOutput
112105
get_sc_output(ApplianceShortCircuitSolverOutput<sym> const& appliance_solver_output) const {
@@ -118,10 +111,6 @@ class Appliance : public Base {
118111
bool status_;
119112
double base_i_;
120113

121-
// pure virtual functions for translate from u to s/i
122-
virtual ApplianceSolverOutput<symmetric_t> sym_u2si(ComplexValue<symmetric_t> const& u) const = 0;
123-
virtual ApplianceSolverOutput<asymmetric_t> asym_u2si(ComplexValue<asymmetric_t> const& u) const = 0;
124-
125114
virtual double injection_direction() const = 0;
126115
};
127116

power_grid_model_c/power_grid_model/include/power_grid_model/component/branch.hpp

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -94,19 +94,6 @@ class Branch : public Base {
9494
virtual double phase_shift() const = 0; // shift theta_from - theta_to
9595
virtual bool is_param_mutable() const = 0;
9696

97-
template <symmetry_tag sym>
98-
BranchOutput<sym> get_output(ComplexValue<sym> const& u_f, ComplexValue<sym> const& u_t) const {
99-
// calculate flow
100-
BranchCalcParam<sym> const param = calc_param<sym>();
101-
BranchSolverOutput<sym> branch_solver_output{};
102-
branch_solver_output.i_f = dot(param.yff(), u_f) + dot(param.yft(), u_t);
103-
branch_solver_output.i_t = dot(param.ytf(), u_f) + dot(param.ytt(), u_t);
104-
branch_solver_output.s_f = u_f * conj(branch_solver_output.i_f);
105-
branch_solver_output.s_t = u_t * conj(branch_solver_output.i_t);
106-
// calculate result
107-
return get_output<sym>(branch_solver_output);
108-
}
109-
11097
template <symmetry_tag sym>
11198
BranchOutput<sym> get_output(BranchSolverOutput<sym> const& branch_solver_output) const {
11299
// result object

power_grid_model_c/power_grid_model/include/power_grid_model/component/load_gen.hpp

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -137,19 +137,6 @@ class LoadGen final : public std::conditional_t<is_generator_v<appliance_type_>,
137137
}
138138
return piecewise_complex_value(s_specified_);
139139
}
140-
template <symmetry_tag calculation_symmetry>
141-
ApplianceSolverOutput<calculation_symmetry> u2si(ComplexValue<calculation_symmetry> const& u) const {
142-
ApplianceSolverOutput<calculation_symmetry> appliance_solver_output;
143-
appliance_solver_output.s = scale_power<calculation_symmetry>(u);
144-
appliance_solver_output.i = conj(appliance_solver_output.s / u);
145-
return appliance_solver_output;
146-
}
147-
ApplianceSolverOutput<symmetric_t> sym_u2si(ComplexValue<symmetric_t> const& u) const override {
148-
return u2si<symmetric_t>(u);
149-
}
150-
ApplianceSolverOutput<asymmetric_t> asym_u2si(ComplexValue<asymmetric_t> const& u) const override {
151-
return u2si<asymmetric_t>(u);
152-
}
153140

154141
double injection_direction() const override { return direction_; }
155142

power_grid_model_c/power_grid_model/include/power_grid_model/component/shunt.hpp

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -106,21 +106,6 @@ class Shunt : public Appliance {
106106
return true;
107107
}
108108

109-
template <symmetry_tag sym_calc> ApplianceSolverOutput<sym_calc> u2si(ComplexValue<sym_calc> const& u) const {
110-
ApplianceSolverOutput<sym_calc> appliance_solver_output;
111-
ComplexTensor<sym_calc> const param = calc_param<sym_calc>();
112-
// return value should be injection direction, therefore a negative sign for i
113-
appliance_solver_output.i = -dot(param, u);
114-
appliance_solver_output.s = u * conj(appliance_solver_output.i);
115-
return appliance_solver_output;
116-
}
117-
ApplianceSolverOutput<symmetric_t> sym_u2si(ComplexValue<symmetric_t> const& u) const final {
118-
return u2si<symmetric_t>(u);
119-
}
120-
ApplianceSolverOutput<asymmetric_t> asym_u2si(ComplexValue<asymmetric_t> const& u) const final {
121-
return u2si<asymmetric_t>(u);
122-
}
123-
124109
double injection_direction() const final { return -1.0; }
125110
};
126111

power_grid_model_c/power_grid_model/include/power_grid_model/component/source.hpp

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -121,23 +121,6 @@ class Source : public Appliance {
121121
DoubleComplex y1_ref_;
122122
DoubleComplex y0_ref_;
123123

124-
template <symmetry_tag sym_calc> ApplianceSolverOutput<sym_calc> u2si(ComplexValue<sym_calc> const& u) const {
125-
ApplianceSolverOutput<sym_calc> appliance_solver_output;
126-
ComplexValue<sym_calc> const u_ref{u_ref_};
127-
SourceCalcParam const source_param = math_param<sym_calc>();
128-
ComplexTensor<sym_calc> const y_ref = source_param.template y_ref<sym_calc>();
129-
appliance_solver_output.i = dot(y_ref, u_ref - u);
130-
appliance_solver_output.s = u * conj(appliance_solver_output.i);
131-
return appliance_solver_output;
132-
}
133-
134-
ApplianceSolverOutput<symmetric_t> sym_u2si(ComplexValue<symmetric_t> const& u) const final {
135-
return u2si<symmetric_t>(u);
136-
}
137-
ApplianceSolverOutput<asymmetric_t> asym_u2si(ComplexValue<asymmetric_t> const& u) const final {
138-
return u2si<asymmetric_t>(u);
139-
}
140-
141124
double injection_direction() const final { return 1.0; }
142125
};
143126

tests/cpp_unit_tests/test_asym_line.cpp

Lines changed: 0 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
#include <doctest/doctest.h>
2020

21-
#include <algorithm>
2221
#include <complex>
2322

2423
namespace power_grid_model {
@@ -54,38 +53,6 @@ void execute_subcases(const AsymLineInput& input, const ComplexTensor<asymmetric
5453
ComplexTensor<asymmetric_t> const ytt = y_series + 0.5 * y_shunt;
5554
ComplexTensor<asymmetric_t> const branch_shunt = 0.5 * y_shunt + inv(inv(y_series) + 2.0 * inv(y_shunt));
5655

57-
double constexpr nominal_current = 216.0;
58-
DoubleComplex const u1f = 1.0;
59-
DoubleComplex const u1t = 0.9;
60-
ComplexValue<asymmetric_t> const uaf{1.0};
61-
ComplexValue<asymmetric_t> const uat{0.9};
62-
63-
// Symmetric results
64-
DoubleComplex const i1f = (yff1 * u1f + yft1 * u1t) * base_i;
65-
DoubleComplex const i1t = (yft1 * u1f + yff1 * u1t) * base_i;
66-
DoubleComplex const s_f = conj(i1f) * u1f * 10e3 * sqrt3;
67-
DoubleComplex const s_t = conj(i1t) * u1t * 10e3 * sqrt3;
68-
double const loading_sym = std::max(cabs(i1f), cabs(i1t)) / nominal_current;
69-
70-
// Asymmetric results
71-
ComplexValue<asymmetric_t> const i_f = dot(ytt, uaf) + dot(-y_series, uat);
72-
ComplexValue<asymmetric_t> const i_t = dot(-y_series, uaf) + dot(ytt, uat);
73-
ComplexValue<asymmetric_t> const i3pf = base_i * cabs(i_f);
74-
ComplexValue<asymmetric_t> const i3pt = base_i * cabs(i_t);
75-
76-
ComplexValue<asymmetric_t> const s_f_asym = uaf * conj(i_f);
77-
ComplexValue<asymmetric_t> const s_t_asym = uat * conj(i_t);
78-
79-
RealValue<asymmetric_t> const i_from_asym = base_i * cabs(i_f);
80-
RealValue<asymmetric_t> const i_to_asym = base_i * cabs(i_t);
81-
82-
ComplexValue<asymmetric_t> const p3pf = base_power<asymmetric_t> * real(s_f_asym);
83-
ComplexValue<asymmetric_t> const p3pt = base_power<asymmetric_t> * real(s_t_asym);
84-
ComplexValue<asymmetric_t> const q3pf = base_power<asymmetric_t> * imag(s_f_asym);
85-
ComplexValue<asymmetric_t> const q3pt = base_power<asymmetric_t> * imag(s_t_asym);
86-
87-
double const max_i = std::max(max_val(i_from_asym), max_val(i_to_asym));
88-
double const loading_asym = max_i / nominal_current;
8956
// Short circuit results
9057
DoubleComplex const if_sc{1.0, 1.0};
9158
DoubleComplex const it_sc{2.0, 2.0 * sqrt3};
@@ -164,21 +131,6 @@ void execute_subcases(const AsymLineInput& input, const ComplexTensor<asymmetric
164131
CHECK((cabs(param.yft() - 0.0) < numerical_tolerance).all());
165132
}
166133

167-
SUBCASE("Symmetric results") {
168-
BranchOutput<symmetric_t> const output = branch.get_output<symmetric_t>(1.0, 0.9);
169-
CHECK(output.id == 1);
170-
CHECK(output.energized);
171-
CHECK(output.loading == doctest::Approx(loading_sym));
172-
CHECK(output.i_from == doctest::Approx(cabs(i1f)));
173-
CHECK(output.i_to == doctest::Approx(cabs(i1t)));
174-
CHECK(output.s_from == doctest::Approx(cabs(s_f)));
175-
CHECK(output.s_to == doctest::Approx(cabs(s_t)));
176-
CHECK(output.p_from == doctest::Approx(real(s_f)));
177-
CHECK(output.p_to == doctest::Approx(real(s_t)));
178-
CHECK(output.q_from == doctest::Approx(imag(s_f)));
179-
CHECK(output.q_to == doctest::Approx(imag(s_t)));
180-
}
181-
182134
SUBCASE("Symmetric results with direct power and current output") {
183135
BranchSolverOutput<symmetric_t> branch_solver_output{};
184136
branch_solver_output.i_f = 1.0 - 2.0i;
@@ -224,19 +176,6 @@ void execute_subcases(const AsymLineInput& input, const ComplexTensor<asymmetric
224176
CHECK(output.i_to_angle(1) == 0.0);
225177
}
226178

227-
SUBCASE("Asymmetric results") {
228-
BranchOutput<asymmetric_t> const output = branch.get_output<asymmetric_t>(uaf, uat);
229-
CHECK(output.id == 1);
230-
CHECK(output.energized);
231-
CHECK(output.loading == doctest::Approx(loading_asym));
232-
CHECK((cabs(output.i_from - i3pf) < numerical_tolerance).all());
233-
CHECK((cabs(output.i_to - i3pt) < numerical_tolerance).all());
234-
CHECK((cabs(output.p_from - p3pf) < numerical_tolerance).all());
235-
CHECK((cabs(output.p_to - p3pt) < numerical_tolerance).all());
236-
CHECK((cabs(output.q_from - q3pf) < numerical_tolerance).all());
237-
CHECK((cabs(output.q_to - q3pt) < numerical_tolerance).all());
238-
}
239-
240179
SUBCASE("Asym short circuit results") {
241180
BranchShortCircuitOutput const asym_output = branch.get_sc_output(if_sc_asym, it_sc_asym);
242181
CHECK(asym_output.id == 1);

tests/cpp_unit_tests/test_line.cpp

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
#include <doctest/doctest.h>
1919

20-
#include <algorithm>
2120
#include <complex>
2221

2322
namespace power_grid_model {
@@ -59,15 +58,8 @@ TEST_CASE("Test line") {
5958
ComplexTensor<asymmetric_t> const yfta{(2.0 * yft1 + yft0) / 3.0, (yft0 - yft1) / 3.0};
6059
ComplexTensor<asymmetric_t> const ysa{(2.0 * ys1 + ys0) / 3.0, (ys0 - ys1) / 3.0};
6160

62-
DoubleComplex const u1f = 1.0;
63-
DoubleComplex const u1t = 0.9;
6461
ComplexValue<asymmetric_t> const uaf{1.0};
6562
ComplexValue<asymmetric_t> const uat{0.9};
66-
DoubleComplex const i1f = (yff1 * u1f + yft1 * u1t) * base_i;
67-
DoubleComplex const i1t = (yft1 * u1f + yff1 * u1t) * base_i;
68-
DoubleComplex const s_f = conj(i1f) * u1f * 10e3 * sqrt3;
69-
DoubleComplex const s_t = conj(i1t) * u1t * 10e3 * sqrt3;
70-
double const loading = std::max(cabs(i1f), cabs(i1t)) / 200.0;
7163

7264
// Short circuit results
7365
DoubleComplex const if_sc{1.0, 1.0};
@@ -147,21 +139,6 @@ TEST_CASE("Test line") {
147139
CHECK((cabs(param.yft() - 0.0) < numerical_tolerance).all());
148140
}
149141

150-
SUBCASE("Symmetric results") {
151-
BranchOutput<symmetric_t> const output = branch.get_output<symmetric_t>(1.0, 0.9);
152-
CHECK(output.id == 1);
153-
CHECK(output.energized);
154-
CHECK(output.loading == doctest::Approx(loading));
155-
CHECK(output.i_from == doctest::Approx(cabs(i1f)));
156-
CHECK(output.i_to == doctest::Approx(cabs(i1t)));
157-
CHECK(output.s_from == doctest::Approx(cabs(s_f)));
158-
CHECK(output.s_to == doctest::Approx(cabs(s_t)));
159-
CHECK(output.p_from == doctest::Approx(real(s_f)));
160-
CHECK(output.p_to == doctest::Approx(real(s_t)));
161-
CHECK(output.q_from == doctest::Approx(imag(s_f)));
162-
CHECK(output.q_to == doctest::Approx(imag(s_t)));
163-
}
164-
165142
SUBCASE("Symmetric results with direct power and current output") {
166143
BranchSolverOutput<symmetric_t> branch_solver_output{};
167144
branch_solver_output.i_f = 1.0 - 2.0i;
@@ -207,21 +184,6 @@ TEST_CASE("Test line") {
207184
CHECK(output.i_to_angle(1) == 0.0);
208185
}
209186

210-
SUBCASE("Asymmetric results") {
211-
BranchOutput<asymmetric_t> output = branch.get_output<asymmetric_t>(uaf, uat);
212-
CHECK(output.id == 1);
213-
CHECK(output.energized);
214-
CHECK(output.loading == doctest::Approx(loading));
215-
CHECK(output.i_from(0) == doctest::Approx(cabs(i1f)));
216-
CHECK(output.i_to(1) == doctest::Approx(cabs(i1t)));
217-
CHECK(output.s_from(2) == doctest::Approx(cabs(s_f) / 3.0));
218-
CHECK(output.s_to(0) == doctest::Approx(cabs(s_t) / 3.0));
219-
CHECK(output.p_from(1) == doctest::Approx(real(s_f) / 3.0));
220-
CHECK(output.p_to(2) == doctest::Approx(real(s_t) / 3.0));
221-
CHECK(output.q_from(0) == doctest::Approx(imag(s_f) / 3.0));
222-
CHECK(output.q_to(1) == doctest::Approx(imag(s_t) / 3.0));
223-
}
224-
225187
SUBCASE("Asym short circuit results") {
226188
BranchShortCircuitOutput asym_output = branch.get_sc_output(if_sc_asym, it_sc_asym);
227189
CHECK(asym_output.id == 1);

tests/cpp_unit_tests/test_link.cpp

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,8 @@ TEST_CASE("Test link") {
3030
Branch& branch = link;
3131
double const base_i_from = base_power_1p / (10.0e3 / sqrt3);
3232
double const base_i_to = base_power_1p / (50.0e3 / sqrt3);
33-
DoubleComplex const u1f = 1.0;
34-
DoubleComplex const u1t = 0.9;
3533
ComplexValue<asymmetric_t> const uaf{1.0};
3634
ComplexValue<asymmetric_t> const uat{0.9};
37-
DoubleComplex const i1f = (u1f - u1t) * y_link * base_i_from;
38-
DoubleComplex const i1t = (u1t - u1f) * y_link * base_i_to;
39-
DoubleComplex const s_f = conj(i1f) * u1f * 10e3 * sqrt3;
40-
DoubleComplex const s_t = conj(i1t) * u1t * 50e3 * sqrt3;
4135

4236
// Short circuit results
4337
DoubleComplex const if_sc{1.0, 1.0};
@@ -77,36 +71,6 @@ TEST_CASE("Test link") {
7771
CHECK(cabs(param.yft() - 0.0) < numerical_tolerance);
7872
}
7973

80-
SUBCASE("Symmetric results") {
81-
BranchOutput<symmetric_t> const output = branch.get_output<symmetric_t>(1.0, 0.9);
82-
CHECK(output.id == 1);
83-
CHECK(output.energized);
84-
CHECK(output.loading == 0.0);
85-
CHECK(output.i_from == doctest::Approx(cabs(i1f)));
86-
CHECK(output.i_to == doctest::Approx(cabs(i1t)));
87-
CHECK(output.s_from == doctest::Approx(cabs(s_f)));
88-
CHECK(output.s_to == doctest::Approx(cabs(s_t)));
89-
CHECK(output.p_from == doctest::Approx(real(s_f)));
90-
CHECK(output.p_to == doctest::Approx(real(s_t)));
91-
CHECK(output.q_from == doctest::Approx(imag(s_f)));
92-
CHECK(output.q_to == doctest::Approx(imag(s_t)));
93-
}
94-
95-
SUBCASE("Asymmetric results") {
96-
BranchOutput<asymmetric_t> const output = branch.get_output<asymmetric_t>(uaf, uat);
97-
CHECK(output.id == 1);
98-
CHECK(output.energized);
99-
CHECK(output.loading == 0.0);
100-
CHECK(output.i_from(0) == doctest::Approx(cabs(i1f)));
101-
CHECK(output.i_to(1) == doctest::Approx(cabs(i1t)));
102-
CHECK(output.s_from(2) == doctest::Approx(cabs(s_f) / 3.0));
103-
CHECK(output.s_to(0) == doctest::Approx(cabs(s_t) / 3.0));
104-
CHECK(output.p_from(1) == doctest::Approx(real(s_f) / 3.0));
105-
CHECK(output.p_to(2) == doctest::Approx(real(s_t) / 3.0));
106-
CHECK(output.q_from(0) == doctest::Approx(imag(s_f) / 3.0));
107-
CHECK(output.q_to(1) == doctest::Approx(imag(s_t) / 3.0));
108-
}
109-
11074
SUBCASE("Short circuit asym results") {
11175
BranchShortCircuitOutput const asym_output = branch.get_sc_output(if_sc_asym, it_sc_asym);
11276
CHECK(asym_output.id == 1);

0 commit comments

Comments
 (0)