def test_force_in_pcMyr2(): #Test the scaling, as a 1st derivative of the potential, should scale as velocity^2/position vofid, rofid = 200., 8. assert numpy.fabs(4. * bovy_conversion.force_in_pcMyr2(vofid, rofid) / bovy_conversion.force_in_pcMyr2(2. * vofid, rofid) - 1. ) < 10.**-10., 'force_in_pcMyr2 did not work as expected' assert numpy.fabs(.5 * bovy_conversion.force_in_pcMyr2(vofid, rofid) / bovy_conversion.force_in_pcMyr2(vofid, 2 * rofid) - 1. ) < 10.**-10., 'force_in_pcMyr2 did not work as expected' return None
def test_units(): import galpy.util.bovy_conversion as conversion print(conversion.force_in_pcMyr2(220.,8.))#pc/Myr^2 assert numpy.fabs(conversion.force_in_pcMyr2(220.,8.)-6.32793804994) < 10.**-4., 'unit conversion has changed' print(conversion.dens_in_msolpc3(220.,8.))#Msolar/pc^3 assert numpy.fabs(conversion.dens_in_msolpc3(220.,8.)-0.175790330079) < 10.**-4., 'unit conversion has changed' print(conversion.surfdens_in_msolpc2(220.,8.))#Msolar/pc^2 assert numpy.fabs(conversion.surfdens_in_msolpc2(220.,8.)-1406.32264063) < 10.**-4., 'unit conversion has changed' print(conversion.mass_in_1010msol(220.,8.))#10^10 Msolar assert numpy.fabs(conversion.mass_in_1010msol(220.,8.)-9.00046490005) < 10.**-4., 'unit conversion has changed' print(conversion.freq_in_Gyr(220.,8.))#1/Gyr assert numpy.fabs(conversion.freq_in_Gyr(220.,8.)-28.1245845523) < 10.**-4., 'unit conversion has changed' print(conversion.time_in_Gyr(220.,8.))#Gyr assert numpy.fabs(conversion.time_in_Gyr(220.,8.)-0.0355560807712) < 10.**-4., 'unit conversion has changed' return None
def test_units(): import galpy.util.bovy_conversion as conversion print(conversion.force_in_pcMyr2(220.,8.))#pc/Myr^2 assert numpy.fabs(conversion.force_in_pcMyr2(220.,8.)-6.32793804994) < 10.**-4., 'unit conversion has changed' print(conversion.dens_in_msolpc3(220.,8.))#Msolar/pc^3 assert numpy.fabs((conversion.dens_in_msolpc3(220.,8.)-0.175790330079)/0.175790330079) < 5.*10.**-5., 'unit conversion has changed' print(conversion.surfdens_in_msolpc2(220.,8.))#Msolar/pc^2 assert numpy.fabs((conversion.surfdens_in_msolpc2(220.,8.)-1406.32264063)/1406.32264063) < 5.*10.**-5., 'unit conversion has changed' print(conversion.mass_in_1010msol(220.,8.))#10^10 Msolar assert numpy.fabs((conversion.mass_in_1010msol(220.,8.)-9.00046490005)/9.00046490005) < 5.*10.**-5., 'unit conversion has changed' print(conversion.freq_in_Gyr(220.,8.))#1/Gyr assert numpy.fabs(conversion.freq_in_Gyr(220.,8.)-28.1245845523) < 10.**-4., 'unit conversion has changed' print(conversion.time_in_Gyr(220.,8.))#Gyr assert numpy.fabs(conversion.time_in_Gyr(220.,8.)-0.0355560807712) < 10.**-4., 'unit conversion has changed' return None
def __init__(self,K=1.15,F=0.03,D=1.8,amp=1.,ro=None,vo=None): """ NAME: __init__ PURPOSE: Initialize a KGPotential INPUT: K= K parameter (= :math:`2\\pi \\Sigma_{\\mathrm{disk}}`; specify either as surface density or directly as force [i.e., including :math:`2\\pi G`]; can be Quantity) F= F parameter (= :math:`4\\pi\\rho_{\\mathrm{halo}}`; specify either as density or directly as second potential derivative [i.e., including :math:`4\\pi G`]; can be Quantity) D= D parameter (natural units or Quantity length units) amp - an overall amplitude OUTPUT: instance HISTORY: 2010-07-12 - Written - Bovy (NYU) """ linearPotential.__init__(self,amp=amp,ro=ro,vo=vo) if _APY_LOADED and isinstance(D,units.Quantity): D= D.to(units.kpc).value/self._ro if _APY_LOADED and isinstance(K,units.Quantity): try: K= K.to(units.pc/units.Myr**2).value\ /bovy_conversion.force_in_pcMyr2(self._vo,self._ro) except units.UnitConversionError: pass if _APY_LOADED and isinstance(K,units.Quantity): try: K= K.to(units.Msun/units.pc**2).value\ /bovy_conversion.force_in_2piGmsolpc2(self._vo,self._ro) except units.UnitConversionError: raise units.UnitConversionError("Units for K not understood; should be force or surface density") if _APY_LOADED and isinstance(F,units.Quantity): try: F= F.to(units.Msun/units.pc**3).value\ /bovy_conversion.dens_in_msolpc3(self._vo,self._ro)*4.*sc.pi except units.UnitConversionError: pass if _APY_LOADED and isinstance(F,units.Quantity): try: F= F.to(units.km**2/units.s**2/units.kpc**2).value\ *ro**2/vo**2 except units.UnitConversionError: raise units.UnitConversionError("Units for F not understood; should be density") self._K= K self._F= F self._D= D self._D2= self._D**2. self.hasC= True
def rv(x, y, z): conv = bovy_conversion.force_in_pcMyr2(220., 8) * u.pc / ( u.Myr**2) ##Unit conversion x *= u.kpc y *= u.kpc z *= u.kpc ##Sun's location sx = 8 * u.kpc sy = 0 * u.kpc sz = 4 * u.kpc sun_ar = evaluateRforces(poten, sx, sz, phi=0 * u.deg) * conv sun_az = evaluatezforces(poten, sx, sz, phi=0 * u.deg) * conv sun_acc = Vector(sun_ar, 0 * conv, sun_az) star_ar = evaluateRforces(poten, np.sqrt(x**2 + y**2), z, phi=0 * u.deg) * conv star_az = evaluatezforces(poten, np.sqrt(x**2 + y**2), z, phi=0 * u.deg) * conv star_acc = Vector(star_ar, 0 * conv, star_az) heliocentric_acc = Vector(star_acc.x - sun_acc.x, star_acc.y - sun_acc.y, star_acc.z - sun_acc.z) r = Vector(sx - x, sy - y, sz - z) acc = r.project(heliocentric_acc) delta_v = (acc.mag * 10 * u.yr).to(u.cm / u.s) return delta_v, r
def __init__(self, K=1.15, F=0.03, D=1.8, amp=1., ro=None, vo=None): """ NAME: __init__ PURPOSE: Initialize a KGPotential INPUT: K= K parameter (= :math:`2\\pi \\Sigma_{\\mathrm{disk}}`; specify either as surface density or directly as force [i.e., including :math:`2\\pi G`]; can be Quantity) F= F parameter (= :math:`4\\pi\\rho_{\\mathrm{halo}}`; specify either as density or directly as second potential derivative [i.e., including :math:`4\\pi G`]; can be Quantity) D= D parameter (natural units or Quantity length units) amp - an overall amplitude OUTPUT: instance HISTORY: 2010-07-12 - Written - Bovy (NYU) """ linearPotential.__init__(self, amp=amp, ro=ro, vo=vo) if _APY_LOADED and isinstance(D, units.Quantity): D = D.to(units.kpc).value / self._ro if _APY_LOADED and isinstance(K, units.Quantity): try: K= K.to(units.pc/units.Myr**2).value\ /bovy_conversion.force_in_pcMyr2(self._vo,self._ro) except units.UnitConversionError: pass if _APY_LOADED and isinstance(K, units.Quantity): try: K= K.to(units.Msun/units.pc**2).value\ /bovy_conversion.force_in_2piGmsolpc2(self._vo,self._ro) except units.UnitConversionError: raise units.UnitConversionError( "Units for K not understood; should be force or surface density" ) if _APY_LOADED and isinstance(F, units.Quantity): try: F= F.to(units.Msun/units.pc**3).value\ /bovy_conversion.dens_in_msolpc3(self._vo,self._ro)*4.*sc.pi except units.UnitConversionError: pass if _APY_LOADED and isinstance(F, units.Quantity): try: F= F.to(units.km**2/units.s**2/units.kpc**2).value\ *ro**2/vo**2 except units.UnitConversionError: raise units.UnitConversionError( "Units for F not understood; should be density") self._K = K self._F = F self._D = D self._D2 = self._D**2.
def test_force_in_pcMyr2(): #Test the scaling, as a 1st derivative of the potential, should scale as velocity^2/position vofid, rofid= 200., 8. assert numpy.fabs(4.*bovy_conversion.force_in_pcMyr2(vofid,rofid)/bovy_conversion.force_in_pcMyr2(2.*vofid,rofid)-1.) < 10.**-10., 'force_in_pcMyr2 did not work as expected' assert numpy.fabs(.5*bovy_conversion.force_in_pcMyr2(vofid,rofid)/bovy_conversion.force_in_pcMyr2(vofid,2*rofid)-1.) < 10.**-10., 'force_in_pcMyr2 did not work as expected' return None