1
+ struct Schedule
2
+ var_eq_matching
3
+ dummy_sub
4
+ end
5
+
1
6
function filter_kwargs (kwargs)
2
7
kwargs = Dict (kwargs)
3
8
for key in keys (kwargs)
@@ -326,7 +331,7 @@ function DiffEqBase.ODEFunction{iip, specialize}(sys::AbstractODESystem,
326
331
expression_module = eval_module, checkbounds = checkbounds,
327
332
kwargs... )
328
333
f_oop, f_iip = eval_expression ?
329
- (drop_expr (@RuntimeGeneratedFunction (eval_module, ex)) for ex in f_gen) :
334
+ ((@RuntimeGeneratedFunction (eval_module, ex)) for ex in f_gen) :
330
335
f_gen
331
336
f (u, p, t) = f_oop (u, p, t)
332
337
f (du, u, p, t) = f_iip (du, u, p, t)
@@ -351,7 +356,7 @@ function DiffEqBase.ODEFunction{iip, specialize}(sys::AbstractODESystem,
351
356
expression_module = eval_module,
352
357
checkbounds = checkbounds, kwargs... )
353
358
tgrad_oop, tgrad_iip = eval_expression ?
354
- (drop_expr (@RuntimeGeneratedFunction (eval_module, ex)) for ex in tgrad_gen) :
359
+ ((@RuntimeGeneratedFunction (eval_module, ex)) for ex in tgrad_gen) :
355
360
tgrad_gen
356
361
if p isa Tuple
357
362
__tgrad (u, p, t) = tgrad_oop (u, p... , t)
@@ -373,7 +378,7 @@ function DiffEqBase.ODEFunction{iip, specialize}(sys::AbstractODESystem,
373
378
expression_module = eval_module,
374
379
checkbounds = checkbounds, kwargs... )
375
380
jac_oop, jac_iip = eval_expression ?
376
- (drop_expr (@RuntimeGeneratedFunction (eval_module, ex)) for ex in jac_gen) :
381
+ ((@RuntimeGeneratedFunction (eval_module, ex)) for ex in jac_gen) :
377
382
jac_gen
378
383
_jac (u, p, t) = jac_oop (u, p, t)
379
384
_jac (J, u, p, t) = jac_iip (J, u, p, t)
@@ -541,7 +546,7 @@ function DiffEqBase.DAEFunction{iip}(sys::AbstractODESystem, dvs = unknowns(sys)
541
546
expression_module = eval_module, checkbounds = checkbounds,
542
547
kwargs... )
543
548
f_oop, f_iip = eval_expression ?
544
- (drop_expr (@RuntimeGeneratedFunction (eval_module, ex)) for ex in f_gen) :
549
+ ((@RuntimeGeneratedFunction (eval_module, ex)) for ex in f_gen) :
545
550
f_gen
546
551
f (du, u, p, t) = f_oop (du, u, p, t)
547
552
f (du, u, p:: MTKParameters , t) = f_oop (du, u, p... , t)
@@ -555,7 +560,7 @@ function DiffEqBase.DAEFunction{iip}(sys::AbstractODESystem, dvs = unknowns(sys)
555
560
expression_module = eval_module,
556
561
checkbounds = checkbounds, kwargs... )
557
562
jac_oop, jac_iip = eval_expression ?
558
- (drop_expr (@RuntimeGeneratedFunction (eval_module, ex)) for ex in jac_gen) :
563
+ ((@RuntimeGeneratedFunction (eval_module, ex)) for ex in jac_gen) :
559
564
jac_gen
560
565
_jac (du, u, p, ˍ₋gamma, t) = jac_oop (du, u, p, ˍ₋gamma, t)
561
566
_jac (du, u, p:: MTKParameters , ˍ₋gamma, t) = jac_oop (du, u, p... , ˍ₋gamma, t)
@@ -624,7 +629,7 @@ function DiffEqBase.DDEFunction{iip}(sys::AbstractODESystem, dvs = unknowns(sys)
624
629
expression = Val{true },
625
630
expression_module = eval_module, checkbounds = checkbounds,
626
631
kwargs... )
627
- f_oop, f_iip = (drop_expr (@RuntimeGeneratedFunction (eval_module, ex)) for ex in f_gen)
632
+ f_oop, f_iip = ((@RuntimeGeneratedFunction (eval_module, ex)) for ex in f_gen)
628
633
f (u, h, p, t) = f_oop (u, h, p, t)
629
634
f (u, h, p:: MTKParameters , t) = f_oop (u, h, p... , t)
630
635
f (du, u, h, p, t) = f_iip (du, u, h, p, t)
@@ -649,10 +654,10 @@ function DiffEqBase.SDDEFunction{iip}(sys::AbstractODESystem, dvs = unknowns(sys
649
654
expression = Val{true },
650
655
expression_module = eval_module, checkbounds = checkbounds,
651
656
kwargs... )
652
- f_oop, f_iip = (drop_expr (@RuntimeGeneratedFunction (eval_module, ex)) for ex in f_gen)
657
+ f_oop, f_iip = ((@RuntimeGeneratedFunction (eval_module, ex)) for ex in f_gen)
653
658
g_gen = generate_diffusion_function (sys, dvs, ps; expression = Val{true },
654
659
isdde = true , kwargs... )
655
- g_oop, g_iip = (drop_expr (@RuntimeGeneratedFunction (ex)) for ex in g_gen)
660
+ g_oop, g_iip = ((@RuntimeGeneratedFunction (ex)) for ex in g_gen)
656
661
f (u, h, p, t) = f_oop (u, h, p, t)
657
662
f (u, h, p:: MTKParameters , t) = f_oop (u, h, p... , t)
658
663
f (du, u, h, p, t) = f_iip (du, u, h, p, t)
@@ -849,6 +854,7 @@ function process_DEProblem(constructor, sys::AbstractODESystem, u0map, parammap;
849
854
symbolic_u0 = false ,
850
855
u0_constructor = identity,
851
856
guesses = Dict (),
857
+ t = nothing ,
852
858
warn_initialize_determined = true ,
853
859
kwargs... )
854
860
eqs = equations (sys)
@@ -870,7 +876,7 @@ function process_DEProblem(constructor, sys::AbstractODESystem, u0map, parammap;
870
876
u0map = unknowns (sys) .=> u0map
871
877
end
872
878
initializeprob = ModelingToolkit. InitializationProblem (
873
- sys, u0map, parammap; guesses, warn_initialize_determined)
879
+ sys, t, u0map, parammap; guesses, warn_initialize_determined)
874
880
initializeprobmap = getu (initializeprob, unknowns (sys))
875
881
876
882
zerovars = setdiff (unknowns (sys), keys (defaults (sys))) .=> 0.0
@@ -1101,6 +1107,7 @@ function DiffEqBase.DAEProblem{iip}(sys::AbstractODESystem, du0map, u0map, tspan
1101
1107
end
1102
1108
f, du0, u0, p = process_DEProblem (DAEFunction{iip}, sys, u0map, parammap;
1103
1109
implicit_dae = true , du0map = du0map, check_length,
1110
+ t = tspan != = nothing ? tspan[1 ] : tspan,
1104
1111
warn_initialize_determined, kwargs... )
1105
1112
diffvars = collect_differential_variables (sys)
1106
1113
sts = unknowns (sys)
@@ -1277,6 +1284,7 @@ function ODEProblemExpr{iip}(sys::AbstractODESystem, u0map, tspan,
1277
1284
error (" A completed system is required. Call `complete` or `structural_simplify` on the system before creating a `ODEProblemExpr`" )
1278
1285
end
1279
1286
f, u0, p = process_DEProblem (ODEFunctionExpr{iip}, sys, u0map, parammap; check_length,
1287
+ t = tspan != = nothing ? tspan[1 ] : tspan,
1280
1288
kwargs... )
1281
1289
linenumbers = get (kwargs, :linenumbers , true )
1282
1290
kwargs = filter_kwargs (kwargs)
@@ -1322,6 +1330,7 @@ function DAEProblemExpr{iip}(sys::AbstractODESystem, du0map, u0map, tspan,
1322
1330
error (" A completed system is required. Call `complete` or `structural_simplify` on the system before creating a `DAEProblemExpr`" )
1323
1331
end
1324
1332
f, du0, u0, p = process_DEProblem (DAEFunctionExpr{iip}, sys, u0map, parammap;
1333
+ t = tspan != = nothing ? tspan[1 ] : tspan,
1325
1334
implicit_dae = true , du0map = du0map, check_length,
1326
1335
kwargs... )
1327
1336
linenumbers = get (kwargs, :linenumbers , true )
@@ -1505,11 +1514,11 @@ function InitializationProblem(sys::AbstractODESystem, args...; kwargs...)
1505
1514
InitializationProblem {true} (sys, args... ; kwargs... )
1506
1515
end
1507
1516
1508
- function InitializationProblem (sys:: AbstractODESystem ,
1517
+ function InitializationProblem (sys:: AbstractODESystem , t,
1509
1518
u0map:: StaticArray ,
1510
1519
args... ;
1511
1520
kwargs... )
1512
- InitializationProblem {false, SciMLBase.FullSpecialize} (sys, u0map, args... ; kwargs... )
1521
+ InitializationProblem {false, SciMLBase.FullSpecialize} (sys, t, u0map, args... ; kwargs... )
1513
1522
end
1514
1523
1515
1524
function InitializationProblem {true} (sys:: AbstractODESystem , args... ; kwargs... )
@@ -1520,7 +1529,8 @@ function InitializationProblem{false}(sys::AbstractODESystem, args...; kwargs...
1520
1529
InitializationProblem {false, SciMLBase.FullSpecialize} (sys, args... ; kwargs... )
1521
1530
end
1522
1531
1523
- function InitializationProblem {iip, specialize} (sys:: AbstractODESystem , u0map = [],
1532
+ function InitializationProblem {iip, specialize} (sys:: AbstractODESystem ,
1533
+ t, u0map = [],
1524
1534
parammap = DiffEqBase. NullParameters ();
1525
1535
guesses = [],
1526
1536
check_length = true ,
@@ -1530,6 +1540,8 @@ function InitializationProblem{iip, specialize}(sys::AbstractODESystem, u0map =
1530
1540
error (" A completed system is required. Call `complete` or `structural_simplify` on the system before creating an `ODEProblem`" )
1531
1541
end
1532
1542
1543
+ @show u0map
1544
+
1533
1545
if isempty (u0map) && get_initializesystem (sys) != = nothing
1534
1546
isys = get_initializesystem (sys)
1535
1547
elseif isempty (u0map) && get_initializesystem (sys) === nothing
@@ -1548,6 +1560,8 @@ function InitializationProblem{iip, specialize}(sys::AbstractODESystem, u0map =
1548
1560
if warn_initialize_determined && neqs < nunknown
1549
1561
@warn " Initialization system is underdetermined. $neqs equations for $nunknown unknowns. Initialization will default to using least squares. To suppress this warning pass warn_initialize_determined = false."
1550
1562
end
1563
+
1564
+ parammap isa DiffEqBase. NullParameters ? [independent_variable (sys) => t] : merge (todict (parammap), Dict (independent_variable (sys) => t))
1551
1565
1552
1566
if neqs == nunknown
1553
1567
NonlinearProblem (isys, guesses, parammap)
0 commit comments