Skip to content

Commit 1eb6fc0

Browse files
authored
Implement system model data structure and system composer (#138)
* Add bus factory to phasor dynamics family. * Add system model data for phasor dynamics family. * Use SystemModelData to instantiate system in phasor dynamic Example 1. * Add unit test for system constructor. --------- Co-authored-by: pelesh <pelesh@users.noreply.github.com>
1 parent 9b92afb commit 1eb6fc0

24 files changed

Lines changed: 484 additions & 228 deletions

File tree

examples/PhasorDynamics/Example1/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ target_link_libraries(phasordynamics_example1
44
GRIDKIT::phasor_dynamics_bus_fault
55
GRIDKIT::phasor_dynamics_branch
66
GRIDKIT::phasor_dynamics_genrou
7+
GRIDKIT::phasor_dynamics_load
78
GRIDKIT::solvers_dyn)
89
install(TARGETS phasordynamics_example1 RUNTIME DESTINATION bin)
910

examples/PhasorDynamics/Example1/example1.cpp

Lines changed: 62 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include <Model/PhasorDynamics/SynchronousMachine/GENROUwS/Genrou.hpp>
2424
#include <Model/PhasorDynamics/SynchronousMachine/GENROUwS/GenrouData.hpp>
2525
#include <Model/PhasorDynamics/SystemModel.hpp>
26+
#include <Model/PhasorDynamics/SystemModelData.hpp>
2627
#include <Solver/Dynamic/Ida.hpp>
2728
#include <Utilities/Testing.hpp>
2829

@@ -40,68 +41,72 @@ int main()
4041
//
4142
// Create model data
4243
//
43-
BusData<real_type, index_type> bus_data_1;
44-
bus_data_1.Vr0 = 0.9949877346411762;
45-
bus_data_1.Vi0 = 0.09999703952427966;
46-
47-
BusData<real_type, index_type> bus_data_2;
48-
bus_data_2.Vr0 = 1.0;
49-
bus_data_2.Vi0 = 0.0;
50-
51-
BranchData<real_type, index_type> branch_data_1_2;
52-
branch_data_1_2.R = 0.0;
53-
branch_data_1_2.X = 0.1;
54-
branch_data_1_2.G = 0.0;
55-
branch_data_1_2.B = 0.0;
56-
57-
GenrouData<real_type, index_type> gen_data_1;
58-
gen_data_1.unit_id = 1;
59-
gen_data_1.p0 = 1.;
60-
gen_data_1.q0 = 0.05013;
61-
gen_data_1.H = 3.;
62-
gen_data_1.D = 0.;
63-
gen_data_1.Ra = 0.;
64-
gen_data_1.Tdop = 7.;
65-
gen_data_1.Tdopp = .04;
66-
gen_data_1.Tqopp = .05;
67-
gen_data_1.Tqop = .75;
68-
gen_data_1.Xd = 2.1;
69-
gen_data_1.Xdp = 0.2;
70-
gen_data_1.Xdpp = 0.18;
71-
gen_data_1.Xq = 0.5;
72-
gen_data_1.Xqp = 0.5;
73-
gen_data_1.Xqpp = 0.18;
74-
gen_data_1.Xl = 0.15;
75-
gen_data_1.S10 = 0.;
76-
gen_data_1.S12 = 0.;
77-
78-
BusFaultData<real_type, index_type> bus_fault_data_1;
79-
bus_fault_data_1.R = 0.0;
80-
bus_fault_data_1.X = 1e-3;
81-
bus_fault_data_1.status = false;
8244

83-
//
84-
// Instantiate model components
85-
//
86-
87-
Bus<scalar_type, size_t> bus1(bus_data_1);
88-
BusInfinite<scalar_type, size_t> bus2(bus_data_2);
89-
Branch<scalar_type, size_t> branch(&bus1, &bus2, branch_data_1_2);
90-
BusFault<scalar_type, size_t> fault(&bus1, bus_fault_data_1);
91-
Genrou<scalar_type, size_t> gen(&bus1, gen_data_1);
45+
SystemModelData<scalar_type, index_type> data;
46+
47+
// Set bus data
48+
data.bus.resize(2);
49+
50+
data.bus[0].bus_id = 0;
51+
data.bus[0].bus_type = BusData<scalar_type, index_type>::DEFAULT;
52+
data.bus[0].Vr0 = 0.9949877346411762;
53+
data.bus[0].Vi0 = 0.09999703952427966;
54+
55+
data.bus[1].bus_id = 1;
56+
data.bus[1].bus_type = BusData<scalar_type, index_type>::SLACK;
57+
data.bus[1].Vr0 = 1.0;
58+
data.bus[1].Vi0 = 0.0;
59+
60+
// Set branch data
61+
data.branch.resize(1);
62+
63+
data.branch[0].bus1_id = data.bus[0].bus_id;
64+
data.branch[0].bus2_id = data.bus[1].bus_id;
65+
data.branch[0].R = 0.0;
66+
data.branch[0].X = 0.1;
67+
data.branch[0].G = 0.0;
68+
data.branch[0].B = 0.0;
69+
70+
// Set generator data
71+
data.genrou.resize(1);
72+
73+
data.genrou[0].unit_id = 1;
74+
data.genrou[0].p0 = 1.;
75+
data.genrou[0].q0 = 0.05013;
76+
data.genrou[0].H = 3.;
77+
data.genrou[0].D = 0.;
78+
data.genrou[0].Ra = 0.;
79+
data.genrou[0].Tdop = 7.;
80+
data.genrou[0].Tdopp = .04;
81+
data.genrou[0].Tqopp = .05;
82+
data.genrou[0].Tqop = .75;
83+
data.genrou[0].Xd = 2.1;
84+
data.genrou[0].Xdp = 0.2;
85+
data.genrou[0].Xdpp = 0.18;
86+
data.genrou[0].Xq = 0.5;
87+
data.genrou[0].Xqp = 0.5;
88+
data.genrou[0].Xqpp = 0.18;
89+
data.genrou[0].Xl = 0.15;
90+
data.genrou[0].S10 = 0.;
91+
data.genrou[0].S12 = 0.;
92+
93+
// Add faults
94+
data.bus_fault.resize(1);
95+
96+
data.bus_fault[0].R = 0.0;
97+
data.bus_fault[0].X = 1e-3;
98+
data.bus_fault[0].status = false;
9299

93100
//
94-
// Create the 2-bus system
101+
// Instantiate system model
95102
//
96103

97-
SystemModel<scalar_type, size_t> sys;
98-
sys.addBus(&bus1);
99-
sys.addBus(&bus2);
100-
sys.addComponent(&branch);
101-
sys.addComponent(&fault);
102-
sys.addComponent(&gen);
104+
SystemModel<scalar_type, index_type> sys(data);
103105
sys.allocate();
104106

107+
// Get access to the fault
108+
auto* fault = sys.getBusFault(0);
109+
105110
// Set time step to 1/4 of a 60Hz cycle
106111
real_type dt = 1.0 / 4.0 / 60.0;
107112

@@ -153,13 +158,13 @@ int main()
153158
ida.runSimulation(1.0, nout, output_cb);
154159

155160
// Introduce fault and run for the next 0.1s
156-
fault.setStatus(true);
161+
fault->setStatus(true);
157162
ida.initializeSimulation(1.0, false);
158163
nout = static_cast<int>(std::round((1.1 - 1.0) / dt));
159164
ida.runSimulation(1.1, nout, output_cb);
160165

161166
// Clear the fault and run until t = 10s.
162-
fault.setStatus(false);
167+
fault->setStatus(false);
163168
ida.initializeSimulation(1.1, false);
164169
nout = static_cast<int>(std::round((10.0 - 1.1) / dt));
165170
ida.runSimulation(10.0, nout, output_cb);

0 commit comments

Comments
 (0)