Skip to content

Commit 8f4bc2b

Browse files
authored
Merge pull request #173 from control-toolbox/172-error-when-using-euler_implicit-with-examodels
- bug fix euler_implicit - updated goddard test: max r(tf) -> min -r(tf) waiting for fix of max case (check modeller) on exa on GPU
2 parents 7fa52e5 + 09e28e5 commit 8f4bc2b

4 files changed

Lines changed: 21 additions & 21 deletions

File tree

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "CTParser"
22
uuid = "32681960-a1b1-40db-9bff-a1ca817385d1"
33
authors = ["Jean-Baptiste Caillau <jean-baptiste.caillau@univ-cotedazur.fr>"]
4-
version = "0.7.1"
4+
version = "0.7.2"
55

66
[deps]
77
CTBase = "54762871-cc72-4466-b8e8-f6c8b58076cd"

src/onepass.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -838,7 +838,7 @@ function p_dynamics_coord_exa!(p, p_ocp, x, i, t, e)
838838
code = quote
839839
if scheme == :euler
840840
$pref.constraint($p_ocp, $dxij - $(p.dt) * $ej1 for $j1 in 0:(grid_size - 1))
841-
elseif scheme == :euler_b
841+
elseif scheme (:euler_implicit, :euler_b) # euler_b is deprecated
842842
$pref.constraint($p_ocp, $dxij - $(p.dt) * $ej2 for $j1 in 0:(grid_size - 1))
843843
elseif scheme == :midpoint
844844
$pref.constraint($p_ocp, $dxij - $(p.dt) * $ej12 for $j1 in 0:(grid_size - 1))
@@ -848,7 +848,7 @@ function p_dynamics_coord_exa!(p, p_ocp, x, i, t, e)
848848
)
849849
else
850850
throw(
851-
"unknown numerical scheme: $scheme (possible choices are :euler, :euler_b, :midpoint, :trapeze)",
851+
"unknown numerical scheme: $scheme (possible choices are :euler, :euler_implicit, :midpoint, :trapeze)",
852852
) # (vs. __throw) since raised at runtime (and __wrap-ped)
853853
end
854854
end
@@ -904,7 +904,7 @@ function p_lagrange_exa!(p, p_ocp, e, type)
904904
code = quote
905905
if scheme == :euler
906906
$pref.objective($p_ocp, $(p.dt) * $ej1 for $j1 in 0:(grid_size - 1))
907-
elseif scheme == :euler_b
907+
elseif scheme (:euler_implicit, :euler_b) # euler_b is deprecated
908908
$pref.objective($p_ocp, $(p.dt) * $ej1 for $j1 in 1:grid_size)
909909
elseif scheme == :midpoint
910910
$pref.objective($p_ocp, $(p.dt) * $ej12 for $j1 in 0:(grid_size - 1))
@@ -913,7 +913,7 @@ function p_lagrange_exa!(p, p_ocp, e, type)
913913
$pref.objective($p_ocp, $(p.dt) * $ej1 for $j1 in 1:(grid_size - 1))
914914
else
915915
throw(
916-
"unknown numerical scheme: $scheme (possible choices are :euler, :euler_b, :midpoint, :trapeze)",
916+
"unknown numerical scheme: $scheme (possible choices are :euler, :euler_implicit, :midpoint, :trapeze)",
917917
) # (vs. __throw) since raised at runtime (and __wrap-ped)
918918
end
919919
end

test/runtests.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ end
5858

5959
@testset verbose = true showtiming = true "CTParser tests" begin
6060
for name in (:aqua, :utils, :prefix, :onepass_fun, :onepass_exa)
61-
#for name ∈ (:onepass_exa,) # debug
61+
#for name ∈ (:onepass_exa,)
6262
@testset "$(name)" begin
6363
test_name = Symbol(:test_, name)
6464
include("$(test_name).jl")

test/test_onepass_exa.jl

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,12 @@ end
3434

3535
function test_onepass_exa()
3636
__test_onepass_exa(; scheme=:euler)
37-
__test_onepass_exa(; scheme=:euler_b)
37+
__test_onepass_exa(; scheme=:euler_implicit)
3838
__test_onepass_exa(; scheme=:midpoint)
3939
__test_onepass_exa(; scheme=:trapeze)
4040
if CUDA.functional()
4141
__test_onepass_exa(CUDABackend(); scheme=:euler)
42-
__test_onepass_exa(CUDABackend(); scheme=:euler_b)
42+
__test_onepass_exa(CUDABackend(); scheme=:euler_implicit)
4343
__test_onepass_exa(CUDABackend(); scheme=:midpoint)
4444
__test_onepass_exa(CUDABackend(); scheme=:trapeze)
4545
else
@@ -48,7 +48,7 @@ function test_onepass_exa()
4848
end
4949

5050
function __test_onepass_exa(
51-
backend=nothing; scheme=CTParser.__default_scheme_exa(), tolerance=1e-8
51+
backend=nothing; scheme=CTParser.__default_scheme_exa(), tolerance=1e-8, kwargs...
5252
)
5353
backend_name = isnothing(backend) ? "CPU" : "GPU"
5454

@@ -768,11 +768,11 @@ function __test_onepass_exa(
768768

769769
@test discretise_exa(o; backend=backend, scheme=scheme) isa ExaModels.ExaModel
770770
m, _ = discretise_exa_full(o; backend=backend, scheme=scheme)
771-
s = madnlp(m; tol=tolerance)
771+
s = madnlp(m; tol=tolerance, kwargs...)
772772
@test s.objective 6 atol = 1e-2
773773
N = 1000
774774
m, _ = discretise_exa_full(o; backend=backend, grid_size=N, scheme=scheme)
775-
s = madnlp(m; tol=tolerance)
775+
s = madnlp(m; tol=tolerance, kwargs...)
776776
@test s.objective 6 atol = 1e-3
777777
end
778778

@@ -793,7 +793,7 @@ function __test_onepass_exa(
793793
end
794794
N = 1000
795795
m, getter = discretise_exa_full(o; backend=backend, grid_size=N, scheme=scheme)
796-
s = madnlp(m; tol=tolerance)
796+
s = madnlp(m; tol=tolerance, kwargs...)
797797
@test size(getter(s; val=:state)) == (3, N + 1)
798798
@test size(getter(s; val=:control)) == (1, N + 1)
799799
@test size(getter(s; val=:variable)) == (0,)
@@ -826,7 +826,7 @@ function __test_onepass_exa(
826826
end
827827
N = 1000
828828
m, getter = discretise_exa_full(o; backend=backend, grid_size=N, scheme=scheme)
829-
s = madnlp(m; tol=tolerance)
829+
s = madnlp(m; tol=tolerance, kwargs...)
830830
@test size(getter(s; val=:state)) == (3, N + 1)
831831
@test size(getter(s; val=:control)) == (2, N + 1)
832832
@test size(getter(s; val=:variable)) == (4,)
@@ -856,10 +856,10 @@ function __test_onepass_exa(
856856

857857
m, _ = discretise_exa_full(o; backend=backend, scheme=scheme)
858858
@test m isa ExaModels.ExaModel
859-
s = madnlp(m; tol=tolerance)
859+
s = madnlp(m; tol=tolerance, kwargs...)
860860
@test s.objective 6 atol = 1e-2
861861
m, _ = discretise_exa_full(o; backend=backend, grid_size=1000, scheme=scheme)
862-
s = madnlp(m; tol=tolerance)
862+
s = madnlp(m; tol=tolerance, kwargs...)
863863
@test s.objective 6 atol = 1e-3
864864
end
865865

@@ -881,10 +881,10 @@ function __test_onepass_exa(
881881

882882
m, _ = discretise_exa_full(o; backend=backend, scheme=scheme)
883883
@test m isa ExaModels.ExaModel
884-
s = madnlp(m; tol=tolerance)
884+
s = madnlp(m; tol=tolerance, kwargs...)
885885
@test s.objective 2 * 6 atol = 1e-2
886886
m, _ = discretise_exa_full(o; backend=backend, grid_size=1000, scheme=scheme)
887-
s = madnlp(m; tol=tolerance)
887+
s = madnlp(m; tol=tolerance, kwargs...)
888888
@test s.objective 2 * 6 atol = 1e-3
889889
end
890890

@@ -919,7 +919,7 @@ function __test_onepass_exa(
919919
-Cd * v(t)^2 * exp(-β * (r(t) - 1)) / m(t) - 1 / r(t)^2 + u(t) * Tmax / m(t)
920920
(m)(t) == -b * Tmax * u(t)
921921

922-
r(tf) max
922+
-r(tf) min # todo: also add max when issue with GPU solved
923923
end
924924

925925
tfs = 0.18761155665063417
@@ -948,8 +948,8 @@ function __test_onepass_exa(
948948
m, _ = discretise_exa_full(
949949
o; backend=backend, grid_size=N, init=(tfs, xs, us), scheme=scheme
950950
)
951-
s = madnlp(m; tol=tolerance)
952-
__atol = scheme (:euler, :euler_b) ? 1e-3 : 1e-5
951+
s = madnlp(m; tol=tolerance, kwargs...)
952+
__atol = scheme (:euler, :euler_implicit) ? 1e-3 : 1e-5
953953
@test s.objective -1.0125736217178989e+00 atol = __atol
954954
end
955955

@@ -1002,7 +1002,7 @@ function __test_onepass_exa(
10021002
N = 100
10031003
m, _ = discretise_exa_full(o; grid_size=N, backend=backend, scheme=scheme)
10041004
@test m isa ExaModels.ExaModel
1005-
sol = madnlp(m; tol=tolerance)
1005+
sol = madnlp(m; tol=tolerance, kwargs...)
10061006
@test sol.status == MadNLP.SOLVE_SUCCEEDED
10071007
end
10081008
end

0 commit comments

Comments
 (0)