Ejemplo n.º 1
0
    def __init__(self,
                 size,
                 dim=3,
                 m=None,
                 Consts=(0.3, 2.0),
                 ocl_context=None):

        self.__dim = np.int(dim)
        self.__size = np.int(size)

        if ocl_context == None:
            self.__occ = occ.OpenCLcontext(
                size, dim, (occ.OCLC_X | occ.OCLC_A | occ.OCLC_M))
        else:
            self.__occ = ocl_context

        self.__R = self.__occ.dtype(Consts[0])
        self.__B = self.__occ.dtype(Consts[1])

        self.__A = np.zeros((size, dim), dtype=self.__occ.dtype)

        if m != None:
            self.__occ.M_cla.set(self.__dtype(m), queue=self.__occ.CL_queue)

        self.__init_prog_cl()
Ejemplo n.º 2
0
def gravity_cluster():

    if not test_pyopencl():
        print("")
        print("Attention !!! ")
        print(
            " This demo works only with PyOpenCL: \n  http://mathema.tician.de/software/pyopencl \n  http://www.khronos.org/opencl/ \n "
        )
        print(" Please install the package: python-pyopencl for continuing")
        print("")
        return

    G = 0.000001
    steps = 100000000

    n = 3000
    dt = 0.04

    pset = ps.ParticlesSet(n, dtype=np.float32)

    cs = clu.RandGalaxyCluster()

    print("Building initial galaxy .... ")
    cs.insert3(pset.X, M=pset.M, V=pset.V, G=G)

    try:
        occx = occ.OpenCLcontext(
            pset.size, pset.dim,
            (occ.OCLC_X | occ.OCLC_V | occ.OCLC_A | occ.OCLC_M))
    except:
        print("")
        print("ERROR !!! ")
        print(" Please verify your opencl installation ")
        print(" Probably you must install your GPU OpenCL drivers")
        print("")
        return

    grav = gr.GravityOCL(pset.size, Consts=G, ocl_context=occx)
    grav.set_masses(pset.M)

    grav.update_force(pset)

    solver = els.EulerSolverOCL(grav, pset, dt, ocl_context=occx)

    a = aogl.AnimatedGl()

    a.draw_particles.set_draw_model(a.draw_particles.DRAW_MODEL_VECTOR)

    a.ode_solver = solver
    a.pset = pset
    a.steps = steps

    a.build_animation()

    a.start()

    return
Ejemplo n.º 3
0
    def __init__(self, force, p_set, dt, ocl_context=None):
        super(EulerSolverOCL, self).__init__(force, p_set, dt)

        if ocl_context is None:
            self.__occ = occ.OpenCLcontext(
                self.pset.size, self.pset.dim,
                (occ.OCLC_X | occ.OCLC_V | occ.OCLC_A))
        else:
            self.__occ = ocl_context

        self.__init_prog_cl()
Ejemplo n.º 4
0
 def __init__(self , size , dim=3 , m=None , Consts=1.0 , ocl_context=None ):
     
     self.__dim = np.int( dim )
     self.__size = np.int( size )
     
     if ocl_context == None :
         self.__occ = occ.OpenCLcontext( size , dim , ( occ.OCLC_V | occ.OCLC_A | occ.OCLC_M )  )
     else :
         self.__occ = ocl_context        
     
     self.__dtype = self.__occ.dtype
     
     self.__K = self.__occ.dtype( Consts )
     
     self.__A = np.zeros( ( size , dim ) , dtype=self.__occ.dtype )
     self.__F = np.zeros( ( size , dim ) , dtype=self.__occ.dtype )
                     
     if m != None :
         self.set_masses( m )
     
     self.__init_prog_cl()
Ejemplo n.º 5
0
    def __init__(self,
                 size,
                 dim=3,
                 m=None,
                 Consts=(0.3, 2.0),
                 domain=(-5.5, 5.5),
                 ocl_context=None):

        self.__dim = np.int(dim)
        self.__size = np.int(size)

        if ocl_context == None:
            self.__occ = occ.OpenCLcontext(
                size, dim, (occ.OCLC_X | occ.OCLC_A | occ.OCLC_M))
        else:
            self.__occ = ocl_context

        self.__R = self.__occ.dtype(Consts[0])
        self.__B = self.__occ.dtype(Consts[1])

        self.__A = np.zeros((size, dim), dtype=self.__occ.dtype)

        self.__Ix = np.zeros(size, dtype=np.uint32)
        self.__occ.add_array_by_name("Ix", dtype=np.uint32)

        self.__n_sub_dom = np.uint32((domain[1] - domain[0]) /
                                     (2.0 * self.__R) + 1.0)
        self.__sub_d_vec = np.zeros(self.__n_sub_dom + 1,
                                    dtype=self.__occ.dtype)

        self.__sub_d_bd[:] = np.arange(self.__n_sub_dom + 1) * (2.0 * self.__R)
        self.__sub_d_ind = np.zeros(self.__n_sub_dom + 1, dtype=np.uint32)

        if m != None:
            self.__occ.M_cla.set(self.__dtype(m), queue=self.__occ.CL_queue)

        self.__init_prog_cl()
Ejemplo n.º 6
0
def fountain():
    """
    Fountain demo
    """
    steps = 10000000
    dt = 0.005
    pcnt = 100000

    fl = True
    if test_pyopencl():
        print("OpenCL is installed and enabled ")
        print(" Try, at least, 200000 particles ")

        while fl:
            try:
                print(" ")
                pcnt = int(raw_input('How many particles: '))
            except:
                print("Please insert a number! ")
            else:
                fl = False

    pset = ps.ParticlesSet(pcnt, dtype=np.float32)

    pset.M[:] = 0.1
    pset.X[:, 2] = 0.7 * np.random.rand(pset.size)

    grav = cf.ConstForce(pset.size, dim=pset.dim, u_force=(0.0, 0.0, -10.0))

    occx = None
    if test_pyopencl():
        occx = occ.OpenCLcontext(
            pset.size, pset.dim,
            (occ.OCLC_X | occ.OCLC_V | occ.OCLC_A | occ.OCLC_M))
        drag = dr.DragOCL(pset.size,
                          dim=pset.dim,
                          Consts=0.01,
                          ocl_context=occx)
    else:
        drag = dr.Drag(pset.size, dim=pset.dim, Consts=0.01)

    multi = mf.MultipleForce(pset.size, dim=pset.dim)

    multi.append_force(grav)
    multi.append_force(drag)

    multi.set_masses(pset.M)

    #solver = mds.MidpointSolver( multi , pset , dt )
    if test_pyopencl():
        solver = els.EulerSolverOCL(multi, pset, dt, ocl_context=occx)
    else:
        solver = els.EulerSolver(multi, pset, dt)

    solver.update_force()

    default_pos.sim_time = solver.get_sim_time()

    bd = (-100.0, 100.0, -100.0, 100.0, 0.0, 100.0)
    bound = db.DefaultBoundary(bd, dim=3, defualt_pos=default_pos)

    pset.set_boundary(bound)

    a = aogl.AnimatedGl()

    a.ode_solver = solver
    a.pset = pset
    a.steps = steps

    a.draw_particles.set_draw_model(a.draw_particles.DRAW_MODEL_VECTOR)

    a.init_rotation(-80, [0.7, 0.05, 0])

    a.build_animation()
    a.start()

    return
Ejemplo n.º 7
0
def bubble():
    """
    Pseudo bubble simulation
    """

    ocl_ok = test_pyopencl()

    if ocl_ok:
        pcnt = 9000
        r_min = 0.5
        occx = occ.OpenCLcontext(pcnt, 3)
    else:
        pcnt = 700
        r_min = 1.5

    steps = 1000000
    dt = 0.01

    rand_c = rc.RandCluster()

    pset = ps.ParticlesSet(pcnt, dtype=np.float32)

    rand_c.insert3(X=pset.X,
                   M=pset.M,
                   start_indx=0,
                   n=pset.size,
                   radius=3.0,
                   mass_rng=(0.5, 0.8),
                   r_min=0.0)

    if ocl_ok:
        bubble = pb.PseudoBubbleOCL(pset.size, pset.dim, Consts=(r_min, 10))
        drag = dr.DragOCL(pset.size, pset.dim, Consts=0.01)
    else:
        bubble = pb.PseudoBubble(pset.size, pset.dim, Consts=(r_min, 10))
        drag = dr.Drag(pset.size, pset.dim, Consts=0.01)

    constf = cf.ConstForce(pset.size, dim=pset.dim, u_force=[0, 0, -10.0])

    multif = mf.MultipleForce(pset.size, pset.dim)
    multif.append_force(bubble)
    multif.append_force(constf)
    multif.append_force(drag)

    multif.set_masses(pset.M)

    #solver = els.EulerSolver( multif , pset , dt )
    #solver = lps.LeapfrogSolver( multif , pset , dt )
    solver = svs.StormerVerletSolver(multif, pset, dt)
    #solver = rks.RungeKuttaSolver( lennard_jones , pset , dt )
    #solver = mds.MidpointSolver( lennard_jones , pset , dt )

    bound = rb.ReboundBoundary(bound=(-5.0, 5.0))

    pset.set_boundary(bound)

    a = aogl.AnimatedGl()

    a.ode_solver = solver
    a.pset = pset
    a.steps = steps

    if ocl_ok:
        a.draw_particles.set_draw_model(a.draw_particles.DRAW_MODEL_VECTOR)

    a.init_rotation(-80, [0.7, 0.05, 0])

    a.build_animation()

    a.start()

    return