Skip to content

Commit

Permalink
Add dMeshGetTaggedSets() to return more than one tagged set
Browse files Browse the repository at this point in the history
  • Loading branch information
jedbrown committed Apr 13, 2011
1 parent 2b0f93d commit 53d6262
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 0 deletions.
1 change: 1 addition & 0 deletions include/dohpmesh.h
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ extern dErr dMeshTagGetData(dMesh mesh,dMeshTag tag,const dMeshEH ents[],dInt ec
extern dErr dMeshTagSSetData(dMesh mesh,dMeshTag tag,const dMeshESH esets[],dInt ecount,const void *data,dInt count,dDataType type);
extern dErr dMeshTagSGetData(dMesh mesh,dMeshTag tag,const dMeshESH esets[],dInt ecount,void *data,dInt count,dDataType type);
extern dErr dMeshGetTaggedSet(dMesh,dMeshTag,const void*,dMeshESH*);
extern dErr dMeshGetTaggedSets(dMesh,dMeshTag,dInt,const void *,dInt *,dMeshESH **);
extern dErr dMeshSetFromOptions(dMesh);
extern dErr dMeshTagBcast(dMesh mesh,dMeshTag tag);
extern dErr dMeshSetCreate(dMesh,dMeshSetOrdering,dMeshESH*);
Expand Down
24 changes: 24 additions & 0 deletions src/fs/mesh/interface/mesh.c
Original file line number Diff line number Diff line change
Expand Up @@ -580,6 +580,30 @@ dErr dMeshGetTaggedSet(dMesh mesh,dMeshTag tag,const void *value,dMeshESH *set)
dFunctionReturn(0);
}

/* free sets with dFree() */
dErr dMeshGetTaggedSets(dMesh mesh,dMeshTag tag,dInt nvalues,const void *values,dInt *nsets,dMeshESH **sets)
{
const char *const*pvals = values ? (const char*const*)&values : NULL;
dIInt ierr,alloc=0,size;
dMeshESH *isets = NULL;
dErr err;

dFunctionBegin;
dValidHeader(mesh,dMESH_CLASSID,1);
if (nvalues > 0) dValidPointer(values,4);
if (nvalues > 1) dERROR(PETSC_COMM_SELF,PETSC_ERR_SUP,"Can only search for one value or all values");
dValidPointer(nsets,5);
dValidPointer(sets,6);
*nsets = -1;
*sets = NULL;
iMesh_getEntSetsByTagsRec(mesh->mi,mesh->root,&tag,nvalues?pvals:NULL,1,0,&isets,&alloc,&size,&ierr);dICHK(mesh->mi,ierr);
err = dMallocA(size,sets);dCHK(err);
*nsets = size;
err = dMallocA(*nsets,sets);dCHK(err);
for (dInt i=0; i<size; i++) (*sets)[i] = isets[i];
dFunctionReturn(0);
}

dErr dMeshGetNumEnts(dMesh mesh,dMeshESH set,dEntType type,dEntTopology topo,dInt *num)
{
dIInt ierr,n;
Expand Down

0 comments on commit 53d6262

Please sign in to comment.