<div dir="ltr"><div dir="ltr">On Fri, Feb 3, 2023 at 9:04 AM 김성익 <<a href="mailto:ksi2443@gmail.com">ksi2443@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Actually in the last mail, below scripts are running in all processes.</div><div><br></div><div>IS isrow;</div><div>PetscInt *indices;</div><div>PetscMalloc1(1, &indices);</div><div>Indices[0] = 0;</div><div>ISCreateGenreral(PETSC_COMM_WORLD, 1, indices, PETSC_OWN_POINTER, &isrow);</div><div>MatCreateSubMatrix(mat,isrow,NULL,MAT_INITIAL_MATRIX,&newmat);</div><div>(extract from newmat)</div><div><br></div><div>However, you said it cannot get the values of first row of global matrix.<br></div><div>Please let me know how can I fix this scripts for getting the 1st row of global matrix in all processes.</div></div></blockquote><div><br></div><div>Did you run and see what you get? If it is on all processes, it should work.</div><div><br></div><div> Thanks,</div><div><br></div><div> Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Hyung Kim</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">2023년 2월 3일 (금) 오후 10:54, Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a>>님이 작성:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">On Fri, Feb 3, 2023 at 8:52 AM 김성익 <<a href="mailto:ksi2443@gmail.com" target="_blank">ksi2443@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">I want to extract same row values of global matrix in all processes.<div>Then how can I do this??</div></div></blockquote><div><br></div><div>Create the same IS on each process.</div><div><br></div><div> THanks,</div><div><br></div><div> Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>The case of same problem of vector, I just use vecscattertoall.</div><div>However, I can't find same function for matrix.</div><div><br></div><div>Hyung Kim</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">2023년 2월 3일 (금) 오후 10:47, Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a>>님이 작성:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">On Fri, Feb 3, 2023 at 8:45 AM 김성익 <<a href="mailto:ksi2443@gmail.com" target="_blank">ksi2443@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">Following your comments,<br>If I extract first row of below matrix.<br><div><img src="cid:ii_ldokt9u31" alt="image.png" width="312" height="175"><br></div><div>IS isrow;</div><div>PetscInt *indices;</div><div>PetscMalloc1(1, *indices);</div></div></div></blockquote><div><br></div><div>That should be &indices.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div>Indices[0] = 0;</div><div>ISCreateGenreral(PETSC_COMM_WORLD, 1, indices, PETSC_COPY_VALUES, &isrow);</div></div></div></blockquote><div><br></div><div>You should use PETSC_OWN_POINTER.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div>MatCreateSubMatrix(mat,isrow,NULL,MAT_INITIAL_MATRIX,&newmat);</div><div><br></div><div>Then can I get the array about first row of global matrix in all processes?</div></div></div></blockquote><div><br></div><div>No, just on the process which gives 0. If you do that on every process, every rank with get row 0.</div><div><br></div><div> Thanks,</div><div><br></div><div> Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div>Hyung Kim</div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">2023년 2월 3일 (금) 오후 10:26, Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a>>님이 작성:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">On Fri, Feb 3, 2023 at 8:06 AM 김성익 <<a href="mailto:ksi2443@gmail.com" target="_blank">ksi2443@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Following your comments,<br>I want to check below things.<div>For example, the global dense matrix are as below.</div><div><img src="cid:ii_ldojdn3o0" alt="image.png" width="306" height="173"><br></div><div>If I want to get first row ('1 2 0 0 3 0 0 4') in Proc 1.</div><div>Then I should put '<span style="font-size:13.125px;box-sizing:border-box;color:rgb(0,0,0)"><a href="https://petsc.org/main/docs/manualpages/Mat/MatCreateSubMatrix/" style="box-sizing:border-box;background-color:transparent;text-decoration-line:none" target="_blank">MatCreateSubMatrix</a></span><span style="font-size:13.125px;box-sizing:border-box;color:rgb(0,0,0);font-weight:bold">(</span><span style="font-size:13.125px;box-sizing:border-box;color:rgb(0,0,0)">mat</span><span style="font-size:13.125px;box-sizing:border-box;color:rgb(0,0,0);font-weight:bold">,</span><span style="font-size:13.125px;box-sizing:border-box;color:rgb(248,248,248)"> </span><span style="font-size:13.125px;box-sizing:border-box;color:rgb(0,0,0)">isrow</span><span style="font-size:13.125px;box-sizing:border-box;color:rgb(0,0,0);font-weight:bold">,</span><span style="font-size:13.125px;box-sizing:border-box;color:rgb(248,248,248)"> </span><span style="font-size:13.125px;box-sizing:border-box;color:rgb(0,0,0)">NULL</span><span style="font-size:13.125px;box-sizing:border-box;color:rgb(0,0,0);font-weight:bold">,</span><span style="font-size:13.125px;box-sizing:border-box;color:rgb(248,248,248)"> </span><span style="font-size:13.125px;box-sizing:border-box;color:rgb(0,0,0)">MAT_INITIAL_MATRIX</span><span style="font-size:13.125px;box-sizing:border-box;color:rgb(0,0,0);font-weight:bold">,</span><span style="font-size:13.125px;box-sizing:border-box;color:rgb(248,248,248)"> </span><span style="font-size:13.125px;box-sizing:border-box"><font color="#ce5c00"><b>&</b></font></span><span style="font-size:13.125px;box-sizing:border-box;color:rgb(0,0,0)">newmat</span><span style="font-size:13.125px;box-sizing:border-box;color:rgb(0,0,0);font-weight:bold">)'</span></div><div><font color="#000000"><span style="font-size:13.125px">and isrow will be [0 1 2 3 4 5 6 7].</span></font></div><div><font color="#000000"><span style="font-size:13.125px"><br></span></font></div><div><font color="#000000"><span style="font-size:13.125px">In this case, How can I make isrow?<br>Actually I can't understand the procedure of handling isrow.</span></font></div></div></blockquote><div><br></div><div>You create an IS object of type ISGENERAL and give it the array of global indices that you want to extract.</div><div><br></div><div> Thanks,</div><div><br></div><div> Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><font color="#000000"><span style="font-size:13.125px">Hyung Kim</span></font></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">2023년 2월 3일 (금) 오후 9:03, Mark Adams <<a href="mailto:mfadams@lbl.gov" target="_blank">mfadams@lbl.gov</a>>님이 작성:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><a href="https://petsc.org/main/docs/manualpages/Mat/MatCreateSubMatrix/" target="_blank">https://petsc.org/main/docs/manualpages/Mat/MatCreateSubMatrix/</a><br><div><br></div><div>Note, PETSc lets you give NULL arguments if there is a reasonable default.</div><div>In this case give NULL for the column IS and you will get the whole columns.</div><div><br></div><div>Mark</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Feb 3, 2023 at 4:05 AM 김성익 <<a href="mailto:ksi2443@gmail.com" target="_blank">ksi2443@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hello,<div><br></div><div><br></div><div>By using MatGetRow, user can get vectors from local matrix (at each process).</div><div><br></div><div>However, I need other process's row values.</div><div>So I have 2 questions.</div><div><br></div><div>1. Is there any function for getting arrays from other process's??</div><div><br></div><div>2. Or is there any function like matrix version of vecscattertoall??</div><div><br></div><div>Thanks,</div><div>Hyung Kim</div></div>
</blockquote></div>
</blockquote></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>
</blockquote></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>
</blockquote></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>
</blockquote></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>