[petsc-users] Copy MPIAIJ Matrix onto MPISeq Matrices on All Processors

Ali Berk Kahraman aliberkkahraman at yahoo.com
Tue Mar 20 08:31:31 CDT 2018

Thank your for the reply.

I have tried it, but could not get it to work. For it to work, I have to 
know at which vector entry the epsilon in the FD approximation is to be 
added. It is an input for my inexpensive function, and I could not find 
a way to pass it in using MFFD context.

I have been trying to get it working with PETSC_COMM_WORLD too with no 
luck. My guess is that my FormRHSFunction becomes a collective function 
on WORLD, so I cannot generate many separate copies each doing its own 
thing. For this reason I am trying to move it to SELF, but I cannot do 
that if I cannot find a way to represent my WORLD matrix input fully on 
each process.

Sorry I am stuck in the same question, but any ideas on how to move a 
matrix from WORLD to SELF, similar to the way it is possible with 
vectors using VecScatter?

On 19-03-2018 21:08, Smith, Barry F. wrote:
>> On Mar 19, 2018, at 12:00 PM, Ali Berk Kahraman <aliberkkahraman at yahoo.com> wrote:
>> Dear All,
>> I have to create my Jacobian numerically using an FD function I have written, but the problem is that the function evaluation FormRHSFunction creates PETSC_COMM_WORLD objects in it, and takes 1 PETSC_COMM_WORLD matrix as an input.  So I cannot work it on parallel (every processor calculating its own portion of Jacobian), I tried but the machine gets confused.
>     Huh. It is fine to have the function work on PETSC_COMM_WORLD, and it can be in parallel.
>> My initial idea was to create the objects in PETSC_COMM_SELF type within the RHS function, but the input COMM_WORLD matrix standed where it was. So my question is, is there a way to get a complete copy of a distributed matrix on all the processors as seq matrices?
>> I cannot use the Petsc's version FD function because the FormRHSFunction I call to create the Jacobian is slightly different than the original FormRHSFunction. The original function is too expensive, so I only calculate the relevant parts of it in the Jacobian function.
>     You can do this with MatCreateMFFD() and set your inexpensive function as the function.
>> Best Regards,
>> Ali Berk Kahraman
>> M.Sc. Student, Mechanical Engineering
>> Bogazici Uni. Istanbul, Turkey

More information about the petsc-users mailing list