<div dir="ltr">Dear Lisandro:<br><br>Thank you very much for your help. <br>Our basic idea is <br>main()<br>{<p>step 1: Initialize Petsc and Slepc;</p>
<p>step 2: Use Petsc; (use all N nodes in one process group)</p><p>step
3: Use Slepc; (N nodes is divided into M process groups. these groups
are indepedent. However, they need to communicate with each other)</p><p>step 4: Use Petsc; (use all N nodes in one process group)</p>
<p>}</p>Assuming, the dimension of the whole matrix is N*N when using all Nodes in one process group. At the end of step 2, I need to get M different matrices and vectors (I should be able to make them be stored in M single different nodes which belong to M different process group.). Before step3, I need to scatter M matrices and vectors in M different process groups. Then, I can compute based on M matrices and vectors in M subcommunication domains. After calculating, I need to collect M solution vectors back to their parent communication domain. In Step4, I use this solution to further compute. Could you give me any further advice? thanks again.<br>
<br>Regards,<br>Yujie<br><br><div class="gmail_quote">On Thu, Sep 18, 2008 at 5:44 AM, Lisandro Dalcin <span dir="ltr">&lt;<a href="mailto:dalcinl@gmail.com">dalcinl@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d">On Wed, Sep 17, 2008 at 9:22 PM, Yujie &lt;<a href="mailto:recrusader@gmail.com">recrusader@gmail.com</a>&gt; wrote:<br>
&gt; Thank you very much, Lisandro. You are right. It look like a little<br>
&gt; difficult to &quot;transfer&quot; data from one node to &quot;N&quot; nodes or from N nodes to M<br>
&gt; nodes. My method is to first send all the data in a node and to redistribute<br>
&gt; it in &quot;N&quot; or &quot;M&quot; nodes. do you have any idea about it? is it time-consuming?<br>
&gt; In Petsc, how to support such type of operations? thanks a lot.<br>
<br>
</div>Mmm.. I believe there is not way to do that with PETSc. You just have<br>
to make MPI calls. Perhaps if you can give me a bit more of details<br>
about your communication patters, then I can give you a good<br>
suggestion.<br>
<div><div></div><div class="Wj3C7c"><br>
&gt;<br>
&gt; Regards,<br>
&gt;<br>
&gt; Yujie<br>
&gt;<br>
&gt; On Wed, Sep 17, 2008 at 5:05 PM, Lisandro Dalcin &lt;<a href="mailto:dalcinl@gmail.com">dalcinl@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; A long as you create your SLEPc objects with the appropriate<br>
&gt;&gt; communicator (ie. the one obtained with MPI_Comm_split), then all<br>
&gt;&gt; should just work. Of course, you will have to make appropriate MPI<br>
&gt;&gt; calls to &#39;transfer&#39; data from your N group to the many M groups, and<br>
&gt;&gt; the other way to collect results.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Wed, Sep 17, 2008 at 8:25 PM, Yujie &lt;<a href="mailto:recrusader@gmail.com">recrusader@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt; You are right :). I am thinking the whole framwork for my codes. thank<br>
&gt;&gt; &gt; you,<br>
&gt;&gt; &gt; Lisandro. In Step 3, there are different M slepc-based process groups,<br>
&gt;&gt; &gt; which<br>
&gt;&gt; &gt; should mean M communication domain for Petsc and Slepc (I have created a<br>
&gt;&gt; &gt; communication domain for them) is it ok? thanks again.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Regards,<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Yujie<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Wed, Sep 17, 2008 at 4:08 PM, Lisandro Dalcin &lt;<a href="mailto:dalcinl@gmail.com">dalcinl@gmail.com</a>&gt;<br>
&gt;&gt; &gt; wrote:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; I bet you have not even tried to actually implent and run this :-).<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; This should work. &nbsp;If not, I would consider that a bug. Let us know of<br>
&gt;&gt; &gt;&gt; any problem you have.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; On Wed, Sep 17, 2008 at 7:59 PM, Yujie &lt;<a href="mailto:recrusader@gmail.com">recrusader@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt;&gt; &gt; Hi, Petsc Developer:<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Currently, I am using Slepc for my application. It is based on Petsc.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Assuming I have a cluster with N nodes.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; My codes are like<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; main()<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; {<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; step 1: Initialize Petsc and Slepc;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; step 2: Use Petsc; (use all N nodes in one process group)<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; step 3: Use Slepc; (N nodes is divided into M process groups. these<br>
&gt;&gt; &gt;&gt; &gt; groups<br>
&gt;&gt; &gt;&gt; &gt; are indepedent. However, they need to communicate with each other)<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; step 4: Use Petsc; (use all N nodes in one process group)<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; }<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; My method is:<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; when using Slepc, MPI_Comm_split() is used to divide N nodes into M<br>
&gt;&gt; &gt;&gt; &gt; process<br>
&gt;&gt; &gt;&gt; &gt; groups which means to generate M communication domains. Then,<br>
&gt;&gt; &gt;&gt; &gt; MPI_Intercomm_create() creates inter-group communication domain to<br>
&gt;&gt; &gt;&gt; &gt; process<br>
&gt;&gt; &gt;&gt; &gt; the communication between different M process groups.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; I don&#39;t know whether this method is ok regarding Petsc and Slepc.<br>
&gt;&gt; &gt;&gt; &gt; Because<br>
&gt;&gt; &gt;&gt; &gt; Slepc is developed based on Petsc. In Step 1, Petsc and Slepc is<br>
&gt;&gt; &gt;&gt; &gt; initialized<br>
&gt;&gt; &gt;&gt; &gt; with all N nodes in a communication domain. Petsc in Step 2 uses this<br>
&gt;&gt; &gt;&gt; &gt; communication domain. However, in Step 3, I need to divide all N<br>
&gt;&gt; &gt;&gt; &gt; nodes<br>
&gt;&gt; &gt;&gt; &gt; and<br>
&gt;&gt; &gt;&gt; &gt; generate M communication domains. I don&#39;t know how Petsc and Slepc<br>
&gt;&gt; &gt;&gt; &gt; can<br>
&gt;&gt; &gt;&gt; &gt; process this change? If the method doesn&#39;t work, could you give me<br>
&gt;&gt; &gt;&gt; &gt; some<br>
&gt;&gt; &gt;&gt; &gt; advice? thanks a lot.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Regards,<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Yujie<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; --<br>
&gt;&gt; &gt;&gt; Lisandro Dalcín<br>
&gt;&gt; &gt;&gt; ---------------<br>
&gt;&gt; &gt;&gt; Centro Internacional de Métodos Computacionales en Ingeniería (CIMEC)<br>
&gt;&gt; &gt;&gt; Instituto de Desarrollo Tecnológico para la Industria Química (INTEC)<br>
&gt;&gt; &gt;&gt; Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET)<br>
&gt;&gt; &gt;&gt; PTLC - Güemes 3450, (3000) Santa Fe, Argentina<br>
&gt;&gt; &gt;&gt; Tel/Fax: +54-(0)342-451.1594<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; Lisandro Dalcín<br>
&gt;&gt; ---------------<br>
&gt;&gt; Centro Internacional de Métodos Computacionales en Ingeniería (CIMEC)<br>
&gt;&gt; Instituto de Desarrollo Tecnológico para la Industria Química (INTEC)<br>
&gt;&gt; Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET)<br>
&gt;&gt; PTLC - Güemes 3450, (3000) Santa Fe, Argentina<br>
&gt;&gt; Tel/Fax: +54-(0)342-451.1594<br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
<br>
<br>
<br>
</div></div>--<br>
<div><div></div><div class="Wj3C7c">Lisandro Dalcín<br>
---------------<br>
Centro Internacional de Métodos Computacionales en Ingeniería (CIMEC)<br>
Instituto de Desarrollo Tecnológico para la Industria Química (INTEC)<br>
Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET)<br>
PTLC - Güemes 3450, (3000) Santa Fe, Argentina<br>
Tel/Fax: +54-(0)342-451.1594<br>
<br>
</div></div></blockquote></div><br></div>