Exemplo n.º 1
0
    def __init__(self, uniform=True, deriv_accuracy_radius=5, tileheight = 32, tilewidth = 16):
        """
        Defines parameters in constructed class instance.
        """
        self.uniform               = uniform
        self.deriv_accuracy_radius = deriv_accuracy_radius

        # cache radii, intpoints, and inverses
        self._rad       = None
        self._intpoints = None
        self._Omega     = None
        self._Yinv      = None
        self._T         = None
        self._Tinv      = None
        self._prec      = 1e-8
        if (gpu_capable):
            self.parRiemann = RiemannThetaCuda(tileheight, tilewidth) 
Exemplo n.º 2
0
def riemanntheta_high_dim(X, Yinv, T, z, g, rad, max_points=10000000):
    parRiemann = RiemannThetaCuda(1, 512)
    #initialize parRiemann
    parRiemann.compile(g)
    parRiemann.cache_omega_real(X)
    parRiemann.cache_omega_imag(Yinv, T)
    #compile the box_points program
    point_finder = func1()
    R = get_rad(T, rad)
    print R
    num_int_points = (2 * R + 1)**g
    num_partitions = num_int_points // max_points
    num_final_partition = num_int_points - num_partitions * max_points
    osc_part = 0 + 0 * 1.j
    if (num_partitions > 0):
        S = gpuarray.zeros(np.int(max_points * g), dtype=np.double)
    print "Required number of iterations"
    print num_partitions
    print
    for p in range(num_partitions):
        print p
        print
        S = box_points(point_finder, max_points * p, max_points * (p + 1), g,
                       R, S)
        parRiemann.cache_intpoints(S, gpu_already=True)
        osc_part += parRiemann.compute_v_without_derivs(np.array([z]))
    S = gpuarray.zeros(np.int(
        (num_int_points - num_partitions * max_points) * g),
                       dtype=np.double)
    print num_partitions * max_points, num_int_points
    S = box_points(point_finder, num_partitions * max_points, num_int_points,
                   g, R, S)
    parRiemann.cache_intpoints(S, gpu_already=True)
    osc_part += parRiemann.compute_v_without_derivs(np.array([z]))
    print osc_part
    return osc_part