7.0 KiB
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] [-u u_outfile] [-t nthreads] <command>
-
parametersis a list of parameters for the computation, see Parameters -
savefileis a file where the last step of the computation is saved in binary format so that the computation can be resumed after it has terminated, see Interrupting and resuming the computation. -
u_outfileis a file to which the final u is written in plain text format, which can be used as an initial condition for a future computation. -
nthreadsis the number of threads used to compute Fast Fourier Transforms.
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(energy) average(enstrophy) alpha energy enstrophywhere the averages are running averages over
print_freq. In addition, if the algorithm has an adaptive step, an extra column is printed withdelta. In addition, if alpha has a negative value (even in betweenprint_freqintervals), a line is printed with the information. -
lyapunov: to compute the Lyapunov exponents. This command printstime instantaneous_lyapunov lyapunovwhere
instantaneous_lyapunovis computed from the tangent flow only between the given time and the previous one. -
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. -
final_time(double, default 100000): time at which to end 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(double, default 1): only print when time crosses integer multiples ofprint_freq. -
starting_time(double, default 0): starting 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_energy(double, default is to not rescale the initial condition, is incompatible withinit_enstrophy): enforce a value for the energy of the initial condition. -
init_enstrophy(double, default is to not rescale the initial condition, is incompatible withinit_energy): enforce a value for the enstrophy of the initial condition. -
random_seed(int, default ): seed for random initialization. -
algorithm: fixed step methods:RK4for Runge-Kutta 4,RK2for Runge-Kutta 2. adaptive step methods:RKF45for Runge-Kutta-Fehlberg (order 4),RKDP54for Runge-Kutta-Dormand-Prince (order 5),RKBS32for Runge-Kutta-Bogacki-Shampine (order 3). -
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). -
max_delta(double, default 1e-2): when using the adaptive step, do not exceetdelta_max. -
adaptive_cost: cost function to use to estimate the error of the adaptive method:L1(default) for the normalized L1 norm,k3for the normalized L1 norm of f_k/|k|^3,k32for the normalized L1 norm,enstrophyfor the enstrophy,alphafor alpha. -
keep_en_cst(0 or 1, default 0): impose that the enstrophy is constant at each step (only really useful for the reversible equation). -
print_alpha(0 or 1, default 0): if this is set to 1, then whenever alpha is negative, its value is printed as a comment. -
lyapunov_reset(double, default:print_freq): if this is set, then, when computing the Lyapnuov exponents, the tangent flow will renormalize itself at times proportional tolyapunov_reset. This option is incompatible withlyapunov_maxu. -
lyapunov_maxu(double, default: unset): if this is set, then, when computing the Lyapnuov exponents, the tangent flow will renormalize itself whenever the norm of the tangent flow exceedslyapunov_maxu. This option is incompatible withlyapunov_reset. -
algorithm_lyapunov: the algorithm used to integrate the tangent flow. Can beRK4for Runge-Kutta 4 (default) orRK2for Runge-Kutta 2. Adaptive step algorithms cannot be used for the tangent flow.
Interrupting and resuming the computation
The enstrophy 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-2025 Ian Jauslin