Thank you very much! <br>However, I have another question. I have a cluster of 4 nodes and each node has 6 cores. If I run my code using 6 cores on one node (using the command "mpiexec -n 6") it is much faster than running it on just one process (which is expected). However, if I try running the code on multiple nodes (using "mpiexec -f machinefile -ppn 4", where machinefile is the file which contains the node names), it runs much slower than on just one process. This also happens with tutorial examples. I have checked the number of iteration for KSP solver when spread on multiple processors and it doesn't seem to be the problem. Do you have any suggestions on what am I doing wrong? Are the commands I am using wrong?<br>
<div class="gmail_extra"><br><br><div class="gmail_quote">On Sat, Dec 1, 2012 at 6:03 PM, Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
    We recommend following the directions <a href="http://www.mcs.anl.gov/petsc/documentation/faq.html#schurcomplement" target="_blank">http://www.mcs.anl.gov/petsc/documentation/faq.html#schurcomplement</a>  for computing a Schur complement; just skip the unneeded step. MUMPS supports a parallel Cholesky but you can also use a parallel LU with MUMPS, PaSTIX or SuperLU_Dist and those will work fine also. With current software Cholesky in parallel is not tons better than LU so generally not worth monkeying with.<br>

<br>
   Barry<br>
<div><div class="h5"><br>
<br>
On Dec 1, 2012, at 12:05 PM, Jelena Slivka <<a href="mailto:slivkaje@gmail.com">slivkaje@gmail.com</a>> wrote:<br>
<br>
> Hello!<br>
> I am trying to solve A*X = B where A and B are matrices, and then find trace of the resulting matrix X. My approach has been to partition matrix B in column vectors bi and then solve each system A*xi = bi. Then, for all vectors xi I would extract i-th element xi(i) and sum those elements in order to get Trace(X).<br>

> Pseudo-code:<br>
> 1) load matrices A and B<br>
> 2) transpose matrix B (so that each right-hand side bi is in the row, as operation MatGetColumnVector is slow)<br>
> 3) set up KSPSolve<br>
> 4) create vector diagonal (in which xi(i) elements will be stored)<br>
> 5) for each row i of matrix B owned by current process:<br>
>           - create vector bi by extracting row i from matrix B<br>
>           - apply KSPsolve to get xi<br>
>           - insert value xi(i) in diagonal vector (only the process which<br>
>             holds the ith value of vector x(i) should do so)<br>
> 6) sum vector diagonal to get the trace.<br>
> However, my code (attached, along with the test case) runs fine on one process, but hangs if started on multiple processes. Could you please help me figure out what am I doing wrong?<br>
> Also, could you please tell me is it possible to use Cholesky factorization when running on multiple processes (I see that I cannot use it when I set the format of matrix A to MPIAIJ)?<br>
><br>
</div></div>> <Experiment.c><Abin><Bbin><br>
<br>
</blockquote></div><br></div>