Skip to content

Commit 3676e9b

Browse files
authored
export filter_result! (#402)
1 parent a7c3818 commit 3676e9b

File tree

7 files changed

+43
-3
lines changed

7 files changed

+43
-3
lines changed

docs/src/manual/API.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ transform_solutions
6161
```@docs
6262
classify_solutions!
6363
get_class
64+
filter_result!
6465
```
6566

6667
### Plotting

docs/src/manual/analyse_solutions.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,11 @@ get_single_solution
1717
attractors
1818
phase_diagram
1919
```
20+
21+
## classifying solutions
22+
23+
```@docs; canonical=false
24+
classify_solutions!
25+
get_class
26+
filter_result!
27+
```

src/HarmonicBalance.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ export get_variables
5959
export get_steady_states
6060
export classify_solutions!
6161
export get_class
62+
export filter_result!
6263
export get_single_solution
6364
export transform_solutions
6465
export IM_TOL

src/Result.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Stores the steady states of a HarmonicEquation.
77
$(TYPEDFIELDS)
88
99
"""
10-
struct Result{D,SolType<:Number,ParType<:Number,F<:JacobianFunction(SolType)}
10+
mutable struct Result{D,SolType<:Number,ParType<:Number,F<:JacobianFunction(SolType)}
1111
"The variable values of steady-state solutions."
1212
solutions::Array{Vector{Vector{SolType}},D}
1313
"Values of all parameters for all solutions."
@@ -81,7 +81,7 @@ function _free_symbols(res::Result)
8181
end
8282

8383
# overload to use [] for indexing
84-
Base.getindex(r::Result, idx::Int...) = get_single_solution(r, idx)
84+
Base.getindex(r::Result, idx) = get_single_solution(r, idx)
8585
Base.size(r::Result) = size(r.solutions)
8686

8787
branch_count(r::Result) = length(r.solutions[1])

src/classification.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ Removes all solution branches from `res` where NONE of the solution falls into `
194194
Typically used to filter out unphysical solutions to prevent huge file sizes.
195195
"""
196196
function filter_result!(res::Result, class::String)
197-
bools = [any(getindex.(res.classes[class], i)) for i in 1:length(res[1])]
197+
bools = [any(getindex.(res.classes[class], i)) for i in 1:branch_count(res)]
198198
res.solutions = [s[bools] for s in res.solutions]
199199
for c in keys(res.classes)
200200
res.classes[c] = [s[bools] for s in res.classes[c]]

test/classification.jl

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using HarmonicBalance, Test
2+
3+
@variables ω₀ γ λ α ω t x(t)
4+
5+
natural_equation = d(d(x, t), t) + γ * d(x, t) + (ω₀^2 - λ * cos(2 * ω * t)) * x + α * x^3
6+
diff_eq = DifferentialEquation(natural_equation, x)
7+
8+
add_harmonic!(diff_eq, x, ω);
9+
10+
harmonic_eq = get_harmonic_equations(diff_eq)
11+
12+
fixed = (ω₀ => 1.0, γ => 0.002, α => 1.0)
13+
varied ==> range(0.99, 1.01, 100), λ => range(1e-6, 0.03, 100))
14+
15+
result_2D = get_steady_states(harmonic_eq, varied, fixed; verbose=true)
16+
17+
@testset "filter solutions" begin
18+
result = deepcopy(result_2D)
19+
@test length(result.solutions[1]) == 5
20+
filter_result!(result, "stable")
21+
@test length(result.solutions[1]) == 3
22+
end
23+
24+
@testset "Classifying solutions" begin
25+
result = deepcopy(result_2D)
26+
filter_result!(result, "stable")
27+
classify_solutions!(result, "sqrt(u1^2 + v1^2) >0.0", "not_zero")
28+
@test sum(any.(get_class(result, "not_zero"))) == 2
29+
end

test/runtests.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ end
3030
include("Jacobian.jl")
3131
include("transform_solutions.jl")
3232
include("sorting.jl")
33+
include("classification.jl")
3334
end
3435

3536
@testset "Plotting" begin

0 commit comments

Comments
 (0)