comm = MPI.COMM_WORLD
num_processes = comm.Get_size()
rank = comm.Get_rank()
Np = N / num_processes
# Get points and weights for Chebyshev weighted integrals
quad = "GC"
BC1 = array([1,0,0, 1,0,0])
BC2 = array([0,1,0, 0,1,0])
BC3 = array([0,1,0, 1,0,0])
SC = ChebyshevTransform(quad)
ST = ShenBasis(BC1, quad)
SN = ShenBasis(BC2, quad, Neumann = True)
SR = ShenBasis(BC3, quad)
SB = ShenBiharmonicBasis(quad, fast_transform=False)

points, weights = ST.points_and_weights(N[0])
pointsN, weightsN = SN.points_and_weights(N[0])

x1 = arange(N[1], dtype=float)*L[1]/N[1]
x2 = arange(N[2], dtype=float)*L[2]/N[2]

# Get grid for velocity points
X = array(meshgrid(points[rank*Np[0]:(rank+1)*Np[0]], x1, x2, indexing='ij'), dtype=float)
Y = array(meshgrid(pointsN[rank*Np[0]:(rank+1)*Np[0]], x1, x2, indexing='ij'), dtype=float)

Nf = N[2]/2+1 # Number of independent complex wavenumbers in z-direction 
Nu = N[0]-2   # Number of velocity modes in Shen basis

U     = empty((3, Np[0], N[1], N[2]))
U_hat = empty((3, N[0], Np[1], Nf), dtype="complex")
P     = empty((Np[0], N[1], N[2]))
    M = 2 ** 3
    quad = "GL"
    BC1 = array([1, 0, 0, 1, 0, 0])
    BC2 = array([0, 1, 0, 0, 1, 0])
    BC3 = array([0, 1, 0, 1, 0, 0])
    SC = ChebyshevTransform(quad)
    ST = ShenBasis(BC1, quad)
    SN = ShenBasis(BC2, quad, Neumann=True)
    SR = ShenBasis(BC3, quad)
    SB = ShenBiharmonicBasis(quad, fast_transform=False)

    if test == "0":
        v_exact = zeros(M)
        f = zeros(M)
        points, weights = SN.points_and_weights(M)
        f[:] = (-8.0 / 3.0) * points  # -((pi/2.)**2)*sin(pi*points/2.)
        v_exact = -(4.0 / 9.0) * (points ** 3 - 3.0 * points)  # sin(pi*points/2.)
        v = Poisson1DNeumann(M, f, quad, SC, SN, BC2)

        print "Error: ", linalg.norm(v - v_exact, inf)
        assert allclose(v, v_exact)
        pl.plot(points, v_exact, points, v)
        pl.show()
    elif test == "1":
        v_exact = zeros(M)
        f = zeros(M)
        points, weights = ST.points_and_weights(M)
        f[:] = -4.0
        v_exact = 2 * (1.0 - points ** 2)
        v = Poisson1D(M, f, quad, SC, ST, BC1)