Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
af3b131
change inheritance diagram
TonyXiang8787 Feb 10, 2022
606a9cb
add branch3
TonyXiang8787 Feb 10, 2022
7b55dec
finish branch and enumeration
TonyXiang8787 Feb 10, 2022
55cf002
begin transformer
TonyXiang8787 Feb 10, 2022
d738924
transformer attribute
TonyXiang8787 Feb 10, 2022
4bf5cda
add example graph
TonyXiang8787 Feb 10, 2022
c20bec7
Merge branch 'release/1.4' into feature/3-winding-transformer
nitbharambe Jul 10, 2022
41f9cb6
fix conflict merge
nitbharambe Jul 10, 2022
624c64f
add branch3 to MeasuredTerminalType enum
petersalemink95 Jul 13, 2022
6890794
Brach3 class with Branch3Input
petersalemink95 Jul 13, 2022
850645b
Branch3Update
petersalemink95 Jul 13, 2022
00d5a85
Branch3Output
petersalemink95 Jul 15, 2022
7fb3483
branch3 component type
petersalemink95 Jul 15, 2022
170d416
Branch3 constructor
petersalemink95 Jul 15, 2022
5104d47
ThreeWindingTransformerInput
petersalemink95 Jul 18, 2022
6e51648
TreeWindingTrafo update
petersalemink95 Jul 18, 2022
78e201e
3wt base constructor
petersalemink95 Jul 18, 2022
5c2f234
Merge branch 'release/1.4' into feature/3-winding-transformer
petersalemink95 Jul 18, 2022
756a958
z_grounding
petersalemink95 Jul 21, 2022
8cf2609
base current
petersalemink95 Jul 21, 2022
f7eb546
update() Branch3
petersalemink95 Jul 21, 2022
e945ebe
fix Transformer update() bug + unit test
petersalemink95 Jul 21, 2022
e88873f
ThreeWindingTransformer update()
petersalemink95 Jul 21, 2022
ae09439
base_i getter
petersalemink95 Jul 25, 2022
d0a7259
convert 3wt to 3 2wt
petersalemink95 Jul 26, 2022
77e3893
remove clock_23
petersalemink95 Jul 27, 2022
d117b86
fix compiler errors
petersalemink95 Jul 28, 2022
448c057
[skip ci] half of implementation in main_model
petersalemink95 Jul 29, 2022
8ce9042
[skip ci] sym/asym calc_param
petersalemink95 Jul 29, 2022
1c907bb
[skip ci] add branch3 tot get_math_param()
petersalemink95 Aug 1, 2022
50853fb
branch3 output
petersalemink95 Aug 1, 2022
6c496b4
add_component
petersalemink95 Aug 2, 2022
004aa6d
is_topology_cacheable
petersalemink95 Aug 2, 2022
78ebb71
resolve conflicts
petersalemink95 Aug 2, 2022
ed68cc9
add Branch3 to MainModelImpl
petersalemink95 Aug 3, 2022
58ed2ac
Merge branch 'release/1.4' into feature/3-winding-transformer
TonyXiang8787 Aug 4, 2022
2953082
fix clock issue
TonyXiang8787 Aug 4, 2022
ffab8cd
add test inputs
nitbharambe Aug 5, 2022
0ec5622
narrowing conversion
TonyXiang8787 Aug 8, 2022
c8c579e
narrowing conversion
TonyXiang8787 Aug 8, 2022
25449e2
negative uk, pk
TonyXiang8787 Aug 8, 2022
be3b4a9
convert to y transformers
nitbharambe Aug 8, 2022
ed223e0
Merge remote-tracking branch 'origin/feature/3-winding-transformer' i…
nitbharambe Aug 8, 2022
ca382e9
Add outputs
nitbharambe Aug 9, 2022
c610231
add outputs, refine code
nitbharambe Aug 9, 2022
cc0db0d
add more subcases
nitbharambe Aug 13, 2022
ecf99e9
fix grounding
nitbharambe Aug 13, 2022
ee85437
Add types of trafo
nitbharambe Aug 15, 2022
5ba8a62
Add tap min max check
nitbharambe Aug 15, 2022
eb20115
cleanup code
nitbharambe Aug 15, 2022
8d76928
Merge branch 'release/1.4' into feature/3-winding-transformer
TonyXiang8787 Aug 15, 2022
a9f90bb
add asym out and rev tap check
nitbharambe Aug 16, 2022
897f379
fix code format
nitbharambe Aug 16, 2022
25ad0a3
fix null op and add test
nitbharambe Aug 16, 2022
62de8d7
modify main model to add sensor
TonyXiang8787 Aug 16, 2022
bd4e538
add transformer utils
nitbharambe Aug 17, 2022
3f1b5d0
add test for pk uk min max
nitbharambe Aug 17, 2022
1d50279
add pp validation case
nitbharambe Aug 17, 2022
e0969ae
remove some auto
TonyXiang8787 Aug 18, 2022
c79d7cd
add const
TonyXiang8787 Aug 18, 2022
4cbc557
use proxy object
TonyXiang8787 Aug 18, 2022
70b1a2a
add power sensor in branch3
TonyXiang8787 Aug 18, 2022
f7367e1
Merge remote-tracking branch 'origin/feature/3-winding-transformer' i…
TonyXiang8787 Aug 18, 2022
5461a1c
change pass by value
nitbharambe Aug 18, 2022
45eda9b
typos
TonyXiang8787 Aug 18, 2022
1e1397e
add sensor branch3 to topology, unit test
TonyXiang8787 Aug 18, 2022
7b313ca
add validator, incomplete test
nitbharambe Aug 18, 2022
d11880f
add state estimation test for three winding transformer
TonyXiang8787 Aug 18, 2022
dca2b44
Merge branch 'feature/3-winding-transformer-sensor' into feature/3-wi…
TonyXiang8787 Aug 18, 2022
d9836ce
complete validator test
nitbharambe Aug 18, 2022
1e6eab6
add xfails and enum
nitbharambe Aug 18, 2022
eb6a68a
fix enum mistake
nitbharambe Aug 21, 2022
12d6286
move validator test
nitbharambe Aug 22, 2022
6564a8b
three wdg case input
nitbharambe Aug 23, 2022
623d4ee
fix winding bug
nitbharambe Aug 23, 2022
5ecd919
add params
nitbharambe Aug 23, 2022
63401eb
add license, reproduce error
TonyXiang8787 Aug 23, 2022
23a14de
add version license
TonyXiang8787 Aug 23, 2022
8933747
fix issue by winding type
TonyXiang8787 Aug 23, 2022
747f000
add unit test for dynyn
nitbharambe Aug 23, 2022
b5e465a
split validator, reformat
nitbharambe Aug 23, 2022
331d2e4
retest trafo pandapower
TonyXiang8787 Aug 23, 2022
a854382
fix batch test case
TonyXiang8787 Aug 23, 2022
9f11dc6
5 empty result set
TonyXiang8787 Aug 23, 2022
18b9724
pylint ignore
TonyXiang8787 Aug 23, 2022
2c39f50
run isort
TonyXiang8787 Aug 23, 2022
1171493
fix unit test on validation
TonyXiang8787 Aug 23, 2022
9e01cd8
run black
TonyXiang8787 Aug 23, 2022
6acbfb4
Merge branch 'release/1.4' into feature/3-winding-transformer
TonyXiang8787 Aug 24, 2022
2457772
fix enum for branch3 in validator
nitbharambe Aug 24, 2022
dc2e2e5
formatting
TonyXiang8787 Aug 24, 2022
f597681
add validation test case
nitbharambe Aug 25, 2022
b14cc30
add const
TonyXiang8787 Aug 25, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
333 changes: 207 additions & 126 deletions docs/graph-data-model.md

Large diffs are not rendered by default.

6 changes: 4 additions & 2 deletions include/power_grid_model/all_components.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,15 @@
#include "component/sensor.hpp"
#include "component/shunt.hpp"
#include "component/source.hpp"
#include "component/three_winding_transformer.hpp"
#include "component/transformer.hpp"
#include "component/voltage_sensor.hpp"

namespace power_grid_model {

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

} // namespace power_grid_model

Expand Down
24 changes: 24 additions & 0 deletions include/power_grid_model/auxiliary/input.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ POWER_GRID_MODEL_DATA_STRUCT_DEF(NodeInput, 1, BaseInput,
POWER_GRID_MODEL_DATA_STRUCT_DEF(BranchInput, 1, BaseInput,
ID, from_node, ID, to_node, IntS, from_status, IntS, to_status);

POWER_GRID_MODEL_DATA_STRUCT_DEF(Branch3Input, 1, BaseInput,
ID, node_1, ID, node_2, ID, node_3, IntS, status_1, IntS, status_2, IntS, status_3);

POWER_GRID_MODEL_DATA_STRUCT_DEF(ApplianceInput, 1, BaseInput,
ID, node, IntS, status);

Expand All @@ -42,6 +45,21 @@ POWER_GRID_MODEL_DATA_STRUCT_DEF(TransformerInput, 1, BranchInput,
double, uk_min, double, uk_max, double, pk_min, double, pk_max,
double, r_grounding_from, double, x_grounding_from, double, r_grounding_to, double, x_grounding_to);

// Due to the maximum entries in the POWER_GRID_MODEL_DATA_STRUCT_DEF macro, ThreeWindingTransformerInput is created in two steps
// TODO: generate input data in a different way
POWER_GRID_MODEL_DATA_STRUCT_DEF(ThreeWindingTransformerInputBasics, 1, Branch3Input,
double, u1, double, u2, double, u3, double, sn_1, double, sn_2, double, sn_3,
double, uk_12, double, uk_13, double, uk_23, double, pk_12, double, pk_13, double, pk_23, double, i0, double, p0,
WindingType, winding_1, WindingType, winding_2, WindingType, winding_3,
IntS, clock_12, IntS, clock_13,
Branch3Side, tap_side, IntS, tap_pos, IntS, tap_min, IntS, tap_max, IntS, tap_nom, double, tap_size);

POWER_GRID_MODEL_DATA_STRUCT_DEF(ThreeWindingTransformerInput, 1, ThreeWindingTransformerInputBasics,
double, uk_12_min, double, uk_12_max, double, uk_13_min, double, uk_13_max, double, uk_23_min, double, uk_23_max,
double, pk_12_min, double, pk_12_max, double, pk_13_min, double, pk_13_max, double, pk_23_min, double, pk_23_max,
double, r_grounding_1, double, x_grounding_1, double, r_grounding_2, double, x_grounding_2,
double, r_grounding_3, double, x_grounding_3);

POWER_GRID_MODEL_DATA_STRUCT_DEF(GenericLoadGenInput, 1, ApplianceInput,
LoadGenType, type);

Expand Down Expand Up @@ -96,9 +114,15 @@ using BaseUpdate = BaseInput;
POWER_GRID_MODEL_DATA_STRUCT_DEF(BranchUpdate, 1, BaseUpdate,
IntS, from_status, IntS, to_status);

POWER_GRID_MODEL_DATA_STRUCT_DEF(Branch3Update, 1, BaseUpdate,
IntS, status_1, IntS, status_2, IntS, status_3);

POWER_GRID_MODEL_DATA_STRUCT_DEF(TransformerUpdate, 1, BranchUpdate,
IntS, tap_pos);

POWER_GRID_MODEL_DATA_STRUCT_DEF(ThreeWindingTransformerUpdate, 1, Branch3Update,
IntS, tap_pos);

POWER_GRID_MODEL_DATA_STRUCT_DEF(ApplianceUpdate, 1, BaseUpdate,
IntS, status);

Expand Down
7 changes: 7 additions & 0 deletions include/power_grid_model/auxiliary/output.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,13 @@ POWER_GRID_MODEL_DATA_STRUCT_DEF(BranchOutput, 1, BaseOutput,
RealValue<sym>, p_from, RealValue<sym>, q_from, RealValue<sym>, i_from, RealValue<sym>, s_from,
RealValue<sym>, p_to, RealValue<sym>, q_to, RealValue<sym>, i_to, RealValue<sym>, s_to);

template <bool sym>
POWER_GRID_MODEL_DATA_STRUCT_DEF(Branch3Output, 1, BaseOutput,
double, loading,
RealValue<sym>, p_1, RealValue<sym>, q_1, RealValue<sym>, i_1, RealValue<sym>, s_1,
RealValue<sym>, p_2, RealValue<sym>, q_2, RealValue<sym>, i_2, RealValue<sym>, s_2,
RealValue<sym>, p_3, RealValue<sym>, q_3, RealValue<sym>, i_3, RealValue<sym>, s_3);

template <bool sym>
POWER_GRID_MODEL_DATA_STRUCT_DEF(ApplianceOutput, 1, BaseOutput,
RealValue<sym>, p, RealValue<sym>, q, RealValue<sym>, i, RealValue<sym>, s, RealValue<sym>, pf);
Expand Down
164 changes: 164 additions & 0 deletions include/power_grid_model/component/branch3.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
// SPDX-FileCopyrightText: 2022 Contributors to the Power Grid Model project <dynamic.grid.calculation@alliander.com>
//
// SPDX-License-Identifier: MPL-2.0

#pragma once
#ifndef POWER_GRID_MODEL_COMPONENT_BRANCH3_HPP
#define POWER_GRID_MODEL_COMPONENT_BRANCH3_HPP

#include "../auxiliary/input.hpp"
#include "../auxiliary/output.hpp"
#include "../calculation_parameters.hpp"
#include "base.hpp"

namespace power_grid_model {

class Branch3 : public Base {
public:
using InputType = Branch3Input;
using UpdateType = Branch3Update;
template <bool sym>
using OutputType = Branch3Output<sym>;
static constexpr char const* name = "branch3";
ComponentType math_model_type() const final {
return ComponentType::branch3;
}

Branch3(Branch3Input const& branch3_input)
: Base{branch3_input},
node_1_{branch3_input.node_1},
node_2_{branch3_input.node_2},
node_3_{branch3_input.node_3},
status_1_{(bool)branch3_input.status_1},
status_2_{(bool)branch3_input.status_2},
status_3_{(bool)branch3_input.status_3} {
if (node_1_ == node_2_ || node_1_ == node_3_ || node_2_ == node_3_) {
throw InvalidBranch3{id(), node_1_, node_2_, node_3_};
}
}

// getter
ID node_1() const {
return node_1_;
}
ID node_2() const {
return node_2_;
}
ID node_3() const {
return node_3_;
}
bool status_1() const {
return status_1_;
}
bool status_2() const {
return status_2_;
}
bool status_3() const {
return status_3_;
}
bool branch3_status() const {
return status_1_ && status_2_ && status_3_; // TODO: check if this makes sense for branch3
}

// virtual getter
bool energized(bool is_connected_to_source = true) const final {
return is_connected_to_source && (status_1_ || status_2_ || status_3_);
}
virtual double base_i_1() const = 0;
virtual double base_i_2() const = 0;
virtual double base_i_3() const = 0;
virtual double loading(double s_1, double s_2, double s_3) const = 0;
virtual std::array<double, 3> phase_shift() const = 0;

template <bool sym>
std::array<BranchCalcParam<sym>, 3> calc_param(bool is_connected_to_source = true) const {
if (!energized(is_connected_to_source)) {
return std::array<BranchCalcParam<sym>, 3>{};
}
if constexpr (sym) {
return sym_calc_param();
}
else {
return asym_calc_param();
}
}

template <bool sym>
Branch3Output<sym> get_output(BranchMathOutput<sym> const& branch_math_output1,
BranchMathOutput<sym> const& branch_math_output2,
BranchMathOutput<sym> const& branch_math_output3) const {
// result object
Branch3Output<sym> output{};
static_cast<BaseOutput&>(output) = base_output(true);
// calculate result
output.p_1 = base_power<sym> * real(branch_math_output1.s_f);
output.q_1 = base_power<sym> * imag(branch_math_output1.s_f);
output.i_1 = base_i_1() * cabs(branch_math_output1.i_f);
output.s_1 = base_power<sym> * cabs(branch_math_output1.s_f);

output.p_2 = base_power<sym> * real(branch_math_output2.s_f);
output.q_2 = base_power<sym> * imag(branch_math_output2.s_f);
output.i_2 = base_i_2() * cabs(branch_math_output2.i_f);
output.s_2 = base_power<sym> * cabs(branch_math_output2.s_f);

output.p_3 = base_power<sym> * real(branch_math_output3.s_f);
output.q_3 = base_power<sym> * imag(branch_math_output3.s_f);
output.i_3 = base_i_3() * cabs(branch_math_output3.i_f);
output.s_3 = base_power<sym> * cabs(branch_math_output3.s_f);

output.loading = loading(sum_val(output.s_1), sum_val(output.s_2), sum_val(output.s_3));

return output;
}

template <bool sym>
Branch3Output<sym> get_null_output() const {
Branch3Output<sym> output{};
static_cast<BaseOutput&>(output) = base_output(false);
return output;
}

// setter
bool set_status(IntS new_status_1, IntS new_status_2, IntS new_status_3) {
bool const set_1 = new_status_1 != na_IntS;
bool const set_2 = new_status_2 != na_IntS;
bool const set_3 = new_status_3 != na_IntS;
bool changed = false;
if (set_1) {
changed = changed || (status_1_ != (bool)new_status_1);
status_1_ = (bool)new_status_1;
}
if (set_2) {
changed = changed || (status_2_ != (bool)new_status_2);
status_2_ = (bool)new_status_2;
}
if (set_3) {
changed = changed || (status_3_ != (bool)new_status_3);
status_3_ = (bool)new_status_3;
}
return changed;
}

// default update for branch3, will be hidden for three winding transformer
UpdateChange update(Branch3Update const& update) {
assert(update.id == id());
bool const changed = set_status(update.status_1, update.status_2, update.status_3);
// change in branch3 connection will change both topo and param
return {changed, changed};
}

private:
ID node_1_;
ID node_2_;
ID node_3_;
bool status_1_;
bool status_2_;
bool status_3_;

virtual std::array<BranchCalcParam<true>, 3> sym_calc_param() const = 0;
virtual std::array<BranchCalcParam<false>, 3> asym_calc_param() const = 0;
};

} // namespace power_grid_model

#endif
Loading