Potential (galpy.potential)

3D potentials

Specific potentials

All of the following potentials can also be modified by the specific WrapperPotentials listed below.

Ellipsoidal triaxial potentials

galpy has very general support for implementing triaxial (or the oblate and prolate special cases) of ellipsoidal potentials through the general EllipsoidalPotential class. These potentials have densities that are uniform on ellipsoids, thus only functions of \(m^2 = x^2 + \frac{y^2}{b^2}+\frac{z^2}{c^2}\). New potentials of this type can be implemented by inheriting from this class and implementing the _mdens(self,m), _psi(self,m), and _mdens_deriv functions for the density, its integral with respect to \(m^2\), and its derivative with respect to m, respectively. For adding a C implementation, follow similar steps (use PerfectEllipsoidPotential as an example to follow).

Note that the Ferrers potential listed below is a potential of this type, but it is currently not implemented using the EllipsoidalPotential class.

Spiral, bar, other triaxial, and miscellaneous potentials

All galpy potentials can also be made to rotate using the SolidBodyRotationWrapperPotential listed in the section on wrapper potentials below.

Dissipative forces

In addition to these classes, a simple Milky-Way-like potential fit to data on the Milky Way is included as galpy.potential.MWPotential2014 (see the galpy paper for details). Note that this potential assumes a circular velocity of 220 km/s at the solar radius at 8 kpc; see arXiv/1412.3451 for full information on how this potential was fit. This potential is defined as

>>> bp= PowerSphericalPotentialwCutoff(alpha=1.8,rc=1.9/8.,normalize=0.05)
>>> mp= MiyamotoNagaiPotential(a=3./8.,b=0.28/8.,normalize=.6)
>>> np= NFWPotential(a=16/8.,normalize=.35)
>>> MWPotential2014= [bp,mp,np]

and can thus be used like any list of Potentials. If one wants to add the supermassive black hole at the Galactic center, this can be done by

>>> from galpy.potential import KeplerPotential
>>> from galpy.util import bovy_conversion
>>> MWPotential2014wBH= [MWPotential2014,KeplerPotential(amp=4*10**6./bovy_conversion.mass_in_msol(220.,8.))]

for a black hole with a mass of \(4\times10^6\,M_{\odot}\) (this works because a list of Potential instances can contain a nested list of Potential instances in versions>=1.4). If you want to take into account dynamical friction for, say, an object of mass \(5\times 10^{10}\,M_\odot\) and a half-mass radius of 5 kpc, do

>>> from galpy.potential import ChandrasekharDynamicalFrictionForce
>>> from astropy import units
>>> cdf= ChandrasekharDynamicalFrictionForce(GMs=5.*10.**10.*units.Msun,
                                             rhm=5.*units.kpc,
                                             dens=MWPotential2014)
>>> MWPotential2014wDF= [MWPotential2014,cdf]

where we have specified the parameters of the dynamical friction with units; alternatively, convert them directly to galpy natural units as

>>> cdf= ChandrasekharDynamicalFrictionForce(GMs=5.*10.**10./bovy_conversion.mass_in_msol(220.,8.),
                                             rhm=5./8.,
                                             dens=MWPotential2014)
>>> MWPotential2014wDF= [MWPotential2014,cdf]

As explained in this section, without this black hole or dynamical friction, MWPotential2014 can be used with Dehnen’s gyrfalcON code using accname=PowSphwCut+MiyamotoNagai+NFW and accpars=0,1001.79126907,1.8,1.9#0,306770.418682,3.0,0.28#0,16.0,162.958241887.

An older version galpy.potential.MWPotential of a similar potential that was not fit to data on the Milky Way is defined as

>>> mp= MiyamotoNagaiPotential(a=0.5,b=0.0375,normalize=.6)
>>> np= NFWPotential(a=4.5,normalize=.35)
>>> hp= HernquistPotential(a=0.6/8,normalize=0.05)
>>> MWPotential= [mp,np,hp]

galpy.potential.MWPotential2014 supersedes galpy.potential.MWPotential.

2D potentials

General instance routines

Use as Potential-instance.method(...)

General axisymmetric potential instance routines

Use as Potential-instance.method(...)

Specific potentials

All of the 3D potentials above can be used as two-dimensional potentials in the mid-plane.

In addition, a two-dimensional bar potential, two spiral potentials, the Henon & Heiles (1964) potential, and some static non-axisymmetric perturbations are included

1D potentials

General instance routines

Use as Potential-instance.method(...)

Specific potentials

One-dimensional potentials can also be derived from 3D axisymmetric potentials as the vertical potential at a certain Galactocentric radius

Potential wrappers

Gravitational potentials in galpy can also be modified using wrappers, for example, to change their amplitude as a function of time. These wrappers can be applied to any galpy potential (although whether they can be used in C depends on whether the wrapper and all of the potentials that it wraps are implemented in C). Multiple wrappers can be applied to the same potential.