@@ -10,11 +10,12 @@ function step_u!(integrator, cache::IMEXARKCache, ::ARS343)
1010 (; U, T_lim, T_exp, T_imp, temp, γ, newtons_method_cache) = cache
1111 T_lim! = ! isnothing (f. T_lim!) ? f. T_lim! : (args... ) -> nothing
1212 T_exp! = ! isnothing (f. T_exp!) ? f. T_exp! : (args... ) -> nothing
13+ dtγ = dt * γ
1314
1415 if ! isnothing (newtons_method_cache)
1516 jacobian = newtons_method_cache. j
1617 if (! isnothing (jacobian)) && needs_update! (newtons_method. update_j, NewTimeStep (t))
17- T_imp!. Wfact (jacobian, u, p, dt * γ , t)
18+ T_imp!. Wfact (jacobian, u, p, dtγ , t)
1819 end
1920 end
2021
@@ -36,29 +37,24 @@ function step_u!(integrator, cache::IMEXARKCache, ::ARS343)
3637 let i = i
3738 t_imp = t + dt * c_imp[i]
3839 cache_imp! (U, p, t_imp)
39- implicit_equation_residual! = (residual, Ui ) -> begin
40- T_imp! (residual, Ui , p, t_imp)
41- @. residual = temp + dt * a_imp[i, i] * residual - Ui
40+ implicit_equation_residual! = (residual, U′ ) -> begin
41+ T_imp! (residual, U′ , p, t_imp)
42+ @. residual = temp + dtγ * residual - U′
4243 end
43- implicit_equation_jacobian! = (jacobian, Ui) -> begin
44- T_imp!. Wfact (jacobian, Ui, p, dt * a_imp[i, i], t_imp)
45- end
46- call_cache_imp! = Ui -> cache_imp! (Ui, p, t_imp)
4744 solve_newton! (
4845 newtons_method,
4946 newtons_method_cache,
5047 U,
5148 implicit_equation_residual!,
52- implicit_equation_jacobian!,
53- call_cache_imp!,
54- nothing ,
49+ (jacobian, U′) -> T_imp!. Wfact (jacobian, U′, p, dtγ, t_imp),
50+ U′ -> cache_imp! (U′, p, t_imp),
5551 )
56- @. T_imp[i] = (U - temp) / (dt * a_imp[i, i])
5752 dss! (U, p, t_imp)
5853 cache! (U, p, t_imp)
5954 end
6055 T_lim! (T_lim[i], U, p, t_exp)
6156 T_exp! (T_exp[i], U, p, t_exp)
57+ @. T_imp[i] = (U - temp) / dtγ
6258
6359 i = 3
6460 t_exp = t + dt * c_exp[i]
@@ -70,29 +66,24 @@ function step_u!(integrator, cache::IMEXARKCache, ::ARS343)
7066 let i = i
7167 t_imp = t + dt * c_imp[i]
7268 cache_imp! (U, p, t_imp)
73- implicit_equation_residual! = (residual, Ui) -> begin
74- T_imp! (residual, Ui, p, t_imp)
75- @. residual = temp + dt * a_imp[i, i] * residual - Ui
76- end
77- implicit_equation_jacobian! = (jacobian, Ui) -> begin
78- T_imp!. Wfact (jacobian, Ui, p, dt * a_imp[i, i], t_imp)
69+ implicit_equation_residual! = (residual, U′) -> begin
70+ T_imp! (residual, U′, p, t_imp)
71+ @. residual = temp + dtγ * residual - U′
7972 end
80- call_cache_imp! = Ui -> cache_imp! (Ui, p, t_imp)
8173 solve_newton! (
8274 newtons_method,
8375 newtons_method_cache,
8476 U,
8577 implicit_equation_residual!,
86- implicit_equation_jacobian!,
87- call_cache_imp!,
88- nothing ,
78+ (jacobian, U′) -> T_imp!. Wfact (jacobian, U′, p, dtγ, t_imp),
79+ U′ -> cache_imp! (U′, p, t_imp),
8980 )
90- @. T_imp[i] = (U - temp) / (dt * a_imp[i, i])
9181 dss! (U, p, t_imp)
9282 cache! (U, p, t_imp)
9383 end
9484 T_lim! (T_lim[i], U, p, t_exp)
9585 T_exp! (T_exp[i], U, p, t_exp)
86+ @. T_imp[i] = (U - temp) / dtγ
9687
9788 i = 4
9889 t_exp = t + dt
@@ -109,29 +100,24 @@ function step_u!(integrator, cache::IMEXARKCache, ::ARS343)
109100 let i = i
110101 t_imp = t + dt * c_imp[i]
111102 cache_imp! (U, p, t_imp)
112- implicit_equation_residual! = (residual, Ui) -> begin
113- T_imp! (residual, Ui, p, t_imp)
114- @. residual = temp + dt * a_imp[i, i] * residual - Ui
115- end
116- implicit_equation_jacobian! = (jacobian, Ui) -> begin
117- T_imp!. Wfact (jacobian, Ui, p, dt * a_imp[i, i], t_imp)
103+ implicit_equation_residual! = (residual, U′) -> begin
104+ T_imp! (residual, U′, p, t_imp)
105+ @. residual = temp + dtγ * residual - U′
118106 end
119- call_cache_imp! = Ui -> cache_imp! (Ui, p, t_imp)
120107 solve_newton! (
121108 newtons_method,
122109 newtons_method_cache,
123110 U,
124111 implicit_equation_residual!,
125- implicit_equation_jacobian!,
126- call_cache_imp!,
127- nothing ,
112+ (jacobian, U′) -> T_imp!. Wfact (jacobian, U′, p, dtγ, t_imp),
113+ U′ -> cache_imp! (U′, p, t_imp),
128114 )
129- @. T_imp[i] = (U - temp) / (dt * a_imp[i, i])
130115 dss! (U, p, t_imp)
131116 cache! (U, p, t_imp)
132117 end
133118 T_lim! (T_lim[i], U, p, t_exp)
134119 T_exp! (T_exp[i], U, p, t_exp)
120+ @. T_imp[i] = (U - temp) / dtγ
135121
136122 t_final = t + dt
137123 @. temp = u + dt * b_exp[2 ] * T_lim[2 ] + dt * b_exp[3 ] * T_lim[3 ] + dt * b_exp[4 ] * T_lim[4 ]
0 commit comments