Skip to content

Commit da645c6

Browse files
WIP: Add initialization_equations flattening constructor
1 parent e16c180 commit da645c6

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
@@ -885,6 +885,12 @@ function namespace_equation(eq::Equation,
885885
_lhs ~ _rhs
886886
end
887887

888+
function namespace_initialization_equations(sys::AbstractSystem, ivs = independent_variables(sys))
889+
eqs = initialization_equations(sys)
890+
isempty(eqs) && return Equation[]
891+
map(eq -> namespace_equation(eq, sys; ivs), eqs)
892+
end
893+
888894
function namespace_assignment(eq::Assignment, sys)
889895
_lhs = namespace_expr(eq.lhs, sys)
890896
_rhs = namespace_expr(eq.rhs, sys)
@@ -1044,6 +1050,20 @@ function equations(sys::AbstractSystem)
10441050
end
10451051
end
10461052

1053+
function initialization_equations(sys::AbstractSystem)
1054+
eqs = get_initialization_eqs(sys)
1055+
systems = get_systems(sys)
1056+
if isempty(systems)
1057+
return eqs
1058+
else
1059+
eqs = Equation[eqs;
1060+
reduce(vcat,
1061+
namespace_equations.(get_systems(sys));
1062+
init = Equation[])]
1063+
return eqs
1064+
end
1065+
end
1066+
10471067
function preface(sys::AbstractSystem)
10481068
has_preface(sys) || return nothing
10491069
pre = get_preface(sys)

src/systems/diffeqs/abstractodesystem.jl

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

0 commit comments

Comments
 (0)