@@ -11,15 +11,15 @@ function generate_ODENLStepData(sys::System, u0, p, mm = calculate_massmatrix(sy
1111 op[v] = getsym (sys, v)(state)
1212 end
1313 nlprob = NonlinearProblem (nlsys, op; build_initializeprob = false )
14- set_gamma_c = setsym (nlsys, (ODE_GAMMA, ODE_C))
14+ set_gamma_c = setsym (nlsys, (ODE_GAMMA... , ODE_C))
1515 set_outer_tmp = setsym (nlsys, outer_tmp)
1616 set_inner_tmp = setsym (nlsys, inner_tmp)
1717 nlprobmap = getsym (nlsys, unknowns (sys))
1818
19- return SciMLBase. ODENLStepData (nlprob, nothing , set_gamma_c, set_outer_tmp, set_inner_tmp, nlprobmap)
19+ return SciMLBase. ODENLStepData (nlprob, set_gamma_c, set_outer_tmp, set_inner_tmp, nlprobmap)
2020end
2121
22- const ODE_GAMMA = only ( @parameters γₘₜₖ)
22+ const ODE_GAMMA = @parameters γ₁ₘₜₖ, γ₂ₘₜₖ
2323const ODE_C = only (@parameters cₘₜₖ)
2424
2525function get_outer_tmp (n:: Int )
@@ -38,19 +38,19 @@ function inner_nlsystem(sys::System, mm)
3838 @assert length (eqs) == N
3939 @assert mm == I || size (mm) == (N, N)
4040 rhss = [eq. rhs for eq in eqs]
41- gamma = ODE_GAMMA
41+ gamma1, gamma2 = ODE_GAMMA
4242 c = ODE_C
4343 outer_tmp = get_outer_tmp (N)
4444 inner_tmp = get_inner_tmp (N)
4545
46- subrules = Dict ([v => v + inner_tmp[i] for (i, v) in enumerate (dvs)])
46+ subrules = Dict ([v => gamma2 * v + inner_tmp[i] for (i, v) in enumerate (dvs)])
4747 subrules[t] = t + c
4848 new_rhss = map (Base. Fix2 (fast_substitute, subrules), rhss)
49- new_rhss = mm * dvs - gamma .* new_rhss .+ collect (outer_tmp)
49+ new_rhss = mm * dvs - gamma1 .* new_rhss .+ collect (outer_tmp)
5050 new_eqs = [0 ~ rhs for rhs in new_rhss]
5151
5252 new_dvs = unknowns (sys)
53- new_ps = [parameters (sys); [gamma , c, inner_tmp, outer_tmp]]
53+ new_ps = [parameters (sys); [gamma1, gamma2 , c, inner_tmp, outer_tmp]]
5454 nlsys = mtkcompile (System (new_eqs, new_dvs, new_ps; name = :nlsys ); split = is_split (sys))
5555 return nlsys, outer_tmp, inner_tmp
5656end
0 commit comments