Skip to content

Commit 8353139

Browse files
Merge pull request #2503 from jClugstor/AliasingAPI
Use Aliasing API
2 parents fdc341a + ac32012 commit 8353139

File tree

8 files changed

+170
-111
lines changed

8 files changed

+170
-111
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ PrecompileTools = "1"
133133
Preferences = "1.3"
134134
RecursiveArrayTools = "2.36, 3"
135135
Reexport = "1.0"
136-
SciMLBase = "2.53.2"
136+
SciMLBase = "2.69"
137137
SciMLOperators = "0.3"
138138
SciMLStructures = "1"
139139
SimpleNonlinearSolve = "1, 2"

lib/OrdinaryDiffEqCore/Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ Random = "<0.0.1, 1"
7070
RecursiveArrayTools = "2.36, 3"
7171
Reexport = "1.0"
7272
SafeTestsets = "0.1.0"
73-
SciMLBase = "2.62"
73+
SciMLBase = "2.68"
7474
SciMLOperators = "0.3"
7575
SciMLStructures = "1"
7676
SimpleUnPack = "1"

lib/OrdinaryDiffEqCore/src/OrdinaryDiffEqCore.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ using DiffEqBase: check_error!, @def, _vec, _reshape
6060

6161
using FastBroadcast: @.., True, False
6262

63-
using SciMLBase: NoInit, CheckInit, OverrideInit, AbstractDEProblem, _unwrap_val
63+
using SciMLBase: NoInit, CheckInit, OverrideInit, AbstractDEProblem, _unwrap_val, ODEAliasSpecifier
6464

6565
import SciMLBase: AbstractNonlinearProblem, alg_order
6666

lib/OrdinaryDiffEqCore/src/solve.jl

Lines changed: 55 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,7 @@ function DiffEqBase.__init(
6767
userdata = nothing,
6868
allow_extrapolation = alg_extrapolates(alg),
6969
initialize_integrator = true,
70-
alias_u0 = false,
71-
alias_du0 = false,
70+
alias = ODEAliasSpecifier(),
7271
initializealg = DefaultInit(),
7372
kwargs...) where {recompile_flag}
7473
if prob isa DiffEqBase.AbstractDAEProblem && alg isa OrdinaryDiffEqAlgorithm
@@ -156,19 +155,62 @@ function DiffEqBase.__init(
156155
else
157156
_alg = alg
158157
end
159-
f = prob.f
160-
p = prob.p
161158

162-
# Get the control variables
159+
use_old_kwargs = haskey(kwargs,:alias_u0) || haskey(kwargs,:alias_du0)
163160

164-
if alias_u0
161+
if use_old_kwargs
162+
aliases = ODEAliasSpecifier()
163+
if haskey(kwargs, :alias_u0)
164+
message = "`alias_u0` keyword argument is deprecated, to set `alias_u0`,
165+
please use an ODEAliasSpecifier, e.g. `solve(prob, alias = ODEAliasSpecifier(alias_u0 = true))"
166+
Base.depwarn(message, :init)
167+
Base.depwarn(message, :solve)
168+
aliases = ODEAliasSpecifier(alias_u0 = values(kwargs).alias_u0)
169+
else
170+
aliases = ODEAliasSpecifier(alias_u0 = nothing)
171+
end
172+
173+
if haskey(kwargs, :alias_du0)
174+
message = "`alias_du0` keyword argument is deprecated, to set `alias_du0`,
175+
please use an ODEAliasSpecifier, e.g. `solve(prob, alias = ODEAliasSpecifier(alias_du0 = true))"
176+
Base.depwarn(message, :init)
177+
Base.depwarn(message, :solve)
178+
aliases = ODEAliasSpecifier(alias_u0 = aliases.alias_u0, alias_du0 = values(kwargs).alias_du0)
179+
else
180+
aliases = ODEAliasSpecifier(alias_u0 = aliases.alias_u0, alias_du0 = nothing)
181+
end
182+
183+
aliases
184+
185+
else
186+
# If alias isa Bool, all fields of ODEAliases set to alias
187+
if alias isa Bool
188+
aliases = ODEAliasSpecifier(alias = alias)
189+
elseif alias isa ODEAliasSpecifier
190+
aliases = alias
191+
end
192+
end
193+
194+
if isnothing(aliases.alias_f) || aliases.alias_f
195+
f = prob.f
196+
else
197+
f = deepcopy(prob.f)
198+
end
199+
200+
if isnothing(aliases.alias_p) || aliases.alias_p
201+
p = prob.p
202+
else
203+
p = recursivecopy(prob.p)
204+
end
205+
206+
if !isnothing(aliases.alias_u0) && aliases.alias_u0
165207
u = prob.u0
166208
else
167209
u = recursivecopy(prob.u0)
168210
end
169211

170212
if _alg isa DAEAlgorithm
171-
if alias_du0
213+
if !isnothing(aliases.alias_du0) && aliases.alias_du0
172214
du = prob.du0
173215
else
174216
du = recursivecopy(prob.du0)
@@ -240,6 +282,12 @@ function DiffEqBase.__init(
240282
resType = typeof(res_prototype)
241283
end
242284

285+
if isnothing(aliases.alias_tstops) || aliases.alias_tstops
286+
tstops = tstops
287+
else
288+
tstops = recursivecopy(tstops)
289+
end
290+
243291
if tstops isa AbstractArray || tstops isa Tuple || tstops isa Number
244292
_tstops = nothing
245293
else

0 commit comments

Comments
 (0)