Пример #1
0
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
Пример #3
0
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
Пример #4
0
    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)
Пример #5
0
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;
Пример #6
0
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
Пример #7
0
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
Пример #9
0
    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)
Пример #10
0
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]
Пример #11
0
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
Пример #12
0
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
Пример #13
0
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
Пример #14
0
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
Пример #15
0
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;