Commit b1f3f617 authored by Rainer Weinberger's avatar Rainer Weinberger
Browse files

Arepo source code

parent 06181e37
This diff is collapsed.
# AREPO Makefile
#
# If you add a new system below, also add that systype to Template-Makefile.systype
EXEC = Arepo
LIBRARY = arepo
CONFIG = Config.sh
BUILD_DIR = build
SRC_DIR = src
###################
#determine SYSTYPE#
###################
ifdef SYSTYPE
SYSTYPE := "$(SYSTYPE)"
-include Makefile.systype
else
include Makefile.systype
endif
MAKEFILES = Makefile config-makefile
ifeq ($(wildcard Makefile.systype), Makefile.systype)
MAKEFILES += Makefile.systype
endif
$(info Build configuration:)
$(info SYSTYPE: $(SYSTYPE))
$(info CONFIG: $(CONFIG))
$(info EXEC: $(EXEC))
$(info )
PYTHON = python
PERL = /usr/bin/perl
RESULT := $(shell CONFIG=$(CONFIG) PERL=$(PERL) BUILD_DIR=$(BUILD_DIR) make -f config-makefile)
CONFIGVARS := $(shell cat $(BUILD_DIR)/arepoconfig.h)
RESULT := $(shell SRC_DIR=$(SRC_DIR) BUILD_DIR=$(BUILD_DIR) ./git_version.sh)
MPICHLIB = -lmpich
GMPLIB = -lgmp
GSLLIB = -lgsl -lgslcblas
MATHLIB = -lm -lstdc++
HWLOC_LIB = -lhwloc
# e.g. Mac OS using MacPorts modules for openmpi, fftw, gsl, hdf5 and hwloc
ifeq ($(SYSTYPE),"Darwin")
CC = mpicc # sets the C-compiler
OPTIMIZE = -std=c11 -ggdb -O3 -Wall -Wno-format-security -Wno-unknown-pragmas -Wno-unused-function
GSL_INCL = -I/opt/local/include
GSL_LIBS = -L/opt/local/lib
FFTW_INCL= -I/opt/local/include -I/usr/local/include
FFTW_LIBS= -L/opt/local/lib -I/usr/local/lib
HDF5INCL = -I/opt/local/include -DH5_USE_16_API
HDF5LIB = -L/opt/local/lib -lhdf5 -lz
HWLOC_INCL= -I/opt/local/include
HWLOC_LIB = -L/opt/local/lib -lhwloc
HYPRE_INCL =
HYPRE_LIB =
MPICHLIB = -lmpi
endif
# insert the library paths for your system here, similar to SYSTYPE "Darwin" above
ifndef LINKER
LINKER = $(CC)
endif
##########################################
#determine the needed object/header files#
##########################################
SUBDIRS = . \
debug_md5 \
domain \
gitversion \
gravity \
gravity/pm \
hydro \
init \
io \
main \
mesh \
mesh/voronoi \
mpi_utils \
ngbtree \
pm \
star_formation \
time_integration \
utils
OBJS = debug_md5/calc_checksum.o \
debug_md5/Md5.o \
domain/domain.o \
domain/domain_balance.o \
domain/domain_box.o \
domain/domain_counttogo.o \
domain/domain_DC_update.o \
domain/domain_exchange.o \
domain/domain_rearrange.o \
domain/domain_sort_kernels.o \
domain/domain_toplevel.o \
domain/domain_vars.o \
domain/peano.o \
gravity/accel.o \
gravity/forcetree.o \
gravity/forcetree_ewald.o \
gravity/forcetree_optimizebalance.o \
gravity/forcetree_walk.o \
gravity/grav_external.o \
gravity/grav_softening.o \
gravity/gravdirect.o \
gravity/gravtree.o \
gravity/gravtree_forcetest.o \
gravity/longrange.o \
gravity/pm/pm_periodic2d.o \
gravity/pm/pm_periodic.o \
gravity/pm/pm_mpi_fft.o \
gravity/pm/pm_nonperiodic.o \
hydro/finite_volume_solver.o \
hydro/gradients.o \
hydro/riemann.o \
hydro/riemann_hllc.o \
hydro/riemann_hlld.o \
hydro/scalars.o \
hydro/update_primitive_variables.o \
init/begrun.o \
init/density.o \
init/init.o \
io/global.o \
io/hdf5_util.o \
io/io.o \
io/io_fields.o \
io/logs.o \
io/parameters.o \
io/read_ic.o \
io/restart.o \
main/allvars.o \
main/main.o \
main/run.o \
mesh/criterion_derefinement.o \
mesh/criterion_refinement.o \
mesh/refinement.o \
mesh/set_vertex_velocities.o \
mesh/voronoi/voronoi.o \
mesh/voronoi/voronoi_1d.o \
mesh/voronoi/voronoi_1d_spherical.o \
mesh/voronoi/voronoi_3d.o \
mesh/voronoi/voronoi_check.o \
mesh/voronoi/voronoi_derefinement.o \
mesh/voronoi/voronoi_dynamic_update.o \
mesh/voronoi/voronoi_exchange.o \
mesh/voronoi/voronoi_ghost_search.o \
mesh/voronoi/voronoi_gradients_lsf.o \
mesh/voronoi/voronoi_gradients_onedims.o \
mesh/voronoi/voronoi_refinement.o \
mesh/voronoi/voronoi_utils.o \
mpi_utils/checksummed_sendrecv.o \
mpi_utils/hypercube_allgatherv.o \
mpi_utils/mpi_util.o \
mpi_utils/myalltoall.o \
mpi_utils/sizelimited_sendrecv.o \
mpi_utils/pinning.o \
ngbtree/ngbtree.o \
ngbtree/ngbtree_search.o \
ngbtree/ngbtree_walk.o \
star_formation/sfr_eEOS.o \
star_formation/starformation.o \
time_integration/darkenergy.o \
time_integration/do_gravity_hydro.o \
time_integration/driftfac.o \
time_integration/predict.o \
time_integration/timestep.o \
time_integration/timestep_treebased.o \
utils/allocate.o \
utils/debug.o \
utils/mpz_extension.o \
utils/mymalloc.o \
utils/parallel_sort.o \
utils/system.o
INCL += debug_md5/Md5.h \
domain/bsd_tree.h \
domain/domain.h \
gitversion/version.h\
gravity/forcetree.h \
main/allvars.h \
main/proto.h \
mesh/mesh.h \
mesh/voronoi/voronoi.h \
time_integration/timestep.h \
utils/dtypes.h \
utils/generic_comm_helpers2.h \
utils/timer.h
ifeq (TWODIMS,$(findstring TWODIMS,$(CONFIGVARS)))
OBJS += mesh/voronoi/voronoi_2d.o
endif
ifeq (MYIBARRIER,$(findstring MYIBARRIER,$(CONFIGVARS)))
OBJS += mpi_utils/myIBarrier.o
INCL += mpi_utils/myIBarrier.h
endif
ifeq (MHD,$(findstring MHD,$(CONFIGVARS)))
OBJS += hydro/mhd.o
endif
ifeq (ADDBACKGROUNDGRID,$(findstring ADDBACKGROUNDGRID,$(CONFIGVARS)))
OBJS += add_backgroundgrid/add_bggrid.o \
add_backgroundgrid/calc_weights.o \
add_backgroundgrid/distribute.o
INCL += add_backgroundgrid/add_bggrid.h
SUBDIRS += add_backgroundgrid
endif
ifeq (COOLING,$(findstring COOLING,$(CONFIGVARS)))
OBJS += cooling/cooling.o
INCL += cooling/cooling_vars.h \
cooling/cooling_proto.h
SUBDIRS += cooling
endif
ifeq (FOF,$(findstring FOF,$(CONFIGVARS)))
OBJS += fof/fof.o \
fof/fof_distribute.o \
fof/fof_findgroups.o \
fof/fof_fuzz.o \
fof/fof_io.o \
fof/fof_nearest.o \
fof/fof_sort_kernels.o \
fof/fof_vars.o
INCL += fof/fof.h
SUBDIRS += fof
endif
ifeq (SUBFIND,$(findstring SUBFIND,$(CONFIGVARS)))
OBJS += subfind/subfind.o \
subfind/subfind_vars.o \
subfind/subfind_serial.o \
subfind/subfind_coll_tree.o \
subfind/subfind_properties.o \
subfind/subfind_so.o \
subfind/subfind_distribute.o \
subfind/subfind_collective.o \
subfind/subfind_findlinkngb.o \
subfind/subfind_nearesttwo.o \
subfind/subfind_loctree.o \
subfind/subfind_coll_domain.o \
subfind/subfind_coll_treewalk.o \
subfind/subfind_density.o \
subfind/subfind_io.o \
subfind/subfind_sort_kernels.o \
subfind/subfind_reprocess.o \
subfind/subfind_so_potegy.o
INCL += subfind/subfind.h
SUBDIRS += subfind
endif
################################
#determine the needed libraries#
################################
# we only need fftw if PMGRID is turned on
ifeq (PMGRID, $(findstring PMGRID, $(CONFIGVARS)))
ifeq (DOUBLEPRECISION_FFTW,$(findstring DOUBLEPRECISION_FFTW,$(CONFIGVARS))) # test for double precision libraries
FFTW_LIB = $(FFTW_LIBS) -lfftw3
else
FFTW_LIB = $(FFTW_LIBS) -lfftw3f
endif
endif
ifneq (HAVE_HDF5,$(findstring HAVE_HDF5,$(CONFIGVARS)))
HDF5LIB =
endif
ifneq (IMPOSE_PINNING,$(findstring IMPOSE_PINNING,$(CONFIGVARS)))
HWLOC_INCL =
HWLOC_LIB =
endif
##########################
#combine compiler options#
##########################
CFLAGS = $(OPTIMIZE) $(OPT) $(HDF5INCL) $(GSL_INCL) $(EIGEN_INCL) $(FFTW_INCL) $(CVODE_INCL) $(CFITSIO_INCL) $(HEALPIX_INCL) $(GMP_INCL) $(MKL_INCL) $(HWLOC_INCL) -I$(BUILD_DIR) $(NBC_INCL) $(HYPRE_INCL) $(VTUNE_INCL) $(GRACKLE_INCL)
LIBS = $(MATHLIB) $(HDF5LIB) $(MPICHLIB) $(GSL_LIBS) $(GSLLIB) $(FFTW_LIB) $(GMP_LIBS) $(GMPLIB) $(CVODE_LIB) $(CFITSIO_LIB) $(HEALPIX_LIB) $(MKL_LIBS) $(THREAD_LIB) $(HWLOC_LIB) $(NBC_LIB) $(HYPRE_LIB) $(VTUNE_LIBS) $(GRACKLE_LIBS) $(LAPACK_LIB)
FOPTIONS = $(OPTIMIZE)
FFLAGS = $(FOPTIONS)
SUBDIRS := $(addprefix $(BUILD_DIR)/,$(SUBDIRS))
OBJS := $(addprefix $(BUILD_DIR)/,$(OBJS)) $(BUILD_DIR)/compile_time_info.o $(BUILD_DIR)/compile_time_info_hdf5.o $(BUILD_DIR)/version.o
INCL := $(addprefix $(SRC_DIR)/,$(INCL)) $(BUILD_DIR)/arepoconfig.h
TO_CHECK := $(addsuffix .check, $(OBJS) $(patsubst $(SRC_DIR)%, $(BUILD_DIR)%, $(INCL)) )
TO_CHECK += $(BUILD_DIR)/Makefile.check
CONFIG_CHECK = $(BUILD_DIR)/$(notdir $(CONFIG)).check
DOCS_CHECK = $(BUILD_DIR)/README.check
################
#create subdirs#
################
RESULT := $(shell mkdir -p $(SUBDIRS) )
#############
#build rules#
#############
all: check build
build: $(EXEC)
$(EXEC): $(OBJS)
$(LINKER) $(OPTIMIZE) $(OBJS) $(LIBS) -o $(EXEC)
lib$(LIBRARY).a: $(filter-out $(BUILD_DIR)/main.o,$(OBJS))
$(AR) -rcs lib$(LIBRARY).a $(OBJS)
clean:
@echo Cleaning all build files...
@rm -f $(OBJS) $(EXEC) lib$(LIBRARY).a
@rm -f $(BUILD_DIR)/compile_time_info.c $(BUILD_DIR)/compile_time_info_hdf5.c $(BUILD_DIR)/arepoconfig.h
@rm -f $(BUILD_DIR)/version.c
@rm -f $(TO_CHECK) $(CONFIG_CHECK)
@rm -rf $(BUILD_DIR)
@rm -rf user_guide/
@rm -rf developer_guide/
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c $(INCL) $(MAKEFILES)
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD_DIR)/compile_time_info.o: $(BUILD_DIR)/compile_time_info.c $(MAKEFILES)
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD_DIR)/compile_time_info_hdf5.o: $(BUILD_DIR)/compile_time_info_hdf5.c $(MAKEFILES)
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.cu $(INCL) $(MAKEFILES)
$(NVCC) -c $< -o $@
# sanity checks:
check: $(CONFIG_CHECK)
check_docs: $(DOCS_CHECK)
$(CONFIG_CHECK): $(TO_CHECK) $(CONFIG) check.py
@$(PYTHON) check.py 2 $(CONFIG) $(CONFIG_CHECK) defines_extra $(TO_CHECK)
$(BUILD_DIR)/%.o.check: $(SRC_DIR)/%.c Template-Config.sh defines_extra check.py
@$(PYTHON) check.py 1 $< $@ Template-Config.sh defines_extra
$(BUILD_DIR)/%.o.check: $(SRC_DIR)/%.F
touch $@
$(BUILD_DIR)/%.o.check: $(SRC_DIR)/%.f90
touch $@
$(BUILD_DIR)/%.o.check: $(SRC_DIR)/%.F90
touch $@
$(BUILD_DIR)/%.o.check: $(SRC_DIR)/%.cc
touch $@
$(BUILD_DIR)/%.h.check: $(SRC_DIR)/%.h Template-Config.sh defines_extra check.py
@$(PYTHON) check.py 1 $< $@ Template-Config.sh defines_extra
$(BUILD_DIR)/%.o.check: $(BUILD_DIR)/%.c Template-Config.sh defines_extra check.py
@$(PYTHON) check.py 1 $< $@ Template-Config.sh defines_extra
$(BUILD_DIR)/%.h.check: $(BUILD_DIR)/%.h Template-Config.sh defines_extra check.py
@$(PYTHON) check.py 1 $< $@ Template-Config.sh defines_extra
$(BUILD_DIR)/Makefile.check: Makefile Template-Config.sh defines_extra check.py
@$(PYTHON) check.py 3 $< $@ Template-Config.sh defines_extra
$(BUILD_DIR)/Config.check: Template-Config.sh check.py
@$(PYTHON) check.py 4 Template-Config.sh $@
# Arepo
Arepo public version
====================
AREPO is a parallel moving-mesh code for hydrodynamical cosmological simulations. It is a flexible code that can be applied to a variety of different types of simulations, offering a variety of physics solvers and postprocessing algorithms.
\ No newline at end of file
AREPO is a massively parallel code for gravitational n-body
systems and hydrodynamics, both on Newtonian as well as
cosmological background. It is a flexible code that can be
applied to a variety of different types of simulations, offering
a number of sophisticated simulation algorithms. An description
of the numerical algorithms employed by the code is given in the
original code papers (Springel 2010, MNRAS, 401, 791;
Pakmor et al. 2011, MNRAS, 418, 1392; Pakmor and Springel 2013,
MNRAS, 432, 176; Pakmor et al. 2016, MNRAS,455,1134) and the
release paper of this version (Weinberger et al. 2019).
A user guide can be found under `/documentation`, which also
includes a 'getting started' section, which is recommended for
new users. An html version of the user guide can be created using
sphinx (https://www.sphinx-doc.org) by typing
cd ./documentation/
make html
and displayed by opening `./documentation/build/html/index.html`.
A full version of the user guide is also available on the Arepo
homepage.
#!/bin/bash # this line only there to enable syntax highlighting in this file
##################################################
# Enable/Disable compile-time options as needed #
##################################################
#--------------------------------------- Basic operation mode of code; default: 3d with 6 particle types; type 0: gas >0: only gravitationally interacting
#NTYPES=6 # number of particle types
#TWODIMS # 2d simulation
#ONEDIMS # 1d simulation
#ONEDIMS_SPHERICAL # 1d spherically symmetric simulation
#--------------------------------------- Computational box and boundaries; default: cubic, periodic box
#LONG_X=10.0 # stretch x extent of box by given factor
#LONG_Y=2.0 # stretch y extent of box by given factor
#LONG_Z=10.0 # stretch z extent of box by given factor
#REFLECTIVE_X=1 #=2 # X Boundary; 1: Reflective, 2: Inflow/Outflow; not active: periodic
#REFLECTIVE_Y=1 #=2 # Y Boundary; 1: Reflective, 2: Inflow/Outflow; not active: periodic
#REFLECTIVE_Z=1 #=2 # Z Boundary; 1: Reflective, 2: Inflow/Outflow; not active: periodic
#--------------------------------------- Hydrodynamics; default: GAMMA=5/3 ideal hydrodynamics
#NOHYDRO # No hydrodynamics calculation
#GAMMA=1.4 # Adiabatic index of gas; 5/3 if not set
#ISOTHERM_EQS # Isothermal gas
#PASSIVE_SCALARS=3 # number of passive scalar fields advected with fluid (default: 0)
#NO_SCALAR_GRADIENTS # disables time and spatial extrapolation for passive scalar fields (use only if you know why you're doing this)
#--------------------------------------- Magnetohydrodynamics
#MHD # Master switch for magnetohydrodynamics
#MHD_POWELL # Powell div(B) cleaning scheme for magnetohydrodynamics
#MHD_POWELL_LIMIT_TIMESTEP # Timestep constraint due to Powell cleaning scheme
#MHD_SEEDFIELD # Uniform magnetic seed field of specified orientation and strength set up after reading in IC
#--------------------------------------- Riemann solver; default: exact Riemann solver
#RIEMANN_HLLC # HLLC approximate Riemann solver
#RIEMANN_HLLD # HLLD approximate Riemann solver (required to use for MHD)
#--------------------------------------- Mesh motion and regularization; default: moving mesh
#VORONOI_STATIC_MESH # static mesh
#VORONOI_STATIC_MESH_DO_DOMAIN_DECOMPOSITION # for VORONOI_STATIC_MESH force domain decomposition if there exist non-gas particles
#REGULARIZE_MESH_CM_DRIFT # Mesh regularization; Move mesh generating point towards center of mass to make cells rounder.
#REGULARIZE_MESH_CM_DRIFT_USE_SOUNDSPEED # Limit mesh regularization speed by local sound speed
#REGULARIZE_MESH_FACE_ANGLE # Use maximum face angle as roundness criterion in mesh regularization
#--------------------------------------- Refinement and derefinement; default: no refinement/derefinement; criterion: target mass
#REFINEMENT_SPLIT_CELLS # Refinement
#REFINEMENT_MERGE_CELLS # Derefinement
#REFINEMENT_VOLUME_LIMIT # Limit the volume of cells and the maximum volume difference between neighboring cels
#JEANS_REFINEMENT # Refinement criterion to ensure Jeans stability of cells
#REFINEMENT_HIGH_RES_GAS # Refinement criterion for high-resolution region in zoom simulation
#NODEREFINE_BACKGROUND_GRID # Do not de-refine low-res gas cells in zoom simulations
#OPTIMIZE_MESH_MEMORY_FOR_REFINEMENT # deletes the mesh structures not needed for refinement/derefinemet to lower the peak memory consumption
#--------------------------------------- non-standard phyiscs
#COOLING # Simple primordial cooling
#ENFORCE_JEANS_STABILITY_OF_CELLS # this imposes an adaptive floor for the temperature
#USE_SFR # Star formation model, turning dense gas into collisionless partices
#SFR_KEEP_CELLS # Do not distroy cell out of which a star has formed
#--------------------------------------- Gravity treatment; default: no gravity
#SELFGRAVITY # gravitational intraction between simulation particles/cells
#HIERARCHICAL_GRAVITY # use hierarchical splitting of the time integration of the gravity
#CELL_CENTER_GRAVITY # uses geometric centers to calculate gravity of cells, only possible with HIERARCHICAL_GRAVITY
#NO_GAS_SELFGRAVITY # switch off gas self-gravity in tree
#GRAVITY_NOT_PERIODIC # gravity is not treated periodically
#ALLOW_DIRECT_SUMMATION # Performed direct summation instead of tree-based gravity if number of active particles < DIRECT_SUMMATION_THRESHOLD (= 3000 unless specified differently here)
#DIRECT_SUMMATION_THRESHOLD=1000 # Overrides maximum number of active particles for which direct summation is performed instead of tree based calculation
#EXACT_GRAVITY_FOR_PARTICLE_TYPE=4 #N-squared fashion gravity for a small number of particles of the given type
#EVALPOTENTIAL # computes gravitational potential
#RANDOMIZE_DOMAINCENTER # random displacement to position of domain center; avoids correlated force-errors, important mainly for isolated systems (which otherwise might start to drift in some direction).
#--------------------------------------- TreePM Options; default: no Particle-Mesh
#PMGRID=512 # Enables particle mesh; number of cells used for grid in each dimension
#ASMTH=1.25 # This can be used to override the value assumed for the scale that defines the long-range/short-range force-split in the TreePM algorithm. The default value is 1.25, in mesh-cells.
#RCUT=6.0 # This can be used to override the maximum radius in which the short-range tree-force is evaluated (in case the TreePM algorithm is used). The default value is 4.5, given in mesh-cells.
#PM_ZOOM_OPTIMIZED # Particle-mesh calculation that is optimized for cosmological zoom simulations; disable for cosmological volume simulations.
#PLACEHIGHRESREGION=2 # Places a second, high-resolution PM grid; number encodes high-res particle types from which the extent of this second PM grid is calculated.
#ENLARGEREGION=1.1 # Factor by which high res region is increased with respect to max-min position of high-res particles
#GRIDBOOST=2 # Factor by which PMGRID is increased in non-periodic (or high res) PM calculation (if not set, code uses 2)
#FFT_COLUMN_BASED # Use column-based FFT; slightly slower, but necessary to achieve good load-balancing if number of tasks larger than PMGRID (usually the case for very large runs)
#--------------------------------------- Gravity softening
#NSOFTTYPES=4 # Number of different softening values to which particle types can be mapped.
#MULTIPLE_NODE_SOFTENING # If a tree node is to be used which is softened, this is done with the softenings of its different mass components
#INDIVIDUAL_GRAVITY_SOFTENING=2+4 # bitmask with particle types where the softenig type should be chosen with that of parttype 1 as a reference type
#ADAPTIVE_HYDRO_SOFTENING # Adaptive softening of gas cells depending on their size
#NSOFTTYPES_HYDRO=64 # Overrides number of discrete softening values for gas cellls when ADAPTIVE_HYDRO_SOFTENING (default is 64)
#--------------------------------------- External gravity; default: no external potential
#EXTERNALGRAVITY # master switch for external potential
#EXTERNALGY=0.0 # constant external gravity in y direction
#--------------------------------------- Static NFW Potential
#STATICNFW # static gravitational Navarro-Frenk-White (NFW) potential
#NFW_C=12 # concentration parameter of NFW potential
#NFW_M200=100.0 # mass causing the NFW potential
#NFW_Eps=0.01 # softening of NFW potential
#NFW_DARKFRACTION=0.87 # fraction in dark matter in NFW potential
#--------------------------------------- Static Isothermal Sphere Potential
#STATICISO # static gravitational isothermal sphere potential
#ISO_M200=100.0 # mass causing the isothermal sphere potential
#ISO_R200=160.0 # radius of the isothermal sphere potential
#ISO_Eps=0.1 # softening of isothermal sphere potential
#ISO_FRACTION=0.9 # fraction in dark matter in isothermal sphere potential
#--------------------------------------- Static Hernquist Potential
#STATICHQ # static gravitational Hernquist potential
#HQ_M200=186.015773 # mass causing the Hernquist potential
#HQ_C=10.0 # concentration parameter of Hernquist potential
#HQ_DARKFRACTION=0.9 # fraction in dark matter in Hernquist potential
#--------------------------------------- Time integration options
#FORCE_EQUAL_TIMESTEPS # variable but global timestep
#TREE_BASED_TIMESTEPS # non-local timestep criterion (take 'signal speed' into account)
#PM_TIMESTEP_BASED_ON_TYPES=2+4 # particle types that should be considered in setting the PM timestep
#NO_PMFORCE_IN_SHORT_RANGE_TIMESTEP # PM force is not included in short-range timestep criterion
#ENLARGE_DYNAMIC_RANGE_IN_TIME # This extends the dynamic range of the integer timeline from 32 to 64 bit
#--------------------------------------- MPI
#IMPOSE_PINNING # Enforce pinning of MPI tasks to cores if MPI does not do it
#IMPOSE_PINNING_OVERRIDE_MODE # Override MPI pinning, if present
#--------------------------------------- Single/Double Precision
#DOUBLEPRECISION=1 # Mode of double precision: not defined: single; 1: full double precision 2: mixed, 3: mixed, fewer single precisions; unless short of memory, use 1.
#DOUBLEPRECISION_FFTW # FFTW calculation in double precision
#OUTPUT_IN_DOUBLEPRECISION # snapshot files will be written in double precision
#INPUT_IN_DOUBLEPRECISION # initial conditions are in double precision
#OUTPUT_COORDINATES_IN_DOUBLEPRECISION # will always output coordinates in double precision
#NGB_TREE_DOUBLEPRECISION # if this is enabled, double precision is used for the neighbor node extension
#--------------------------------------- On the fly FOF groupfinder
#FOF # enable FoF output
#FOF_PRIMARY_LINK_TYPES=2 # 2^type for the primary dark matter type
#FOF_SECONDARY_LINK_TYPES=1+16+32 # 2^type for the types linked to nearest primaries
#FOF_SECONDARY_LINK_TARGET_TYPES= # should normally be set to a list of all dark matter types (in zoom runs), if not set defaults to FOF_PRIMARY_LINK_TYPES
#FOF_GROUP_MIN_LEN=32 # Minimum number of particles in one group (default is 32)
#FOF_LINKLENGTH=0.16 # Linkinglength for FoF (default=0.2)
#FOF_FUZZ_SORT_BY_NEAREST_GROUP=0 # sort fuzz particles by nearest group and generate offset table in catalog (=1 writes nearest group number to snapshot)
#FOF_STOREIDS # store IDs in group/subfind catalogue, do not order particles in snapshot files by group order
#--------------------------------------- Subfind
#SUBFIND # enables substructure finder
#SAVE_HSML_IN_SNAPSHOT # stores hsml, density, and velocity dispersion values in the snapshot files
#SUBFIND_CALC_MORE # calculates also the velocity dispersion in the local density estimate (this is automatically enabled by several other options, e.g. SAVE_HSML_IN_SNAPSHOT)
#SUBFIND_EXTENDED_PROPERTIES # adds calculation of further quantities related to angular momentum in different components
#--------------------------------------- Things for special behaviour
#RUNNING_SAFETY_FILE # if file './running' exists, do not start the run
#MULTIPLE_RESTARTS # Keep restart files instead of just two copies
#EXTENDED_GHOST_SEARCH # This extends the ghost search to the full 3x3 domain instead of the principal domain
#DOUBLE_STENCIL # this will ensure that the boundary region of the local mesh is deep enough to have a valid double stencil for all local cells
#TETRA_INDEX_IN_FACE # adds an index to each entry of VF[] and DC[] to one of the tetrahedra that share this edge
#NOSTOP_WHEN_BELOW_MINTIMESTEP # Simulation does not terminate when timestep drops below minimum timestep
#TIMESTEP_OUTPUT_LIMIT # Limit timesteps to write snaps on time for output lists with huge range
#ALLOWEXTRAPARAMS # Tolerate extra parameters that are not used
#FIX_SPH_PARTICLES_AT_IDENTICAL_COORDINATES # this can be used to load SPH ICs that contain identical particle coordinates
#RECOMPUTE_POTENTIAL_IN_SNAPSHOT # needed for postprocess option 18 that can be used to calculate potential values for a snapshot
#ACTIVATE_MINIMUM_OPENING_ANGLE # this does not open tree nodes under the relative opening criterion any more if their opening angle has dropped below a minimum angle
#USE_DIRECT_IO_FOR_RESTARTS # Try to use O_DIRECT for low-level read/write operations of restart files to circumvent the linux kernel page caching
#HUGEPAGES # use huge pages for memory allocation, through hugetlbfs library
#DETAILEDTIMINGS # creates individual timings entries for primary/secondary kernels to diagnose work-load balancing
#BITS_PER_DIMENSION=42 # Peano-Hilbert order
#--------------------------------------- input options
#COMBINETYPES # reads in the IC file types 4+5 as type 3
#LOAD_TYPES=1+2+4+16+32 # load only specific types sum(2^type)
#READ_COORDINATES_IN_DOUBLE # read coordinates in double precision
#LONGIDS # Store IDs in type unsigned long long instead of unsigned int
#OFFSET_FOR_NON_CONTIGUOUS_IDS # Determines offset of IDs on startup instead of using fixed offset.
#GENERATE_GAS_IN_ICS # Generates gas from dark matter only ICs.
#SPLIT_PARTICLE_TYPE=4+8 # Overrides splitting particle type 1 in GENERATE_GAS_IN_ICS use sum(2^type)
#SHIFT_BY_HALF_BOX # Shift all positions by half a box size after reading in
#NTYPES_ICS=6 # number of particle types in ICs, if not NTYPES (only works for 6, and non-HDF5 ICs!)
#READ_MASS_AS_DENSITY_IN_INPUT # Reads the mass field in the IC as density
#--------------------------------------- special input options
#IDS_OFFSET=1 # Override offset for gas particles if created from DM
#READ_DM_AS_GAS # reads in dark matter particles as gas cells
#TILE_ICS # tile ICs by TileICsFactor in each dimension
#--------------------------------------- output fields in snapshots--Default output filds are: position, velocity, ID, mass, spec. internal energy (gas), density(gas)
#OUTPUT_TASK # output MPI task
#OUTPUT_TIMEBIN_HYDRO # output hydrodynamics time-bin
#OUTPUT_PRESSURE_GRADIENT # output pressure gradient
#OUTPUT_DENSITY_GRADIENT # output density gradient
#OUTPUT_VELOCITY_GRADIENT # output velocity gradient
#OUTPUT_BFIELD_GRADIENT # output magnetic field gradient
#OUTPUT_MESH_FACE_ANGLE # output max. face angle of cells
#OUTPUT_VERTEX_VELOCITY # output velocity of cell
#OUTPUT_VERTEX_VELOCITY_DIVERGENCE # output deivergence of cell velocity
#OUTPUT_VOLUME # output volume of cells; note that this can always be computat as both, density and mass of cells are by default in output
#OUTPUT_CENTER_OF_MASS # output center of mass of cells (position is mesh-generating point)
#OUTPUT_SURFACE_AREA # output surface area of cells
#OUTPUT_PRESSURE # output pressure of gas
#OUTPUTPOTENTIAL # output potential at particle position
#OUTPUTACCELERATION # output gravitational acceleration
#OUTPUTTIMESTEP # output timestep of particle
#OUTPUT_SOFTENINGS # output particle softenings
#OUTPUTGRAVINTERACTIONS # output gravitatational interactions (from the tree) of particles
#OUTPUTCOOLRATE # outputs cooling rate, and conduction rate if enabled
#OUTPUT_DIVVEL # output velocity divergence
#OUTPUT_CURLVEL # output velocity curl
#OUTPUT_COOLHEAT # output actual energy loss/gain in cooling/heating routine
#OUTPUT_VORTICITY # output vorticity of gas
#OUTPUT_CSND # output sound speed. This one is only used for tree-based timesteps! Calculate from hydro quantities in postprocessing if required for science applications.
#--------------------------------------- output options
#PROCESS_TIMES_OF_OUTPUTLIST # goes through times of output list prior to starting the simulaiton to ensure that outputs are written as close to the desired time as possible (as opposed to at next possible time if this flag is not active)
#REDUCE_FLUSH # only flush output to log-files in predefined intervals
#OUTPUT_EVERY_STEP # Create snapshot on every (global) synchronization point, independent of parameters choosen or output list.
#OUTPUT_CPU_CSV # output of a cpu.csv file on top of cpu.txt
#HAVE_HDF5 # needed when HDF5 I/O support is desired (recommended)
#HDF5_FILTERS # activate snapshot compression and checksum for HDF5 output
#OUTPUT_XDMF # writes an .xmf file for each snapshot, which can be read by visit (with the hdf5 snapshot)
#--------------------------------------- Testing and Debugging options
#DEBUG # enables core-dumps
#VERBOSE # reports readjustments of buffer sizes
#--------------------------------------- Mesh-relaxing or mesh-adding (this will not carry out a simulation)
#MESHRELAX # this keeps the mass constant and only regularizes the mesh
#ADDBACKGROUNDGRID=16 # Re-grid hydrodynamics quantities on a Oct-tree AMR grid. This does not perform a simulation.