<div class="gmail_quote">On Mon, Aug 29, 2011 at 15:51, Likun Tan <span dir="ltr">&lt;<a href="mailto:likunt@andrew.cmu.edu">likunt@andrew.cmu.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div id=":io">Instead of solving Ax=b with different right-hand-side sequentially, we<br>
can also form a sparse block diagonal matrix A and a vector b composed of<br>
all the elements. Then we can set values to each section of b concurrently<br>
and solve the enlarged system in parallel, is this an efficient way?<br></div></blockquote><div><br></div><div>You can assemble a single AIJ matrix and then use MatCreateMAIJ() to make it apply to a multi-vector. You can then make a larger vector and run a normal Krylov method.</div>
<div><br></div><div>The only downside is that you won&#39;t get the usual property that the Krylov method is spectrally adaptive to the right hand side (because there is only one inner product for all the components), but this can work alright anyway. Preconditioning will take more effort.</div>
<div><br></div><div>I think this is likely premature optimization for you. I recommend solving the systems by calling KSPSolve() multiple times for now. Later, when everything is working, you might experiment with ways to solve the systems together.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div id=":io">
<br>
And also, I found MatCreateMPIBDiag() </div></blockquote><div><br></div><div>This format was removed from PETSc a few years ago, but I don&#39;t think it&#39;s what you want anyway.</div></div>