Skip to content

Commit cb36b53

Browse files
WIP: Add initialization_equations flattening constructor
1 parent 9b1d432 commit cb36b53

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

src/systems/abstractsystem.jl

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -843,6 +843,12 @@ function namespace_equation(eq::Equation,
843843
_lhs ~ _rhs
844844
end
845845

846+
function namespace_initialization_equations(sys::AbstractSystem, ivs = independent_variables(sys))
847+
eqs = initialization_equations(sys)
848+
isempty(eqs) && return Equation[]
849+
map(eq -> namespace_equation(eq, sys; ivs), eqs)
850+
end
851+
846852
function namespace_assignment(eq::Assignment, sys)
847853
_lhs = namespace_expr(eq.lhs, sys)
848854
_rhs = namespace_expr(eq.rhs, sys)
@@ -995,6 +1001,20 @@ function equations(sys::AbstractSystem)
9951001
end
9961002
end
9971003

1004+
function initialization_equations(sys::AbstractSystem)
1005+
eqs = get_initialization_eqs(sys)
1006+
systems = get_systems(sys)
1007+
if isempty(systems)
1008+
return eqs
1009+
else
1010+
eqs = Equation[eqs;
1011+
reduce(vcat,
1012+
namespace_equations.(get_systems(sys));
1013+
init = Equation[])]
1014+
return eqs
1015+
end
1016+
end
1017+
9981018
function preface(sys::AbstractSystem)
9991019
has_preface(sys) || return nothing
10001020
pre = get_preface(sys)

src/systems/diffeqs/abstractodesystem.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -904,9 +904,10 @@ function process_DEProblem(constructor, sys::AbstractODESystem, u0map, parammap;
904904
# TODO: make it work with clocks
905905
# ModelingToolkit.get_tearing_state(sys) !== nothing => Requires structural_simplify first
906906
if sys isa ODESystem && build_initializeprob &&
907-
(implicit_dae || !isempty(missingvars)) &&
907+
((implicit_dae || !isempty(missingvars)) &&
908908
all(isequal(Continuous()), ci.var_domain) &&
909-
ModelingToolkit.get_tearing_state(sys) !== nothing
909+
ModelingToolkit.get_tearing_state(sys) !== nothing) ||
910+
!isempty(initialization_equations(sys))
910911
if eltype(u0map) <: Number
911912
u0map = unknowns(sys) .=> u0map
912913
end

0 commit comments

Comments
 (0)