@@ -315,7 +315,9 @@ function DiffEqBase.ODEFunction{iip, specialize}(sys::AbstractODESystem,
315
315
checkbounds = false ,
316
316
sparsity = false ,
317
317
analytic = nothing ,
318
- split_idxs = nothing ,
318
+ split_idxs = nothing ,
319
+ initializeprob = nothing ,
320
+ initializeprobmap = nothing ,
319
321
kwargs... ) where {iip, specialize}
320
322
if ! iscomplete (sys)
321
323
error (" A completed system is required. Call `complete` or `structural_simplify` on the system before creating an `ODEFunction`" )
@@ -487,6 +489,7 @@ function DiffEqBase.ODEFunction{iip, specialize}(sys::AbstractODESystem,
487
489
end
488
490
489
491
@set! sys. split_idxs = split_idxs
492
+
490
493
ODEFunction {iip, specialize} (f;
491
494
sys = sys,
492
495
jac = _jac === nothing ? nothing : _jac,
@@ -495,7 +498,9 @@ function DiffEqBase.ODEFunction{iip, specialize}(sys::AbstractODESystem,
495
498
jac_prototype = jac_prototype,
496
499
observed = observedfun,
497
500
sparsity = sparsity ? jacobian_sparsity (sys) : nothing ,
498
- analytic = analytic)
501
+ analytic = analytic,
502
+ initializeprob = initializeprob,
503
+ initializeprobmap = initializeprobmap)
499
504
end
500
505
501
506
"""
@@ -525,6 +530,8 @@ function DiffEqBase.DAEFunction{iip}(sys::AbstractODESystem, dvs = unknowns(sys)
525
530
sparse = false , simplify = false ,
526
531
eval_module = @__MODULE__ ,
527
532
checkbounds = false ,
533
+ initializeprob = nothing ,
534
+ initializeprobmap = nothing ,
528
535
kwargs... ) where {iip}
529
536
if ! iscomplete (sys)
530
537
error (" A completed system is required. Call `complete` or `structural_simplify` on the system before creating a `DAEFunction`" )
@@ -596,7 +603,9 @@ function DiffEqBase.DAEFunction{iip}(sys::AbstractODESystem, dvs = unknowns(sys)
596
603
sys = sys,
597
604
jac = _jac === nothing ? nothing : _jac,
598
605
jac_prototype = jac_prototype,
599
- observed = observedfun)
606
+ observed = observedfun,
607
+ initializeprob = initializeprob,
608
+ initializeprobmap = initializeprobmap)
600
609
end
601
610
602
611
function DiffEqBase. DDEFunction (sys:: AbstractODESystem , args... ; kwargs... )
@@ -877,10 +886,15 @@ function process_DEProblem(constructor, sys::AbstractODESystem, u0map, parammap;
877
886
878
887
check_eqs_u0 (eqs, dvs, u0; kwargs... )
879
888
889
+ initializeprob = ModelingToolkit. InitializationProblem (sys, u0map, parammap)
890
+ initializeprobmap = getu (initializeprob, unknowns (sys))
891
+
880
892
f = constructor (sys, dvs, ps, u0; ddvs = ddvs, tgrad = tgrad, jac = jac,
881
893
checkbounds = checkbounds, p = p,
882
894
linenumbers = linenumbers, parallel = parallel, simplify = simplify,
883
895
sparse = sparse, eval_expression = eval_expression,
896
+ initializeprob = initializeprob,
897
+ initializeprobmap = initializeprobmap,
884
898
kwargs... )
885
899
implicit_dae ? (f, du0, u0, p) : (f, u0, p)
886
900
end
0 commit comments