conatus.problems.kolmogorov¶
- conatus.problems.kolmogorov(*, N, n, Re, dealias)[source]¶
2D Kolmogorov flow on the torus [0, 2 pi]^2 (Chandler & Kerswell 2013), IVP in streamfunction form (u = psi_y, v = -psi_x, vorticity -lap(psi)):
dt(lap psi) - lap(lap psi)/Re + tau = -psi_y (lap psi)_x + psi_x (lap psi)_y + n cos(n y), integ(psi) = 0,
i.e. dt(u) + u.grad(u) + grad(p) = lap(u)/Re + sin(n y) e_x.
tauis a constant (its only role: the (0, 0) mode of the first equation, where lap psi = 0, gives tau = 0). Laminar state psi = -(Re / n^3) cos(n y), u = (Re / n^2) sin(n y) e_x. RealFourier(N) in x and y.nccholds the forcing f = n cos(n y). Same equations as conatus.ecs.kolmogorov.kolmogorov_solver (which returns a solver).No
kolmogorov_evp: the laminar streamfunction varies along a Fourier direction, and discretize refuses such an NCC (it couples wavenumbers; DiscretizationError). The linear stability is computed on the IVP instead, from the Jacobian of its right-hand side:conatus.ecs.kolmogorov.linear_stability_dense(IVPSolver(plan, ...), laminar_state(...)).Validation reference: laminar flow loses stability at Re_lin = 9.9669 for n = 4 (Chandler & Kerswell 2013, J. Fluid Mech. 722, 554, Fig. 3 caption): the leading eigenvalue changes sign, real, between Re = 9.96685 and 9.96695 at N = 24 (tests/problems/test_problems_patterns.py, as tests/ecs/test_kolmogorov.py). Rescaled to the forcing wavelength, Re_MS = Re^2 / n^3 tends to sqrt(2) as the domain grows (Meshalkin & Sinai 1961): 9.9669^2 / 64 = 1.552 here, where the smallest wavenumber is 1/4 of the forcing’s.
- Parameters:
N (int)
n (int)
Re (float)
dealias (float)
- Return type: