@@ -31,32 +31,44 @@ type GenericPowerModel{T<:AbstractPowerFormulation} <: AbstractPowerModel
31
31
set:: PowerDataSets
32
32
setting:: Dict{AbstractString,Any}
33
33
solution:: Dict{AbstractString,Any}
34
+
35
+ # Extension dictionary
36
+ # Extensions should define a type to hold information particular to
37
+ # their functionality, and store an instance of the type in this
38
+ # dictionary keyed on an extension-specific symbol
39
+ ext:: Dict{Symbol,Any}
34
40
end
35
41
36
42
# default generic constructor
37
- function GenericPowerModel {T} (data:: Dict{AbstractString,Any} , vars:: T ; setting = Dict {AbstractString,Any} (), solver = JuMP. UnsetSolver ())
38
- data, sets = process_raw_data (data)
39
-
43
+ function GenericPowerModel {T} (data:: Dict{AbstractString,Any} , vars:: T ; setting = Dict {AbstractString,Any} (), solver = JuMP. UnsetSolver (), data_processor = process_raw_mp_data)
44
+ data, sets, ext = data_processor (data)
40
45
pm = GenericPowerModel {T} (
41
46
Model (solver = solver), # model
42
47
data, # data
43
48
sets, # sets
44
49
setting, # setting
45
50
Dict {AbstractString,Any} (), # solution
51
+ ext # ext
46
52
)
47
53
48
54
return pm
49
55
end
50
56
51
- function process_raw_data (data:: Dict{AbstractString,Any} )
57
+ function process_raw_mp_data (data:: Dict{AbstractString,Any} )
52
58
make_per_unit (data)
53
- unify_transformer_taps (data)
54
- add_branch_parameters (data)
55
- standardize_cost_order (data)
56
59
60
+ min_theta_delta = calc_min_phase_angle (data)
61
+ max_theta_delta = calc_max_phase_angle (data)
62
+
63
+ unify_transformer_taps (data[" branch" ])
64
+ add_branch_parameters (data[" branch" ], min_theta_delta, max_theta_delta)
65
+
66
+ standardize_cost_order (data)
57
67
sets = build_sets (data)
58
68
59
- return data, sets
69
+ ext = Dict {Symbol,Any} ()
70
+
71
+ return data, sets, ext
60
72
end
61
73
62
74
#
@@ -143,7 +155,6 @@ function build_sets(data::Dict{AbstractString,Any})
143
155
gen_idxs = collect (keys (gen_lookup))
144
156
branch_idxs = collect (keys (branch_lookup))
145
157
146
-
147
158
buspair_indexes = collect (Set ([(i,j) for (l,i,j) in arcs_from]))
148
159
buspairs = buspair_parameters (buspair_indexes, branch_lookup, bus_lookup)
149
160
@@ -232,20 +243,17 @@ function make_per_unit(mva_base::Number, data::Number)
232
243
# println("$(parent) $(data)")
233
244
end
234
245
235
- function unify_transformer_taps (data :: Dict{AbstractString,Any} )
236
- for branch in data[ " branch " ]
246
+ function unify_transformer_taps (branches )
247
+ for branch in branches
237
248
if branch[" tap" ] == 0.0
238
249
branch[" tap" ] = 1.0
239
250
end
240
251
end
241
252
end
242
253
243
254
# NOTE, this function assumes all values are p.u. and angles are in radians
244
- function add_branch_parameters (data:: Dict{AbstractString,Any} )
245
- min_theta_delta = calc_min_phase_angle (data)
246
- max_theta_delta = calc_max_phase_angle (data)
247
-
248
- for branch in data[" branch" ]
255
+ function add_branch_parameters (branches, min_theta_delta, max_theta_delta)
256
+ for branch in branches
249
257
r = branch[" br_r" ]
250
258
x = branch[" br_x" ]
251
259
tap_ratio = branch[" tap" ]
@@ -276,14 +284,18 @@ function calc_max_phase_angle(data::Dict{AbstractString,Any})
276
284
bus_count = length (data[" bus" ])
277
285
angle_max = [branch[" angmax" ] for branch in data[" branch" ]]
278
286
sort! (angle_max, rev= true )
279
-
280
- return sum (angle_max[1 : bus_count- 1 ])
287
+ if length (angle_max) > 1
288
+ return sum (angle_max[1 : bus_count- 1 ])
289
+ end
290
+ return angle_max[1 ]
281
291
end
282
292
283
293
function calc_min_phase_angle (data:: Dict{AbstractString,Any} )
284
294
bus_count = length (data[" bus" ])
285
295
angle_min = [branch[" angmin" ] for branch in data[" branch" ]]
286
296
sort! (angle_min)
287
-
288
- return sum (angle_min[1 : bus_count- 1 ])
297
+ if length (angle_min) > 1
298
+ return sum (angle_min[1 : bus_count- 1 ])
299
+ end
300
+ return angle_min[1 ]
289
301
end
0 commit comments