Table of contents
The general high-level code structure of Arepo is quite similar to the Gadget code, but with significant changes and improvements. However, keeping in mind that the code architecture originates from an Tree-PM-SPH code can help to understand why certain things are done in certain ways.
One of the obvious signs of this are the names of some global
structures and functions. For example the array holding the
information for gas cells is called SphP. Another example would be the
src/init/density.c, which used to be an SPH density
calculation, but is now only used for an estimate for the typical
distance to neighbouring cells. Another aspect is the presence of the
neighbour tree, a search-tree structure on gas cells. In practice this
means that many of the routines that depend on the state of
neighbouring cells, including sub-grid feedback models etc., can be
based on this neighbour search. This makes it possible to port these
models relatively easily from earlier versions of Gadget to Arepo.
However, it is important to also realize that routines written for the Gadget code will in general not work without some porting adjustments when inserted in to Arepo. We thus encourage developers to carefully test that their implementations still have the intended effect when such a porting is done. Apart from the differences in implementation, it is also important to realize that a grid-based finite volume scheme can react differently to certain sub-grid implementations than a particle-based approach.
Differences to the development Version
This public version of Arepo was branched off from the development version in November 2017, and then Rainer Weinberger substantially cut it down, cleaned it up and completed the documentation. The main reason for doing this was to provide a code to the community that researchers are able to understand and use without the need of an extensive introduction by one of the authors. We believe that the public version, which is better documented at a developer level, also provides a better starting point for new developments.
The general idea for this public verson was to preserve the
well-tested code with a limited number of changes. However, some
compile-time options have been eliminated and to recover the same
running mode in the development version of Arepo, the following
compile-time flags need to be set in
PERIODIC(has become obsolete over the years)
VORONOI(the development version also has an AMR mode)
VORONOI_DYNAMIC_UPDATE(in practice now a default)
AUTO_SWAP_ENDIAN_READIC(only relevant for file formats 1 and 2)
- the switch
EXACT_GRAVITY_REACTION(see src/main/allvars.h) in the public version. This is not the case in the development version where all these flags need to be set individually in Config.sh.