<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">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 class="summary-sig-name" 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 class="summary-sig-arg" 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 class="summary-sig-arg" 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 class="summary-sig-arg" 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 class="summary-sig-default" 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><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><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 class="h5"><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>