Exemplo n.º 1
0
    def create_solver(self):
        self.cm = cm = ParallelCellManager(self.pas, self.cell_size,
                                           self.cell_size)
        #print 'num_cells:', len(cm.cells_dict)
        cm.load_balancing = False  # balancing will be done manually
        cm.dimension = self.dim

        self.lb = lb = self.cm.load_balancer = LoadBalancer(
            parallel_cell_manager=self.cm)
        lb.skip_iteration = 1
        lb.threshold_ratio = 10.
        lb.lb_max_iteration = 10
        lb.setup()
Exemplo n.º 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
Exemplo n.º 3
0
# logging setup
# logging setup
import logging
logger = logging.getLogger()
log_file_name = '/tmp/log_pysph_' + str(rank)
logging.basicConfig(level=logging.DEBUG, filename=log_file_name, filemode='w')
logger.addHandler(logging.StreamHandler())

# local imports
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
Exemplo n.º 4
0
    def __init__(self,
                 arrays=[],
                 in_parallel=False,
                 variable_h=False,
                 load_balancing=True,
                 update_particles=True,
                 locator_type=SPHNeighborLocator,
                 periodic_domain=None,
                 min_cell_size=-1):
        """ Constructor

        Parameters:
        -----------

        arrays -- list of particle arrays in the simulation

        in_parallel -- flag for parallel runs

        variable_h -- flag for variable smoothing lengths

        load_balancing -- flag for dynamic load balancing.

        periodic_domain -- the periodic domain for periodicity

        """

        # set the flags

        self.variable_h = variable_h
        self.in_parallel = in_parallel
        self.load_balancing = load_balancing
        self.locator_type = locator_type

        # Some sanity checks on the input arrays.
        assert len(arrays) > 0, "Particles must be given some arrays!"
        prec = arrays[0].cl_precision
        msg = "All arrays must have the same cl_precision"
        for arr in arrays[1:]:
            assert arr.cl_precision == prec, msg

        self.arrays = arrays

        self.kernel = None

        # create the cell manager

        if not in_parallel:
            self.cell_manager = CellManager(arrays_to_bin=arrays,
                                            min_cell_size=min_cell_size,
                                            periodic_domain=periodic_domain)
        else:
            self.cell_manager = ParallelCellManager(
                arrays_to_bin=arrays, load_balancing=load_balancing)

            self.pid = self.cell_manager.pid

        # create the nnps manager

        self.nnps_manager = NNPSManager(cell_manager=self.cell_manager,
                                        variable_h=variable_h,
                                        locator_type=self.locator_type)

        # set defaults

        self.correction_manager = None
        self.misc_prop_update_functions = []

        # call an update on the particles (i.e index)

        if update_particles:
            self.update()
Exemplo n.º 5
0
# logging setup
import logging
logger = logging.getLogger()
log_file_name = '/tmp/log_pysph_' + str(rank)
logging.basicConfig(level=logging.DEBUG, filename=log_file_name, filemode='w')
logger.addHandler(logging.StreamHandler())

# local imports
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)

# create two particles, one with proc 0 another with proc 1
if rank == 0:
    parray = ParticleArray()
    parray.add_property({'name': 'x', 'data': [0.4]})
    parray.add_property({'name': 'h', 'data': [0.1]})
elif rank == 1:
    parray = ParticleArray()
    parray.add_property({'name': 'x', 'data': [1.2]})
    parray.add_property({'name': 'h', 'data': [0.1]})
elif rank == 2:
    parray = ParticleArray()
    parray.add_property({'name': 'x', 'data': [2.0]})
    parray.add_property({'name': 'h', 'data': [0.1]})