@@ -97,23 +97,20 @@ prob_ode_brusselator_2d = ODEProblem(brusselator_2d_loop,
97
97
length (xyd_brusselator)))
98
98
99
99
const N_brusselator_1d = 40
100
- const D_brusselator_u = CenteredDifference {Float64} (2 , 2 , 1 / (N_brusselator_1d - 1 ),
101
- N_brusselator_1d)
102
- const D_brusselator_v = CenteredDifference {Float64} (2 , 2 , 1 / (N_brusselator_1d - 1 ),
103
- N_brusselator_1d)
104
- function brusselator_1d (du, u_, p, t)
105
- A, B, α, buffer = p
106
- u = @view (u_[:, 1 ])
107
- v = @view (u_[:, 2 ])
108
- mul! (buffer, D_brusselator_u, u)
109
- Du = buffer
110
- @. du[:, 1 ] = A + u^ 2 * v - (B + 1 ) * u + α * Du
111
-
112
- mul! (buffer, D_brusselator_v, v)
113
- Dv = buffer
114
- @. du[:, 2 ] = B * u - u^ 2 * v + α * Dv
115
- nothing
100
+
101
+ function brusselator_1d_loop (du, u, p, t)
102
+ A, B, alpha, dx = p
103
+ alpha = alpha / dx^ 2
104
+ @inbounds for i in 2 : (N - 1 )
105
+ x = xyd_brusselator[i]
106
+ ip1, im1 = i + 1 , i - 1
107
+ du[i, 1 ] = alpha * (u[im1, 1 ] + u[ip1, 1 ] - 2 u[i, 1 ]) +
108
+ A + u[i, 1 ]^ 2 * u[i, 2 ] - (B + 1 ) * u[i, 1 ]
109
+ du[i, 2 ] = alpha * (u[im1, 2 ] + u[ip1, 2 ] - 2 u[i, 2 ]) +
110
+ B * u[i, 1 ] - u[i, 1 ]^ 2 * u[i, 2 ]
111
+ end
116
112
end
113
+
117
114
function init_brusselator_1d (N)
118
115
u = zeros (N, 2 )
119
116
x = range (0 , stop = 1 , length = N)
@@ -154,7 +151,7 @@ v(0,t) = v(1,t) = 3
154
151
155
152
From Hairer Norsett Wanner Solving Ordinary Differential Equations II - Stiff and Differential-Algebraic Problems Page 6
156
153
"""
157
- prob_ode_brusselator_1d = ODEProblem (brusselator_1d ,
154
+ prob_ode_brusselator_1d = ODEProblem (brusselator_1d_loop ,
158
155
init_brusselator_1d (N_brusselator_1d),
159
156
(0.0 , 10.0 ),
160
- (1.0 , 3.0 , 1 / 50 , zeros (N_brusselator_1d)))
157
+ (1.0 , 3.0 , 1 / 41 , zeros (N_brusselator_1d)))
0 commit comments