I want to extract same row values of global matrix in all processes. Then how can I do this?? The case of same problem of vector, I just use vecscattertoall. However, I can't find same function for matrix. Hyung Kim 2023년 2월 3일 (금) 오후 10:47, Matthew Knepley <[email protected]>님이 작성:
On Fri, Feb 3, 2023 at 8:45 AM 김성익 <[email protected]> wrote:
Following your comments, If I extract first row of below matrix. [image: image.png] IS isrow; PetscInt *indices; PetscMalloc1(1, *indices);
That should be &indices.
Indices[0] = 0; ISCreateGenreral(PETSC_COMM_WORLD, 1, indices, PETSC_COPY_VALUES, &isrow);
You should use PETSC_OWN_POINTER.
MatCreateSubMatrix(mat,isrow,NULL,MAT_INITIAL_MATRIX,&newmat);
Then can I get the array about first row of global matrix in all processes?
No, just on the process which gives 0. If you do that on every process, every rank with get row 0.
Thanks,
Matt
Hyung Kim
2023년 2월 3일 (금) 오후 10:26, Matthew Knepley <[email protected]>님이 작성:
On Fri, Feb 3, 2023 at 8:06 AM 김성익 <[email protected]> wrote:
Following your comments, I want to check below things. For example, the global dense matrix are as below. [image: image.png] If I want to get first row ('1 2 0 0 3 0 0 4') in Proc 1. Then I should put 'MatCreateSubMatrix <https://petsc.org/main/docs/manualpages/Mat/MatCreateSubMatrix/>(mat, isrow, NULL, MAT_INITIAL_MATRIX, *&*newmat)' and isrow will be [0 1 2 3 4 5 6 7].
In this case, How can I make isrow? Actually I can't understand the procedure of handling isrow.
You create an IS object of type ISGENERAL and give it the array of global indices that you want to extract.
Thanks,
Matt
Hyung Kim
2023년 2월 3일 (금) 오후 9:03, Mark Adams <[email protected]>님이 작성:
https://petsc.org/main/docs/manualpages/Mat/MatCreateSubMatrix/
Note, PETSc lets you give NULL arguments if there is a reasonable default. In this case give NULL for the column IS and you will get the whole columns.
Mark
On Fri, Feb 3, 2023 at 4:05 AM 김성익 <[email protected]> wrote:
Hello,
By using MatGetRow, user can get vectors from local matrix (at each process).
However, I need other process's row values. So I have 2 questions.
1. Is there any function for getting arrays from other process's??
2. Or is there any function like matrix version of vecscattertoall??
Thanks, Hyung Kim
-- What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener
https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>
-- What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener
https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>