Skip to content

Pseudospectral Kolmogorov Flow Solver

License

Notifications You must be signed in to change notification settings

MagriLab/KolSol

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

KolSol

KolSol is a pseudospectral Kolmogorov flow solver, using a Fourier-Galerkin approach as described by Canuto [1]. This library contains both NumPy and PyTorch implementations to allow for autograd-compatible workflows. Please note that the implementation of the FFT within NumPy is much more efficient so for general usage this version is preferable.

The solver provides numerical solutions to the divergence-free Navier-Stokes equations:

$$ \begin{aligned} \nabla \cdot u &= 0 \\ \partial_t u + u \cdot \nabla u &= - \nabla p + \nu \Delta u + f \end{aligned} $$

As a spectral method is employed, using a larger quantity of wavenumbers will reduce the numerical error.
Note: Highly accurate simulations can be attained even with relatively few wavenumbers.

  • License: MIT
  • Python Versions: 3.6.8+

Flowfield:

Installation:

To install KolSol, please clone the repository and then run the following command:

$ pip install poetry
$ poetry install

Solver Example:

import numpy as np
from kolsol.numpy.solver import KolSol

# instantiate solver
ks = KolSol(nk=8, nf=4, re=30.0, ndim=2)
dt = 0.01

# define initial conditions
u_hat = ks.random_field(magnitude=10.0, sigma=2.0, k_offset=[0, 3])

# simulate :: run over transients
for _ in np.arange(0.0, 180.0, dt):
  u_hat += dt * ks.dynamics(u_hat)

# simulate :: generate results
for _ in np.arange(0.0, 300.0, dt):
  u_hat += dt * ks.dynamics(u_hat)

# generate physical field
u_field = ks.fourier_to_phys(u_hat, nref=256)

Data Generation:

The given generate.py script can be used to generate simulation data for a Kolmogorov flow field, for example:

$ python generate.py --data-path .data/RE30/results.h5 --resolution 256 --re 30.0 --time-simulation 60.0

Running the above command results in the following file structure:

data
├── RE30
│   └── results.h5
├── README.md
└── generate.py

Note: Additional command-line arguments are available for customising simulations.

References:

[1] Canuto, C. (1988) Spectral methods in fluid dynamics. New York: Springer-Verlag.