@@ -782,12 +782,6 @@ function process_DEProblem(constructor, sys::AbstractODESystem, u0map, parammap;
782
782
varlist = collect (map (unwrap, dvs))
783
783
missingvars = setdiff (varlist, collect (keys (varmap)))
784
784
785
- # Append zeros to the variables which are determined by the initialization system
786
- # This essentially bypasses the check for if initial conditions are defined for DAEs
787
- # since they will be checked in the initialization problem's construction
788
- # TODO : make check for if a DAE cheaper than calculating the mass matrix a second time!
789
- ci = infer_clocks! (ClockInference (TearingState (sys)))
790
-
791
785
if eltype (parammap) <: Pair
792
786
parammap = Dict (unwrap (k) => v for (k, v) in todict (parammap))
793
787
elseif parammap isa AbstractArray
@@ -798,38 +792,9 @@ function process_DEProblem(constructor, sys::AbstractODESystem, u0map, parammap;
798
792
end
799
793
end
800
794
801
- if has_discrete_subsystems (sys) && get_discrete_subsystems (sys) != = nothing
802
- clockedparammap = Dict ()
803
- defs = ModelingToolkit. get_defaults (sys)
804
- for v in ps
805
- v = unwrap (v)
806
- is_discrete_domain (v) || continue
807
- op = operation (v)
808
- if ! isa (op, Symbolics. Operator) && parammap != SciMLBase. NullParameters () &&
809
- haskey (parammap, v)
810
- error (" Initial conditions for discrete variables must be for the past state of the unknown. Instead of providing the condition for $v , provide the condition for $(Shift (iv, - 1 )(v)) ." )
811
- end
812
- shiftedv = StructuralTransformations. simplify_shifts (Shift (iv, - 1 )(v))
813
- if parammap != SciMLBase. NullParameters () &&
814
- (val = get (parammap, shiftedv, nothing )) != = nothing
815
- clockedparammap[v] = val
816
- elseif op isa Shift
817
- root = arguments (v)[1 ]
818
- haskey (defs, root) || error (" Initial condition for $v not provided." )
819
- clockedparammap[v] = defs[root]
820
- end
821
- end
822
- parammap = if parammap == SciMLBase. NullParameters ()
823
- clockedparammap
824
- else
825
- merge (parammap, clockedparammap)
826
- end
827
- end
828
- # TODO : make it work with clocks
829
795
# ModelingToolkit.get_tearing_state(sys) !== nothing => Requires structural_simplify first
830
796
if sys isa ODESystem && build_initializeprob &&
831
797
(((implicit_dae || ! isempty (missingvars)) &&
832
- all (== (Continuous), ci. var_domain) &&
833
798
ModelingToolkit. get_tearing_state (sys) != = nothing ) ||
834
799
! isempty (initialization_equations (sys))) && t != = nothing
835
800
if eltype (u0map) <: Number
@@ -1010,29 +975,7 @@ function DiffEqBase.ODEProblem{iip, specialize}(sys::AbstractODESystem, u0map =
1010
975
t = tspan != = nothing ? tspan[1 ] : tspan,
1011
976
check_length, warn_initialize_determined, eval_expression, eval_module, kwargs... )
1012
977
cbs = process_events (sys; callback, eval_expression, eval_module, kwargs... )
1013
- inits = []
1014
- if has_discrete_subsystems (sys) && (dss = get_discrete_subsystems (sys)) != = nothing
1015
- affects, clocks = ModelingToolkit. generate_discrete_affect (
1016
- sys, dss... ; eval_expression, eval_module)
1017
- discrete_cbs = map (affects, clocks) do affect, clock
1018
- @match clock begin
1019
- PeriodicClock (dt, _... ) => PeriodicCallback (affect, dt;
1020
- final_affect = true , initial_affect = true )
1021
- & SolverStepClock => DiscreteCallback (Returns (true ), affect,
1022
- initialize = (c, u, t, integrator) -> affect (integrator))
1023
- _ => error (" $clock is not a supported clock type." )
1024
- end
1025
- end
1026
- if cbs === nothing
1027
- if length (discrete_cbs) == 1
1028
- cbs = only (discrete_cbs)
1029
- else
1030
- cbs = CallbackSet (discrete_cbs... )
1031
- end
1032
- else
1033
- cbs = CallbackSet (cbs, discrete_cbs... )
1034
- end
1035
- end
978
+
1036
979
kwargs = filter_kwargs (kwargs)
1037
980
pt = something (get_metadata (sys), StandardODEProblem ())
1038
981
@@ -1112,40 +1055,14 @@ function DiffEqBase.DDEProblem{iip}(sys::AbstractODESystem, u0map = [],
1112
1055
h (p, t) = h_oop (p, t)
1113
1056
h (p:: MTKParameters , t) = h_oop (p... , t)
1114
1057
u0 = h (p, tspan[1 ])
1058
+
1115
1059
cbs = process_events (sys; callback, eval_expression, eval_module, kwargs... )
1116
- if has_discrete_subsystems (sys) && (dss = get_discrete_subsystems (sys)) != = nothing
1117
- affects, clocks = ModelingToolkit. generate_discrete_affect (
1118
- sys, dss... ; eval_expression, eval_module)
1119
- discrete_cbs = map (affects, clocks) do affect, clock
1120
- @match clock begin
1121
- PeriodicClock (dt, _... ) => PeriodicCallback (affect, dt;
1122
- final_affect = true , initial_affect = true )
1123
- & SolverStepClock => DiscreteCallback (Returns (true ), affect,
1124
- initialize = (c, u, t, integrator) -> affect (integrator))
1125
- _ => error (" $clock is not a supported clock type." )
1126
- end
1127
- end
1128
- if cbs === nothing
1129
- if length (discrete_cbs) == 1
1130
- cbs = only (discrete_cbs)
1131
- else
1132
- cbs = CallbackSet (discrete_cbs... )
1133
- end
1134
- else
1135
- cbs = CallbackSet (cbs, discrete_cbs)
1136
- end
1137
- else
1138
- svs = nothing
1139
- end
1140
1060
kwargs = filter_kwargs (kwargs)
1141
1061
1142
1062
kwargs1 = (;)
1143
1063
if cbs != = nothing
1144
1064
kwargs1 = merge (kwargs1, (callback = cbs,))
1145
1065
end
1146
- if svs != = nothing
1147
- kwargs1 = merge (kwargs1, (disc_saved_values = svs,))
1148
- end
1149
1066
DDEProblem {iip} (f, u0, h, tspan, p; kwargs1... , kwargs... )
1150
1067
end
1151
1068
@@ -1175,40 +1092,14 @@ function DiffEqBase.SDDEProblem{iip}(sys::AbstractODESystem, u0map = [],
1175
1092
h (p:: MTKParameters , t) = h_oop (p... , t)
1176
1093
h (out, p:: MTKParameters , t) = h_iip (out, p... , t)
1177
1094
u0 = h (p, tspan[1 ])
1095
+
1178
1096
cbs = process_events (sys; callback, eval_expression, eval_module, kwargs... )
1179
- if has_discrete_subsystems (sys) && (dss = get_discrete_subsystems (sys)) != = nothing
1180
- affects, clocks = ModelingToolkit. generate_discrete_affect (
1181
- sys, dss... ; eval_expression, eval_module)
1182
- discrete_cbs = map (affects, clocks) do affect, clock
1183
- @match clock begin
1184
- PeriodicClock (dt, _... ) => PeriodicCallback (affect, dt;
1185
- final_affect = true , initial_affect = true )
1186
- & SolverStepClock => DiscreteCallback (Returns (true ), affect,
1187
- initialize = (c, u, t, integrator) -> affect (integrator))
1188
- _ => error (" $clock is not a supported clock type." )
1189
- end
1190
- end
1191
- if cbs === nothing
1192
- if length (discrete_cbs) == 1
1193
- cbs = only (discrete_cbs)
1194
- else
1195
- cbs = CallbackSet (discrete_cbs... )
1196
- end
1197
- else
1198
- cbs = CallbackSet (cbs, discrete_cbs)
1199
- end
1200
- else
1201
- svs = nothing
1202
- end
1203
1097
kwargs = filter_kwargs (kwargs)
1204
1098
1205
1099
kwargs1 = (;)
1206
1100
if cbs != = nothing
1207
1101
kwargs1 = merge (kwargs1, (callback = cbs,))
1208
1102
end
1209
- if svs != = nothing
1210
- kwargs1 = merge (kwargs1, (disc_saved_values = svs,))
1211
- end
1212
1103
1213
1104
noiseeqs = get_noiseeqs (sys)
1214
1105
sparsenoise === nothing && (sparsenoise = get (kwargs, :sparse , false ))
0 commit comments