<div dir="ltr">Thanks for the helpful comments. Apparently my first mail was a bit unclear. I have already implemented it as a matrix-free method using MatShell, but currently it is written with a bunch of for loops and is horribly inefficient and in fact a lot slower than my python implementation with numpy. I am quite sure that using TAIJ matrices would be the solution, but I am unsure on how to do it precisely, since there is so little documentation available.<br>
<br>Thanks again and all the best, Mathis<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Mar 31, 2014 at 7:10 PM, Matthew Knepley <span dir="ltr"><<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div><div class="h5"><div class="gmail_quote">On Mon, Mar 31, 2014 at 11:49 AM, Mathis Friesdorf <span dir="ltr"><<a href="mailto:mathisfriesdorf@gmail.com" target="_blank">mathisfriesdorf@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello everybody,<br><br>for my Ph.D. in theoretical quantum mechanics, I am currently trying to integrate the Schroedinger equation (a linear partial differential equation). In my field, we are working with so called local spin chains, which mathematically speaking are described by tensor products of small vector spaces over several systems (let's say 20). The matrix corresponding to the differential equation is called Hamiltonian and can for typical systems be written as a sum over tensor products where it acts as the identity on most systems. It normally has the form<br>


<br><div style="text-align:left"><i>\sum Id \otimes Id ... Id \otimes M \otimes Id \otimes ...</i><br></div><br>where M takes different positions.I know how to explicitly construct the full matrix and insert it into Petsc, but for the interesting applications it is too large to be stored in the RAM. I would therefore like to implement it as a matrix free version. <br>


This should be possible using MatCreateMAIJ() and VecGetArray(), as the following very useful post points out <a href="http://lists.mcs.anl.gov/pipermail/petsc-users/2011-September/009992.html" target="_blank">http://lists.mcs.anl.gov/pipermail/petsc-users/2011-September/009992.html</a>. I was wondering whether anybody already made progress with this, as I am still a bit lost on how to precisely proceed. These systems really are ubiquitous in theoretical quantum mechanics and I am sure it would be helpful to quite a lot of people who still shy away a bit from Petsc.<br>


<br>Thanks already for your help and all the best, Mathis<br></div>
</blockquote></div><br></div></div>1) The first thing you could try is MatShell(). However, you would have to handle all the parallelism, which might be onerous.</div><div class="gmail_extra"><br></div><div class="gmail_extra">
2) An alternative is to explore the new TAIJ matrices. This is definitely not for novice programmers, but it is a direct representation</div>
<div class="gmail_extra">    of a Kronecker product, and in addition is vectorized. Jed is the lead there, so maybe he can comment.</div><div class="gmail_extra"><br></div><div class="gmail_extra">  Thanks,</div><div class="gmail_extra">

<br></div><div class="gmail_extra">      Matt<span class="HOEnZb"><font color="#888888"><br clear="all"><div><br></div>-- <br>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>

-- Norbert Wiener
</font></span></div></div>
</blockquote></div><br></div>