I am trying to write a 2d pseudo-spectral DNS code with random initial velocities. This is kind of a classic simulation where the very tiny vortices group together forming larger and larger vortices as the spectral energy cascades upward. So far I have done what I think is the intuitive thing to do: I have done a splitting scheme where the nonlinear term is treated explicitly using a 2nd order adams bashforth time stepping, while the diffusive term is completed implicitly by trapezoid time stepping. Finally the incompressibility condition is enforced by the projection method.

So far this seems to work well for other initial conditions, for example zero initial velocity but with a forcing term added. However for the problem I am trying to tackle, the flow is just too diffusive and smears everything out for low Reynolds numbers, or becomes unstable for anything over a couple hundred (Re). I have tried hyper viscosity, but this then becomes unstable as well even after applying various filters (sharp, box, gaussian etc).

Basically I was wondering whether anyone can tell me what standard methods are usually employed for this kind of problem. It is a common toy simulation set-up, so I am assuming there is a common introductory way that people solve this.

Note: I am solving the non-dimensionalized Navier-Stokes where the nonlinear term is written in conservative form.

  • $\begingroup$ While not pseudo-spectral, the rest of the scheme sounds very similar to what Paul Fischer of Argonne does with Nek5000 (spectral element code, higher order splitting scheme of Karniadakis et al, projection method for incompressibility). As Rhys mentioned, aliasing may be an issue for the convective regime. I am surprised to hear that the convective regime is unstable; unless your CFL limit is tiny (due to very high order, perhaps?). $\endgroup$
    – Jesse Chan
    Mar 8, 2014 at 16:05

1 Answer 1


Goofy question, are you dealiasing in some fashion or is it unnecessary in your setup? The issue sounds convective in some sense otherwise I'd expect your diffusion dominated limit to misbehave. If not, you might see if using the skew-adjoint form of the convective operator improves things somewhat (see https://github.com/RhysU/suzerain/blob/master/writeups/skewadjoint.tex and the Zang1991 reference in https://github.com/RhysU/suzerain/blob/master/writeups/references.bib).

Have you tried cranking the time step through the floor? If you're pushing the CFL too much with the numerics you described, bad convective things happen.

Also, have you tried throwing more resolution at it than you'd anticipate needing? In 2D that's cheap, and insufficient resolution can cause "grid noise" to take down things.

Lastly, for whatever reason, 2nd order schemes give me the willies on problems with convection. I can't speak to the particular IMEX setup you've got, but I've personally had good luck with the 3rd-order-nonlinear/second-order-linear scheme documented in the appendix of Spalart, Moser, and Rogers 1991. If you can already do an implicit diffusion solve, you're not far off.

  • $\begingroup$ Re: "grid noise". I don't know if the incompressibility enforced through projection would kill grid noise automatically. I'm a compressible pseudospectral guy who thinks an incompressible world necessarily lacking music is no place to live. $\endgroup$ Mar 8, 2014 at 4:20
  • $\begingroup$ Thanks for the suggestions. I think what may be the problem is that I cannot just initialize the velocities as uniform random numbers (scaled between -1 and 1) because if I do that, increasing the resolution never actually helps resolve the initial condition. Instead what I have done is to initialize the velocities in spectral space by choosing the energy spectrum. $\endgroup$
    – James
    Mar 10, 2014 at 16:21
  • $\begingroup$ An easy way to have a "well-behaved" random initial condition wrt increasing resolution would be to generate random wavenumber content up to some wavenumber cutoff. Then hold that absolute cutoff fixed while increasing resolution so that more and more of your high wavenumbers start out trivially zero. May be easier than using prescribed spectra. $\endgroup$ Mar 10, 2014 at 20:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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