Great thanks, that seemed to work well. This is something my algorithm will do 
fairly often (“elevating” a node’s communicator to a communicator that includes 
siblings). The matrices formed are dense but low rank. With MatCreateSubMatrix, 
it appears I do a lot of copying from one Mat to another. Is there a way to do 
it with array copying or pointer movement instead of copying entries?

-Damyn

> On Oct 24, 2023, at 9:51 PM, Jed Brown <[email protected]> wrote:
> 
> You can place it in a parallel Mat (that has rows or columns on only one rank 
> or a subset of ranks) and then MatCreateSubMatrix with all new rows/columns 
> on a different rank or subset of ranks.
> 
> That said, you usually have a function that assembles the matrix and you can 
> just call that on the new communicator.
> 
> Damyn Chipman <[email protected]> writes:
> 
>> Hi PETSc developers,
>> 
>> In short, my question is this: Does PETSc provide a way to move or copy an 
>> object (say a Mat) from one communicator to another?
>> 
>> The more detailed scenario is this: I’m working on a linear algebra solver 
>> on quadtree meshes (i.e., p4est). I use communicator subsets in order to 
>> facilitate communication between siblings or nearby neighbors. When 
>> performing linear algebra across siblings (a group of 4), I need to copy a 
>> node’s data (i.e., a Mat object) from a sibling’s communicator to the 
>> communicator that includes the four siblings. From what I can tell, I can 
>> only copy a PETSc object onto the same communicator.
>> 
>> My current approach will be to copy the raw data from the Mat on one 
>> communicator to a new Mat on the new communicator, but I wanted to see if 
>> there is a more “elegant” approach within PETSc.
>> 
>> Thanks in advance,
>> 
>> Damyn Chipman
>> Boise State University
>> PhD Candidate
>> Computational Sciences and Engineering
>> [email protected]

Reply via email to