Skip to content

Commit ad841d4

Browse files
committed
more robust _extrema_index
1 parent 5e0be70 commit ad841d4

File tree

1 file changed

+14
-12
lines changed

1 file changed

+14
-12
lines changed

src/physics/fluxsurfaces.jl

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1658,30 +1658,32 @@ push!(document[Symbol("Physics flux-surfaces")], :trace_surfaces)
16581658

16591659
function _extrema_index(r::AbstractVector{T}, z::AbstractVector{T}, r0::T, Z0::T, direction::Symbol) where {T<:Real}
16601660
i = argmin((r .- r0) .^ 2 .+ (z .- Z0) .^ 2)
1661+
N = length(z)
1662+
j = Int(ceil(N / 2))
16611663
n = 3
16621664
if direction == :right
1663-
if (r[i] - r[i-1]) > 0 # oriented right
1664-
return max(1, i - 1):min(length(z), i + n)
1665+
if (r[j] - r[j-1]) > 0 # oriented right
1666+
return max(1, i - 1):min(N, i + n)
16651667
else # opposite orientation
1666-
return max(1, i - n):min(length(z), i + 1)
1668+
return max(1, i - n):min(N, i + 1)
16671669
end
16681670
elseif direction == :left
1669-
if (r[i] - r[i-1]) < 0 # oriented left
1670-
return max(1, i - 1):min(length(z), i + n)
1671+
if (r[j] - r[j-1]) < 0 # oriented left
1672+
return max(1, i - 1):min(N, i + n)
16711673
else
1672-
return max(1, i - n):min(length(z), i + 1)
1674+
return max(1, i - n):min(N, i + 1)
16731675
end
16741676
elseif direction == :up
1675-
if (z[i] - z[i-1]) > 0 # oriented up
1676-
return max(1, i - 1):min(length(z), i + n)
1677+
if (z[j] - z[j-1]) > 0 # oriented up
1678+
return max(1, i - 1):min(N, i + n)
16771679
else
1678-
return max(1, i - n):min(length(z), i + 1)
1680+
return max(1, i - n):min(N, i + 1)
16791681
end
16801682
elseif direction == :down
1681-
if (z[i] - z[i-1]) < 0 # oriented down
1682-
return max(1, i - 1):min(length(z), i + n)
1683+
if (z[j] - z[j-1]) < 0 # oriented down
1684+
return max(1, i - 1):min(N, i + n)
16831685
else
1684-
return max(1, i - n):min(length(z), i + 1)
1686+
return max(1, i - n):min(N, i + 1)
16851687
end
16861688
else
16871689
error("_extrema_index(..., direction::Symbol) can only be (:left, :right, :up, :down)")

0 commit comments

Comments
 (0)