<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Jun 2, 2015 at 4:52 AM, Francesco Caimmi <span dir="ltr"><<a href="mailto:francesco.caimmi@gmail.com" target="_blank">francesco.caimmi@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Dear PETSC users,<br>
<br>
first of all, many thanks to the developers for making PETSC available.<br>
<br>
I am trying to get familiar with the library using petsc4py (my C/C++<br>
knowledge is rudimentary to say the least), and I am now trying to reproduce<br>
teh examples in dm/examples/tutorials/ in python to get accustomed to DMs.<br>
<br>
However, while translating ex2.c, I get an error whose cause I cannot<br>
understand.<br>
I am doing (I hope it's ok to post this short code snippet):<br>
<br>
impost sys<br>
import petsc4py<br>
petsc4py.init(sys.argv)<br>
from petsc4py import PETSc<br>
stype = PETSc.DMDA.StencilType.BOX<br>
bx    = PETSc.DMDA.BoundaryType.NONE<br>
by = PETSc.DMDA.BoundaryType.NONE<br>
comm = PETSc.COMM_WORLD<br>
rank = comm.rank<br>
OptDB = PETSc.Options()#get PETSc option DB<br>
M = OptDB.getInt('M', 10)<br>
N = OptDB.getInt('N', 8)<br>
m = OptDB.getInt('m', PETSc.DECIDE)<br>
n = OptDB.getInt('n', PETSc.DECIDE)<br>
dm = PETSc.DMDA().create(dim=2, sizes = (M,N), proc_sizes=(m,n),<br>
                             boundary_type=(bx,by), stencil_type=stype,<br>
                             stencil_width = 1, dof = 1, comm = comm<br>
                             )<br>
global_vec = dm.createGlobalVector()<br>
start, end = global_vec.getOwnershipRange()<br>
with global_vec as v:<br>
        for i in xrange(start,end):<br>
            v[i] = 5.0*rank<br></blockquote><div><br></div><div>The 'with' construction just uses</div><div><br></div><div>  VecGetArray()</div><div><br></div><div>which return the raw C pointer. This is indexed from 0 always, so you want</div><div><br></div><div>  v[i-start] = 5.0*rank</div><div><br></div><div>If you want to index using [start, end), you need something like</div><div><br></div><div>  DMDAVecGetArray()</div><div><br></div><div>  Thanks,</div><div><br></div><div>     Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
As far as I understand this should be the closest python translation of ex2.c<br>
up to line 48, except for the viewer part which is still to be translated.<br>
<br>
If run on a single processor everything is ok, but when I run with<br>
mpiexec -n 2 <file_name>  I get the following error (on the second rank)<br>
<br>
#############################################<br>
        v[i] = 5.0*rank<br>
IndexError: index 40 is out of bounds for axis 0 with size 40<br>
#############################################<br>
<br>
I am on linux/x64 and I get this behaviour both with petsc3.4.3+petsc4py 3.4.2<br>
(the packages available from opensuse repositories) and with<br>
petsc3.5.4+petsc4py3.5.1 (that I built myself).<br>
<br>
I would have expected the code to seamlessly handle  the transition from one<br>
to multiple processors, so it's me who's doing something wrong or some other<br>
kind of problem? Up to now, I have never seen somethinf like that with<br>
vectors/matrices created by PETSc.Vec()/PETSc.Mat().<br>
<br>
Thank you for your attention,<br>
<span class="HOEnZb"><font color="#888888">--<br>
Francesco Caimmi<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">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</div>
</div></div>