<div dir="ltr">On Tue, Feb 5, 2013 at 7:59 AM, Weston Lowrie <span dir="ltr"><<a href="mailto:wlowrie@uw.edu" target="_blank">wlowrie@uw.edu</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><span style="font-family:verdana,sans-serif">That makes sense now.  It was just creating 'mpi_size' (in my case 4) separate</span><span style="font-family:verdana,sans-serif"> Vec objects and distributing them evenly among the processes.  That is why it appeared to give the correct sizes.</span></div>

<div><font face="verdana,sans-serif"><br></font></div><div><font face="verdana,sans-serif">Good to know about the petsc4py "size" argument.  It was unclear to me that it could take multiple values, but that makes sense to keep the API general and include as much of the functionality of the C++/Fortran APIs.</font></div>

<div><font face="verdana,sans-serif"><br></font></div><div><font face="verdana,sans-serif">I have been referencing this:</font></div><div><a href="http://packages.python.org/petsc4py/apiref/index.html" target="_blank">http://packages.python.org/petsc4py/apiref/index.html</a></div>

<div><font face="verdana,sans-serif"><br></font></div><div><font face="verdana,sans-serif">where it shows:</font></div><div><span style="color:rgb(0,96,128);font-weight:bold;font-family:monospace;font-size:medium;background-color:rgb(232,240,248)">setSizes</span><span style="font-family:monospace;font-size:medium;background-color:rgb(232,240,248)">(</span><span style="color:rgb(0,96,64);font-family:monospace;font-size:medium;background-color:rgb(232,240,248)">self</span><span style="font-family:monospace;font-size:medium;background-color:rgb(232,240,248)">, </span><span style="color:rgb(0,96,64);font-family:monospace;font-size:medium;background-color:rgb(232,240,248)">size</span><span style="font-family:monospace;font-size:medium;background-color:rgb(232,240,248)">, </span><span style="color:rgb(0,96,64);font-family:monospace;font-size:medium;background-color:rgb(232,240,248)">bsize</span><span style="font-family:monospace;font-size:medium;background-color:rgb(232,240,248)">=</span><span style="color:rgb(80,24,0);font-family:monospace;font-size:medium;background-color:rgb(232,240,248)">None</span><span style="font-family:monospace;font-size:medium;background-color:rgb(232,240,248)">)</span></div>

<div><font face="verdana, sans-serif"><br></font></div><div><font face="verdana, sans-serif">Maybe there is a better reference somewhere, or I missed where it describes the size argument?</font></div></blockquote><div><br>
</div><div style>AFAIK, it's not documented. Most of petsc4py is a direct mapping from PETSc and I think we (Lisandro) have been hoping to find a way to automatically generate Python docs. For those features that are actually different (like the size arguments), it would be very useful to write doc strings. (They would show up in the apiref above.)</div>
<div style><br></div><div style>I'm sure Lisandro would be happy to accept documentation patches.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><font face="verdana, sans-serif"><br>
</font></div><div><font face="verdana, sans-serif">Thanks,</font></div><div><font face="verdana, sans-serif">Wes</font></div><div class="HOEnZb"><div class="h5"><div><font face="verdana,sans-serif"><br></font></div><font face="verdana,sans-serif"><br>
</font><br>
<div class="gmail_quote">On Mon, Feb 4, 2013 at 6:40 PM, Jed Brown <span dir="ltr"><<a href="mailto:jedbrown@mcs.anl.gov" target="_blank">jedbrown@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">

<div dir="ltr">petsc4py is "too clever" in the sense that it tries to interpret many different kids of "sizes" arguments. You can always pass the pair (localsize, globalsize), but you can also pass only a global size (in which case the vector will be split apart). If you want to set only the local size, you should pass (localsize, None).<div>



<br></div><div>Your example is invalid, with each process passing different global sizes. petsc-dev will now error if you do this.</div><div><br></div><div>I changed your example to:</div><div><br></div><div><br></div><div>


<div>X = PETSc.Vec().create(comm=PETSc.COMM_WORLD)</div><div>X.setSizes((sizes[mpi_rank],PETSc.DECIDE),bsize=1)</div><div>X.setFromOptions()</div><div>ilow,ihigh = X.getOwnershipRange()</div><div><br></div><div>PETSc.Sys.syncPrint("rank: ",mpi_rank,"low/high: ",ilow,ihigh)</div>


<div>PETSc.Sys.syncFlush()</div><div><br></div><div>and now get the output:</div><div><br></div><div><div>rank:  0 low/high:  0 35675</div><div>rank:  1 low/high:  35675 401185</div><div>rank:  2 low/high:  401185 766927</div>


<div>rank:  3 low/high:  766927 802370</div></div><div><div><div><br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Feb 4, 2013 at 4:01 PM, Weston Lowrie <span dir="ltr"><<a href="mailto:wlowrie@uw.edu" target="_blank">wlowrie@uw.edu</a>></span> wrote:<br>



<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Hi,<br>I'm confused what the Vec().setSizes() routine is doing in petsc4py.  Consider this example:<br><br><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><font face="courier new, monospace">#!/usr/bin/env python</font><font face="courier new, monospace"><br>





</font><font face="courier new, monospace">import sys,os<br></font><font face="courier new, monospace">from petsc4py import PETSc<br></font><font face="courier new, monospace">from numpy import *<br></font><font face="courier new, monospace"><br>





</font><font face="courier new, monospace">mpi_rank = PETSc.COMM_WORLD.getRank()<br></font><font face="courier new, monospace">mpi_size = PETSc.COMM_WORLD.getSize()</font><font face="courier new, monospace"><br></font><font face="courier new, monospace"><br>





sizes = zeros(4)<br></font><font face="courier new, monospace">sizes[0] = 35675<br></font><font face="courier new, monospace">sizes[1] = 365510<br></font><font face="courier new, monospace">sizes[2] = 365742<br></font><font face="courier new, monospace">sizes[3] = 35443</font><font face="courier new, monospace"><br>





</font><font face="courier new, monospace"><br>X = PETSc.Vec().create(comm=PETSc.COMM_WORLD)<br></font><font face="courier new, monospace">X.setSizes(mpi_size*sizes[mpi_rank],bsize=1)<br></font><font face="courier new, monospace">X.setFromOptions()<br>





</font><font face="courier new, monospace">ilow,ihigh = X.getOwnershipRange()</font><font face="courier new, monospace"><br></font><font face="courier new, monospace"><br>print "rank: ",mpi_rank,"low/high: ",ilow,ihigh</font></blockquote>





<br><br>Why is it that when setting the local sizes explicitly do I need to multiply by the mpi_size?  My understanding is that when using this routine it is telling PETSc what the local processor core size should be.  It seems to divide it by total number of processors cores.<br>





<div><br></div><div>Thanks,</div><div>Wes</div>
</blockquote></div><br></div></div></div></div></div>
</blockquote></div><br>
</div></div></blockquote></div><br></div></div>