Skip to content

Commit

Permalink
v0.4-rc (#36)
Browse files Browse the repository at this point in the history
* Release prep for v0.4.0

* FIX: fs_mc unit tests
  • Loading branch information
pseudocubic authored Oct 26, 2021
1 parent 6b05742 commit ecb8dee
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 31 deletions.
5 changes: 4 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

## staged

- none
## v0.4.0

- Updated to PowerModelsDistribution v0.12.0
- Added support for storage in fault study formulation

## v0.3.0

Expand Down
4 changes: 2 additions & 2 deletions Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "PowerModelsProtection"
uuid = "719c1aef-945b-435a-a240-4c2992e5e0df"
authors = ["Art Barnes", "Jose Tabarez"]
version = "0.3.0"
version = "0.4.0"

[deps]
InfrastructureModels = "2030c09a-7f63-5d83-885d-db604e0e9cc0"
Expand All @@ -18,7 +18,7 @@ Ipopt = ">= 0.4"
JuMP = "~0.21"
MathOptInterface = "~0.9"
PowerModels = "~0.18.0"
PowerModelsDistribution = "~0.11.3"
PowerModelsDistribution = "~0.12.0"
julia = "^1"

[extras]
Expand Down
62 changes: 34 additions & 28 deletions test/fs_mc.jl
Original file line number Diff line number Diff line change
@@ -1,16 +1,22 @@
@testset "Unbalanced fault study" begin
ut_trans_2w_yy_fault_study = parse_file("../test/data/dist/ut_trans_2w_yy_fault_study.dss")
case3_balanced_pv = parse_file("../test/data/dist/case3_balanced_pv.dss")
case3_balanced_pv_grid_forming = parse_file("../test/data/dist/case3_balanced_pv_grid_forming.dss")
case3_balanced_multi_pv_grid_following = parse_file("../test/data/dist/case3_balanced_multi_pv_grid_following.dss")
case3_balanced_parallel_pv_grid_following = parse_file("../test/data/dist/case3_balanced_parallel_pv_grid_following.dss")
case3_balanced_single_phase = parse_file("../test/data/dist/case3_balanced_single_phase.dss")
case3_unblanced_switch = parse_file("../test/data/dist/case3_unbalanced_switch.dss")
simulink_model = parse_file("../test/data/dist/simulink_model.dss")
case3_balanced_pv_storage_grid_forming = parse_file("../test/data/dist/case3_balanced_pv_storage_grid_forming.dss")
cases = Dict()
cases["ut_trans_2w_yy_fault_study"] = parse_file("../test/data/dist/ut_trans_2w_yy_fault_study.dss")
cases["case3_balanced_pv"] = parse_file("../test/data/dist/case3_balanced_pv.dss")
cases["case3_balanced_pv_grid_forming"] = parse_file("../test/data/dist/case3_balanced_pv_grid_forming.dss")
cases["case3_balanced_multi_pv_grid_following"] = parse_file("../test/data/dist/case3_balanced_multi_pv_grid_following.dss")
cases["case3_balanced_parallel_pv_grid_following"] = parse_file("../test/data/dist/case3_balanced_parallel_pv_grid_following.dss")
cases["case3_balanced_single_phase"] = parse_file("../test/data/dist/case3_balanced_single_phase.dss")
cases["case3_unblanced_switch"] = parse_file("../test/data/dist/case3_unbalanced_switch.dss")
cases["simulink_model"] = parse_file("../test/data/dist/simulink_model.dss")
cases["case3_balanced_pv_storage_grid_forming"] = parse_file("../test/data/dist/case3_balanced_pv_storage_grid_forming.dss")

for (_,d) in cases
# to avoid having to rewrite unit tests for updated default sbase
d["settings"]["sbase_default"] = 1e3
end

@testset "ut_trans_2w_yy_fault_study test fault study" begin
data = deepcopy(ut_trans_2w_yy_fault_study)
data = deepcopy(cases["ut_trans_2w_yy_fault_study"])

fault_studies = build_mc_fault_study(data)
sol = solve_mc_fault_study(data, fault_studies, ipopt_solver)
Expand All @@ -24,7 +30,7 @@
end

@testset "ut_trans_2w_yy_fault_study line to ground fault" begin
data = deepcopy(ut_trans_2w_yy_fault_study)
data = deepcopy(cases["ut_trans_2w_yy_fault_study"])

add_fault!(data, "1", "lg", "3", [1,4], .00001)
sol = solve_mc_fault_study(data, ipopt_solver)
Expand All @@ -33,7 +39,7 @@
end

@testset "ut_trans_2w_yy_fault_study 3-phase fault" begin
data = deepcopy(ut_trans_2w_yy_fault_study)
data = deepcopy(cases["ut_trans_2w_yy_fault_study"])

add_fault!(data, "1", "3p", "3", [1,2,3], 0.005)
sol = solve_mc_fault_study(data, ipopt_solver)
Expand All @@ -42,7 +48,7 @@
end

@testset "3-bus pv fault test single faults" begin
data = deepcopy(case3_balanced_pv)
data = deepcopy(cases["case3_balanced_pv"])

add_fault!(data, "1", "3p", "loadbus", [1,2,3], 0.005)
sol = solve_mc_fault_study(data, ipopt_solver)
Expand All @@ -66,7 +72,7 @@
end

@testset "c3-bus multiple pv grid_following fault test" begin
data = deepcopy(case3_balanced_multi_pv_grid_following)
data = deepcopy(cases["case3_balanced_multi_pv_grid_following"])

add_fault!(data, "1", "lg", "loadbus", [1, 4], 0.0005)
sol = solve_mc_fault_study(data, ipopt_solver)
Expand All @@ -88,10 +94,10 @@
@test sol["termination_status"] == LOCALLY_SOLVED
@test calculate_error_percentage(sol["solution"]["line"]["pv_line"]["cf_fr"][1], 913.270) < .05
end


@testset "c3-bus parallel pv grid_following fault test" begin
data = deepcopy(case3_balanced_parallel_pv_grid_following)
data = deepcopy(cases["case3_balanced_parallel_pv_grid_following"])

add_fault!(data, "1", "lg", "loadbus", [1, 4], 0.0005)
sol = solve_mc_fault_study(data, ipopt_solver)
Expand All @@ -115,10 +121,10 @@
end

@testset "c3-bus pv grid_forming fault test island" begin
case3_balanced_pv_grid_forming["solar"]["pv1"]["grid_forming"] = true
case3_balanced_pv_grid_forming["line"]["ohline"]["status"] = DISABLED
cases["case3_balanced_pv_grid_forming"]["solar"]["pv1"]["grid_forming"] = true
cases["case3_balanced_pv_grid_forming"]["line"]["ohline"]["status"] = DISABLED

data = deepcopy(case3_balanced_pv_grid_forming)
data = deepcopy(cases["case3_balanced_pv_grid_forming"])
add_fault!(data, "1", "lg", "loadbus", [1, 4], 0.005)
sol = solve_mc_fault_study(data, ipopt_solver)
@test sol["termination_status"] == LOCALLY_SOLVED
Expand All @@ -143,8 +149,8 @@
end

@testset "c3-bus pv and storage grid_forming fault test" begin
case3_balanced_pv_storage_grid_forming["solar"]["pv1"]["grid_forming"] = true
data = deepcopy(case3_balanced_pv_storage_grid_forming)
cases["case3_balanced_pv_storage_grid_forming"]["solar"]["pv1"]["grid_forming"] = true
data = deepcopy(cases["case3_balanced_pv_storage_grid_forming"])

add_fault!(data, "1", "ll", "loadbus", [1, 2], 0.0005)
sol = solve_mc_fault_study(data, ipopt_solver)
Expand All @@ -156,16 +162,16 @@
@test sol["termination_status"] == LOCALLY_SOLVED
@test calculate_error_percentage(sol["solution"]["line"]["pv_line"]["cf_fr"][1], 400.557) < .05


add_fault!(data, "1", "lg", "pv_bus", [1, 4], 0.0005)
sol = solve_mc_fault_study(data, ipopt_solver)
@test sol["termination_status"] == LOCALLY_SOLVED
@test calculate_error_percentage(sol["solution"]["line"]["pv_line"]["cf_fr"][1], 1132.408) < .05
end

@testset "c3-bus single phase test" begin
case3_balanced_single_phase["voltage_source"]["source"]["grid_forming"] = true
data = deepcopy(case3_balanced_single_phase)
cases["case3_balanced_single_phase"]["voltage_source"]["source"]["grid_forming"] = true
data = deepcopy(cases["case3_balanced_single_phase"])

add_fault!(data, "1", "lg", "loadbus", [1, 4], 0.005)
sol = solve_mc_fault_study(data, ipopt_solver)
Expand All @@ -189,7 +195,7 @@
end

@testset "case3_unblanced_switch test fault study" begin
data = deepcopy(case3_unblanced_switch)
data = deepcopy(cases["case3_unblanced_switch"])

add_fault!(data, "1", "3p", "loadbus", [1,2,3], .0005)
sol = solve_mc_fault_study(data, ipopt_solver)
Expand All @@ -210,9 +216,9 @@

@testset "compare to simulink model" begin
# TODO needs helper function
simulink_model["solar"]["pv1"]["grid_forming"] = true
simulink_model["line"]["cable1"]["status"] = DISABLED
data = deepcopy(simulink_model)
cases["simulink_model"]["solar"]["pv1"]["grid_forming"] = true
cases["simulink_model"]["line"]["cable1"]["status"] = DISABLED
data = deepcopy(cases["simulink_model"])

add_fault!(data, "1", "3p", "midbus", [1,2,3], 60.0)
sol = solve_mc_fault_study(data, ipopt_solver)
Expand Down

2 comments on commit ecb8dee

@pseudocubic
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@JuliaRegistrator
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Registration pull request created: JuliaRegistries/General/47562

After the above pull request is merged, it is recommended that a tag is created on this repository for the registered package version.

This will be done automatically if the Julia TagBot GitHub Action is installed, or can be done manually through the github interface, or via:

git tag -a v0.4.0 -m "<description of version>" ecb8dee88c8e594afd8d146bbadcb4a5a0ccbbe8
git push origin v0.4.0

Please sign in to comment.