Dear Barry:<br><br>That is, if one wants to generate different sub-matrices&nbsp;at&nbsp;different&nbsp;nodes&nbsp;of&nbsp;the&nbsp;cluster&nbsp;from&nbsp;the&nbsp;same&nbsp;matrix, only&nbsp;MatGetSubMatrices()&nbsp;is&nbsp;available?<br><br>If&nbsp;I&nbsp;use&nbsp;MatDistribute_MPIAIJ to convert a sequential matrix to parallel one, how to control which nodes of the cluster the submatrix&nbsp;of&nbsp;the&nbsp;parallel&nbsp;matrix&nbsp;is&nbsp;distributed&nbsp;into?&nbsp;For&nbsp;example,&nbsp;in&nbsp;a&nbsp;cluster,&nbsp;there&nbsp;are&nbsp;10&nbsp;nodes,&nbsp;I&nbsp;only&nbsp;want&nbsp;to&nbsp;use&nbsp;the&nbsp;specified&nbsp;5&nbsp;nodes&nbsp;for&nbsp;<br>
 distributing the matrix. thanks a lot.<br><br>Regards,<br>Yujie<br><br><br> <span class="gmail_quote">On 3/4/08, <b class="gmail_sendername">Barry Smith</b> &lt;<a href="mailto:bsmith@mcs.anl.gov" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">bsmith@mcs.anl.gov</a>&gt; wrote:</span><blockquote class="gmail_quote" style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0; margin-left: 0.80ex; border-left-color: #cccccc; border-left-width: 1px; border-left-style: solid; padding-left: 1ex">
<br> On Mar 4, 2008, at 1:47 AM, Yujie wrote:<br><br> &gt; Hi, everyone<br> &gt;<br> &gt; #include &quot;petscmat.h&quot;<br> &gt; PetscErrorCode PETSCMAT_DLLEXPORT MatGetSubMatrix(Mat mat,IS<br> &gt; isrow,IS iscol,PetscInt csize,MatReuse cll,Mat *newmat)<br>
  &gt; #include &quot;petscmat.h&quot;<br> &gt; PetscErrorCode PETSCMAT_DLLEXPORT MatGetSubMatrices(Mat mat,PetscInt<br> &gt; n,const IS irow[],const IS icol[],MatReuse scall,Mat *submat[])<br> &gt;<br> &gt; To my knowledge, I can&#39;t get different matrices at different nodes<br>
  &gt; by setting different isrows and iscol with MatGetSubMatrix().<br> &gt; Because isrow&nbsp;&nbsp;is rows current processor should obtain and the iscol<br> &gt; argument must be the same on each processor.<br> &gt; Furthermore, I can&#39;t get different parallel matrices at different<br>
  &gt; nodes by setting different irow[] and icolp[] with<br> &gt; MatGetSubMatrices() assuming I only want to get a matrix at each node.<br> &gt; Because this function only gets different sequential matrices at<br> &gt; different nodes. Is it right?<br>
  &gt;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;MatGetSubMatrices() gets one or more sequential matrix on each<br> process.<br>&nbsp;&nbsp;&nbsp;&nbsp;MatGetSubMatrix() gets ONE parallel matrix that lives on the same<br> communicator has the original matrix<br><br><br> &gt; Another equestion is how to partition the matrix when calling<br>
  &gt; MatConvert() to convert a sequential matrix to a parallel one?<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;MatConvert() is not for converting sequential matrix to parallel;<br> the communicator of a the new matrix from MatConvert()<br> is always the same as the old one.<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;In petsc-dev there is a utility for AIJ matrices that takes a<br> given sequential AIJ matrix and makes it parallel, called<br><br> /*<br>&nbsp;&nbsp;&nbsp;&nbsp; Distributes a SeqAIJ matrix across a set of processes. Code<br> stolen from<br>
 &nbsp;&nbsp;&nbsp;&nbsp; MatLoad_MPIAIJ(). Horrible lack of reuse. Should be a routine for<br> each matrix type.<br><br>&nbsp;&nbsp;&nbsp;&nbsp; Only for square matrices<br> */<br> PetscErrorCode MatDistribute_MPIAIJ(MPI_Comm comm,Mat gmat,PetscInt<br> m,MatReuse reuse,Mat *inmat)<br>
<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;Barry<br><br><br><br> &gt;<br> &gt;<br> &gt; Thanks a lot.<br> &gt;<br> &gt; Regards,<br> &gt; Yujie<br><br></blockquote><br>