### 1. Preloaded examples in spin2

Chebfun's `spin2`

and `spinop2`

codes, like `spin`

and `spinop`

in 1D, include a number of preloaded examples, which you can find out about by typing `help spin2`

or `help spinop2`

. One of the options is `spin2('gl')`

for the 2D Complex Ginzburg-Landau equation. What is this equation?

To find out, you can type

S = spinop2('gl')

S = spinop2 with properties: domain: [0 100 0 100] init: [InfxInf chebfun2] lin: @(u)lap(u) nonlin: @(u)u-(1+1.5i)*u.*(abs(u).^2) tspan: [0 100] numVars: 1

From here we see that the version of the equation in Chebfun is $$ u_t = \Delta u + u - (1+1.5i)u |u|^2 . $$ Thus we have a scalar PDE involving a complex variable. This equation has been used by a number of authors in the study of chaotic processes arising in fluid mechanics and other areas [1,2].

Using the above as a model, let us set up our own complex Ginzburg-Landau calculation as follows.

dom = 50*[-1 1 -1 1]; tspan = [0 16]; S = spinop2(dom,tspan); S.lin = @(u) lap(u); S.nonlin = @(u) u - (1+1.5i)*u.*(abs(u).^2);

### 2. Non-chaotic solutions

For our first initial condition, suppose we take the complex function $$ u_0(x,y) = (ix+y) \exp(-0.03(x^2+y^2)). $$ We let 16 time units time elapse and find a pretty spiral:

x = chebfun2(@(x,y) x,dom); y = chebfun2(@(x,y) y,dom); u1 = (1i*x+y).*exp(-.03*(x.^2+y.^2)); S.init = u1; npts = 80; dt = 4/npts; tic u = spin2(S,npts,dt,'plot','off'); plot(real(u)), view(0,90), axis equal, axis off

Here is the analogous experiment with the real initial condition $$ u_0(x,y) = (x+y) \exp(-0.03(x^2+y^2)). $$

u2 = (x+y).*exp(-.03*(x.^2+y.^2)); S.init = u2; u = spin2(S,npts,dt,'plot','off'); plot(real(u)), view(0,90), axis equal, axis off

Time for the first pair of computations:

time_in_seconds = toc

time_in_seconds = 3.101127954000000

### 3. Beginnings of chaos

Spin computations always live on periodic domains. We now extend these two computations to $t=48$, time enough for the function values to pass across the boundary and come in the other side. Here is the first computation.

tspan = [0 48]; S = spinop2(dom,tspan); S.lin = @(u) lap(u); S.nonlin = @(u) u - (1+1.5i)*u.*(abs(u).^2); S.init = u1; tic u = spin2(S,npts,dt,'plot','off'); plot(real(u)), view(0,90), axis equal, axis off

The picture reveals the remnants of the spiral in the middle but some more complicated behavior in the corners. Experiments on a finer mesh show that this picture is correct. The structures have somewhat of a random appearance, but they are not random.

Now we run the second function to $t=48$. This image is also correct. Note the preservation of the diagonal line of symmetry.

S.init = u2; u = spin2(S,npts,dt,'plot','off'); plot(real(u)), view(0,90), axis equal, axis off

Time for this second round of computations:

time_in_seconds = toc

time_in_seconds = 6.744747920000000

### 4. Chaos

Let's go now to $t=96$. Experiments with different grids confirm that this first image is correct.

tic, tspan = [0 96]; S = spinop2(dom,tspan); S.lin = @(u) lap(u); S.nonlin = @(u) u - (1+1.5i)*u.*(abs(u).^2); S.init = u1; tic, u = spin2(S,npts,dt,'plot','off'); plot(real(u)), view(0,90), axis equal, axis off

With the second function, we refine the grid enough to get a plausible picture, but it is not in fact converged. So this image is perhaps physically correct, but not mathematically correct. Note that the symmetry line has been lost.

npts = 128; dt = 4/npts; tic S.init = u2; u = spin2(S,npts,dt,'plot','off'); plot(real(u)), view(0,90), axis equal, axis off

Time for the third round of computations:

time_in_seconds = toc

time_in_seconds = 47.730490695999997

### 5. A bigger canvas

Let's double the size of the domain and the number of grid points in each direction. Here's the solution at $t=30$.

dom = 100*[-1 1 -1 1]; tspan = [0 30 60]; S = spinop2(dom,tspan); S.lin = @(u) lap(u); S.nonlin = @(u) u - (1+1.5i)*u.*(abs(u).^2); x = chebfun2(@(x,y) x,dom); y = chebfun2(@(x,y) y,dom); u1 = (1i*(x-8)+(y-2)).*exp(-.03*((x-8).^2+(y-2).^2)) + ... ((x+8)-(y+2)).*exp(-.03*((x+8).^2+(y+2).^2)); S.init = u1; npts = 128; dt = 8/npts; tic u = spin2(S,npts,dt,'plot','off'); plot(real(u{2})), view(0,90), axis equal, axis off

And at $t=60$, of questionable accuracy:

plot(real(u{3})), view(0,90), axis equal, axis off

To close a psychedelic note here is a phase portrait, obtained by plotting $u$ rather than its real part.

plot(u{3})

Time for the big canvas computation:

time_in_seconds = toc

time_in_seconds = 19.036402233000000

### 6. References

[1] H. Montanelli and N. Bootland, *Solving periodic semilinear stiff PDEs in 1D, 2D and 3D with exponential integrators*, submitted, 2016.

[2] L. N. Trefethen and K. Embree, editors, *The (Unfinished) PDE Coffee Table Book*, `https://people.maths.ox.ac.uk/trefethen/pdectb.html`

.