def _get_communication_data(self, cell_list_to_send): """Get the particle array data corresponding to the cell list that needs to be communicated. """ numarrays = len(self.arrays) cm = self.cm data = {} for pid, cell_list in cell_list_to_send.iteritems(): parray_list = [] for i in range(numarrays): parray_list.append(ParticleArray()) for cid in cell_list: cell = cm.cells_dict[cid] index_lists = [] cell.get_particle_ids(index_lists) for i in range(numarrays): src = self.arrays[i] dst = parray_list[i] index_array = index_lists[i] pa = src.extract_particles(index_array) # set the local and tag values pa.local[:] = 0 pa.tag[:] = get_dummy_tag() dst.append_parray(pa) dst.set_name(src.name) data[pid] = parray_list return data for cid, pids in send_cells_to.iteritems(): if len(pids) > 0: parray_list = [] cell = cm.cells_dict[cid] index_lists = [] cell.get_particle_ids(index_lists) for i in range(numarrays): parray_list.append( ParticleArray() ) src = self.arrays[i] dst = parray_list[i] index_array = index_lists[i] pa = src.extract_particles(index_array) # set the local and tag values pa.local[:] = 0 pa.tag[:] = get_dummy_tag() dst.append(pa) dst.set_name(src.name) for pid in pids: to_send[pid] = parray_list
from parallel_manager import ParallelManager from parallel_controller import ParallelController from pysph.base.particle_array import get_local_real_tag, get_dummy_tag from pysph.base.fast_utils import arange_long # logger imports import logging logger = logging.getLogger() # Constants Dummy = get_dummy_tag() LocalReal = get_local_real_tag() class SimpleParallelManager(ParallelManager): """This is a very simple parallel manager. It simply broadcasts all the particles. Each machine has exactly the same particles for all time. There is no support currently for dynamically changing the particles but that should be trivial to add. """ def __init__(self, parallel_controller=None): if parallel_controller is None: parallel_controller = ParallelController() self.parallel_controller = parallel_controller self.comm = parallel_controller.comm self.size = self.parallel_controller.num_procs self.rank = self.parallel_controller.rank