Wiki

Clone wiki

ramses / unbinding

Particle Unbinding

Quickstart Guide

To activate particle unbinding, you need to set two runtime parameters in the &RUN_PARAMS namelist (in addition to whatever you have in there):

&RUN_PARAMS
clumpfind=.true.
unbind=.true.
/

The code will create output_XXXXX/unbinding_XXXXX.outYYYYY files following the same logic as the other particle output files output_XXXXX/part_XXXXX.outYYYYY files. They will contain the associated clump ID of each particle. In only works when particles, i.e. dark matter, is present in your simulation.

Important notes

  • You can't do particle unbinding without doing clump/halo finding.

  • Some parts of the code (e.g. binning particles in mass profiles of halos) rely on consistent floating-point operations. The (intel) fortran compiler however doesn't necessarily use value-safe optimisations, which may lead to errors resulting in warnings, but the code doesn't crash. The error should be small (~1e-16), and you may choose to ignore it. Otherwise, you might want to compile the code with the -fp-model precise flag for intel, or the appropriate flag for the compiler you'd like to use.

  • The previously available unbinding_formatted_output namelist parameter has been removed. Make sure you remove it from your namelists if you used it!

  • For anything else regarding particle unbinding, feel free to contact Mladen Ivkovic (mladen.ivkovic [at] hotmail DOT com)

Documentation

What it does

The purpose of particle unbinding is to identify unbound particles in clumps as identified by the clumpfinder and pass them on to the parent clumps, until the halo-namegiver clumps are reached (where there are no more parent structures to pass the particles on to.)

It will write unformatted output in output_XXXXX/unbinding_XXXXX.outYYYYY files the same way it is done for any other backup files in ramses, containing the assigned clump IDs of every particle after unbinding. The clump IDs correspond to the clump IDs as used in the halo_XXXXX.txtYYYYY and clump_XXXXX.txtYYYYY files. If a particle has clump ID 0, it wasn't found to be in any clump.

How it works

First all particles that are in a clump are gathered and assigned the corresponding clump ID. Simultaneously, linked lists of these particles are created for each clump that is not a halo-namegiver, i.e. that is not a clump whose ID will be the halo ID. Such clumps are never merged into another clump, but may have arbitrarily many clumps merged into them. Then clump properties such as centre of mass, the mass profile and bulk velocity are acquired using the linked lists. Starting with the lowest clump level, particles are checked if they are bound to the clump they are assigned to. By default, this unbinding is done iteratively: The clump properties are recomputed using only the remaining particles, and then all particles checked again. Furthermore, by default particles are not allowed to leave the boundaries of the clump they're assigned to in order to be considered bound; For this, the potential at the closest saddle from the clump's centre of mass to a neighbouring clump is subtracted from the particle's energy. (This default behaviour can however be changed with the namelist parameters saddle_pot and iter_properties). Also note that the bulk velocity and centre of mass of a clump are recovered using only the bound particles per iteration, the mass profile however always uses all included particles, including the substructure particles. The iteration per clump level stops when the bulk density of each clump of that level has converged, i.e. v_clump_old/v_clump_new < conv_limit (or when a maximal number of iterations is reached). Particles that are found to be not bound are passed to the parent structure for examination, provided such a structure exists, and the iterations repeated for the next clump level, provided there are clumps of a higher level. There are two possibilities implemented to define the clump's centre. By default, the centre will be the position of the associated density peak. However using the -DUNBINDINGCOM preprocessing flag, you can make the centre be the centre of mass, which will also be determined iteratively like the bulk velocity.

More details can be found here.

Namelist Parameters for unbinding

Can be set in the UNBINDING_PARAMS block

Name default type function
particlebased_clump_output= .false. logical write resulting clump properties based on particles after unbinding, not default cell-based properties
nmassbins= 50 integer Number of bins for the mass binning of the cumulative mass profile. Any integer > 1.
logbins= .true. logical use logarithmic binning distances for cumulative mass profiles (and gravitational potential of clumps). If false, the code will use linear binning distances.
saddle_pot= .true. logical Take neighbouring structures into account; Cut potential off at closest saddle.
iter_properties= .true. logical whether to unbind multiple times with updated clump properties determined by earlier unbindings
conv_limit = 0.01 real convergence limit. If v_clump_old/v_clump_new < conv_limit, stop iterating for this clump. (only used when iter_properties=.true.)
repeat_max = 100 integer maximal number of loops per level for iterative unbinding (in case a clump doesn't converge) (shouldn't happen) (only used when iter_properties=.true.)

Updated