コード例 #1
0
ファイル: load_balance_helper.py プロジェクト: pankajp/pysph
def create_cell_manager(options):
    print 'creating cell manager', options
    # create a parallel cell manager.
    cell_manager = ParallelCellManager(arrays_to_bin=[],
                                       max_cell_scale=options.max_cell_scale,
                                       dimension=2,
                                       load_balancing=False,
                                       initialize=False)
    # enable load balancing
    cell_manager.load_balancer = LoadBalancer(parallel_cell_manager=cell_manager)
    cell_manager.load_balancer.skip_iteration = 1
    cell_manager.load_balancer.threshold_ratio = 10.
    
    for i,pa in enumerate(create_particles(options)):
        cell_manager.arrays_to_bin.append(pa)
        print 'parray %d:'%i, pa.get_number_of_particles()

    cell_manager.initialize()
    print 'num_particles', cell_manager.get_number_of_particles()
    
    return cell_manager
コード例 #2
0
def create_cell_manager(options):
    print 'creating cell manager', options
    # create a parallel cell manager.
    cell_manager = ParallelCellManager(arrays_to_bin=[],
                                       max_cell_scale=options.max_cell_scale,
                                       dimension=2,
                                       load_balancing=False,
                                       initialize=False)
    # enable load balancing
    cell_manager.load_balancer = LoadBalancer(
        parallel_cell_manager=cell_manager)
    cell_manager.load_balancer.skip_iteration = 1
    cell_manager.load_balancer.threshold_ratio = 10.

    for i, pa in enumerate(create_particles(options)):
        cell_manager.arrays_to_bin.append(pa)
        print 'parray %d:' % i, pa.get_number_of_particles()

    cell_manager.initialize()
    print 'num_particles', cell_manager.get_number_of_particles()

    return cell_manager
コード例 #3
0
ファイル: lb_check_1d.py プロジェクト: pankajp/pysph
from pysph.base.particle_array import ParticleArray
from pysph.parallel.parallel_cell import ParallelCellManager
from pysph.solver.basic_generators import LineGenerator
from pysph.base.cell import INT_INF
from pysph.base.point import *


pcm = ParallelCellManager(initialize=False, dimension=1)


parray = ParticleArray(name="parray")

if rank == 0:
    lg = LineGenerator(start_point=Point(0, 0, 0), end_point=Point(1.0, 0, 0), particle_spacing=0.01)
    x, y, z = lg.get_coords()

    parray.add_property({"name": "x", "data": x})
    parray.add_property({"name": "y", "data": y})
    parray.add_property({"name": "z", "data": z})
    parray.add_property({"name": "h"})
    parray.align_particles()
    parray.h[:] = 0.01
else:
    parray.add_property({"name": "x"})
    parray.add_property({"name": "y"})
    parray.add_property({"name": "z"})
    parray.add_property({"name": "h"})

pcm.add_array_to_bin(parray)
pcm.initialize()
コード例 #4
0
from pysph.base.particle_array import ParticleArray
from pysph.parallel.parallel_cell import ParallelCellManager
from pysph.solver.basic_generators import LineGenerator
from pysph.base.cell import INT_INF
from pysph.base.point import *

pcm = ParallelCellManager(initialize=False, dimension=1)

parray = ParticleArray(name='parray')

if rank == 0:
    lg = LineGenerator(start_point=Point(0, 0, 0),
                       end_point=Point(1.0, 0, 0),
                       particle_spacing=0.01)
    x, y, z = lg.get_coords()

    parray.add_property({'name': 'x', 'data': x})
    parray.add_property({'name': 'y', 'data': y})
    parray.add_property({'name': 'z', 'data': z})
    parray.add_property({'name': 'h'})
    parray.align_particles()
    parray.h[:] = 0.01
else:
    parray.add_property({'name': 'x'})
    parray.add_property({'name': 'y'})
    parray.add_property({'name': 'z'})
    parray.add_property({'name': 'h'})

pcm.add_array_to_bin(parray)
pcm.initialize()
コード例 #5
0
ファイル: parallel_cell_check.py プロジェクト: sabago/pysph
def test():
    pcm = ParallelCellManager(initialize=False)

    # create 2 particles, one with proc 0 another with proc 1

    lg = LineGenerator(particle_spacing=0.5)

    lg.start_point.x = 0.0
    lg.end_point.x = 10.0
    lg.start_point.y = lg.start_point.z = 0.0
    lg.end_point.y = lg.end_point.z = 0.0

    x, y, z = lg.get_coords()
    num_particles = len(x)

    logger.info('Num particles : %d'%(len(x)))

    parray = ParticleArray(name='p1',
                       x={'data':x},
                       y={'data':y},
                       z={'data':z},
                       h={'data':None, 'default':0.5})


    # add parray to the cell manager
    parray.add_property({'name':'u'})
    parray.add_property({'name':'v'})
    parray.add_property({'name':'w'})
    parray.add_property({'name':'rho'})
    parray.add_property({'name':'p'})
    
    parray = LoadBalancer.distribute_particles(parray, num_procs, 1.0)[rank]
    pcm.add_array_to_bin(parray)
    
    np = pcm.arrays_to_bin[0].num_real_particles
    nptot = comm.bcast(comm.reduce(np))
    assert nptot == num_particles

    pcm.initialize()

    np = pcm.arrays_to_bin[0].num_real_particles
    nptot = comm.bcast(comm.reduce(np))
    assert nptot == num_particles
    
    pcm.set_jump_tolerance(INT_INF())

    logger.debug('%d: num_cells=%d'%(rank,len(pcm.cells_dict)))
    logger.debug('%d:'%rank + ('\n%d '%rank).join([str(c) for c  in pcm.cells_dict.values()]))

    # on processor 0 move all particles from one of its cell to the next cell
    if rank == 0:
        cell = pcm.cells_dict.get(list(pcm.proc_map.cell_map.values()[0])[0])
        logger.debug('Cell is %s'%(cell))
        indices = []
        cell.get_particle_ids(indices)
        indices = indices[0]
        logger.debug('Num particles in Cell is %d'%(indices.length))
        parr = cell.arrays_to_bin[0]
        x, y, z = parr.get('x', 'y', 'z', only_real_particles=False)
        logger.debug(str(len(x)) + str(x))
        logger.debug(str(indices.length) + str(indices.get_npy_array()))
        for i in range(indices.length):
            x[indices[i]] += cell.cell_size

        parr.set_dirty(True)

        pcm.update_status()
        logger.debug('Calling cell manager update')
        logger.debug('Is dirty %s'%(pcm.is_dirty))
        pcm.update()

        np = pcm.arrays_to_bin[0].num_real_particles
        nptot = comm.bcast(comm.reduce(np))
        assert nptot == num_particles

        #logger.debug('hierarchy :%s'%(pcm.hierarchy_list))
        logger.debug('cells : %s'%(pcm.cells_dict))
        logger.debug('num particles : %d'%(parray.get_number_of_particles()))
        logger.debug('real particles : %d'%(parray.num_real_particles))