def MWBHRfo(ldeg, bdeg, dkpc): b = bdeg * par.degtorad l = ldeg * par.degtorad Rskpc = par.Rskpc Vs = par.Vs conversion = par.conversion Rpkpc = par.Rpkpc(ldeg, bdeg, dkpc) zkpc = dkpc * math.sin(b) be = (dkpc / Rskpc) * math.cos(b) - math.cos(l) coslam = be * (Rskpc / Rpkpc) MWPotential2014BH = [ MWPotential2014, KeplerPotential(amp=4 * 10**6. / bovy_conversion.mass_in_msol(par.Vs, par.Rskpc)) ] rforce1 = evaluateRforces( MWPotential2014BH, Rpkpc / Rskpc, zkpc / Rskpc) * ( (Vs * 1000.)**2.) / (Rskpc * par.kpctom) #m/ss rfsun = evaluateRforces(MWPotential2014BH, Rskpc / Rskpc, 0.0 / Rskpc) * ( (Vs * 1000.)**2.) / (Rskpc * par.kpctom) #m/ss rf0 = rforce1 * coslam + rfsun * math.cos(l) #m/ss rf = rf0 * math.cos(b) / par.c # s-1 return rf
def MWBHRfo(bdeg, ldeg, dkpc): b = bdeg * par.degtorad l = ldeg * par.degtorad Rskpc = par.Rskpc Vs = par.Vs conversion = par.conversion Rpkpc = Rpkpcfunc(dkpc, b, l, Rskpc) zkpc = dkpc * math.sin(b) be = (dkpc / Rskpc) * math.cos(b) - math.cos(l) coslam = be * (Rskpc / Rpkpc) MWPotential2014.append( KeplerPotential(amp=4 * 10**6. / bovy_conversion.mass_in_msol(Vs, Rskpc))) rforce1 = evaluateRforces(MWPotential2014, Rpkpc / Rskpc, zkpc / Rskpc) * bovy_conversion.force_in_kmsMyr( Vs, Rskpc) rfsun = evaluateRforces(MWPotential2014, Rskpc / Rskpc, 0.0 / Rskpc) * bovy_conversion.force_in_kmsMyr( Vs, Rskpc) #rf = (rforce1-rfsun)*conversion*math.cos(b) # s-1 rf0 = rforce1 * coslam + rfsun * math.cos(l) rf = rf0 * conversion * math.cos(b) # s-1 return rf
def MWBHZfo(bdeg, ldeg, dkpc): b = bdeg * par.degtorad l = ldeg * par.degtorad Rskpc = par.Rskpc Vs = par.Vs conversion = par.conversion Rpkpc = Rpkpcfunc(dkpc, b, l, Rskpc) zkpc = dkpc * math.sin(b) ''' bp= PowerSphericalPotentialwCutoff(alpha=1.8,rc=1.9/8.,normalize=0.05) mp= MiyamotoNagaiPotential(a=3./8.,b=0.28/8.,normalize=.6) np= NFWPotential(a=16./8.,normalize=.35) kp = KeplerPotential(amp=4*10**6./bovy_conversion.mass_in_msol(par.Vs,par.Rskpc)) MWBH = [bp,mp,np,kp] zf1 = evaluatezforces(MWBH, Rpkpc/Rskpc,zkpc/Rskpc)*bovy_conversion.force_in_kmsMyr(Vs,Rskpc) ''' MWPotential2014wBH = [ MWPotential2014, KeplerPotential(amp=4 * 10**6. / bovy_conversion.mass_in_msol(par.Vs, par.Rskpc)) ] zf1 = evaluatezforces(MWPotential2014wBH, Rpkpc / Rskpc, zkpc / Rskpc) * bovy_conversion.force_in_kmsMyr(Vs, Rskpc) Excz = zf1 * conversion * math.sin(b) #s-1 return Excz
def __init__(self, m): """Initialize a PointMass. Parameters ---------- m : float The mass of the PointMass in solar masses. """ self._m = m self._pot = KeplerPotential(amp=self._m * u.solMass)
def MWBHZfo(ldeg, bdeg, dkpc): b = bdeg*par.degtorad l = ldeg*par.degtorad Rskpc = par.Rskpc Vs = par.Vs conversion = par.conversion Rpkpc = par.Rpkpc(ldeg, bdeg, dkpc) zkpc = dkpc*math.sin(b) MWPotential2014BH= [MWPotential2014,KeplerPotential(amp=4*10**6./bovy_conversion.mass_in_msol(par.Vs,par.Rskpc))] zf1 = evaluatezforces(MWPotential2014BH, Rpkpc/Rskpc,zkpc/Rskpc)*((Vs*1000.)**2.)/(Rskpc*par.kpctom) #m/ss Excz = zf1*math.sin(b)/par.c #s-1 return Excz;
def MWBHRfo(ldeg, sigl, bdeg, sigb, dkpc, sigd): b = bdeg * par.degtorad l = ldeg * par.degtorad Rskpc = par.Rskpc Vs = par.Vs conversion = par.conversion Rpkpc = par.Rpkpc(ldeg, sigl, bdeg, sigb, dkpc, sigd) zkpc = dkpc * math.sin(b) be = (dkpc / Rskpc) * math.cos(b) - math.cos(l) coslam = be * (Rskpc / Rpkpc) ''' bp= PowerSphericalPotentialwCutoff(alpha=1.8,rc=1.9/8.,normalize=0.05) mp= MiyamotoNagaiPotential(a=3./8.,b=0.28/8.,normalize=.6) np= NFWPotential(a=16./8.,normalize=.35) kp = KeplerPotential(amp=4*10**6./bovy_conversion.mass_in_msol(par.Vs,par.Rskpc)) MWBH = [bp,mp,np,kp] rforce1 = evaluateRforces(MWBH, Rpkpc/Rskpc,zkpc/Rskpc)*bovy_conversion.force_in_kmsMyr(Vs,Rskpc) rfsun = evaluateRforces(MWBH, Rskpc/Rskpc,0.0/Rskpc)*bovy_conversion.force_in_kmsMyr(Vs,Rskpc) ''' #MWPotential2014.append(KeplerPotential(amp=4*10**6./bovy_conversion.mass_in_msol(Vs,Rskpc))) #rforce1 = evaluateRforces(MWPotential2014, Rpkpc/Rskpc,zkpc/Rskpc)*bovy_conversion.force_in_kmsMyr(Vs,Rskpc) #rfsun = evaluateRforces(MWPotential2014, Rskpc/Rskpc,0.0/Rskpc)*bovy_conversion.force_in_kmsMyr(Vs,Rskpc) MWPotential2014wBH = [ MWPotential2014, KeplerPotential(amp=4 * 10**6. / bovy_conversion.mass_in_msol(par.Vs, par.Rskpc)) ] rforce1 = evaluateRforces(MWPotential2014wBH, Rpkpc / Rskpc, zkpc / Rskpc) * bovy_conversion.force_in_kmsMyr( Vs, Rskpc) rfsun = evaluateRforces(MWPotential2014wBH, Rskpc / Rskpc, 0.0 / Rskpc) * bovy_conversion.force_in_kmsMyr( Vs, Rskpc) #rf = (rforce1-rfsun)*conversion*math.cos(b) # s-1 rf0 = rforce1 * coslam + rfsun * math.cos(l) rf = rf0 * conversion * math.cos(b) # s-1 return rf
def VpratioMWBH(Rpkpc): #MWPotential2014.append(KeplerPotential(amp=4*10**6./bovy_conversion.mass_in_msol(par.Vs,par.Rskpc))) #a = vcirc(MWPotential2014,Rpkpc/par.Rskpc) ''' bp= PowerSphericalPotentialwCutoff(alpha=1.8,rc=1.9/8.,normalize=0.05) mp= MiyamotoNagaiPotential(a=3./8.,b=0.28/8.,normalize=.6) np= NFWPotential(a=16./8.,normalize=.35) kp = KeplerPotential(amp=4*10**6./bovy_conversion.mass_in_msol(par.Vs,par.Rskpc)) MWBH = [bp,mp,np,kp] a = vcirc(MWBH,Rpkpc/par.Rskpc) ''' MWPotential2014wBH = [ MWPotential2014, KeplerPotential(amp=4 * 10**6. / bovy_conversion.mass_in_msol(par.Vs, par.Rskpc)) ] a = vcirc(MWPotential2014wBH, Rpkpc / par.Rskpc) return a
def MWBHZfo(bdeg, ldeg, dkpc): b = bdeg * par.degtorad l = ldeg * par.degtorad Rskpc = par.Rskpc Vs = par.Vs conversion = par.conversion Rpkpc = Rpkpcfunc(dkpc, b, l, Rskpc) zkpc = dkpc * math.sin(b) MWPotential2014.append( KeplerPotential(amp=4 * 10**6. / bovy_conversion.mass_in_msol(Vs, Rskpc))) zf1 = evaluatezforces(MWPotential2014, Rpkpc / Rskpc, zkpc / Rskpc) * bovy_conversion.force_in_kmsMyr(Vs, Rskpc) Excz = zf1 * conversion * math.sin(b) #s-1 return Excz
def setUp(self): """ Set up TidalTensor instances for these unittests. """ self.kepler_pot = KeplerPotential() self.kepler_tt = TidalTensor(self.kepler_pot) self.axisymmetric_pot = TwoPowerTriaxialPotential(c=0.7) self.axisymmetric_tt = TidalTensor(self.axisymmetric_pot) self.triaxial_pot = TwoPowerTriaxialPotential(c=0.7, b=0.95) self.triaxial_tt = TidalTensor(self.triaxial_pot) self.kepler_axi_pot = [self.kepler_pot, self.axisymmetric_pot] self.kepler_axi_tt = TidalTensor(self.kepler_axi_pot) self.kepler_triaxi_pot = [self.kepler_pot, self.triaxial_pot] self.kepler_triaxi_tt = TidalTensor(self.kepler_triaxi_pot)
def MWPotential(Ms=0.76, rs=24.8, c=1., T=True): ''' Milky Way potential from Marchetti 2017b -- see galpy for the definitions of the potential components Parameters ---------- Ms : float NFW profile scale mass in units of e12 Msun rs : float Radial profile in units of kpc c : float Axis ratio T : bool If True, use triaxialNFWPotential ''' # NFW profile Ms = Ms * 1e12 * u.Msun rs = rs * u.kpc #Disk Md = 1e11 * u.Msun ad = 6.5 * u.kpc bd = 260. * u.pc #Bulge Mb = 3.4 * 1e10 * u.Msun Rb = 0.7 * u.kpc #BH mass in 1e6 Msun Mbh = 4e6 * u.Msun if (T): halop = TriaxialNFWPotential(amp=Ms, a=rs, c=c, normalize=False) else: halop = NFWPotential(amp=Ms, a=rs, normalize=False) diskp = MiyamotoNagaiPotential(amp=Md, a=ad, b=bd, normalize=False) bulgep = HernquistPotential( amp=2 * Mb, a=Rb, normalize=False) #Factor 2 because of the galpy definition bh = KeplerPotential(amp=Mbh, normalize=False) return [halop, diskp, bulgep, bh]
def fdotdotexcwBHcal(ldeg, bdeg, dkpc, mul, mub, Rpkpc, zkpc, f, fdotobs, vrad, fex_pl, fex_z, fex_shk): Rskpc = par.Rskpc Vs = par.Vs conversion = par.conversion yrts = par.yrts c = par.c kpctom = par.kpctom Rs = Rskpc * kpctom mastorad = par.mastorad normpottoSI = par.normpottoSI normForcetoSI = par.normForcetoSI normjerktoSI = par.normjerktoSI b = bdeg * par.degtorad l = ldeg * par.degtorad fex_tot = fex_pl + fex_z + fex_shk #mub = mu_alpha #mas/yr #mul = mu_delta muT = (mub**2. + mul**2.)**0.5 #MWPotential2014= [MWPotential2014,KeplerPotential(amp=4*10**6./bovy_conversion.mass_in_msol(par.Vs,par.Rskpc))] MWPot = [ MWPotential2014, KeplerPotential(amp=4 * 10**6. / bovy_conversion.mass_in_msol(par.Vs, par.Rskpc)) ] appl = evaluateRforces(MWPot, Rpkpc / Rskpc, zkpc / Rskpc) * normForcetoSI aspl = evaluateRforces(MWPot, Rskpc / Rskpc, 0.0 / Rskpc) * normForcetoSI apz = evaluatezforces(MWPot, Rpkpc / Rskpc, zkpc / Rskpc) * normForcetoSI be = (dkpc / Rskpc) * math.cos(b) - math.cos(l) coslam = be * (Rskpc / Rpkpc) coslpluslam = math.cos(l) * coslam - (Rskpc * math.sin(l) / Rpkpc) * math.sin(l) aTl1 = -(appl * (Rskpc * math.sin(l) / Rpkpc) - aspl * math.sin(l)) aTb1 = appl * coslam * math.sin(b) - apz * math.cos(b) + aspl * math.cos( l) * math.sin(b) aTnet1 = (aTl1**2. + aTb1**2.)**(0.5) alphaV1 = math.atan2(mub, mul) / par.degtorad alphaA1 = math.atan2(aTb1, aTl1) / par.degtorad if alphaV1 < 0.: alphaV = 360. + alphaV1 else: alphaV = alphaV1 if alphaA1 < 0.: alphaA = 360. + alphaA1 else: alphaA = alphaA1 alpha = abs(alphaA - alphaV) aT1 = 2. * appl * aspl * coslpluslam aT2 = (c * (fex_pl + fex_z))**2. aTsq = appl**2. + aspl**2. + aT1 + apz**2. - aT2 #if aTsq < 0.0: aT = (appl**2. + aspl**2. + aT1 + apz**2. - aT2)**0.5 Combterm = fdotdotSB1cal( ldeg, bdeg, dkpc, mul, mub, Rpkpc, zkpc, vrad, coslam, alpha, appl, apz, aspl, aT, MWPot) + fdotdotSB2cal( ldeg, bdeg, dkpc, mul, mub, Rpkpc, zkpc, fex_pl, fex_z, fex_shk, appl, apz, aspl) + fdotdotSB3cal(vrad, aT, muT, alpha) fddotfex = -Combterm + fdotdotSB4cal(f, fdotobs, fex_pl, fex_z, fex_shk) #fdotint = fdotobs-fs*fex_tot #fddotint = fddotobs-fs*fddotfex return fddotfex
def fdotdotSB3calBH(ldeg, bdeg, dkpc, mul, mub, vrad): Rskpc = par.Rskpc Vs = par.Vs conversion = par.conversion yrts = par.yrts c = par.c kpctom = par.kpctom Rs = Rskpc * kpctom mastorad = par.mastorad normpottoSI = par.normpottoSI normForcetoSI = par.normForcetoSI normjerktoSI = par.normjerktoSI b = bdeg * par.degtorad l = ldeg * par.degtorad Rpkpc = par.Rpkpc(ldeg, bdeg, dkpc) zkpc = par.z(ldeg, bdeg, dkpc) fex_pl = excGalBH.Expl(ldeg, bdeg, dkpc) fex_z = excGalBH.Exz(ldeg, bdeg, dkpc) fex_shk = Shk.Exshk(dkpc, mul, mub) fex_tot = fex_pl + fex_z + fex_shk #mub = mu_alpha #mas/yr #mul = mu_delta muT = (mub**2. + mul**2.)**0.5 #MWPotential2014= [MWPotential2014,KeplerPotential(amp=4*10**6./bovy_conversion.mass_in_msol(par.Vs,par.Rskpc))] MWPot = [ MWPotential2014, KeplerPotential(amp=4 * 10**6. / bovy_conversion.mass_in_msol(par.Vs, par.Rskpc)) ] appl = evaluateRforces(MWPot, Rpkpc / Rskpc, zkpc / Rskpc) * normForcetoSI aspl = evaluateRforces(MWPot, Rskpc / Rskpc, 0.0 / Rskpc) * normForcetoSI apz = evaluatezforces(MWPot, Rpkpc / Rskpc, zkpc / Rskpc) * normForcetoSI be = (dkpc / Rskpc) * math.cos(b) - math.cos(l) coslam = be * (Rskpc / Rpkpc) coslpluslam = math.cos(l) * coslam - (Rskpc * math.sin(l) / Rpkpc) * math.sin(l) aTl1 = -(appl * (Rskpc * math.sin(l) / Rpkpc) - aspl * math.sin(l)) aTb1 = appl * coslam * math.sin(b) - apz * math.cos(b) + aspl * math.cos( l) * math.sin(b) aTnet1 = (aTl1**2. + aTb1**2.)**(0.5) alphaV1 = math.atan2(mub, mul) / par.degtorad alphaA1 = math.atan2(aTb1, aTl1) / par.degtorad if alphaV1 < 0.: alphaV = 360. + alphaV1 else: alphaV = alphaV1 if alphaA1 < 0.: alphaA = 360. + alphaA1 else: alphaA = alphaA1 alpha = abs(alphaA - alphaV) aT1 = 2. * appl * aspl * coslpluslam aT2 = (c * (fex_pl + fex_z))**2. aTsq = appl**2. + aspl**2. + aT1 + apz**2. - aT2 #if aTsq < 0.0: aT = (appl**2. + aspl**2. + aT1 + apz**2. - aT2)**0.5 yrts = par.yrts c = par.c mastorad = par.mastorad #tsbvrad = (1./c)*(3.*(1000.0*vrad)*(((mastorad/yrts)*muT)**2.)) tsbt = (1. / c) * (aT * ((mastorad / yrts) * muT) * math.cos(alpha) - 3. * (1000.0 * vrad) * (((mastorad / yrts) * muT)**2.)) return tsbt
def fdotdotSB2calBH(ldeg, bdeg, dkpc, mul, mub): Rskpc = par.Rskpc Vs = par.Vs conversion = par.conversion yrts = par.yrts c = par.c kpctom = par.kpctom Rs = Rskpc * kpctom mastorad = par.mastorad normpottoSI = par.normpottoSI normForcetoSI = par.normForcetoSI normjerktoSI = par.normjerktoSI b = bdeg * par.degtorad l = ldeg * par.degtorad Rpkpc = par.Rpkpc(ldeg, bdeg, dkpc) zkpc = par.z(ldeg, bdeg, dkpc) fex_pl = excGalBH.Expl(ldeg, bdeg, dkpc) fex_z = excGalBH.Exz(ldeg, bdeg, dkpc) fex_shk = Shk.Exshk(dkpc, mul, mub) fex_tot = fex_pl + fex_z + fex_shk #mub = mu_alpha #mas/yr #mul = mu_delta muT = (mub**2. + mul**2.)**0.5 #MWPotential2014= [MWPotential2014,KeplerPotential(amp=4*10**6./bovy_conversion.mass_in_msol(par.Vs,par.Rskpc))] MWPot = [ MWPotential2014, KeplerPotential(amp=4 * 10**6. / bovy_conversion.mass_in_msol(par.Vs, par.Rskpc)) ] appl = evaluateRforces(MWPot, Rpkpc / Rskpc, zkpc / Rskpc) * normForcetoSI aspl = evaluateRforces(MWPot, Rskpc / Rskpc, 0.0 / Rskpc) * normForcetoSI apz = evaluatezforces(MWPot, Rpkpc / Rskpc, zkpc / Rskpc) * normForcetoSI be = (dkpc / Rskpc) * math.cos(b) - math.cos(l) coslam = be * (Rskpc / Rpkpc) res1 = 2. * (mastorad / yrts) * (mub * ((math.sin(b) / c) * (appl * coslam + aspl * math.cos(l)) - (math.cos(b) / c) * apz) - mul * (math.sin(l) / c) * (appl * (Rskpc / Rpkpc) - aspl)) res2 = 2. * fex_tot * (math.cos(b) * math.cos(l) * (aspl / c) + (mastorad / yrts) * mub * (1000. * Vs / c) * math.sin(b) * math.sin(l) - (mastorad / yrts) * mul * (1000. * Vs / c) * math.cos(l)) res = res1 + res2 return res
def fdotdotSB1calBH(ldeg, bdeg, dkpc, mul, mub, vrad): Rskpc = par.Rskpc Vs = par.Vs conversion = par.conversion yrts = par.yrts c = par.c kpctom = par.kpctom Rs = Rskpc * kpctom mastorad = par.mastorad normpottoSI = par.normpottoSI normForcetoSI = par.normForcetoSI normjerktoSI = par.normjerktoSI b = bdeg * par.degtorad l = ldeg * par.degtorad Rpkpc = par.Rpkpc(ldeg, bdeg, dkpc) zkpc = par.z(ldeg, bdeg, dkpc) fex_pl = excGalBH.Expl(ldeg, bdeg, dkpc) fex_z = excGalBH.Exz(ldeg, bdeg, dkpc) fex_shk = Shk.Exshk(dkpc, mul, mub) fex_tot = fex_pl + fex_z + fex_shk #mub = mu_alpha #mas/yr #mul = mu_delta muT = (mub**2. + mul**2.)**0.5 #MWPotential2014= [MWPotential2014,KeplerPotential(amp=4*10**6./bovy_conversion.mass_in_msol(par.Vs,par.Rskpc))] MWPot = [ MWPotential2014, KeplerPotential(amp=4 * 10**6. / bovy_conversion.mass_in_msol(par.Vs, par.Rskpc)) ] appl = evaluateRforces(MWPot, Rpkpc / Rskpc, zkpc / Rskpc) * normForcetoSI aspl = evaluateRforces(MWPot, Rskpc / Rskpc, 0.0 / Rskpc) * normForcetoSI apz = evaluatezforces(MWPot, Rpkpc / Rskpc, zkpc / Rskpc) * normForcetoSI be = (dkpc / Rskpc) * math.cos(b) - math.cos(l) coslam = be * (Rskpc / Rpkpc) coslpluslam = math.cos(l) * coslam - (Rskpc * math.sin(l) / Rpkpc) * math.sin(l) aTl1 = -(appl * (Rskpc * math.sin(l) / Rpkpc) - aspl * math.sin(l)) aTb1 = appl * coslam * math.sin(b) - apz * math.cos(b) + aspl * math.cos( l) * math.sin(b) aTnet1 = (aTl1**2. + aTb1**2.)**(0.5) alphaV1 = math.atan2(mub, mul) / par.degtorad alphaA1 = math.atan2(aTb1, aTl1) / par.degtorad if alphaV1 < 0.: alphaV = 360. + alphaV1 else: alphaV = alphaV1 if alphaA1 < 0.: alphaA = 360. + alphaA1 else: alphaA = alphaA1 alpha = abs(alphaA - alphaV) aT1 = 2. * appl * aspl * coslpluslam aT2 = (c * (fex_pl + fex_z))**2. aTsq = appl**2. + aspl**2. + aT1 + apz**2. - aT2 #if aTsq < 0.0: aT = (appl**2. + aspl**2. + aT1 + apz**2. - aT2)**0.5 zdot = (1000.0 * vrad) * math.sin(b) + (mastorad / yrts) * mub * ( dkpc * kpctom) * math.cos(b) Rpdot = (1. / (Rpkpc * kpctom)) * ( ((dkpc * kpctom) * (math.cos(b)**2.) - Rs * math.cos(b) * math.cos(l)) * (1000.0 * vrad) + (Rs * (dkpc * kpctom) * math.sin(b) * math.cos(l) - ((dkpc * kpctom)**2.) * math.cos(b) * math.sin(b)) * ((mastorad / yrts) * mub) + Rs * (dkpc * kpctom) * math.sin(l) * ((mastorad / yrts) * mul)) #phiR2a = evaluateR2derivs(MWPot,Rpkpc/Rskpc,zkpc/Rskpc) phiR2 = normjerktoSI * evaluateR2derivs(MWPot, Rpkpc / Rskpc, zkpc / Rskpc) phiz2 = normjerktoSI * evaluatez2derivs(MWPot, Rpkpc / Rskpc, zkpc / Rskpc) phiRz = normjerktoSI * evaluateRzderivs(MWPot, Rpkpc / Rskpc, zkpc / Rskpc) phiR2sun = normjerktoSI * evaluateR2derivs(MWPot, Rskpc / Rskpc, 0.0 / Rskpc) phiRzsun = normjerktoSI * evaluateRzderivs(MWPot, Rskpc / Rskpc, 0.0 / Rskpc) aspldot = phiR2sun * Rpdot + phiRzsun * zdot appldot = phiR2 * Rpdot + phiRz * zdot apzdot = phiRz * Rpdot + phiz2 * zdot #if coslam != 0.0 and Rpkpc != 0.0 and math.cos(b) != 0.0: lamdot = (1. / coslam) * ((Rs * math.cos(l) * ((mastorad / yrts) * mul)) / ((Rpkpc * kpctom) * math.cos(b)) - (Rs * math.sin(l) / ((Rpkpc * kpctom)**2.)) * Rpdot) ardot1 = math.sin(b) * (appl * coslam + aspl * math.cos(l)) * ( (mastorad / yrts) * mub) ardot2 = math.cos(b) * (appldot * coslam + aspldot * math.cos(l)) ardot3 = apzdot * math.sin(b) ardot4 = appl * math.cos(b) * (Rskpc * math.sin(l) / Rpkpc) * lamdot ardot5 = aspl * math.sin(l) * ((mastorad / yrts) * mul) ardot6 = apz * math.cos(b) * ((mastorad / yrts) * mub) ardot = ardot1 - ardot2 - ardot3 + ardot4 + ardot5 - ardot6 jerkt = (1. / c) * (ardot - aT * ((mastorad / yrts) * muT) * math.cos(alpha)) return jerkt
def VpratioMWBH(Rpkpc): MWPotential2014wBH= [MWPotential2014,KeplerPotential(amp=4*10**6./bovy_conversion.mass_in_msol(par.Vs,par.Rskpc))] a = vcirc(MWPotential2014wBH,Rpkpc/par.Rskpc) return a;