Skip to content

Commit 35607bb

Browse files
feat: implement IntervalNonlinearProblem, IntervalNonlinearFunction for System
1 parent f30d93b commit 35607bb

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
function SciMLBase.IntervalNonlinearFunction(
2+
sys::System, _d = nothing, u0 = nothing, p = nothing;
3+
eval_expression = false, eval_module = @__MODULE__,
4+
checkbounds = false, analytic = nothing,
5+
cse = true, initialization_data = nothing,
6+
check_compatibility = true, kwargs...)
7+
check_complete(sys, IntervalNonlinearFunction)
8+
check_compatibility && check_compatible_system(IntervalNonlinearFunction, sys)
9+
10+
dvs = unknowns(sys)
11+
ps = parameters(sys)
12+
f = generate_rhs(sys, dvs, ps; expression = Val{false}, scalar = true,
13+
eval_expression, eval_module, checkbounds, cse,
14+
kwargs...)
15+
16+
observedfun = ObservedFunctionCache(
17+
sys; steady_state = false, eval_expression, eval_module, checkbounds, cse)
18+
19+
IntervalNonlinearFunction{false}(f;
20+
sys = sys,
21+
observed = observedfun,
22+
analytic = analytic,
23+
initialization_data)
24+
end
25+
26+
function SciMLBase.IntervalNonlinearProblem(
27+
sys::System, uspan::NTuple{2}, parammap = SciMLBase.NullParameters();
28+
check_compatibility = true, kwargs...)
29+
check_complete(sys, IntervalNonlinearProblem)
30+
check_compatibility && check_compatible_system(IntervalNonlinearProblem, sys)
31+
32+
u0map = unknowns(sys) .=> uspan[1]
33+
f, u0, p = process_SciMLProblem(IntervalNonlinearFunction, sys, u0map, parammap;
34+
check_compatibility, kwargs...)
35+
36+
kwargs = process_kwargs(sys; kwargs...)
37+
# Call `remake` so it runs initialization if it is trivial
38+
return remake(IntervalNonlinearProblem(f, uspan, p; kwargs...))
39+
end
40+
41+
function check_compatible_system(
42+
T::Union{Type{IntervalNonlinearFunction}, Type{IntervalNonlinearProblem}}, sys::System)
43+
check_time_independent(sys, T)
44+
if !isone(length(unknowns(sys)))
45+
throw(SystemCompatibilityError("""
46+
`$T` requires a system with a single unknown. Found `$(unknowns(sys))`.
47+
"""))
48+
end
49+
if !isone(length(equations(sys)))
50+
throw(SystemCompatibilityError("""
51+
`$T` requires a system with a single equation. Found `$(equations(sys))`.
52+
"""))
53+
end
54+
check_not_dde(sys)
55+
check_no_cost(sys, T)
56+
check_no_constraints(sys, T)
57+
check_no_jumps(sys, T)
58+
check_no_noise(sys, T)
59+
end

0 commit comments

Comments
 (0)