70 lines
2.2 KiB
Julia
70 lines
2.2 KiB
Julia
@testset "Phase" begin
|
|
|
|
println("Testing NLP solver")
|
|
|
|
using NLsolve, PlotlyJS
|
|
|
|
# First we'll test an Earth case
|
|
# Initial Setup
|
|
T = rand( 8hour : second : day )
|
|
revs = 3
|
|
n = 10 * revs
|
|
start_mass = 10_000.
|
|
|
|
# A simple orbit raising
|
|
start = gen_orbit(T, start_mass, Earth)
|
|
thrust = spiral(0.9, n, start, test_sc, revs*T, Earth)
|
|
final = prop(thrust, start, test_sc, revs*T, Earth)[2]
|
|
new_T = 2π * √( xyz_to_oe(final, Earth.μ)[1]^3 / Earth.μ )
|
|
|
|
# This should be close enough to converge
|
|
thrust_guess = spiral(0.88, n, start, test_sc, revs*T, Earth)
|
|
result = solve_phase(start, final, test_sc, revs*T, thrust_guess, Earth)
|
|
calc_path, calc_final = prop(result.zero, start, test_sc, revs*T, Earth, interpolate=true)
|
|
|
|
# Test
|
|
@test converged(result)
|
|
@test norm(calc_final[1:6] - final[1:6]) < 1e-5
|
|
|
|
# Plot
|
|
paths = Pathlist()
|
|
push!(paths, prop(start, T, Earth),
|
|
calc_path,
|
|
prop(calc_final, T, Earth),
|
|
prop(final, T, Earth) )
|
|
fig = plot_orbits(paths, Earth,
|
|
labels=["init", "transit", "post-transit", "final"],
|
|
colors=["#FFF","#F44","#4F4","#44F"])
|
|
savefig(fig, "../plots/nlp_test_earth.html")
|
|
|
|
# Now the sun case
|
|
T = rand( 0.5year : hour : 1.5year )
|
|
n = 20
|
|
start_mass = 12_000.
|
|
|
|
# A simple orbit raising again, to keep things simple
|
|
start = gen_orbit(T, start_mass)
|
|
thrust = spiral(0.6, n, start, bepi, revs*T)
|
|
final = prop(thrust, start, bepi, revs*T)[2]
|
|
new_T = 2π * √( xyz_to_oe(final, Sun.μ)[1]^3 / Sun.μ )
|
|
|
|
# This should be close enough to converge
|
|
thrust_guess = spiral(0.55, n, start, bepi, revs*T)
|
|
result = solve_phase(start, final, bepi, revs*T, thrust_guess)
|
|
calc_path, calc_final = prop(result.zero, start, bepi, revs*T, interpolate=true)
|
|
|
|
# Test
|
|
@test converged(result)
|
|
@test norm(calc_final[1:6] - final[1:6]) < 1e-5
|
|
|
|
# Plot
|
|
paths = Pathlist()
|
|
push!(paths, prop(start, T), calc_path, prop(calc_final, T), prop(final, T) )
|
|
fig = plot_orbits(paths,
|
|
labels=["init", "transit", "post-transit", "final"],
|
|
colors=["#FFF","#F44","#4F4","#44F"])
|
|
savefig(fig, "../plots/nlp_test_sun.html")
|
|
|
|
|
|
end
|