My attempt.

I need to solve numerically the Complex Ginzburg-Laudau Equation (CGLE): $$ \frac{\partial A}{\partial t}=\epsilon A-(1+i\beta)|A|^2A+(1+i\alpha)\nabla^2A $$ I'm using a uniform initial condition $A(x,y,t=0)=1$ and periodic boundary conditions: $A(-x_m/2,y,t)=A(x_m/2,y,t)$, $A(x,-y_m/2,t)=A(x,y_m/2,t)$, where I'm defining the domain $\mathcal{D}=\{(x,y):-x_m/2\leq x\leq x_m/2,-y_m/2\leq y\leq y_m/2\}$ with $t\in [0,t_m]$.

My code is the following: (parameters obtained here)

ϵ = 1;
α = 0;
β = 1.5;
xM = 50;
yM = 50;
tM = 10000;

(*Numerical solution*)
sol = NDSolve[{D[A[x, y, t], t] == ϵ A[x, y, t] - (1 + I β)
Norm[A[x, y, t]]^2 A[x, y, t] + (1 + I α) Laplacian[A[x, y, t], {x, y}],
A[x, y, 0] == 1, A[-xM/2, y, t] == A[xM/2, y, t], A[x, -yM/2, t] ==
A[x, yM/2, t]}, A, {x, -xM/2, xM/2}, {y, -yM/2, yM/2}, {t, 0, tM}]

with the out:

enter image description here

Then I try to plot with:

DensityPlot[Evaluate[Re[A[x, y, 10000]] /. sol], {x, -xM/2 + 1, 
xM/2 - 1}, {y, -yM/2 + 1, yM/2 - 1}, PlotPoints -> 100]

but I just obtain an odd graphic:

enter image description here

I'm supposed to obtain a frozen picture of the following (see here):

enter image description here

Question. What am I doing wrong and how can I fix it?

  • 1
    $\begingroup$ Your TeX equation and the Mathematica equation are different. The Tex has Abs[A[x, y, t]]^2 and the code has Norm[A[x, y, t]]. $\endgroup$
    – Michael E2
    Commented Apr 27, 2015 at 1:56
  • $\begingroup$ @MichaelE2 You're right. I just edited the code (Norm[A] and Abs[A] give the same result for a complex A: Sqrt[Re[A]^2+Im[A]^2]). BTW I'm still getting the same blue square after the correction. $\endgroup$
    – Ana S. H.
    Commented Apr 27, 2015 at 2:16
  • $\begingroup$ There's no difference between Norm and Abs on 1D vectors/scalars. Norm is meant (in Mathematica) for vectors and Abs for scalars. (For example Norm[{x, y}] evaluates to Sqrt[Abs[x]^2 + Abs[y]^2].) So Abs seems more consistent with Mathematica idiom, but it makes no difference in the result. -- What version are you using? I did not get a blue square in the original code. I get a convergence error and NDSolve quits before t gets past t == 1 or so with the new code. $\endgroup$
    – Michael E2
    Commented Apr 27, 2015 at 2:27
  • 1
    $\begingroup$ Actually, NDSolve does not consistently stop at the same time t each time I try it. Strange. I'm using to it being deterministic. I just stopped at t = 8.42, much farther than any earlier trial run. $\endgroup$
    – Michael E2
    Commented Apr 27, 2015 at 2:29
  • 1
    $\begingroup$ If I replace Norm[_]^2 with _ * Conjugate[_] I get a convergence error extremely quickly, always at t==0.9567275319519298``. Replacing it with Abs[_]^2` gives me an error at t < 0.025 after some time, and using Norm[_]^2 gives me an error at t < 10 after a long time. Mathematica, Windows 8.1 64-bit. $\endgroup$ Commented Apr 27, 2015 at 3:14

1 Answer 1


The differential equation, its initial condition, and its boundary conditions are translationally invariant in space. Consequently, the solution must be independent of x and y. Indeed, solving the equations as given in the Question does give a spatially constant solution that oscillates in time. For instance,

DensityPlot[Evaluate[Re[A[x, y, 10000]] /. sol], {x, -xM/2, xM/2}, {y, -yM/2, 
  yM/2}, PlotPoints -> 100, PlotRange -> {-1, 1}, ColorFunctionScaling -> False]

gives a constant color plot. (Note that omitting ColorFunctionScaling -> False yields a blotchy plot that varies in time, but this spatial variation is nothing but tiny roundoff errors.)

A segment of the time history at any spatial position is given by

Plot[Evaluate[Re[A[0, 0, t]] /. sol], {t, 9000, 9100}, PlotRange -> All]

enter image description here

It seems likely that you did not obtain the pattern shown in your animation, because the animation was produced using different initial conditions.

Incidentally, I find it strange that NDSolve produces the error message,

NDSolve::eerr: Warning: scaled local spatial error estimate of 151.69068701912053` at t = 10000.` in the direction of independent variable x is much greater than the prescribed error tolerance. Grid spacing with 15 points may be too large to achieve the desired accuracy or precision. A singularity may have formed or a smaller grid spacing can be specified using the MaxStepSize or MinPoints method options. >>

because the solution is well behaved there and, as noted earlier, constant in space up to tiny roundoff errors.

  • $\begingroup$ I think the is error is because it is so flat. Since it is a scaled estimate, the noise is magnified (I think). $\endgroup$
    – Michael E2
    Commented Apr 28, 2015 at 2:46
  • $\begingroup$ @MichaelE2 I would have expected the error to be scaled to the RMS value of the solution. In any case, I have run the 1D (in time) calculation and the error message goes away. $\endgroup$
    – bbgodfrey
    Commented Apr 28, 2015 at 2:51
  • $\begingroup$ I just changed my initial condition for $A(x,y,t=0)=\sin (x)$, and also changed the domain for $\{(x,y): -\pi \leq x \leq \pi, -\pi \leq y \leq \pi \}$ keeping the periodic boundary conditions. But now, for tM=100, I get this "Maximum number of 51693 steps reached at the point t == 0.00217" and "Warning: scaled local spatial error estimate of 366.156 at t = 0.00217". What could it be? @MichaelE2 $\endgroup$
    – Ana S. H.
    Commented Apr 28, 2015 at 4:27

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.