Interpolated axisymmetric potential

The interpRZPotential class provides a general interface to generate interpolated instances of general three-dimensional, axisymmetric potentials or lists of such potentials. This interpolated potential can be used in any function where other three-dimensional galpy potentials can be used. This includes functions that use C to speed up calculations, if the interpRZPotential instance was set up with enable_c=True. Initialize as

>>> from galpy import potential
>>> ip= potential.interpRZPotential(potential.MWPotential,interpPot=True)

which sets up an interpolation of the potential itself only. The potential and all different forces and functions (dens, vcirc, epifreq, verticalfreq, dvcircdR) are interpolated separately and one needs to specify that these need to be interpolated separately (so, for example, one needs to set interpRforce=True to interpolate the radial force, or interpvcirc=True to interpolate the circular velocity).

When points outside the grid are requested within the python code, the instance will fall back on the original (non-interpolated) potential. However, when the potential is used purely in C, like during orbit integration in C or during action–angle evaluations in C, there is no way for the potential to fall back onto the original potential and nonsense or NaNs will be returned. Therefore, when using interpRZPotential in C, one must make sure that the whole relevant part of the (R,z) plane is covered. One more time:

Warning

When an interpolated potential is used purely in C, like during orbit integration in C or during action–angle evaluations in C, there is no way for the potential to fall back onto the original potential and nonsense or NaNs will be returned. Therefore, when using interpRZPotential in C, one must make sure that the whole relevant part of the (R,z) plane is covered.

class galpy.potential.interpRZPotential(RZPot=None, rgrid=(np.float64(-4.605170185988091), np.float64(2.995732273553991), 101), zgrid=(0.0, 1.0, 101), logR=True, interpPot=False, interpRforce=False, interpzforce=False, interpDens=False, interpvcirc=False, interpdvcircdr=False, interpepifreq=False, interpverticalfreq=False, ro=None, vo=None, use_c=False, enable_c=False, zsym=True, numcores=None)[source]

Class that interpolates a given potential on a grid for fast orbit integration

__init__(RZPot=None, rgrid=(np.float64(-4.605170185988091), np.float64(2.995732273553991), 101), zgrid=(0.0, 1.0, 101), logR=True, interpPot=False, interpRforce=False, interpzforce=False, interpDens=False, interpvcirc=False, interpdvcircdr=False, interpepifreq=False, interpverticalfreq=False, ro=None, vo=None, use_c=False, enable_c=False, zsym=True, numcores=None)[source]

Initialize an interpRZPotential instance.

Parameters:
  • RZPot (RZPotential or list of such instances) – RZPotential to be interpolated.

  • rgrid (tuple, optional) – R grid to be given to linspace as in rs= linspace(*rgrid).

  • zgrid (tuple, optional) – z grid to be given to linspace as in zs= linspace(*zgrid).

  • logR (bool, optional) – If True, rgrid is in the log of R so logrs= linspace(*rgrid).

  • interpPot (bool, optional) – If True, interpolate the potential.

  • interpRforce (bool, optional) – If True, interpolate the radial force.

  • interpzforce (bool, optional) – If True, interpolate the vertical force.

  • interpDens (bool, optional) – If True, interpolate the density.

  • interpvcirc (bool, optional) – If True, interpolate the circular velocity.

  • interpdvcircdr (bool, optional) – If True, interpolate the derivative of the circular velocity with respect to R.

  • interpepifreq (bool, optional) – If True, interpolate the epicyclic frequency.

  • interpverticalfreq (bool, optional) – If True, interpolate the vertical frequency.

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

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

  • use_c (bool, optional) – Use C to speed up the calculation of the grid.

  • enable_c (bool, optional) – Enable use of C for interpolations.

  • zsym (bool, optional) – If True (default), the potential is assumed to be symmetric around z=0 (so you can use, e.g., zgrid=(0.,1.,101)).

  • numcores (int, optional) – If set to an integer, use this many cores (only used for vcirc, dvcircdR, epifreq, and verticalfreq; NOT NECESSARILY FASTER, TIME TO MAKE SURE).

Notes

  • 2010-07-21 - Written - Bovy (NYU)

  • 2013-01-24 - Started with new implementation - Bovy (IAS)