Распараллеливание начально-краевой задачи (конечная разность) - PullRequest
0 голосов
/ 04 ноября 2018

Я запускаю симуляцию для решения уравнения диффузии адвекции. Я хочу распараллелить часть кода, где я вычисляю частные производные, чтобы ускорить мои вычисления. Вот что я делаю:

p1 = np.zeros((len(r), len(th)-1 ))  #The solution of the matrix

def func(i):
    pti = np.zeros(len(th)-1)
    for j in range (len(pti)):    

        abc = f(p1)  #Some function calculating the derivatives at each point
        pti[j] = p1[i][j] + dt*( abc )  #dt is some small float number

    return pti

#Setting the initial condition of the p1 matrix
for i in range(len(p1[:,0])):
    for j in range(len(p1[0])):


        p1[i][j] = 0.01

#Final loop calculating the integral by finite difference scheme

p = Pool(args.cores)
for k in range (0,args.iterations):  #This is integration in time


    p1=p.map(func,range(len(r)))   


print (p1)

Проблема, с которой я здесь сталкиваюсь, заключается в том, что моя матрица p1 не обновляется после каждой итерации по k. В конце, когда я печатаю p1, я получаю ту же матрицу, что и инициализировал.

Также работает линейная версия этого кода (но это занимает слишком много времени).

1 Ответ

0 голосов
/ 07 ноября 2018

Хорошо, я решил это сам. Видимо, поставив линию

p = Pool(args.cores)

внутри петли

for k in range (0,args.iterations):

делает свое дело.

...