@@ -248,11 +248,10 @@ called dummy derivatives.
248
248
State selection is done. All non-differentiated variables are algebraic
249
249
variables, and all variables that appear differentiated are differential variables.
250
250
"""
251
- function substitute_derivatives_algevars! (ts:: TearingState , neweqs, var_eq_matching, dummy_sub)
251
+ function substitute_derivatives_algevars! (ts:: TearingState , neweqs, var_eq_matching, dummy_sub; iv = nothing , D = nothing )
252
252
@unpack fullvars, sys, structure = ts
253
253
@unpack solvable_graph, var_to_diff, eq_to_diff, graph = structure
254
254
diff_to_var = invview (var_to_diff)
255
- iv = ModelingToolkit. has_iv (sys) ? ModelingToolkit. get_iv (sys) : nothing
256
255
257
256
for var in 1 : length (fullvars)
258
257
dv = var_to_diff[var]
@@ -361,12 +360,11 @@ Effects on the system structure:
361
360
- solvable_graph:
362
361
- var_eq_matching: match D(x) to the added identity equation
363
362
"""
364
- function generate_derivative_variables! (ts:: TearingState , neweqs, var_eq_matching; mm = nothing )
363
+ function generate_derivative_variables! (ts:: TearingState , neweqs, var_eq_matching; mm = nothing , iv = nothing , D = nothing )
365
364
@unpack fullvars, sys, structure = ts
366
365
@unpack solvable_graph, var_to_diff, eq_to_diff, graph = structure
367
366
eq_var_matching = invview (var_eq_matching)
368
367
diff_to_var = invview (var_to_diff)
369
- iv = ModelingToolkit. has_iv (sys) ? ModelingToolkit. get_iv (sys) : nothing
370
368
is_discrete = is_only_discrete (structure)
371
369
lower_varname = is_discrete ? lower_shift_varname : lower_varname_with_unit
372
370
linear_eqs = mm === nothing ? Dict {Int, Int} () :
@@ -461,27 +459,18 @@ end
461
459
Solve the solvable equations of the system and generate differential (or discrete)
462
460
equations in terms of the selected states.
463
461
"""
464
- function generate_system_equations! (state:: TearingState , neweqs, var_eq_matching; simplify = false )
462
+ function generate_system_equations! (state:: TearingState , neweqs, var_eq_matching; simplify = false , iv = nothing , D = nothing )
465
463
@unpack fullvars, sys, structure = state
466
464
@unpack solvable_graph, var_to_diff, eq_to_diff, graph = structure
467
465
eq_var_matching = invview (var_eq_matching)
468
466
diff_to_var = invview (var_to_diff)
469
467
total_sub = Dict ()
470
-
471
- if ModelingToolkit. has_iv (sys)
472
- iv = get_iv (sys)
473
- if is_only_discrete (structure)
474
- D = Shift (iv, 1 )
475
- for v in fullvars
476
- op = operation (v)
477
- op isa Shift && (op. steps < 0 ) && (total_sub[v] = lower_shift_varname (v, iv))
478
- end
479
- else
480
- D = Differential (iv)
468
+ if is_only_discrete (structure)
469
+ for v in fullvars
470
+ op = operation (v)
471
+ op isa Shift && (op. steps < 0 ) && (total_sub[v] = lower_shift_varname (v, iv))
481
472
end
482
- else
483
- iv = D = nothing
484
- end
473
+ end
485
474
486
475
# if var is like D(x) or Shift(t, 1)(x)
487
476
isdervar = let diff_to_var = diff_to_var
@@ -727,13 +716,23 @@ function tearing_reassemble(state::TearingState, var_eq_matching,
727
716
neweqs = collect (equations (state))
728
717
dummy_sub = Dict ()
729
718
719
+ if ModelingToolkit. has_iv (state. sys)
720
+ iv = get_iv (state. sys)
721
+ if ! is_only_discrete (state. structure)
722
+ D = Differential (iv)
723
+ else
724
+ D = Shift (iv, 1 )
725
+ end
726
+ iv = D = nothing
727
+ end
728
+
730
729
# Structural simplification
731
- substitute_derivatives_algevars! (state, neweqs, var_eq_matching, dummy_sub)
730
+ substitute_derivatives_algevars! (state, neweqs, var_eq_matching, dummy_sub; iv, D )
732
731
733
- generate_derivative_variables! (state, neweqs, var_eq_matching; mm)
732
+ generate_derivative_variables! (state, neweqs, var_eq_matching; mm, iv, D )
734
733
735
734
neweqs, solved_eqs, eq_ordering, var_ordering, nelim_eq, nelim_var =
736
- generate_system_equations! (state, neweqs, var_eq_matching; simplify)
735
+ generate_system_equations! (state, neweqs, var_eq_matching; simplify, iv, D )
737
736
738
737
state = reorder_vars! (state, var_eq_matching, eq_ordering, var_ordering, nelim_eq, nelim_var)
739
738
0 commit comments