I am trying to solve the Ginzburg-Landau equation with a third order polynomial as the reaction term: $$ \frac{\partial u}{\partial t} = -K(u-u_1)(u-u_2)(u-u_3) + \frac{\partial^2u}{\partial x^2} $$ on a spatial axis $[x_{min},x_{max}]$ with a smooth step-function initial condition and boundary conditions: $$ u(0,x) = \frac{u_3 + u_1e^{-x/x_0}}{1+e^{-x/x_0}},\ u(t,x_{min}) = u_1,\ u(t,x_{max}) = u_3 $$

So, I used NDSolve to approach the problem. The code is:

K = 1; u1 = 0; u2 = 1; u3 = 3; xmin = -500; xmax = 500; steep = 1; \
tmin = 0; tmax = 500;

sol = NDSolve[{D[u[t, x], 
     t] == -K*(u[t, x] - u1)*(u[t, x] - u2)*(u[t, x] - u3) + 
     D[u[t, x], x, x],
   u[t, xmin] == u1, u[t, xmax] == u3, 
   u[0, x] == (u3 + u1*Exp[-x/steep])/(1 + Exp[-x/steep])}, 
  u, {x, xmin, xmax}, {t, tmin, tmax}]

Animate[Plot[u[t, x] /. sol, {x, xmin, xmax}, 
  PlotRange -> {{xmin, xmax}, {u1 - 0.5, u3 + 0.5}}], {t, tmin, tmax}]

Theory tells us that the step-function should propagate left (for $u_1=0,u_2 = 1,u_3=3$) and that $u_3$ will sweep out the space. For steep = 1, I do get that the step function propagates left. But, when I play with steep, the solution is stuck on this (steep = 5):

enter image description here

for every t.

I don't understand why. steep = 1 is resolved, so steep =5 should be resolved. The spatial size is xmax - xmin = 1000, which is much greater than the shock-width.

  • $\begingroup$ I am pretty sure that the theoretical prediction you mentioned above has been done for the boundary conditions fixed in infinity. But in your case the boundary condition u=0 is fixed at a finite distance. This should lead to the step with u=0 at the left boundary and making a step with the width ~1 coming to the horizontal asymptote u=3. To be able to solve this equation correctly you need to have the number of mesh points such that the distance between them in the kink region does not exceed 1. This is Fixed with MaxPoints or MinPoints $\endgroup$ May 14, 2018 at 13:14

1 Answer 1


I think your solution is getting pinned between the spatially discretized grid points. See for example, this paper.

Increasing the number of spatial grid points gets your wave moving when steep=5. E.g., add the following to your NDSolve:

Method -> {"MethodOfLines", "SpatialDiscretization" ->
  {"TensorProductGrid", "MaxPoints" -> 1000, "MinPoints" -> 1000}}
  • $\begingroup$ So what is the criterion that made you pick 1000? Is it from paper? $\endgroup$
    – Joshhh
    May 13, 2018 at 17:31
  • $\begingroup$ Nope, just tried increasing the number of grid points until the wave moved. I found that paper rather quickly, merely as an example of the phenomenon. $\endgroup$
    – Chris K
    May 13, 2018 at 17:53

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.