<div dir="ltr">I pushed a fix to next. It will be in master in a day or two.<div><br></div><div>  Thanks,</div><div><br></div><div>     Matt</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, May 28, 2014 at 10:16 AM, Lawrence Mitchell <span dir="ltr"><<a href="mailto:lawrence.mitchell@imperial.ac.uk" target="_blank">lawrence.mitchell@imperial.ac.uk</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">1cc89ce (DM: Added check for erroneous input when creating default SF)<br>
<br>
Checks that the constrained point does not constrain more dofs than the<br>
unconstrained point has.  However, this breaks in parallel, since<br>
PetscSectionCreateGlobalSection says:<br>
<br>
"  Note: This gives negative sizes and offsets to points not owned by<br>
this process"<br>
<br>
Hence the following example breakage:<br>
<br>
$ cat > foo.py <<\EOF<br>
import petsc4py<br>
import sys<br>
petsc4py.init(sys.argv)<br>
from petsc4py import PETSc<br>
<br>
<br>
bdy = PETSc.DMPlex().create()<br>
bdy.setDimension(1)<br>
bdy.createSquareBoundary([0, 0], [1, 1], [3, 3])<br>
<br>
dm = PETSc.DMPlex().generate(bdy)<br>
<br>
dm.distribute()<br>
sec = dm.createSection(1, [1], [1, 0, 0])<br>
<br>
dm.setDefaultSection(sec)<br>
gsec = dm.getDefaultGlobalSection()<br>
<br>
dm.createDefaultSF(sec, gsec)<br>
EOF<br>
<br>
$ mpiexec -n 2 python foo.py<br>
Traceback (most recent call last):<br>
  File "foo.py", line 19, in <module><br>
    dm.createDefaultSF(sec, gsec)<br>
  File "DM.pyx", line 268, in petsc4py.PETSc.DM.createDefaultSF<br>
(src/petsc4py.PETSc.c:179320)<br>
petsc4py.PETSc.Error: error code 63<br>
[0] DMCreateDefaultSF() line 3065 in<br>
/data/lmitche1/src/petsc/src/dm/interface/dm.c<br>
[0] Argument out of range<br>
[0] Point 9 has 0 constraints > -2 dof<br>
<br>
<br>
Maybe this patch?<br>
<br>
diff --git a/src/dm/interface/dm.c b/src/dm/interface/dm.c<br>
index d830c0c..71bf7ad 100644<br>
--- a/src/dm/interface/dm.c<br>
+++ b/src/dm/interface/dm.c<br>
@@ -3062,7 +3062,7 @@ PetscErrorCode DMCreateDefaultSF(DM dm,<br>
PetscSection localSection, PetscSection<br>
<br>
     ierr     = PetscSectionGetDof(globalSection, p, &gdof);CHKERRQ(ierr);<br>
     ierr     = PetscSectionGetConstraintDof(globalSection, p,<br>
&gcdof);CHKERRQ(ierr);<br>
-    if (gcdof > gdof) SETERRQ3(PETSC_COMM_SELF,<br>
PETSC_ERR_ARG_OUTOFRANGE, "Point %d has %d constraints > %d dof", p,<br>
gcdof, gdof);<br>
+    if (gcdof && gcdof > gdof) SETERRQ3(PETSC_COMM_SELF,<br>
PETSC_ERR_ARG_OUTOFRANGE, "Point %d has %d constraints > %d dof", p,<br>
gcdof, gdof);<br>
     nleaves += gdof < 0 ? -(gdof+1)-gcdof : gdof-gcdof;<br>
   }<br>
   ierr = PetscMalloc1(nleaves, &local);CHKERRQ(ierr);<br>
<br>
Cheers,<br>
<br>
Lawrence<br>
</blockquote></div><br><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
</div>