Skip to content

Commit 4d4ea5f

Browse files
WIP: Add initialization_equations flattening constructor
1 parent 335c7ba commit 4d4ea5f

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

src/systems/abstractsystem.jl

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -879,6 +879,12 @@ function namespace_equation(eq::Equation,
879879
_lhs ~ _rhs
880880
end
881881

882+
function namespace_initialization_equations(sys::AbstractSystem, ivs = independent_variables(sys))
883+
eqs = initialization_equations(sys)
884+
isempty(eqs) && return Equation[]
885+
map(eq -> namespace_equation(eq, sys; ivs), eqs)
886+
end
887+
882888
function namespace_assignment(eq::Assignment, sys)
883889
_lhs = namespace_expr(eq.lhs, sys)
884890
_rhs = namespace_expr(eq.rhs, sys)
@@ -1038,6 +1044,20 @@ function equations(sys::AbstractSystem)
10381044
end
10391045
end
10401046

1047+
function initialization_equations(sys::AbstractSystem)
1048+
eqs = get_initialization_eqs(sys)
1049+
systems = get_systems(sys)
1050+
if isempty(systems)
1051+
return eqs
1052+
else
1053+
eqs = Equation[eqs;
1054+
reduce(vcat,
1055+
namespace_equations.(get_systems(sys));
1056+
init = Equation[])]
1057+
return eqs
1058+
end
1059+
end
1060+
10411061
function preface(sys::AbstractSystem)
10421062
has_preface(sys) || return nothing
10431063
pre = get_preface(sys)

src/systems/diffeqs/abstractodesystem.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -907,10 +907,10 @@ function process_DEProblem(constructor, sys::AbstractODESystem, u0map, parammap;
907907
# TODO: make it work with clocks
908908
# ModelingToolkit.get_tearing_state(sys) !== nothing => Requires structural_simplify first
909909
if sys isa ODESystem && build_initializeprob &&
910-
(implicit_dae || !isempty(missingvars)) &&
910+
((implicit_dae || !isempty(missingvars)) &&
911911
all(isequal(Continuous()), ci.var_domain) &&
912-
ModelingToolkit.get_tearing_state(sys) !== nothing &&
913-
t !== nothing
912+
ModelingToolkit.get_tearing_state(sys) !== nothing) ||
913+
!isempty(initialization_equations(sys)) && t !== nothing
914914
if eltype(u0map) <: Number
915915
u0map = unknowns(sys) .=> u0map
916916
end

0 commit comments

Comments
 (0)