コード例 #1
0
ファイル: simple_block_manager.py プロジェクト: sabago/pysph
    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
コード例 #2
0
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