I will fix this. Barry
> On May 29, 2015, at 10:40 AM, Mark Adams <[email protected]> wrote: > > I have a 2 x 2 MatComposite and PCSetup is hanging because this branch below > does "NEED" to be checked. This is in matrix.c around line 7500. Barry added > this a year ago (and the code has been working so I am puzzled). I commented > this code out and it works. > > The 2nd block here is very small and is all on one processor, so all but one > proc have (n == rend-rstart). > > This code seems to work in maint, so I am puzzled. Perhaps this code was > merged recently? > Mark > > if (!iscol || isrow == iscol) { > > PetscBool stride; > > ierr = > PetscObjectTypeCompare((PetscObject)isrow,ISSTRIDE,&stride);CHKERRQ(ierr); > > if (stride) { > > PetscInt first,step,n,rstart,rend; > > ierr = ISStrideGetInfo(isrow,&first,&step);CHKERRQ(ierr); > > if (step == 1) { > > ierr = MatGetOwnershipRange(mat,&rstart,&rend);CHKERRQ(ierr); > > if (rstart == first) { > > ierr = ISGetLocalSize(isrow,&n);CHKERRQ(ierr); > > if (n == rend-rstart) { > > /* special case grabbing all rows; NEED to do a global reduction > to make sure all processes are doing this */ > > if (cll == MAT_INITIAL_MATRIX) { > > *newmat = mat; > > ierr = PetscObjectReference((PetscObject)mat);CHKERRQ(ierr); > > } > > PetscFunctionReturn(0); > > } > > } > > } > > } > > } >
