-
Notifications
You must be signed in to change notification settings - Fork 70
/
SalientPoleQuadratic.jl
67 lines (60 loc) · 2.11 KB
/
SalientPoleQuadratic.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
"""
mutable struct SalientPoleQuadratic <: Machine
base_machine::SalientPoleMachine
saturation_coeffs::Tuple{Float64, Float64}
3-states salient-pole synchronous machine with exponential saturation:
IEEE Std 1110 §5.3.2 (Model 2.1). GENSAL in PSSE and PSLF.
# Arguments:
- `base_machine::SalientPoleMachine`: Salient Pole Machine model.
- `saturation_coeffs::Tuple{Float64, Float64}``: Saturation coefficients for quadratic model.
"""
mutable struct SalientPoleQuadratic <: Machine
base_machine::SalientPoleMachine
saturation_coeffs::Tuple{Float64, Float64}
end
IS.@forward((SalientPoleQuadratic, :base_machine), SalientPoleMachine)
function SalientPoleQuadratic(
R::Float64,
Td0_p::Float64,
Td0_pp::Float64,
Tq0_pp::Float64,
Xd::Float64,
Xq::Float64,
Xd_p::Float64,
Xd_pp::Float64,
Xl::Float64,
Se::Tuple{Float64, Float64},
)
saturation_coeffs = get_quadratic_saturation(Se)
return SalientPoleQuadratic(
SalientPoleMachine(R, Td0_p, Td0_pp, Tq0_pp, Xd, Xq, Xd_p, Xd_pp, Xl, Se),
saturation_coeffs,
)
end
function SalientPoleQuadratic(; R, Td0_p, Td0_pp, Tq0_pp, Xd, Xq, Xd_p, Xd_pp, Xl, Se)
return SalientPoleQuadratic(R, Td0_p, Td0_pp, Tq0_pp, Xd, Xq, Xd_p, Xd_pp, Xl, Se)
end
function SalientPoleQuadratic(::Nothing)
return SalientPoleQuadratic(;
R = 0.0,
Td0_p = 0.0,
Td0_pp = 0.0,
Tq0_pp = 0.0,
Xd = 0.0,
Xq = 0.0,
Xd_p = 0.0,
Xd_pp = 0.0,
Xl = 0.0,
Se = (0.0, 0.0),
)
end
get_base_machine(value::SalientPoleQuadratic) = value.base_machine
get_saturation_coeffs(value::SalientPoleQuadratic) = value.saturation_coeffs
set_base_machine!(value::SalientPoleQuadratic, val::SalientPoleMachine) =
value.base_machine = val
set_saturation_coeffs!(value::SalientPoleQuadratic, val::Tuple{Float64, Float64}) =
value.saturation_coeffs = val
function IS.deserialize_struct(::Type{SalientPoleQuadratic}, data::Dict)
vals = IS.deserialize_to_dict(SalientPoleQuadratic, data)
return SalientPoleQuadratic(vals[:base_machine], vals[:saturation_coeffs])
end