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>
-
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 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_freqintervals), 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 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.
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