---
title: 'Galpy MWPotential2014: Milky Way Model'
url: https://www.emergentmind.com/topics/galpy-mwpotential2014-model
type: topic
---

# Galpy MWPotential2014: Milky Way Model

MWPotential2014 is a composite, axisymmetric galactic potential implemented in the galpy library to represent the Milky Way’s time-independent gravitational field. This three-component model consists of a power-law spherical bulge with exponential cutoff, a Miyamoto–Nagai disk, and a Navarro–Frenk–White (NFW) dark-matter halo. All components are physically motivated and parameterized using observed Galactic properties, with dimensional scaling fixed by the solar circle: $R_0 = 8$ kpc, $V_0 = 220$ km s$^{-1}$ [1412.3451].

## 1. Analytical Formulation of Components

MWPotential2014 is constructed as the sum of three axisymmetric potentials, each corresponding to a distinct Milky Way component:

- **Bulge:** Realized as a power-law spherical density profile with exponential cutoff (PowerSphericalPotentialwCutoff). The density is
  $$
  \rho_b(r) = \rho_0 \left( \frac{r}{r_c} \right)^{-\alpha} \exp[-r/r_c]
  $$
  where $\alpha$ is the inner power-law slope, $r_c$ the cutoff radius, and $\rho_0$ the normalization. The analytic potential is
  $$
  \Phi_b(r) = -4\pi G \rho_0 r_c^2 \frac{1}{2-\alpha} \left[ 1 - \left( \frac{r}{r + r_c} \right)^{2-\alpha} \right].
  $$

- **Disk:** Modeled as a Miyamoto–Nagai potential:
  $$
  \Phi_d(R,z) = - \frac{G M_d}{\sqrt{R^2 + \left[a + \sqrt{z^2 + b^2}\right]^2}}
  $$
  with $M_d$ the disk mass, $a$ the radial scale length, and $b$ the vertical scale parameter.

- **Halo:** Represented by a standard NFW profile (NFWPotential):
  $$
  \rho_h(r) = \frac{\rho_s}{(r/a)(1 + r/a)^2}, \quad
  \Phi_h(r) = -4 \pi G \rho_s a^3 \frac{\ln(1 + r/a)}{r}
  $$
  where $a$ is the scale radius and $\rho_s$ the characteristic density.

Each term is implemented in galpy in dimensionless internal units, as described below.

## 2. Numerical Parameters and Units

The galpy package establishes its dimensionless unit system by setting:
- $R_0 = 8$ kpc (default length unit)
- $V_0 = 220$ km s$^{-1}$ (default velocity unit)
- $T_0 = R_0/V_0 \simeq 0.0356$ Gyr (time unit)

Masses and amplitudes (“amp”) are specified so that
$$
\text{amp} = \frac{G M}{R_0 V_0^2}
$$

Parameter values for MWPotential2014:

| Component                | Parameter   | Value in code units | Physical interpretation                        |
|--------------------------|-------------|---------------------|-----------------------------------------------|
| Bulge (Powerlaw+Cutoff)  | $\alpha$    | 1.8                 | Inner slope                                   |
|                          | $r_c$       | 0.075               | $r_c = 0.6$ kpc                               |
|                          | amp         | 0.053823…           | $M_b \sim 5\times10^9\,M_\odot$               |
| Disk (Miyamoto–Nagai)    | $a$         | 0.5                  | $a=4$ kpc                                     |
|                          | $b$         | 0.0375              | $b=0.3$ kpc                                   |
|                          | amp         | 0.6097…             | $M_d \sim 6.8\times10^{10} M_\odot$           |
| Halo (NFW)               | $a$         | 2.0                 | $r_s=16$ kpc                                  |
|                          | amp         | 0.3314…             | $M_{200}\sim8\times10^{11}\,M_\odot$          |

These values are hard-coded in galpy's MWPotential2014 object [1412.3451].

## 3. Construction and Circular Velocity Curve

The total gravitational potential is formed by summing the three components:
$$
\Phi(R,z) = \Phi_b(r) + \Phi_d(R,z) + \Phi_h(r), \quad r = \sqrt{R^2 + z^2}
$$

For axisymmetric systems, the circular velocity in the disk mid-plane is
$$
v_c^2(R) = R \left. \frac{\partial \Phi}{\partial R} \right|_{z=0} = R F_R(R,0)
$$
with $F_R = -\partial \Phi / \partial R$. In galpy, this is computed via `vcirc(MWPotential2014, R)` where $R$ is in units of $R_0$.

For the preset parameter choices, the model yields $v_c(R_0) \approx 220$ km s$^{-1}$ at the solar circle (by construction) and an NFW-like decline at large radii.

## 4. Observational Constraints and Reference Motivations

MWPotential2014 parameter values rely on key Galactic observations and literature:

- **Solar location:** Adopted $R_0 = 8$ kpc, $V_0 = 220$ km s$^{-1}$.
- **Bulge:** Inner slope $\alpha=1.8$ fits low-latitude star count data (e.g., Binney et al. 2011).
- **Disk:** $a = 4$ kpc, $b = 0.3$ kpc, consistent with wide-field photometric surveys (Jurić et al. 2008).
- **Halo:** Scale radius $r_s = 16$ kpc; normalization so $v_c$ at $R_0$ matches observed rotation, with mass profile matching NFW at large radii.
- **Masses:** $M_b \sim 5 \times 10^{9} M_\odot$, $M_d \sim 6.8 \times 10^{10} M_\odot$, $M_{200} \sim 8 \times 10^{11} M_\odot$.

Principal references include Miyamoto & Nagai (1975), Hernquist & Ostriker (1992), Navarro, Frenk & White (1996), Jurić et al. (2008), Binney & Tremaine (2008), and Bovy (2015) [1412.3451].

## 5. Programmatic Usage and Example

The MWPotential2014 model is a built-in object in galpy. Python users can instantiate, diagnose, and manipulate it in code. An example workflow:

```python
import numpy as np
import matplotlib.pyplot as plt
from galpy.potential import MWPotential2014, vcirc
from galpy.orbit import Orbit

# Mid-plane circular velocity curve, 0.1–20 kpc
Rs = np.linspace(0.1, 20.0, 200)  # kpc
vcs = vcirc(MWPotential2014, Rs/8.0) * 220.0  # km/s
plt.plot(Rs, vcs, 'k-', lw=2)
plt.axvline(8.0, ls='--', color='gray')
plt.xlabel('R [kpc]')
plt.ylabel('v_c(R) [km/s]')
plt.title('MWPotential2014 Rotation Curve')
plt.show()

# Orbit integration: nearly circular at R=9 kpc
o = Orbit(vxvv=[9.0/8.0, 0.0, 0.0, 0.22, 0.0, 0.0])
ts = np.linspace(0.0, 2.0, 1001)
o.integrate(ts, MWPotential2014)
plt.figure()
o.plot(d1='R', d2='t', ro=8., vo=220., color='b', overplot=False)
o.plot(d1='z', d2='t', ro=8., vo=220., color='r', overplot=True)
plt.legend(['R(t)', 'z(t)'])
plt.xlabel('t [Gyr]')
plt.ylabel('R [kpc], z [kpc]')
plt.show()
```

Parameter attributes are accessible directly, e.g.,

```python
bulge = MWPotential2014[0]
print(bulge.alpha, bulge.rc, bulge.amp)
```
Normalization (`amp`) and unit scales (`ro`, `vo`) can be adjusted on instantiation for model variants. The full codebase, documentation, and reference test suite are publicly available [1412.3451].

## 6. Related Methodological Considerations

MWPotential2014’s design supports rapid numerical orbit integration using various Runge–Kutta and symplectic schemes available within galpy. The package framework permits arbitrary combinations of built-in and user-defined potential components, facilitating investigation of time-independence, axisymmetry, and parameter sensitivity. Calculations of action–angle coordinates and orbital frequencies are also supported for analysis within general axisymmetric contexts [1412.3451].

The MWPotential2014 model constitutes a reference Milky Way potential compatible with contemporary large-scale observations, supporting dynamical modeling, rotation curve analysis, and kinematic studies across the Galactic disk, bulge, and halo.

Source: https://www.emergentmind.com/topics/galpy-mwpotential2014-model