Skip to content

Commit 148d3dd

Browse files
refactor: remove denominators in generate_function and calculate_jacobian
1 parent 77bea8a commit 148d3dd

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

src/systems/diffeqs/abstractodesystem.jl

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,14 @@ function calculate_jacobian(sys::AbstractODESystem;
8282
jac[i, j] = 0
8383
end
8484
end
85+
86+
(Is, Js, Vs) = findnz(jac)
87+
for (i, j) in zip(Is, Js)
88+
jac[i, j] = remove_denominators(jac[i, j])
89+
end
8590
else
8691
jac = jacobian(rhs, dvs, simplify = simplify)
92+
jac = remove_denominators.(jac)
8793
end
8894

8995
if isequal(dvs, unknowns(sys))
@@ -198,12 +204,17 @@ function generate_function(sys::AbstractODESystem, dvs = unknowns(sys),
198204
nothing,
199205
isdde = false,
200206
kwargs...)
201-
eqs = [eq for eq in equations(sys)]
202-
if !implicit_dae
207+
eqs = full_equations(sys)
208+
if implicit_dae
209+
rhss = [_iszero(eq.lhs) ? eq.rhs : eq.rhs - eq.lhs for eq in eqs]
210+
rhss = remove_denominators.(rhss)
211+
else
203212
check_operator_variables(eqs, Differential)
204213
check_lhs(eqs, Differential, Set(dvs))
214+
alge_idxs = is_alg_equation.(eqs)
215+
rhss = [eq.rhs for eq in eqs]
216+
rhss[alge_idxs] .= remove_denominators.(rhss[alge_idxs])
205217
end
206-
207218
rhss = implicit_dae ? [_iszero(eq.lhs) ? eq.rhs : eq.rhs - eq.lhs for eq in eqs] :
208219
[eq.rhs for eq in eqs]
209220

0 commit comments

Comments
 (0)