Nstrophy is a tool to solve the two-dimensional Navier-Stokes equation as well as Gallavotti's reversible Navier-Stokes equation and compare them.
Nstrophy is under active development
Building
Compile Nstrophy with
make
which will place a binary at build/nstrophy.
The syntax for the execution of Nstrophy is
./build/nstrophy [-p parameters] [-s savefile] <command>
Nstrophy is written in C. The Makefile uses the GNU C Compiler.
Nstrophy depends on fftw: [https://fftw.org]
Commands
The available commands are
-
enstrophy: to compute the enstrophy and various other observables. This command printsstep_index time average(alpha) average(alpha*enstrophy) average(enstrophy) alpha alpha*enstrophy enstrophywhere the averages are running averages overprint_freqsteps. -
uk: to compute the Fourier transform of the solution. -
quiet: does not print anything, useful for debugging.
Parameters
The parameters can be specified using the -p flag. The parameter string
should be a ; sperated list of key=value pairs. The possible keys are
-
equation: eitherirreverisible(default) orreversible. -
K(int, default 16): cutoff in momentum space: -K<=k_i<=K -
K1(int, defaultK): cutoff in momentum space for the x component: -K<=k_x<=K -
K2(int, defaultK): cutoff in momentum space for the y component: -K<=k_y<=K -
N(int, default smallest power of 2 that is larger than 3K): size of fft vectors: must be at least 3 timesKto avoid aliasing. -
N1(int, defaultN): same asNbut only for x component. -
N2(int, defaultN): same asNbut only for y component. -
nsteps(long int, default 10000000): number of steps in the computation. Set to 0 to keep on going forever. -
nu(double, default 0.00048828125): viscosity. -
delta(double, default 0.0001220703125): step size. -
L(double, default 2pi): size of box. -
print_freq(long int, default 1000): only print everyprint_freqsteps. -
starting_step(long int, default 0): start the computation at this step. -
starting_time(double, default starting_time*delta): start the computation at this time. -
driving: eitherzerofor no driving,test(default) for a testing driving force orfile:<filename>orfile_txt:<filename>to read the driving force from a file. When usingfile:<filename>the file should be binary, whereas withfile_txt:<filename>it should be plaintext. The binary file format is(double)(double)for each entry of the driving force, excluding kx<0 and kx=0&&ky<=0. The plaintext file format iskx ky real_part imag_part. -
init: eitherrandomfor a random initialization,gaussian(default) for a Gaussian initial condition orfile:<filename>orfile_txt:<filename>to read the driving force from a file. When usingfile:<filename>the file should be binary, whereas withfile_txt:<filename>it should be plaintext. The binary file format is(double)(double)for each entry of the driving force, excluding kx<0 and kx=0&&ky<=0. The plaintext file format iskx ky real_part imag_part. -
init_en(double, default 1.54511597324389e+02): initial value of the energy ifequation=irreversibleor of the enstrophy ifequation=reversible. -
random_seed(int, default ): seed for random initialization. -
algorithm: eitherRK4for Runge-Kutta 4,RK2for Runge-Kutta 2, orRKF45for the Runge-Kutta-Fehlberg adaptive step method. -
adaptive_tolerance(double, default 1e-11): when using an adaptive step method, this is the maximal allowed relative error. -
adaptive_factor(double, default 0.9): when using the RKF45 method, the step gets adjusted byfactor*delta*(tolerance/error)^(1/5).
Interrupting/resuming the computation
The computation can be interrupted by sending Nstrophy the SIGINT signal
(e.g. by pressing Ctrl-C.) When Nstrophy receives the SIGINT signal, it
finishes its current step and writes the value of uk, either to savefile if
such a file was specified on the command line (using the -s flag), or to
stderr. In addition, when a savefile is specified it writes the command
that needs to be used to resume the computation (which essentially just sets
the appropriate starting_time and init:file:<savefile> parameters. The data
written to the savefile is binary.
License
Nstrophy is released under the Apache 2.0 license.
Copyright 2017-2023 Ian Jauslin