Merger Tree Node Evolvers¶
Class providing evolvers for individual nodes in a merger tree—the objects responsible for integrating the ODEs that govern the physical properties of a single halo or galaxy from one timestep to the next. The node evolver advances all state variables (mass, spin, metallicity, etc.) using the relevant physics modules and handles special events such as node promotion (when a node’s time equals its parent’s) and pre-merge processing. It also checks whether node properties have converged to the required accuracy.
Default implementation: mergerTreeNodeEvolverStandard
Methods¶
evolveAdvance the physical properties of the given
nodefrom its current time totimeEndby integrating the relevant ODE physics, settinginterruptedandfunctionInterruptif the evolution must be paused for an event such as node promotion or a merger.type(mergerTree) tree[inout]type(treeNode) node[inout]double precision timeEnd[in]logical interrupted[out]procedure(interruptTask) functionInterrupt[out]class(galacticStructureSolverClass) galacticStructureSolver__[in]class(ompLockClass) treeLock[inout]integer(kind_int8) systemClockMaximum(optional) [in]integer status(optional) [out]
promotePromote
nodeto its parent node, then destroy it.type(treeNode) node[inout]
mergeHandles instances where
nodeis about to merge with its parent node.type(treeNode) node[inout]
isAccurate→logicalReturn true if a tree node property is within expected accuracy of a given value.
double precision valueNode[in]double precision valueExpected[in]
mergerTreeNodeEvolverStandard¶
The standard merger tree node evolver.
If the parameter [enforceNonNegativity] = true then properties which are marked as being non-negative (e.g. masses) are evolved in such a way to ensure that they remain non-negative. This typically requires smaller time step size and so longer run times. In some cases it may be impossible to ensure non-negativity even for arbitrarily small timesteps[1]. In such cases, if a property remains negative with the smallest possible time step, it will be zeroed and evolution continues.
(Default implementation)
Parameters
[odeToleranceAbsolute](real; default0.01d0) — The absolute tolerance used in solving differential equations for node evolution.[odeToleranceRelative](real; default1.0d-2) — The relative tolerance used in solving differential equations for node evolution.[odeJacobianStepSizeRelative](real; default0.01d0) — The relative step size to use when perturbing properties for purposes of computing a finite difference approximation to the ODE system Jacobian.[odeAlgorithm](string; one ofrungeKuttaCashKarp,rungeKuttaSecondOrder,rungeKutta,rungeKuttaFehlberg,rungeKuttaPrinceDormand,multistepAdams,bulirschStoer,bdf; defaultrungeKuttaCashKarp) — The algorithm to use in the ODE solver.[odeAlgorithmNonJacobian](string; one ofrungeKuttaCashKarp,rungeKuttaSecondOrder,rungeKutta,rungeKuttaFehlberg,rungeKuttaPrinceDormand,multistepAdams,bulirschStoer,bdf; defaultrungeKuttaCashKarp) — The algorithm to use in the ODE solver.[odeLatentIntegratorType](string; one ofgaussKronrod,trapezoidal; defaulttrapezoidal) — The type of integrator to use for latent variables.[odeLatentIntegratorOrder](integer; default15) — The order of the integrator for latent variables.[odeLatentIntegratorIntervalsMaximum](integer; default1000) — The maximum number of intervals allowed in the integrator for latent variables.[profileOdeEvolver](boolean; default.false.) — Specifies whether or not to profile the ODE evolver.[reuseODEStepSize](boolean; default.true.) — If true, re-use the previous ODE step size when resuming the evolution of a node. Otherwise, the initial step size is not specified.[enforceNonNegativity](boolean; default.false.) — If true, properties that are marked as non-negative (e.g. masses) will be evolved in such a way as to enforce that non-negativity.