Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 16 additions & 12 deletions src/systems/diffeqs/abstractodesystem.jl
Original file line number Diff line number Diff line change
Expand Up @@ -699,9 +699,11 @@ Generates an ODEProblem from an ODESystem and allows for automatically
symbolically calculating numerical enhancements.
"""
function DiffEqBase.ODEProblem{iip}(sys::AbstractODESystem,u0map,tspan,
parammap=DiffEqBase.NullParameters(); callback=nothing, kwargs...) where iip
parammap=DiffEqBase.NullParameters(); callback=nothing,
check_length=true, kwargs...) where iip
has_difference = any(isdifferenceeq, equations(sys))
f, u0, p = process_DEProblem(ODEFunction{iip}, sys, u0map, parammap; has_difference=has_difference, kwargs...)
f, u0, p = process_DEProblem(ODEFunction{iip}, sys, u0map, parammap; has_difference=has_difference,
check_length, kwargs...)
if has_continuous_events(sys)
event_cb = generate_rootfinding_callback(sys; kwargs...)
else
Expand Down Expand Up @@ -738,11 +740,11 @@ Generates an DAEProblem from an ODESystem and allows for automatically
symbolically calculating numerical enhancements.
"""
function DiffEqBase.DAEProblem{iip}(sys::AbstractODESystem,du0map,u0map,tspan,
parammap=DiffEqBase.NullParameters();kwargs...) where iip
parammap=DiffEqBase.NullParameters(); check_length=true, kwargs...) where iip
has_difference = any(isdifferenceeq, equations(sys))
f, du0, u0, p = process_DEProblem(
DAEFunction{iip}, sys, u0map, parammap;
implicit_dae=true, du0map=du0map, has_difference=has_difference, kwargs...
implicit_dae=true, du0map=du0map, has_difference=has_difference, check_length, kwargs...
)
diffvars = collect_differential_variables(sys)
sts = states(sys)
Expand Down Expand Up @@ -774,10 +776,10 @@ numerical enhancements.
struct ODEProblemExpr{iip} end

function ODEProblemExpr{iip}(sys::AbstractODESystem,u0map,tspan,
parammap=DiffEqBase.NullParameters();
parammap=DiffEqBase.NullParameters(); check_length=true,
kwargs...) where iip

f, u0, p = process_DEProblem(ODEFunctionExpr{iip}, sys, u0map, parammap; kwargs...)
f, u0, p = process_DEProblem(ODEFunctionExpr{iip}, sys, u0map, parammap; check_length, kwargs...)
linenumbers = get(kwargs, :linenumbers, true)

ex = quote
Expand Down Expand Up @@ -814,11 +816,11 @@ numerical enhancements.
struct DAEProblemExpr{iip} end

function DAEProblemExpr{iip}(sys::AbstractODESystem,du0map,u0map,tspan,
parammap=DiffEqBase.NullParameters();
parammap=DiffEqBase.NullParameters(); check_length=true,
kwargs...) where iip
f, du0, u0, p = process_DEProblem(
DAEFunctionExpr{iip}, sys, u0map, parammap;
implicit_dae=true, du0map=du0map, kwargs...
implicit_dae=true, du0map=du0map, check_length, kwargs...
)
linenumbers = get(kwargs, :linenumbers, true)
diffvars = collect_differential_variables(sys)
Expand Down Expand Up @@ -862,8 +864,9 @@ symbolically calculating numerical enhancements.
"""
function DiffEqBase.SteadyStateProblem{iip}(sys::AbstractODESystem,u0map,
parammap=DiffEqBase.NullParameters();
kwargs...) where iip
f, u0, p = process_DEProblem(ODEFunction{iip}, sys, u0map, parammap; steady_state = true, kwargs...)
check_length=true, kwargs...) where iip
f, u0, p = process_DEProblem(ODEFunction{iip}, sys, u0map, parammap; steady_state = true,
check_length, kwargs...)
SteadyStateProblem{iip}(f,u0,p;kwargs...)
end

Expand All @@ -885,9 +888,10 @@ numerical enhancements.
struct SteadyStateProblemExpr{iip} end

function SteadyStateProblemExpr{iip}(sys::AbstractODESystem,u0map,
parammap=DiffEqBase.NullParameters();
parammap=DiffEqBase.NullParameters(); check_length=true,
kwargs...) where iip
f, u0, p = process_DEProblem(ODEFunctionExpr{iip}, sys, u0map, parammap;steady_state = true, kwargs...)
f, u0, p = process_DEProblem(ODEFunctionExpr{iip}, sys, u0map, parammap;steady_state = true,
check_length, kwargs...)
linenumbers = get(kwargs, :linenumbers, true)
ex = quote
f = $f
Expand Down
9 changes: 5 additions & 4 deletions src/systems/diffeqs/sdesystem.jl
Original file line number Diff line number Diff line change
Expand Up @@ -355,9 +355,9 @@ Generates an SDEProblem from an SDESystem and allows for automatically
symbolically calculating numerical enhancements.
"""
function DiffEqBase.SDEProblem{iip}(sys::SDESystem,u0map,tspan,parammap=DiffEqBase.NullParameters();
sparsenoise = nothing,
sparsenoise = nothing, check_length=true,
kwargs...) where iip
f, u0, p = process_DEProblem(SDEFunction{iip}, sys, u0map, parammap; kwargs...)
f, u0, p = process_DEProblem(SDEFunction{iip}, sys, u0map, parammap; check_length, kwargs...)
sparsenoise === nothing && (sparsenoise = get(kwargs, :sparse, false))

noiseeqs = get_noiseeqs(sys)
Expand Down Expand Up @@ -396,9 +396,10 @@ struct SDEProblemExpr{iip} end

function SDEProblemExpr{iip}(sys::SDESystem,u0map,tspan,
parammap=DiffEqBase.NullParameters();
sparsenoise = nothing,
sparsenoise = nothing, check_length=true,
kwargs...) where iip
f, u0, p = process_DEProblem(SDEFunctionExpr{iip}, sys, u0map, parammap; kwargs...)
f, u0, p = process_DEProblem(SDEFunctionExpr{iip}, sys, u0map, parammap; check_length,
kwargs...)
linenumbers = get(kwargs, :linenumbers, true)
sparsenoise === nothing && (sparsenoise = get(kwargs, :sparse, false))

Expand Down
9 changes: 5 additions & 4 deletions src/systems/nonlinear/nonlinearsystem.jl
Original file line number Diff line number Diff line change
Expand Up @@ -316,8 +316,8 @@ Generates an NonlinearProblem from a NonlinearSystem and allows for automaticall
symbolically calculating numerical enhancements.
"""
function DiffEqBase.NonlinearProblem{iip}(sys::NonlinearSystem,u0map,
parammap=DiffEqBase.NullParameters();kwargs...) where iip
f, u0, p = process_NonlinearProblem(NonlinearFunction{iip}, sys, u0map, parammap; kwargs...)
parammap=DiffEqBase.NullParameters(); check_length=true, kwargs...) where iip
f, u0, p = process_NonlinearProblem(NonlinearFunction{iip}, sys, u0map, parammap; check_length, kwargs...)
NonlinearProblem{iip}(f,u0,p;kwargs...)
end

Expand All @@ -342,10 +342,11 @@ function NonlinearProblemExpr(sys::NonlinearSystem, args...; kwargs...)
end

function NonlinearProblemExpr{iip}(sys::NonlinearSystem,u0map,
parammap=DiffEqBase.NullParameters();
parammap=DiffEqBase.NullParameters(); check_length=true,
kwargs...) where iip

f, u0, p = process_NonlinearProblem(NonlinearFunctionExpr{iip}, sys, u0map, parammap; kwargs...)
f, u0, p = process_NonlinearProblem(NonlinearFunctionExpr{iip}, sys, u0map, parammap;
check_length, kwargs...)
linenumbers = get(kwargs, :linenumbers, true)

ex = quote
Expand Down
11 changes: 11 additions & 0 deletions test/odesystem.jl
Original file line number Diff line number Diff line change
Expand Up @@ -776,3 +776,14 @@ let
@named sys = ODESystem(eqs, t, u, ps)
@test_nowarn simpsys = structural_simplify(sys)
end

# https://github.com/SciML/ModelingToolkit.jl/issues/1583
let
@parameters k
@variables t A(t)
D = Differential(t)
eqs = [D(A) ~ -k*A]
@named osys = ODESystem(eqs,t)
oprob = ODEProblem(osys, [A => 1.0], (0.0,10.0), [k => 1.0]; check_length=false)
@test_nowarn sol = solve(oprob, Tsit5())
end