コード例 #1
0
ファイル: main.py プロジェクト: gmiejski/OR_python
if N % processes != 0:
    print("Error - cannot partition the problem")
    comm.Abort()

rows = int(N / processes)
mapper = Mapper(N, rank, rows, debugger)
table = Tab(N, rank, rows, mapper, debugger)

initial_rank = int(processes / 2)
debugger.print_program_info("initial_rank = " + str(initial_rank))
if rank == initial_rank:
    target_x = int(N / 2)
    target_y = int(N / 2)
    debugger.print_program_info("First cell = " + str(target_x) + "," + str(target_y))
    initial_bacteria = Bacteria(target_x, target_y, chance=1)
    table.update_table([initial_bacteria])


def split_bacterias_per_process(bacterias_info, min_x, max_x):
    send_up = list(filter(lambda bacteria: bacteria.target_x == min_x - 1, bacterias_info))
    send_down = list(filter(lambda bacteria: bacteria.target_x == max_x + 1, bacterias_info))
    # print(len(send_up), len(send_down), len(bacterias_info))
    # print(bacterias_info, min_x, max_x)
    assert (len(send_up) + len(send_down)) == len(bacterias_info)
    return send_up, send_down


def send_bacterias(processes, rank, bacterias_info, min_x, max_x):
    bacterias_up, bacterias_down = split_bacterias_per_process(bacterias_info, min_x, max_x)
    if rank - 1 >= 0:
        comm.send(bacterias_up, dest=rank - 1)