|
40 | 40 | # Generic Hermite: k[1]=f₀, k[2]=f₁ (methods with no H matrix) |
41 | 41 | @.. Θ1 * y₀ + Θ * y₁ + |
42 | 42 | Θ * (Θ - 1) * ((1 - 2Θ) * (y₁ - y₀) + (Θ - 1) * dt * k[1] + Θ * dt * k[2]) |
| 43 | + elseif hasproperty(cache, :interp_order) && cache.interp_order == 1 |
| 44 | + # Shampine Rosenbrock23/32: p(Θ) = (1-Θ)y₀ + Θy₁ + Θ(1-Θ)K[1] |
| 45 | + @.. Θ1 * y₀ + Θ * (y₁ + Θ1 * k[1]) |
43 | 46 | elseif !hasproperty(cache, :interp_order) || cache.interp_order == 2 |
44 | 47 | @.. Θ1 * y₀ + Θ * (y₁ + Θ1 * (k[1] + Θ * k[2])) |
45 | 48 | elseif cache.interp_order == 4 |
|
62 | 65 | if hasproperty(cache, :interp_order) && cache.interp_order == -1 |
63 | 66 | @views @.. Θ1 * y₀[idxs] + Θ * y₁[idxs] + |
64 | 67 | Θ * (Θ - 1) * ((1 - 2Θ) * (y₁[idxs] - y₀[idxs]) + (Θ - 1) * dt * k[1][idxs] + Θ * dt * k[2][idxs]) |
| 68 | + elseif hasproperty(cache, :interp_order) && cache.interp_order == 1 |
| 69 | + @views @.. Θ1 * y₀[idxs] + Θ * (y₁[idxs] + Θ1 * k[1][idxs]) |
65 | 70 | elseif !hasproperty(cache, :interp_order) || cache.interp_order == 2 |
66 | 71 | @views @.. Θ1 * y₀[idxs] + Θ * (y₁[idxs] + Θ1 * (k[1][idxs] + Θ * k[2][idxs])) |
67 | 72 | elseif cache.interp_order == 4 |
|
90 | 95 | if hasproperty(cache, :interp_order) && cache.interp_order == -1 |
91 | 96 | @.. out = Θ1 * y₀ + Θ * y₁ + |
92 | 97 | Θ * (Θ - 1) * ((1 - 2Θ) * (y₁ - y₀) + (Θ - 1) * dt * k[1] + Θ * dt * k[2]) |
| 98 | + elseif hasproperty(cache, :interp_order) && cache.interp_order == 1 |
| 99 | + @.. out = Θ1 * y₀ + Θ * (y₁ + Θ1 * k[1]) |
93 | 100 | elseif !hasproperty(cache, :interp_order) || cache.interp_order == 2 |
94 | 101 | @.. out = Θ1 * y₀ + Θ * (y₁ + Θ1 * (k[1] + Θ * k[2])) |
95 | 102 | elseif cache.interp_order == 4 |
|
113 | 120 | if hasproperty(cache, :interp_order) && cache.interp_order == -1 |
114 | 121 | @views @.. out = Θ1 * y₀[idxs] + Θ * y₁[idxs] + |
115 | 122 | Θ * (Θ - 1) * ((1 - 2Θ) * (y₁[idxs] - y₀[idxs]) + (Θ - 1) * dt * k[1][idxs] + Θ * dt * k[2][idxs]) |
| 123 | + elseif hasproperty(cache, :interp_order) && cache.interp_order == 1 |
| 124 | + @views @.. out = Θ1 * y₀[idxs] + Θ * (y₁[idxs] + Θ1 * k[1][idxs]) |
116 | 125 | elseif !hasproperty(cache, :interp_order) || cache.interp_order == 2 |
117 | 126 | @views @.. out = Θ1 * y₀[idxs] + Θ * (y₁[idxs] + Θ1 * (k[1][idxs] + Θ * k[2][idxs])) |
118 | 127 | elseif cache.interp_order == 4 |
|
151 | 160 | @.. 6 * Θ * (1 - Θ) * (y₁ - y₀) / dt + |
152 | 161 | k[1] * (3 * Θ^2 - 4 * Θ + 1) + |
153 | 162 | k[2] * (3 * Θ^2 - 2 * Θ) |
| 163 | + elseif hasproperty(cache, :interp_order) && cache.interp_order == 1 |
| 164 | + # Shampine Rosenbrock23/32: dp/dt = (y₁-y₀ + (1-2Θ)K[1]) / dt |
| 165 | + @.. ((1 - 2 * Θ) * k[1] - y₀ + y₁) / dt |
154 | 166 | elseif !hasproperty(cache, :interp_order) || cache.interp_order == 2 |
155 | 167 | @.. (k[1] + Θ * (-2 * k[1] + 2 * k[2] - 3 * k[2] * Θ) - y₀ + y₁) / dt |
156 | 168 | elseif cache.interp_order == 4 |
|
188 | 200 | @views @.. 6 * Θ * (1 - Θ) * (y₁[idxs] - y₀[idxs]) / dt + |
189 | 201 | k[1][idxs] * (3 * Θ^2 - 4 * Θ + 1) + |
190 | 202 | k[2][idxs] * (3 * Θ^2 - 2 * Θ) |
| 203 | + elseif hasproperty(cache, :interp_order) && cache.interp_order == 1 |
| 204 | + @views @.. ((1 - 2 * Θ) * k[1][idxs] - y₀[idxs] + y₁[idxs]) / dt |
191 | 205 | elseif !hasproperty(cache, :interp_order) || cache.interp_order == 2 |
192 | 206 | @views @.. ( |
193 | 207 | k[1][idxs] + |
|
231 | 245 | @.. out = 6 * Θ * (1 - Θ) * (y₁ - y₀) / dt + |
232 | 246 | k[1] * (3 * Θ^2 - 4 * Θ + 1) + |
233 | 247 | k[2] * (3 * Θ^2 - 2 * Θ) |
| 248 | + elseif hasproperty(cache, :interp_order) && cache.interp_order == 1 |
| 249 | + @.. out = ((1 - 2 * Θ) * k[1] - y₀ + y₁) / dt |
234 | 250 | elseif !hasproperty(cache, :interp_order) || cache.interp_order == 2 |
235 | 251 | @.. out = (k[1] + Θ * (-2 * k[1] + 2 * k[2] - 3 * k[2] * Θ) - y₀ + y₁) / dt |
236 | 252 | elseif cache.interp_order == 4 |
|
270 | 286 | @views @.. out = 6 * Θ * (1 - Θ) * (y₁[idxs] - y₀[idxs]) / dt + |
271 | 287 | k[1][idxs] * (3 * Θ^2 - 4 * Θ + 1) + |
272 | 288 | k[2][idxs] * (3 * Θ^2 - 2 * Θ) |
| 289 | + elseif hasproperty(cache, :interp_order) && cache.interp_order == 1 |
| 290 | + @views @.. out = ((1 - 2 * Θ) * k[1][idxs] - y₀[idxs] + y₁[idxs]) / dt |
273 | 291 | elseif !hasproperty(cache, :interp_order) || cache.interp_order == 2 |
274 | 292 | @views @.. out = ( |
275 | 293 | k[1][idxs] + |
|
0 commit comments