# Chandrasekhar dynamical friction¶

class galpy.potential.ChandrasekharDynamicalFrictionForce(amp=1.0, GMs=0.1, gamma=1.0, rhm=0.0, dens=None, sigmar=None, const_lnLambda=False, minr=0.0001, maxr=25.0, nr=501, ro=None, vo=None)[source]

Class that implements the Chandrasekhar dynamical friction force

$\mathbf{F}(\mathbf{x},\mathbf{v}) = -2\pi\,[G\,M]\,[G\,\rho(\mathbf{x})]\,\ln[1+\Lambda^2] \,\left[\mathrm{erf}(X)-\frac{2X}{\sqrt{\pi}}\exp\left(-X^2\right)\right]\,\frac{\mathbf{v}}{|\mathbf{v}|^3}\,$

on a mass (e.g., a satellite galaxy or a black hole) $$M$$ at position $$\mathbf{x}$$ moving at velocity $$\mathbf{v}$$ through a background density $$\rho$$. The quantity $$X$$ is the usual $$X=|\mathbf{v}|/[\sqrt{2}\sigma_r(r)$$. The factor $$\Lambda$$ that goes into the Coulomb logarithm is taken to be

$\Lambda = \frac{r/\gamma}{\mathrm{max}\left(r_{\mathrm{hm}},GM/|\mathbf{v}|^2\right)}\,,$

where $$\gamma$$ is a constant. This $$\gamma$$ should be the absolute value of the logarithmic slope of the density $$\gamma = |\mathrm{d} \ln \rho / \mathrm{d} \ln r|$$, although for $$\gamma<1$$ it is advisable to set $$\gamma=1$$. Implementation here roughly follows [2] and earlier work.

__init__(amp=1.0, GMs=0.1, gamma=1.0, rhm=0.0, dens=None, sigmar=None, const_lnLambda=False, minr=0.0001, maxr=25.0, nr=501, ro=None, vo=None)[source]

Initialize a Chandrasekhar Dynamical Friction force [1].

Parameters:
• amp (float) – Amplitude to be applied to the potential (default: 1).

• GMs (float or Quantity) – Satellite mass; can be a Quantity with units of mass or Gxmass; can be adjusted after initialization by setting obj.GMs= where obj is your ChandrasekharDynamicalFrictionForce instance (note that the mass of the satellite can not be changed simply by multiplying the instance by a number, because he mass is not only used as an amplitude).

• rhm (float or Quantity) – Half-mass radius of the satellite (set to zero for a black hole); can be adjusted after initialization by setting obj.rhm= where obj is your ChandrasekharDynamicalFrictionForce instance.

• gamma (float) – Free-parameter in $$\Lambda$$.

• dens (Potential instance or list thereof, optional) – Potential instance or list thereof that represents the density [default: LogarithmicHaloPotential(normalize=1.,q=1.)].

• sigmar (callable, optional) – Function that gives the velocity dispersion as a function of r (has to be in natural units!); if None, computed from the dens potential using the spherical Jeans equation (in galpy.df.jeans) assuming zero anisotropy; if set to a lambda function, the object cannot be pickled (so set it to a real function).

• const_lnLambda (bool, optional) – If set to a number, use a constant ln(Lambda) instead with this value.

• minr (float or Quantity, optional) – Minimum r at which to apply dynamical friction: at r < minr, friction is set to zero.

• maxr (float or Quantity, optional) – Maximum r for which sigmar gets interpolated; for best performance set this to the maximum r you will consider.

• nr (int, optional) – Number of radii to use in the interpolation of sigmar.

• ro (float or Quantity, optional) – Distance scale for translation into internal units (default from configuration file).

• vo (float or Quantity, optional) – Velocity scale for translation into internal units (default from configuration file).

Notes

• 2011-12-26 - Started - Bovy (NYU)

• 2018-03-18 - Re-started: updated to r dependent Lambda form and integrated into galpy framework - Bovy (UofT)

• 2018-07-23 - Calculate sigmar from the Jeans equation and interpolate it; allow GMs and rhm to be set on the fly - Bovy (UofT)

References