def omegac(Pot,R): """ NAME: omegac PURPOSE: calculate the circular angular speed velocity at R in potential Pot INPUT: Pot - Potential instance or list of such instances R - Galactocentric radius OUTPUT: circular angular speed HISTORY: 2011-10-09 - Written - Bovy (IAS) """ from planarPotential import evaluateplanarRforces try: return nu.sqrt(-evaluateplanarRforces(R,Pot)/R) except TypeError: from planarPotential import RZToplanarPotential Pot= RZToplanarPotential(Pot) return nu.sqrt(-evaluateplanarRforces(R,Pot)/R)
def dvcircdR(Pot,R): """ NAME: dvcircdR PURPOSE: calculate the derivative of the circular velocity wrt R at R in potential Pot INPUT: Pot - Potential instance or list of such instances R - Galactocentric radius OUTPUT: derivative of the circular rotation velocity wrt R HISTORY: 2013-01-08 - Written - Bovy (IAS) """ from planarPotential import evaluateplanarRforces from planarPotential import evaluateplanarR2derivs tvc= vcirc(Pot,R) try: return 0.5*(-evaluateplanarRforces(R,Pot)+R*evaluateplanarR2derivs(R,Pot))/tvc except TypeError: from planarPotential import RZToplanarPotential Pot= RZToplanarPotential(Pot) return 0.5*(-evaluateplanarRforces(R,Pot)+R*evaluateplanarR2derivs(R,Pot))/tvc
def vcirc(Pot,R): """ NAME: vcirc PURPOSE: calculate the circular velocity at R in potential Pot INPUT: Pot - Potential instance or list of such instances R - Galactocentric radius OUTPUT: circular rotation velocity HISTORY: 2011-10-09 - Written - Bovy (IAS) """ from planarPotential import evaluateplanarRforces from Potential import PotentialError try: return nu.sqrt(-R*evaluateplanarRforces(R,Pot)) except PotentialError: from planarPotential import RZToplanarPotential Pot= RZToplanarPotential(Pot) return nu.sqrt(-R*evaluateplanarRforces(R,Pot))
def calcRotcurve(Pot,Rs): """ NAME: calcRotcurve PURPOSE: calculate the rotation curve for this potential (in the z=0 plane for non-spherical potentials) INPUT: Pot - Potential or list of Potential instances Rs - (array of) radius(i) OUTPUT: array of vc HISTORY: 2011-04-13 - Written - Bovy (NYU) """ isList= isinstance(Pot,list) isNonAxi= ((isList and Pot[0].isNonAxi) or (not isList and Pot.isNonAxi)) if isNonAxi: raise AttributeError("Rotation curve plotting for non-axisymmetric potentials is not currently supported") try: grid= len(Rs) except TypeError: grid=1 Rs= nu.array([Rs]) rotcurve= nu.zeros(grid) from planarPotential import evaluateplanarRforces for ii in range(grid): try: rotcurve[ii]= nu.sqrt(Rs[ii]*-evaluateplanarRforces(Rs[ii],Pot)) except TypeError: from planarPotential import RZToplanarPotential Pot= RZToplanarPotential(Pot) rotcurve[ii]= nu.sqrt(Rs[ii]*-evaluateplanarRforces(Rs[ii],Pot)) return rotcurve
def epifreq(Pot,R): """ NAME: epifreq PURPOSE: calculate the epicycle frequency at R in potential Pot INPUT: Pot - Potential instance or list of such instances R - Galactocentric radius OUTPUT: epicycle frequency HISTORY: 2011-10-09 - Written - Bovy (IAS) """ from planarPotential import evaluateplanarRforces, evaluateplanarR2derivs try: return nu.sqrt(evaluateplanarR2derivs(R,Pot)-3./R*evaluateplanarRforces(R,Pot)) except TypeError: from planarPotential import RZToplanarPotential Pot= RZToplanarPotential(Pot) return nu.sqrt(evaluateplanarR2derivs(R,Pot)-3./R*evaluateplanarRforces(R,Pot))
def omegac(Pot, R): """ NAME: omegac PURPOSE: calculate the circular angular speed velocity at R in potential Pot INPUT: Pot - Potential instance or list of such instances R - Galactocentric radius OUTPUT: circular angular speed HISTORY: 2011-10-09 - Written - Bovy (IAS) """ from planarPotential import evaluateplanarRforces try: return nu.sqrt(-evaluateplanarRforces(R, Pot) / R) except TypeError: from planarPotential import RZToplanarPotential Pot = RZToplanarPotential(Pot) return nu.sqrt(-evaluateplanarRforces(R, Pot) / R)
def calcRotcurve(Pot, Rs): """ NAME: calcRotcurve PURPOSE: calculate the rotation curve for this potential (in the z=0 plane for non-spherical potentials) INPUT: Pot - Potential or list of Potential instances Rs - (array of) radius(i) OUTPUT: array of vc HISTORY: 2011-04-13 - Written - Bovy (NYU) """ isList = isinstance(Pot, list) isNonAxi = ((isList and Pot[0].isNonAxi) or (not isList and Pot.isNonAxi)) if isNonAxi: raise AttributeError( "Rotation curve plotting for non-axisymmetric potentials is not currently supported" ) try: grid = len(Rs) except TypeError: grid = 1 Rs = nu.array([Rs]) rotcurve = nu.zeros(grid) from planarPotential import evaluateplanarRforces for ii in range(grid): try: rotcurve[ii] = nu.sqrt(Rs[ii] * -evaluateplanarRforces(Rs[ii], Pot)) except TypeError: from planarPotential import RZToplanarPotential Pot = RZToplanarPotential(Pot) rotcurve[ii] = nu.sqrt(Rs[ii] * -evaluateplanarRforces(Rs[ii], Pot)) return rotcurve
def epifreq(Pot,R): """ NAME: epifreq PURPOSE: calculate the epicycle frequency at R in the potential Pot INPUT: Pot - Potential instance or list thereof R - Galactocentric radius OUTPUT: epicycle frequency HISTORY: 2012-07-25 - Written - Bovy (IAS) """ from galpy.potential_src.planarPotential import planarPotential if isinstance(Pot,(Potential,planarPotential)): return Pot.epifreq(R) from planarPotential import evaluateplanarRforces, evaluateplanarR2derivs from Potential import PotentialError try: return nu.sqrt(evaluateplanarR2derivs(R,Pot)-3./R*evaluateplanarRforces(R,Pot)) except PotentialError: from planarPotential import RZToplanarPotential Pot= RZToplanarPotential(Pot) return nu.sqrt(evaluateplanarR2derivs(R,Pot)-3./R*evaluateplanarRforces(R,Pot))
def epifreq(Pot, R): """ NAME: epifreq PURPOSE: calculate the epicycle frequency at R in potential Pot INPUT: Pot - Potential instance or list of such instances R - Galactocentric radius OUTPUT: epicycle frequency HISTORY: 2011-10-09 - Written - Bovy (IAS) """ from planarPotential import evaluateplanarRforces, evaluateplanarR2derivs try: return nu.sqrt( evaluateplanarR2derivs(R, Pot) - 3. / R * evaluateplanarRforces(R, Pot)) except TypeError: from planarPotential import RZToplanarPotential Pot = RZToplanarPotential(Pot) return nu.sqrt( evaluateplanarR2derivs(R, Pot) - 3. / R * evaluateplanarRforces(R, Pot))