@@ -11,15 +11,15 @@ function generate_ODENLStepData(sys::System, u0, p, mm = calculate_massmatrix(sy
11
11
op[v] = getsym (sys, v)(state)
12
12
end
13
13
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))
15
15
set_outer_tmp = setsym (nlsys, outer_tmp)
16
16
set_inner_tmp = setsym (nlsys, inner_tmp)
17
17
nlprobmap = getsym (nlsys, unknowns (sys))
18
18
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)
20
20
end
21
21
22
- const ODE_GAMMA = only ( @parameters γₘₜₖ)
22
+ const ODE_GAMMA = @parameters γ₁ₘₜₖ, γ₂ₘₜₖ
23
23
const ODE_C = only (@parameters cₘₜₖ)
24
24
25
25
function get_outer_tmp (n:: Int )
@@ -38,19 +38,19 @@ function inner_nlsystem(sys::System, mm)
38
38
@assert length (eqs) == N
39
39
@assert mm == I || size (mm) == (N, N)
40
40
rhss = [eq. rhs for eq in eqs]
41
- gamma = ODE_GAMMA
41
+ gamma1, gamma2 = ODE_GAMMA
42
42
c = ODE_C
43
43
outer_tmp = get_outer_tmp (N)
44
44
inner_tmp = get_inner_tmp (N)
45
45
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)])
47
47
subrules[t] = t + c
48
48
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)
50
50
new_eqs = [0 ~ rhs for rhs in new_rhss]
51
51
52
52
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]]
54
54
nlsys = mtkcompile (System (new_eqs, new_dvs, new_ps; name = :nlsys ); split = is_split (sys))
55
55
return nlsys, outer_tmp, inner_tmp
56
56
end
0 commit comments