示例#1
0
def condition_array_xyz(thetav, phiv, order=13):

    mv,lv=newleg.degrees(order, start=1)
    leg,dleg=newleg.legendre(scipy.cos(thetav), order)

    cossin = numpy.zeros((len(phiv),order*(order+2)))
    cossin[:, mv >= 0] = numpy.cos(phiv[:, numpy.newaxis] @ abs(mv[numpy.newaxis, :]))[:, mv >= 0]
    cossin[:, mv < 0] = numpy.sin(phiv[:, numpy.newaxis] @ abs(mv[numpy.newaxis, :]))[:, mv < 0]

    sinmcos=numpy.zeros((len(phiv),order*(order+2)))
    sinmcos[:, mv >= 0] = numpy.sin(phiv[:, numpy.newaxis] @ abs(mv[numpy.newaxis, :]))[:, mv >= 0]
    sinmcos[:, mv < 0] = -numpy.cos(phiv[:, numpy.newaxis] @ abs(mv[numpy.newaxis, :]))[:, mv < 0]
    
    costhetav = numpy.cos(thetav)
    sinthetav = numpy.sin(thetav)

    Ax = cossin.transpose() * dleg * (-sinthetav)
    Ay = abs(mv[:, numpy.newaxis]) * leg * sinmcos.transpose() / sinthetav
    Az = -(lv + 1)[:, numpy.newaxis] * leg * cossin.transpose()

    return Ax, Ay, Az
示例#2
0
def xyzfieldv2(gcoefs, phi, theta, rparam=1.0, order=13, regular=False):

    mv, lv = newleg.degrees(order, start=1)
    legv, dlegv = newleg.legendre(scipy.cos(theta), order)

    x = numpy.zeros_like(theta)
    y = x.copy()
    z = x.copy()

    for m, l, g, leg, dleg in zip(mv, lv, gcoefs, legv, dlegv):

        rparamexp = rparam ** (l + 2)

        m_abs = abs(m)

        cossin = scipy.cos(m_abs * phi) if m >= 0 else scipy.sin(m_abs * phi)
        sinmcos = scipy.sin(m_abs * phi) if m >= 0 else -scipy.cos(m_abs * phi)

        x += rparamexp * (g * cossin) * dleg * (-scipy.sin(theta))
        y += rparamexp * (g * sinmcos) * m_abs * leg / (scipy.sin(theta))
        z -= rparamexp * (l + 1) * (g * cossin) * leg

    return x, y, z