Skip to content

Commit 256a73c

Browse files
WIP: Add initialization_equations flattening constructor
1 parent 7fb1d99 commit 256a73c

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
@@ -838,6 +838,12 @@ function namespace_equation(eq::Equation,
838838
_lhs ~ _rhs
839839
end
840840

841+
function namespace_initialization_equations(sys::AbstractSystem, ivs = independent_variables(sys))
842+
eqs = initialization_equations(sys)
843+
isempty(eqs) && return Equation[]
844+
map(eq -> namespace_equation(eq, sys; ivs), eqs)
845+
end
846+
841847
function namespace_assignment(eq::Assignment, sys)
842848
_lhs = namespace_expr(eq.lhs, sys)
843849
_rhs = namespace_expr(eq.rhs, sys)
@@ -990,6 +996,20 @@ function equations(sys::AbstractSystem)
990996
end
991997
end
992998

999+
function initialization_equations(sys::AbstractSystem)
1000+
eqs = get_initialization_eqs(sys)
1001+
systems = get_systems(sys)
1002+
if isempty(systems)
1003+
return eqs
1004+
else
1005+
eqs = Equation[eqs;
1006+
reduce(vcat,
1007+
namespace_equations.(get_systems(sys));
1008+
init = Equation[])]
1009+
return eqs
1010+
end
1011+
end
1012+
9931013
function preface(sys::AbstractSystem)
9941014
has_preface(sys) || return nothing
9951015
pre = get_preface(sys)

src/systems/diffeqs/abstractodesystem.jl

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

0 commit comments

Comments
 (0)