vcdisk.vcbulge

vcdisk.vcbulge(rad, sb, q=0.99, inc=0.0)

Circular velocity of a spheroidal oblate bulge of arbitrary surface density.

This function calculates \(V_{\rm bulge}\) for a flattened bulge, whose isodensity surfaces \(\rho=\rho(m)\) are stratified on similar spheroids with \(m^2=R^2+(z^2/q^2)\). This is done with an Abel inversion to get the 3D density \(\rho(m)\) from the observed projected density and then by integration of the 3D density to get the gravitational potential. See e.g. Eq. (2.132) in [BT2008].

Parameters
  • rad (list or numpy.ndarray) – array of radii in \(\rm kpc\).

  • sb (list or numpy.ndarray) – array of surface densities in \(\rm M_\odot / kpc^2\).

  • q (float, optional) – intrinsic axis ratio of the spheroid. This is related to the ellipticity of the observed isophotal contours \(\epsilon\) and the inclination angle \(i\) (i.e. the inc parameter) by \((1-\epsilon)^2 = q^2+(1-q^2)\cos^2 i\). This parameter is \(0<q<1\) for oblate bulges. The spherical case \(q=1\) is singular in this formulation and will fallback to vcdisk.vcbulge_sph().

  • inc (float, optional) – inclination in degrees of the line-of-sight with respect to the symmetry axis of the spheroid. inc=0 is edge-on, inc=90 is face-on.

Returns

array of \(V_{\rm bulge}\) velocities in \(\rm km/s\).

Return type

numpy.ndarray

Notes

This function calculates \(V_{\rm bulge}\) for a spheroidal bulge, whose isodensity surfaces are stratified on similar spheroids:

\[\rho=\rho(m), \qquad {\rm with}\,\,\, m^2=R^2+\frac{z^2}{q^2},\]

where \(q\) is the intrinsic axis ratio. The calculation is done following the formalism of [Noordermeer08], using their Eq. (10).

In practice this is done in two steps. First the 3D density \(\rho(m)\) is computed with an Abel inversion:

\[\rho(m) = -\frac{1}{\pi} \int_m^\infty \frac{{\rm d}I}{{\rm d}R} \frac{{\rm d}R}{\sqrt{R^2-m^2}},\]

where \(I(R)\) is the observed surface density. Since this integral has a singularity at the lower bound of integration, where \(R=m\), it is better to change the integration variable to \(u={\rm arccosh}{(R/m)}\) so that the integral becomes

\[\rho(m) = -\frac{1}{\pi} \int_0^\infty I'(m\cosh{u}) {\rm d}u,\]

where \(I'\) is the first derivative of \(I\). With the 3D density \(\rho(m)\) at hand, the circular velocity can then be computed as

\[V^2_{\rm bulge}(r) = -4\pi\,Gq\sqrt{\sin^2i+\frac{1}{q}\cos^2i} \int_0^r \frac{m^2\rho(m){\rm d}m}{\sqrt{r^2-e^2m^2}},\]

where \(e=\sqrt{1-q^2}\) is the intrinsic ellipticity. However, also this integral has a singularity at \(m=r/e\), thus it is convenient to change variables to \(u=\arcsin{me/r}\) so that

\[V^2_{\rm bulge}(r) = -4\pi\,Gq\frac{r^2}{e^3}\sqrt{\sin^2i+\frac{1}{q}\cos^2i} \int_0^{\arcsin{e}} \rho\left(\frac{r}{e}\sin{u}\right) \sin^2u \,{\rm d}u.\]

Both the \(\rho(m)\) and the \(V_{\rm bulge}\) integrals are computed with scipy.integrate.quad() and the derivative of the input surface density profile \(I'\) is discretized with numpy.gradient().

Warning

With the current implementation using scipy.integrate.quad() this function is considerably slower than vcdisk.vcdisk(), which instead computes discretized integrals with scipy.integrate.simpson().

Warning

The integral consistently results in a numerical overflow of cosh and an IntegrationWarning on scipy.integrate.quad(). Thus these two warnings have been suppressed.

References

Noordermeer08

Noordermeer, 2008, MNRAS, 385, 1359. The rotation curves of flattened Sérsic bulges. https://ui.adsabs.harvard.edu/abs/2008MNRAS.385.1359N/