@@ -130,17 +130,18 @@ function trace_trajectory(prob::TraceProblem; trajectories::Int=1,
130
130
savestepinterval:: Int = 1 , isoutofdomain:: Function = ODE_DEFAULT_ISOUTOFDOMAIN)
131
131
132
132
sols = Vector {TraceSolution} (undef, trajectories)
133
+ # prepare advancing
134
+ xv = similar (prob. u0)
135
+ (; tspan, dt, p) = prob
136
+ ttotal = tspan[2 ] - tspan[1 ]
137
+ nt = Int (ttotal ÷ dt)
138
+ iout, nout = 1 , nt ÷ savestepinterval + 1
139
+ traj = zeros (eltype (prob. u0), 6 , nout)
133
140
134
141
for i in 1 : trajectories
142
+ # set initial conditions for each trajectory
135
143
new_prob = prob. prob_func (prob, i, false )
136
- (; u0, tspan, dt, p) = new_prob
137
- xv = copy (u0)
138
- # prepare advancing
139
- ttotal = tspan[2 ] - tspan[1 ]
140
- nt = Int (ttotal ÷ dt)
141
- iout, nout = 1 , nt ÷ savestepinterval + 1
142
- traj = zeros (eltype (u0), 6 , nout)
143
-
144
+ xv .= new_prob. u0
144
145
traj[:,1 ] = xv
145
146
146
147
# push velocity back in time by 1/2 dt
@@ -161,16 +162,18 @@ function trace_trajectory(prob::TraceProblem; trajectories::Int=1,
161
162
if dtfinal > 1e-3 # final step if needed
162
163
update_velocity! (xv, p, dtfinal)
163
164
update_location! (xv, dtfinal)
164
- traj = hcat (traj, xv)
165
+ traj_save = hcat (traj, xv)
165
166
t = [collect (tspan[1 ]: dt: tspan[2 ])... , tspan[2 ]]
166
167
else
168
+ traj_save = traj
167
169
t = collect (tspan[1 ]: dt: tspan[2 ])
168
170
end
169
171
else # early termination
170
- traj = traj[:, 1 : iout]
172
+ traj_save = traj[:, 1 : iout]
171
173
t = collect (range (tspan[1 ], tspan[1 ]+ iout* dt, step= dt))
172
174
end
173
- sols[i] = TraceSolution (traj, t)
175
+ sols[i] = TraceSolution (traj_save, t)
176
+ iout = 1
174
177
end
175
178
176
179
sols
0 commit comments