Parallellizing Intial-boundary value problem (Finite difference)










2














I am running a simulation to solve the advection diffusion equation. I wish to parallelize the part of the code where I calculate the partial derivatives so as to speed up my computation. Here is what I am doing:



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)


The problem that I am facing here is that my p1 matrix is not updating after each iteration in k. In the end when I print p1 I get the same matrix that I initialized.



Also, the linear version of this code is working (but it takes too long).










share|improve this question























  • It looks like you want some synchronization happening between the iterations? If that is ProcessPool from multiprocessing, you probably want to use the context manager (with Pool(args.cores) as p:).
    – Martin Ueding
    Nov 11 at 13:04















2














I am running a simulation to solve the advection diffusion equation. I wish to parallelize the part of the code where I calculate the partial derivatives so as to speed up my computation. Here is what I am doing:



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)


The problem that I am facing here is that my p1 matrix is not updating after each iteration in k. In the end when I print p1 I get the same matrix that I initialized.



Also, the linear version of this code is working (but it takes too long).










share|improve this question























  • It looks like you want some synchronization happening between the iterations? If that is ProcessPool from multiprocessing, you probably want to use the context manager (with Pool(args.cores) as p:).
    – Martin Ueding
    Nov 11 at 13:04













2












2








2







I am running a simulation to solve the advection diffusion equation. I wish to parallelize the part of the code where I calculate the partial derivatives so as to speed up my computation. Here is what I am doing:



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)


The problem that I am facing here is that my p1 matrix is not updating after each iteration in k. In the end when I print p1 I get the same matrix that I initialized.



Also, the linear version of this code is working (but it takes too long).










share|improve this question















I am running a simulation to solve the advection diffusion equation. I wish to parallelize the part of the code where I calculate the partial derivatives so as to speed up my computation. Here is what I am doing:



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)


The problem that I am facing here is that my p1 matrix is not updating after each iteration in k. In the end when I print p1 I get the same matrix that I initialized.



Also, the linear version of this code is working (but it takes too long).







python-3.x parallel-processing nested-loops






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 11 at 13:00









Zoe

11k73675




11k73675










asked Nov 4 at 13:14









Prakhar Godara

112




112











  • It looks like you want some synchronization happening between the iterations? If that is ProcessPool from multiprocessing, you probably want to use the context manager (with Pool(args.cores) as p:).
    – Martin Ueding
    Nov 11 at 13:04
















  • It looks like you want some synchronization happening between the iterations? If that is ProcessPool from multiprocessing, you probably want to use the context manager (with Pool(args.cores) as p:).
    – Martin Ueding
    Nov 11 at 13:04















It looks like you want some synchronization happening between the iterations? If that is ProcessPool from multiprocessing, you probably want to use the context manager (with Pool(args.cores) as p:).
– Martin Ueding
Nov 11 at 13:04




It looks like you want some synchronization happening between the iterations? If that is ProcessPool from multiprocessing, you probably want to use the context manager (with Pool(args.cores) as p:).
– Martin Ueding
Nov 11 at 13:04












1 Answer
1






active

oldest

votes


















0














Okay I solved this myself. Apparently putting the line



p = Pool(args.cores)


inside the loop



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


does the trick.






share|improve this answer




















    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53141211%2fparallellizing-intial-boundary-value-problem-finite-difference%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    Okay I solved this myself. Apparently putting the line



    p = Pool(args.cores)


    inside the loop



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


    does the trick.






    share|improve this answer

























      0














      Okay I solved this myself. Apparently putting the line



      p = Pool(args.cores)


      inside the loop



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


      does the trick.






      share|improve this answer























        0












        0








        0






        Okay I solved this myself. Apparently putting the line



        p = Pool(args.cores)


        inside the loop



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


        does the trick.






        share|improve this answer












        Okay I solved this myself. Apparently putting the line



        p = Pool(args.cores)


        inside the loop



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


        does the trick.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 7 at 13:10









        Prakhar Godara

        112




        112



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53141211%2fparallellizing-intial-boundary-value-problem-finite-difference%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Ruanda

            Makov (Slowakei)

            Kleinkühnau