@@ -376,7 +376,7 @@ const MM_linear =full(Diagonal(0.5ones(4)))
376
376
(:: typeof (mm_linear))(:: Type{Val{:analytic}} ,u0,p,t) = expm (inv (MM_linear)* mm_A* t)* u0
377
377
prob_ode_mm_linear = ODEProblem (mm_linear,rand (4 ),(0.0 ,1.0 ),mass_matrix= MM_linear)
378
378
379
- function brusselator_loop (du, u, p, t)
379
+ function brusselator_2d_loop (du, u, p, t)
380
380
@inbounds begin
381
381
A, B, α, dx, N = p
382
382
α = α/ dx^ 2
@@ -458,7 +458,7 @@ function brusselator_loop(du, u, p, t)
458
458
A* u[i,j,1 ] - u[i,j,1 ]^ 2 * u[i,j,2 ]
459
459
end
460
460
end
461
- function init_brusselator (xyd)
461
+ function init_brusselator_2d (xyd)
462
462
M = length (xyd)
463
463
u = zeros (M, M, 2 )
464
464
for I in CartesianRange ((M, M))
@@ -467,7 +467,45 @@ function init_brusselator(xyd)
467
467
end
468
468
u
469
469
end
470
- prob_ode_brusselator = ODEProblem (brusselator_loop,
471
- init_brusselator (linspace (0 ,1 ,128 )),
472
- (0. ,1 ),
473
- (3.4 , 1. , 0.002 , 1 / 127 , 128 ))
470
+ const N_brusselator_2d = 128
471
+ prob_ode_brusselator_2d = ODEProblem (brusselator_2d_loop,
472
+ init_brusselator_2d (linspace (0 ,1 ,N_brusselator_2d)),
473
+ (0. ,1 ),
474
+ (3.4 , 1. , 0.002 , 1 / (N_brusselator_2d- 1 ),
475
+ N_brusselator_2d))
476
+
477
+ const N_brusselator_1d = 40
478
+ const D_brusselator_u = DerivativeOperator {Float64} (2 ,2 ,1 / (N_brusselator_1d- 1 ),
479
+ N_brusselator_1d,
480
+ :Dirichlet ,:Dirichlet ;
481
+ BC= (1. ,1. ))
482
+ const D_brusselator_v = DerivativeOperator {Float64} (2 ,2 ,1 / (N_brusselator_1d- 1 ),
483
+ N_brusselator_1d,
484
+ :Dirichlet ,:Dirichlet ;
485
+ BC= (3. ,3. ))
486
+ function brusselator_1d (du, u_, p, t)
487
+ A, B, α, buffer = p
488
+ u = @view (u_[:, 1 ])
489
+ v = @view (u_[:, 2 ])
490
+ A_mul_B! (buffer, D_brusselator_u, u)
491
+ Du = buffer
492
+ @. du[:, 1 ] = A + u^ 2 * v - (B+ 1 )* u + α* Du
493
+
494
+ A_mul_B! (buffer, D_brusselator_v, v)
495
+ Dv = buffer
496
+ @. du[:, 2 ] = B* u - u^ 2 * v + α* Dv
497
+ nothing
498
+ end
499
+ function init_brusselator_1d (N)
500
+ u = zeros (N, 2 )
501
+ x = linspace (0 , 1 , N)
502
+ for i in 1 : N
503
+ u[i, 1 ] = 1 + sin (2pi * x[i])
504
+ u[i, 2 ] = 3.
505
+ end
506
+ u
507
+ end
508
+ prob_ode_brusselator_1d = ODEProblem (brusselator_1d,
509
+ init_brusselator_1d (N_brusselator_1d),
510
+ (0. ,10. ),
511
+ (1. , 3. , 1 / 50 , zeros (N_brusselator_1d)))
0 commit comments