Skip to content

Commit 7fbc072

Browse files
type2 fix (Channel)
1 parent 9d0766d commit 7fbc072

File tree

4 files changed

+21
-11
lines changed

4 files changed

+21
-11
lines changed

Project.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@ version = "1.2.1"
77
JSMDInterfaces = "6b30ee2f-618e-4a15-bf4e-7df7b496e609"
88
LazyArtifacts = "4af54fe1-eca0-43a8-85a7-787d91b784e3"
99
Mmap = "a63ad114-7e13-5084-954f-fe012c677804"
10+
OhMyThreads = "67456a42-1dca-4109-a031-0a68de7e3ad5"
1011
PreallocationTools = "d236fae5-4411-538c-8e31-a6e3d9e00b46"
1112
PrecompileTools = "aea7be01-6a6a-4083-8856-8a6e6704d82a"
1213
StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c"
1314

1415
[compat]
1516
JSMDInterfaces = "1.4"
1617
LazyArtifacts = "1"
18+
OhMyThreads = "0.8.1"
1719
PreallocationTools = "0.4"
1820
PrecompileTools = "1"
1921
StaticArraysCore = "1.4"

src/Ephemerides.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ using PrecompileTools: PrecompileTools
88
using StaticArraysCore
99

1010
import JSMDInterfaces.Ephemeris as jEph
11+
import OhMyThreads: Channel, take!, put!
1112

1213
# Utilities
1314
include("utils.jl")

src/spk/spk2.jl

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -56,21 +56,22 @@ end
5656
Create the object representing an SPK segment of type 2.
5757
"""
5858
function SPKSegmentType2(daf::DAF, desc::DAFSegmentDescriptor)
59-
6059
# Initialise the segment header and cache
6160
header = SPKSegmentHeader2(daf, desc)
62-
caches = [SPKSegmentCache2(header) for _ in 1:Threads.nthreads()]
63-
64-
SPKSegmentType2(header, caches)
65-
61+
nbuffers = Threads.nthreads()
62+
caches = Channel{SPKSegmentCache2}(nbuffers)
63+
foreach(1:nbuffers) do _
64+
put!(caches, SPKSegmentCache2(header))
65+
end
66+
return SPKSegmentType2(header, caches)
6667
end
6768

6869
@inline spk_field(::SPKSegmentType2) = SPK_SEGMENTLIST_MAPPING[2]
6970

7071
function spk_vector3(daf::DAF, seg::SPKSegmentType2, time::Number)
7172

7273
head = header(seg)
73-
data = cache(seg)
74+
data = take!(seg)
7475

7576
# Retrieve Chebyshev coefficients
7677
get_coefficients!(daf, head, data, time)
@@ -79,6 +80,8 @@ function spk_vector3(daf::DAF, seg::SPKSegmentType2, time::Number)
7980
t = normalise_time(data, time)
8081

8182
x, y, z = chebyshev(data.buff, data.A, t, 0, head.N)
83+
put!(seg, data)
84+
8285
return SVector{3}(x, y, z)
8386

8487
end
@@ -87,7 +90,7 @@ end
8790
function spk_vector6(daf::DAF, seg::SPKSegmentType2, time::Number)
8891

8992
head = header(seg)
90-
data = cache(seg)
93+
data = take!(seg)
9194

9295
# Retrieve Chebyshev coefficients
9396
get_coefficients!(daf, head, data, time)
@@ -101,6 +104,7 @@ function spk_vector6(daf::DAF, seg::SPKSegmentType2, time::Number)
101104
x, y, z = chebyshev(data.buff, data.A, t, 0, head.N)
102105
vx, vy, vz = chebyshev(data.buff, data.A, t, 3, head.N)
103106
end
107+
put!(seg, data)
104108

105109
return SVector{6}(x, y, z, vx, vy, vz)
106110

@@ -109,7 +113,7 @@ end
109113
function spk_vector9(daf::DAF, seg::SPKSegmentType2, time::Number)
110114

111115
head = header(seg)
112-
data = cache(seg)
116+
data = take!(seg)
113117

114118
# Retrieve Chebyshev coefficients
115119
get_coefficients!(daf, head, data, time)
@@ -126,6 +130,7 @@ function spk_vector9(daf::DAF, seg::SPKSegmentType2, time::Number)
126130
x, y, z = chebyshev(data.buff, data.A, t, 0, head.N)
127131
vx, vy, vz, ax, ay, az = ∂chebyshev(data.buff, data.A, t, 3, head.N, data.p[3])
128132
end
133+
put!(seg, data)
129134

130135
return SVector{9}(x, y, z, vx, vy, vz, ax, ay, az)
131136

@@ -134,7 +139,7 @@ end
134139
function spk_vector12(daf::DAF, seg::SPKSegmentType2, time::Number)
135140

136141
head = header(seg)
137-
data = cache(seg)
142+
data = take!(seg)
138143

139144
# Retrieve Chebyshev coefficients
140145
get_coefficients!(daf, head, data, time)
@@ -153,6 +158,7 @@ function spk_vector12(daf::DAF, seg::SPKSegmentType2, time::Number)
153158
data.buff, data.A, t, 3, head.N, data.p[3]
154159
)
155160
end
161+
put!(seg, data)
156162

157163
return SVector{12}(x, y, z, vx, vy, vz, ax, ay, az, jx, jy, jz)
158164

src/spk/spktypes.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,11 +209,12 @@ is normally used for planet barycenters, and for satellites whose ephemerides ar
209209
"""
210210
struct SPKSegmentType2 <: AbstractSPKSegment
211211
head::SPKSegmentHeader2
212-
cache::Vector{SPKSegmentCache2}
212+
cache::Channel{SPKSegmentCache2}
213213
end
214214

215215
@inline header(spk::SPKSegmentType2) = spk.head
216-
@inline @inbounds cache(spk::SPKSegmentType2) = spk.cache[Threads.threadid()]
216+
@inline @inbounds take!(spk::SPKSegmentType2) = take!(spk.cache)
217+
@inline @inbounds put!(spk::SPKSegmentType2, cache::SPKSegmentCache2) = put!(spk.cache, cache)
217218

218219

219220
# ----------------------------------

0 commit comments

Comments
 (0)