[petsc-users] DMLocalToGlobal PETScSF is BROKEN
Jed Brown
jed at jedbrown.org
Wed Jan 22 16:39:54 CST 2014
Barry Smith <bsmith at mcs.anl.gov> writes:
> Ok, well the damn code is so convoluted it is hard to see that it
> is even trying to do things right for multiple independent calls.
How would you change this to make it less convoluted?
static PetscErrorCode PetscSFReduceEnd_Basic(PetscSF sf,MPI_Datatype unit,const void *leafdata,void *rootdata,MPI_Op op)
{
void (*UnpackOp)(PetscInt,const PetscInt*,void*,const void*);
PetscErrorCode ierr;
PetscSFBasicPack link;
PetscInt i,nrootranks;
const PetscInt *rootoffset,*rootloc;
PetscFunctionBegin;
ierr = PetscSFBasicGetPackInUse(sf,unit,rootdata,PETSC_OWN_POINTER,&link);CHKERRQ(ierr);
/* This implementation could be changed to unpack as receives arrive, at the cost of non-determinism */
ierr = PetscSFBasicPackWaitall(sf,link);CHKERRQ(ierr);
ierr = PetscSFBasicGetRootInfo(sf,&nrootranks,NULL,&rootoffset,&rootloc);CHKERRQ(ierr);
ierr = PetscSFBasicPackGetUnpackOp(sf,link,op,&UnpackOp);CHKERRQ(ierr);
for (i=0; i<nrootranks; i++) {
PetscMPIInt n = rootoffset[i+1] - rootoffset[i];
const void *packstart = link->root+rootoffset[i]*link->unitbytes;
(*UnpackOp)(n,rootloc+rootoffset[i],rootdata,packstart);
}
ierr = PetscSFBasicReclaimPack(sf,&link);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
> You’ll have to pry out of Dhamendar his test case that fails.
That would be useful.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 835 bytes
Desc: not available
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20140122/6974ff1b/attachment.pgp>
More information about the petsc-users
mailing list