Snoopy Version 6.0 (Albert)
|
Snoopy configuration is divided in two files: gvars.h and snoopy.cfg, which are described below.
To activate or deactivate a feature, one uncomments or comments (//) the corresponding #define. Any modification made to this file requires a recompilation of the code (make) to include them in the code. Here is an example of a gvars.h file (an updated version of this file may be found in src/problem/defaut/gvars.h):
#define NX 96 // X Dimension in real space. Must be multiples of NPROC when using MPI. #define NY 96 // Y Dimension in real space. Must be multiples of NPROC when using MPI. #define NZ 96 // Z Dimension in real space. #define MHD // Uncomment to activate MHD #define ELSASSER_FORMULATION // Use Elsasser formulation for MHD terms #define WITH_BRAGINSKII // Enable Braginskii viscosity. CAUTION: this is incompatible with the Elsasser formulation #define WITH_HALL // Enable Hall MHD (in developement). Hall effect amplitude is set by x_hall #define WITH_EXPLICIT_DISSIPATION // use an explicit (RK3) numerical scheme to integrate linear diffusion effects // instead of the standard implicit scheme #define SGS // Chollet-Lesieur Subgrid scale model for Hydro. This is in alpha version (see timestep.c). #define COMPRESSIBLE // Solve the isothermal compressible equations (incompatible with Boussinesq for obvious physical reasons) #define BOUSSINESQ // Uncomment to activate Boussinesq #define VERTSTRAT // Vertical stratification. Otherwise, Boussinesq stratification is in X #define WITH_ROTATION // Enable a Coriolis force, assuming the rotation axis is z. The rotation speed is set up in snoopy.cfg #define WITH_SHEAR // Uncomment to activate mean SHEAR #define TIME_DEPENDANT_SHEAR // Enable Time dependant shear #define WITH_2D // 2D (x,y) reduction. Enforce NZ=1 and optimise the Fourier transform routines accordingly. // Using this option should lead to a speedup>4 compared to the old NZ=2 method. #define WITH_PARTICLES // Enable Lagrangian test particles tracing. #define BOUNDARY_C // Enforce NON-PERIODIC boundary conditions to the flow using Fourier space symmetries. The boundary // condition has to be set up in boundary.c/boundary_c(); This feature is in alpha version. #define FORCING // Uncomment to use internal forcing of the velocity field (see forcing in timestep.c) #define FFT_PLANNING FFTW_MEASURE // can be either FFTW_ESTIMATE, FFTW_MEASURE, FFTW_PATIENT or FFTW_EXHAUSTIVE (see fftw3 doc). // Measure leads to longer initialisation of fft routines
The file snoopy.cfg is located where the executable is located and is read at run time. Snoopy uses a variation of the library libconfig to read these files. A standard snoopy file is divided into 5 blocks: physics, particles, code, output and init corresponding to physical parameters, code parameters, input/output and initial conditions. If any of the described parameter (or even block) is ommited, the default value (as given below) will be used. This is a commented example of snoopy.cfg containing all the possible parameters assigned to their default value (an updated version of this file may be found in src/problem/defaut/snoopy.cfg):
# Example of a Snoopy configuration file configname = "Default Snoopy configuration file"; physics: // Physics parameters { boxsize = (1.0, 1.0, 1.0); // Box length in X, Y and Z reynolds = 1.0; // Reynolds number (actully the inverse of the viscosity) reynolds_magnetic = 1.0; // Magnetic Reynolds number (actully the inverse of the resistivity). Used only when MHD is on reynolds_thermic = 1.0; // Thermal Reynolds number (actully the inverse of the thermal diffusivity). Used only when Boussinesq is on reynolds_Braginskii = 1.0; // Braginskii viscosity-based Reynolds number (inverse of nu_B) x_Hall = 1.0; // Amplitude of the Hall effect. Used only when WITH_HALL is enabled in gvars.h. brunt_vaissala_squared = 0.0; // Brunt Vaissala frequency squared. Used only when Boussinesq is on omega = 0.0; // Vertical rotation rate (if Shear=1, Keplerian if found for 2.0/3.0). Used only when WITH_ROTATION is on shear = 0.0; // Shear rate. Used only when WITH_SHEAR is on. omega_shear = 0.0; // Pulsation of time dependant shear. Used only when both WITH_SHEAR and TIME_DEPENDANT_SHEAR are on. }; //------------------------------------------------------------------------------------------------------------------------- particles: // Test particles parameters. Only used when WITH_PARTICLES is enabled. { n = 1000; // Total number of test particles mass = 1.0; // Particles mass stime = 1.0; // Particles stopping time }; //------------------------------------------------------------------------------------------------------------------------- code: // code parameters { cfl = 1.5; // CFL safety factor. Should be smaller than sqrt(3) for RK3 to be stable. safety_source = 0.2; // Safety factor for SHEAR, Coriolis and Boussinesq terms (should be ~0.2 for accuracy) t_initial = 0.0; // Initial time of the simulation t_final = 1.0; // Simulation will stop if it reaches this time max_t_elapsed = 1e30; // Maximum elapsed time (in hours). Will stop after this elapsed time if t_final is not reached. interface_check = 5; // Number of loops between two checks for a user input. On slow filesystems, increase this number interface_output_file = false; // Set to true to force interface outputs to a file instead of displaying them force_symmetries = false; // Uncomment to enforce spectral symmetries and mean flow to zero. Useful when N^2 or kappa^2 < 0. (see enforce_symm() ) symmetries_step = 20; // Number of loops between which the symmetries are enforced. Should be around ~20 for Boussinesq convection. antialiasing = true; // 2/3 Antialisaing rule. Could be removed if you assume is unimportant (untested feature). restart = false; // set to true to restart from a dump file. If no dump file is found, this option has no effect. }; //------------------------------------------------------------------------------------------------------------------------- output: // output parameters { timevar_step = 1.0; // Time between two outputs in the timevar file snapshot_step = 1.0; // Time between two snapshot outputs (VTK format) dump_step = 1.0; // Time between two restart dump outputs (restart dump are erased) timevar_vars = ( "t","ev","em","vxmax","vxmin","vymax","vymin","vzmax","vzmin","vxvy", "bxmax","bxmin","bymax","bymin","bzmax","bzmin","bxby", "dmin","dmax","dvxvy", "thmax","thmin","thvx","thvz","w2","j2","hm" ); // List of statistical quantities to be written in the timevar file vorticity = false; // Output the vorticity field in the 3D snapshots }; //------------------------------------------------------------------------------------------------------------------------- init: // Initial conditions parameters { vortex: // Add a 2D Kida vortex in the box. Assumes S=1. Requires b>a { enable = false; // Set this to true to enable the vortex a = 1.0; // x dimension of the vortex b = 2.0; // y dimension of the vortex }; large_scale_noise: // Init a large scale random noise down to cut_length { enable = false; // set this to true to enable large scale noise amplitude = 0.0; // noise amplitude cut_length = 0.0; // Wavelength over which the noise is applied }; large_scale_2D_noise: // Init a large scale random 2D (x,y) noise down to cut_length { enable = false; // set this to true to enable large scale 2D noise amplitude = 0.0; // noise amplitude cut_length = 0.0; // Wavelength over which the noise is applied }; white_noise: // Init a random noise at all scales { enable = false; // set this to true to enable white noise amplitude = 0.0; // noise amplitude }; mean_field: // Force the mean magnetic field to a given value. { enable = false; // Set this to true to enable mean field bx0 = 0.0; // Mean magnetic field in the x direction by0 = 0.0; // Mean magnetic field in the y direction bz0 = 0.0; // Mean magnetic field in the z direction }; spatial_structure = false; // set this to true to init a user_defined spatial structure (see initflow.c) dump = false; // set this to true to use a dump file as an initial condition (this is NOT a restart option!) bench = false; // set this to true to init a benchmark initial condition. };