Skip to content

Commit 894af67

Browse files
committed
Docs
1 parent 8c700ed commit 894af67

File tree

7 files changed

+86
-16
lines changed

7 files changed

+86
-16
lines changed

Manifest.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"
164164

165165
[[deps.DiffEqBase]]
166166
deps = ["ArrayInterface", "ChainRulesCore", "DataStructures", "DocStringExtensions", "EnumX", "EnzymeCore", "FastBroadcast", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "PrecompileTools", "Printf", "RecursiveArrayTools", "Reexport", "Requires", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Static", "StaticArraysCore", "Statistics", "Tricks", "TruncatedStacktraces", "ZygoteRules"]
167-
git-tree-sha1 = "0ab52aef95c5cc71e9a8c9d26919ce1f7fb472fa"
167+
git-tree-sha1 = "94384b09e50ea01819b6db01ac08403ebe09bf65"
168168
repo-rev = "ap/tstable_termination"
169169
repo-url = "https://github.com/SciML/DiffEqBase.jl"
170170
uuid = "2b5f629d-d688-5b77-993f-72d75c75574e"

docs/pages.jl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ pages = ["index.md",
66
"Handling Large Ill-Conditioned and Sparse Systems" => "tutorials/large_systems.md",
77
"Symbolic System Definition and Acceleration via ModelingToolkit" => "tutorials/modelingtoolkit.md",
88
"tutorials/small_compile.md",
9-
"tutorials/termination_conditions.md",
109
"tutorials/iterator_interface.md"],
1110
"Basics" => Any["basics/NonlinearProblem.md",
1211
"basics/NonlinearFunctions.md",

docs/src/basics/TerminationCondition.md

Lines changed: 68 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,75 @@
11
# [Termination Conditions](@id termination_condition)
22

33
Provides a API to specify termination conditions for [`NonlinearProblem`](@ref) and
4-
[`SteadyStateProblem`](@ref). For details on the various termination modes, i.e.,
5-
NLSolveTerminationMode, see the documentation for [`NLSolveTerminationCondition`](@ref).
4+
[`SteadyStateProblem`](@ref). For details on the various termination modes:
65

7-
## Termination Condition API
6+
## Termination Conditions
7+
8+
The termination condition is constructed as:
9+
10+
```julia
11+
cache = init(du, u, AbsNormTerminationMode(); abstol = 1e-9, reltol = 1e-9)
12+
```
13+
14+
If `abstol` and `reltol` are not supplied, then we choose a default based on the element
15+
types of `du` and `u`.
16+
17+
We can query the `cache` using `DiffEqBase.get_termination_mode`, `DiffEqBase.get_abstol`
18+
and `DiffEqBase.get_reltol`.
19+
20+
To test for termination simply call the `cache`:
21+
22+
```julia
23+
terminated = cache(du, u, uprev)
24+
```
25+
26+
!!! note
27+
28+
The default for NonlinearSolve.jl is `AbsSafeBestTerminationMode`!
29+
30+
### Absolute Tolerance
31+
32+
```@docs
33+
AbsTerminationMode
34+
AbsNormTerminationMode
35+
AbsSafeTerminationMode
36+
AbsSafeBestTerminationMode
37+
```
38+
39+
### Relative Tolerance
40+
41+
```@docs
42+
RelTerminationMode
43+
RelNormTerminationMode
44+
RelSafeTerminationMode
45+
RelSafeBestTerminationMode
46+
```
47+
48+
### Both Absolute and Relative Tolerance
49+
50+
```@docs
51+
NormTerminationMode
52+
SteadyStateDiffEqTerminationMode
53+
SimpleNonlinearSolveTerminationMode
54+
```
55+
56+
### Return Codes
57+
58+
```@docs
59+
DiffEqBase.NonlinearSafeTerminationReturnCode
60+
DiffEqBase.NonlinearSafeTerminationReturnCode.Success
61+
DiffEqBase.NonlinearSafeTerminationReturnCode.Default
62+
DiffEqBase.NonlinearSafeTerminationReturnCode.Failure
63+
DiffEqBase.NonlinearSafeTerminationReturnCode.PatienceTermination
64+
DiffEqBase.NonlinearSafeTerminationReturnCode.ProtectiveTermination
65+
```
66+
67+
## [Deprecated] Termination Condition API
68+
69+
!!! warning
70+
71+
This is deprecated. Currently only parts of `SimpleNonlinearSolve` uses this API. That
72+
will also be phased out soon!
873

974
```@docs
1075
NLSolveTerminationCondition

docs/src/tutorials/termination_conditions.md

Lines changed: 0 additions & 3 deletions
This file was deleted.

test/23_test_problems.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ function test_on_library(problems, dicts, alg_ops, broken_tests, ϵ = 1e-4)
1111
@testset "$idx: $(dict["title"])" begin
1212
for alg in alg_ops
1313
try
14-
sol = solve(nlprob, alg; termination_condition = AbsNormTerminationMode())
14+
sol = solve(nlprob, alg;
15+
termination_condition = AbsNormTerminationMode())
1516
problem(res, sol.u, nothing)
1617

1718
broken = idx in broken_tests[alg] ? true : false

test/basictests.jl

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ const TERMINATION_CONDITIONS = [
2222
SteadyStateDiffEqTerminationMode(), SimpleNonlinearSolveTerminationMode(),
2323
NormTerminationMode(), RelTerminationMode(), RelNormTerminationMode(),
2424
AbsTerminationMode(), AbsNormTerminationMode(), RelSafeTerminationMode(),
25-
AbsSafeTerminationMode(), RelSafeBestTerminationMode(), AbsSafeBestTerminationMode()
25+
AbsSafeTerminationMode(), RelSafeBestTerminationMode(), AbsSafeBestTerminationMode(),
2626
]
2727

2828
# --- NewtonRaphson tests ---
@@ -133,6 +133,7 @@ const TERMINATION_CONDITIONS = [
133133

134134
@testset "Termination condition: $(termination_condition) u0: $(_nameof(u0))" for termination_condition in TERMINATION_CONDITIONS,
135135
u0 in (1.0, [1.0, 1.0])
136+
136137
probN = NonlinearProblem(quadratic_f, u0, 2.0)
137138
@test all(solve(probN, NewtonRaphson(); termination_condition).u .≈ sqrt(2.0))
138139
end
@@ -297,6 +298,7 @@ end
297298

298299
@testset "Termination condition: $(termination_condition) u0: $(_nameof(u0))" for termination_condition in TERMINATION_CONDITIONS,
299300
u0 in (1.0, [1.0, 1.0])
301+
300302
probN = NonlinearProblem(quadratic_f, u0, 2.0)
301303
@test all(solve(probN, TrustRegion(); termination_condition).u .≈ sqrt(2.0))
302304
end
@@ -413,6 +415,7 @@ end
413415

414416
@testset "Termination condition: $(termination_condition) u0: $(_nameof(u0))" for termination_condition in TERMINATION_CONDITIONS,
415417
u0 in (1.0, [1.0, 1.0])
418+
416419
probN = NonlinearProblem(quadratic_f, u0, 2.0)
417420
@test all(solve(probN, LevenbergMarquardt(); termination_condition).u .≈ sqrt(2.0))
418421
end
@@ -547,6 +550,7 @@ end
547550

548551
@testset "Termination condition: $(termination_condition) u0: $(_nameof(u0))" for termination_condition in TERMINATION_CONDITIONS,
549552
u0 in (1.0, [1.0, 1.0])
553+
550554
probN = NonlinearProblem(quadratic_f, u0, 2.0)
551555
@test all(solve(probN, DFSane(); termination_condition).u .≈ sqrt(2.0))
552556
end
@@ -667,6 +671,7 @@ end
667671

668672
@testset "Termination condition: $(termination_condition) u0: $(_nameof(u0))" for termination_condition in TERMINATION_CONDITIONS,
669673
u0 in (1.0, [1.0, 1.0])
674+
670675
probN = NonlinearProblem(quadratic_f, u0, 2.0)
671676
@test all(solve(probN, PseudoTransient(; alpha_initial = 10.0);
672677
termination_condition).u .≈ sqrt(2.0))
@@ -764,6 +769,7 @@ end
764769

765770
@testset "Termination condition: $(termination_condition) u0: $(_nameof(u0))" for termination_condition in TERMINATION_CONDITIONS,
766771
u0 in (1.0, [1.0, 1.0])
772+
767773
probN = NonlinearProblem(quadratic_f, u0, 2.0)
768774
@test all(solve(probN, GeneralBroyden(); termination_condition).u .≈ sqrt(2.0))
769775
end
@@ -860,8 +866,9 @@ end
860866

861867
@testset "Termination condition: $(termination_condition) u0: $(_nameof(u0))" for termination_condition in TERMINATION_CONDITIONS,
862868
u0 in (1.0, [1.0, 1.0])
869+
863870
probN = NonlinearProblem(quadratic_f, u0, 2.0)
864-
@test all(solve(probN,GeneralKlement(); termination_condition).u .≈ sqrt(2.0))
871+
@test all(solve(probN, GeneralKlement(); termination_condition).u .≈ sqrt(2.0))
865872
end
866873
end
867874

@@ -876,7 +883,7 @@ end
876883
end
877884

878885
function benchmark_nlsolve_iip(f, u0, p = 2.0; linesearch = LineSearch(),
879-
termination_condition = AbsNormTerminationMode())
886+
termination_condition = AbsNormTerminationMode())
880887
prob = NonlinearProblem{true}(f, u0, p)
881888
return solve(prob, LimitedMemoryBroyden(; linesearch); abstol = 1e-9,
882889
termination_condition)
@@ -960,8 +967,9 @@ end
960967

961968
@testset "Termination condition: $(termination_condition) u0: $(_nameof(u0))" for termination_condition in TERMINATION_CONDITIONS,
962969
u0 in (1.0, [1.0, 1.0])
970+
963971
probN = NonlinearProblem(quadratic_f, u0, 2.0)
964-
@test all(solve(probN, LimitedMemoryBroyden();
972+
@test all(solve(probN, LimitedMemoryBroyden();
965973
termination_condition).u .≈ sqrt(2.0))
966974
end
967975
end

test/polyalgs.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ function f(du, u, p)
3434
end
3535

3636
prob = NonlinearProblem(f, [2.0, 2.0, 2.0], [1.0, 2.0, 2.5])
37-
sol = solve(prob; abstol=1e-9)
37+
sol = solve(prob; abstol = 1e-9)
3838
@test SciMLBase.successful_retcode(sol)
3939

4040
# https://github.com/SciML/NonlinearSolve.jl/issues/187
@@ -43,11 +43,11 @@ ff(u, p) = 0.5 / 1.5 * NaNMath.log.(u ./ (1.0 .- u)) .- 2.0 * u .+ 1.0
4343

4444
uspan = (0.02, 0.1)
4545
prob = IntervalNonlinearProblem(ff, uspan)
46-
sol = solve(prob; abstol=1e-9)
46+
sol = solve(prob; abstol = 1e-9)
4747
@test SciMLBase.successful_retcode(sol)
4848

4949
u0 = 0.06
5050
p = 2.0
5151
prob = NonlinearProblem(ff, u0, p)
52-
sol = solve(prob; abstol=1e-9)
52+
sol = solve(prob; abstol = 1e-9)
5353
@test SciMLBase.successful_retcode(sol)

0 commit comments

Comments
 (0)