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)
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