-
Notifications
You must be signed in to change notification settings - Fork 70
/
SalientPoleExponential.jl
68 lines (60 loc) · 2.14 KB
/
SalientPoleExponential.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
68
"""
mutable struct SalientPoleExponential <: 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). GENSAE in PSSE and PSLF.
# Arguments:
- `base_machine::SalientPoleMachine`: Salient Pole Machine model.
- `saturation_coeffs::Tuple{Float64, Float64}``: Saturation coefficients for exponential model.
"""
mutable struct SalientPoleExponential <: Machine
base_machine::SalientPoleMachine
saturation_coeffs::Tuple{Float64, Float64}
end
IS.@forward((SalientPoleExponential, :base_machine), SalientPoleMachine)
function SalientPoleExponential(
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_exponential_saturation(Se)
return SalientPoleExponential(
SalientPoleMachine(R, Td0_p, Td0_pp, Tq0_pp, Xd, Xq, Xd_p, Xd_pp, Xl, Se),
saturation_coeffs,
)
end
function SalientPoleExponential(; R, Td0_p, Td0_pp, Tq0_pp, Xd, Xq, Xd_p, Xd_pp, Xl, Se)
return SalientPoleExponential(R, Td0_p, Td0_pp, Tq0_pp, Xd, Xq, Xd_p, Xd_pp, Xl, Se)
end
function SalientPoleExponential(::Nothing)
return SalientPoleExponential(;
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::SalientPoleExponential) = value.base_machine
get_saturation_coeffs(value::SalientPoleExponential) = value.saturation_coeffs
set_base_machine!(value::SalientPoleExponential, val::SalientPoleMachine) =
value.base_machine = val
set_saturation_coeffs!(value::SalientPoleExponential, val::Tuple{Float64, Float64}) =
value.saturation_coeffs = val
function IS.deserialize_struct(::Type{SalientPoleExponential}, data::Dict)
vals = IS.deserialize_to_dict(SalientPoleExponential, data)
return SalientPoleExponential(vals[:base_machine], vals[:saturation_coeffs])
end