Skip to content

Commit 96bab6f

Browse files
WIP: Add initialization_equations flattening constructor
1 parent 4e91484 commit 96bab6f

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
@@ -898,6 +898,12 @@ function namespace_equation(eq::Equation,
898898
_lhs ~ _rhs
899899
end
900900

901+
function namespace_initialization_equations(sys::AbstractSystem, ivs = independent_variables(sys))
902+
eqs = initialization_equations(sys)
903+
isempty(eqs) && return Equation[]
904+
map(eq -> namespace_equation(eq, sys; ivs), eqs)
905+
end
906+
901907
function namespace_assignment(eq::Assignment, sys)
902908
_lhs = namespace_expr(eq.lhs, sys)
903909
_rhs = namespace_expr(eq.rhs, sys)
@@ -1080,6 +1086,20 @@ function equations(sys::AbstractSystem)
10801086
end
10811087
end
10821088

1089+
function initialization_equations(sys::AbstractSystem)
1090+
eqs = get_initialization_eqs(sys)
1091+
systems = get_systems(sys)
1092+
if isempty(systems)
1093+
return eqs
1094+
else
1095+
eqs = Equation[eqs;
1096+
reduce(vcat,
1097+
namespace_equations.(get_systems(sys));
1098+
init = Equation[])]
1099+
return eqs
1100+
end
1101+
end
1102+
10831103
function preface(sys::AbstractSystem)
10841104
has_preface(sys) || return nothing
10851105
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)