6.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>
-
parameters
is a list of parameters for the computation, see Parameters -
savefile
is 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_outfile
is 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. -
nthreads
is 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 enstrophy
where the averages are running averages overprint_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_freq
intervals), a line is printed with the information. -
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 timesK
to avoid aliasing. -
N1
(int, defaultN
): same asN
but only for x component. -
N2
(int, defaultN
): same asN
but 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
: eitherzero
for 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
: eitherrandom
for 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:RK4
for Runge-Kutta 4,RK2
for Runge-Kutta 2. adaptive step methods:RKF45
for Runge-Kutta-Fehlberg (order 4),RKDP54
for Runge-Kutta-Dormand-Prince (order 5),RKBS32
for 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,k3
for the normalized L1 norm of f_k/|k|^3,k32
for the normalized L1 norm,enstrophy
for the enstrophy,alpha
for 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.
Interrupting and 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-2024 Ian Jauslin