<div dir="ltr">Thanks Jed! The libaries you are pointing to look very interesting indeed. For the particular implementation I have in mind, I was hoping to get away with something easier, as my time to work on this is a bit limited. All I really need is a way to construct a block-diagonal matrix where each block is given by the same matrix and all blocks are on the diagonal. Am I wrong to assume that this should be possible to implement with TAIJ?<br>
<br>Thanks so much for your help and all the best, Mathis<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Apr 1, 2014 at 4:10 PM, Jed Brown <span dir="ltr"><<a href="mailto:jed@jedbrown.org" target="_blank">jed@jedbrown.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">Mathis Friesdorf <<a href="mailto:mathisfriesdorf@gmail.com">mathisfriesdorf@gmail.com</a>> writes:<br>

<br>
> Thanks for the helpful comments. Apparently my first mail was a bit<br>
> unclear. I have already implemented it as a matrix-free method using<br>
> MatShell, but currently it is written with a bunch of for loops and is<br>
> horribly inefficient and in fact a lot slower than my python implementation<br>
> with numpy. I am quite sure that using TAIJ matrices would be the solution,<br>
> but I am unsure on how to do it precisely, since there is so little<br>
> documentation available.<br>
<br>
</div>TAIJ is a very specialized tensor product between a redundantly-stored<br>
(small) dense matrix and a distributed sparse matrix, with an optional<br>
shift.  It is useful for implicit Runge-Kutta and some types of<br>
ensembles, but it's not what it appears you are looking for.<br>
<br>
Distributed-memory tensor contractions are challenging to implement well<br>
and there are several good libraries from the computational chemistry<br>
community.  I would suggest writing a Mat implementation based on the<br>
Cyclops Tensor Framework or the Tensor Contraction Engine.<br>
<br>
  <a href="http://ctf.eecs.berkeley.edu/" target="_blank">http://ctf.eecs.berkeley.edu/</a><br>
<br>
  <a href="http://www.csc.lsu.edu/~gb/TCE/" target="_blank">http://www.csc.lsu.edu/~gb/TCE/</a><br>
<br>
This would be a great contribution to PETSc, but you can also just put<br>
one of these inside MatShell (just a few lines of code) if you don't<br>
want to make a public interface for tensors.<br>
</blockquote></div><br></div>