Skip to content

Commit

Permalink
Fix dFSLoadIntoFS_Cont_DHM to use the same sort of load as dFSBuildSp…
Browse files Browse the repository at this point in the history
…ace_Cont
  • Loading branch information
jedbrown committed Apr 12, 2011
1 parent 50cd974 commit 2186fac
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 17 deletions.
3 changes: 1 addition & 2 deletions src/fs/impls/cont/cont.c
Original file line number Diff line number Diff line change
Expand Up @@ -340,8 +340,7 @@ static dErr dFSBuildSpace_Cont(dFS fs)
/* Get number of nodes for all entities, and parallel status */
err = dMallocA4(ma.nents,&deg,ma.nents,&rdeg,ma.nents,&inodes,ma.nents,&status);dCHK(err);
err = dMeshTagGetData(mesh,fs->tag.degree,ma.ents,ma.nents,deg,ma.nents,dDATA_INT);dCHK(err);
/* Fill the arrays \a inodes and \a xnodes with the number of interior and expanded nodes for each
* (topology,degree) pair */
/* Fill the \a inodes array with the number of interior nodes for each (topology,degree) pair */
err = dJacobiGetNodeCount(fs->jacobi,ma.nents,ma.topo,deg,inodes,NULL);dCHK(err);
err = dMeshGetStatus(mesh,ma.ents,ma.nents,status);dCHK(err);

Expand Down
37 changes: 23 additions & 14 deletions src/fs/impls/cont/contviewdhm.c
Original file line number Diff line number Diff line change
Expand Up @@ -346,16 +346,16 @@ dErr dFSLoadIntoFS_Cont_DHM(PetscViewer viewer,const char name[],dFS fs)

/* @todo Call private dFSBuildSpace pieces (once they exist) */
{
dInt i,n,bs,ents_a,ents_s,*inodes,*xnodes,*idx,*loffset,xcnt;
dPolynomialOrder *bdeg;
dEntTopology *topo;
dInt n,bs,ents_a,ents_s,nregions,*inodes,*xnodes,*xstart,*idx,*loffset,xcnt;
dPolynomialOrder *bdeg,*regBDeg;
dEntTopology *topo,*regTopo;
dMeshEH *ents;
dMesh mesh;
dMeshAdjacency meshadj;

err = dFSGetMesh(fs,&mesh);dCHK(err);
err = dMeshGetNumEnts(mesh,fs->set.ordered,dTYPE_ALL,dTOPO_ALL,&ents_a);dCHK(err);
err = dMallocA5(ents_a,&ents,ents_a,&topo,ents_a,&bdeg,ents_a,&xnodes,ents_a,&idx);dCHK(err);
err = dMallocA4(ents_a,&ents,ents_a,&topo,ents_a,&bdeg,ents_a,&idx);dCHK(err);

err = dMeshGetEnts(mesh,fs->set.ordered,dTYPE_ALL,dTOPO_ALL,ents,ents_a,&ents_s);dCHK(err);
dASSERT(ents_a == ents_s);
Expand All @@ -367,8 +367,11 @@ dErr dFSLoadIntoFS_Cont_DHM(PetscViewer viewer,const char name[],dFS fs)
#endif

err = dMallocA2(ents_s,&inodes,ents_s,&loffset);dCHK(err);
err = dJacobiGetNodeCount(fs->jacobi,ents_s,topo,bdeg,inodes,xnodes);dCHK(err);
for (i=0,n=0; i<ents_s; n += inodes[i++]) loffset[i] = n;
err = dJacobiGetNodeCount(fs->jacobi,ents_s,topo,bdeg,inodes,NULL);dCHK(err);
{
dInt i;
for (i=0,n=0; i<ents_s; n += inodes[i++]) loffset[i] = n;
}
bs = 1; /* @bug */

err = dMeshTagSetData(mesh,fs->tag.loffset,ents,ents_s,loffset,ents_s,dDATA_INT);dCHK(err);
Expand All @@ -384,20 +387,26 @@ dErr dFSLoadIntoFS_Cont_DHM(PetscViewer viewer,const char name[],dFS fs)

err = dMeshGetAdjacency(mesh,fs->set.active,&meshadj);dCHK(err);
err = dMeshGetEnts(mesh,fs->set.active,dTYPE_REGION,dTOPO_ALL,ents,ents_a,&ents_s);dCHK(err);
err = dMeshTagGetData(mesh,meshadj->indexTag,ents,ents_s,idx,ents_s,dDATA_INT);dCHK(err);
nregions = ents_s;
err = dMallocA4(nregions+1,&xstart,nregions,&regTopo,nregions,&regBDeg,nregions,&xnodes);dCHK(err);
err = dMeshGetTopo(mesh,ents_s,ents,regTopo);dCHK(err);
err = dMeshTagGetData(mesh,fs->tag.degree,ents,ents_s,regBDeg,nregions,dDATA_INT);dCHK(err);
err = dJacobiGetNodeCount(fs->jacobi,ents_s,regTopo,regBDeg,NULL,xnodes);dCHK(err);

fs->nelem = ents_s;
xcnt = xstart[0] = 0;
for (dInt i=0; i<nregions; i++) xstart[i+1] = (xcnt += xnodes[i]);

err = dMeshTagGetData(mesh,fs->tag.degree,ents,ents_s,bdeg,ents_s,dDATA_INT);dCHK(err);
err = dMeshTagGetData(mesh,meshadj->indexTag,ents,ents_s,idx,ents_s,dDATA_INT);dCHK(err);
/* Need to set offsets before calling dFSBuildSpace_Cont_CreateElemAssemblyMats() */
err = dMallocA(ents_s+1,&fs->off);dCHK(err);
fs->off[0] = xcnt = 0;
for (i=0; i<ents_s; i++) fs->off[i+1] = (xcnt += xnodes[idx[i]]);
fs->nelem = nregions;
err = dMallocA(nregions+1,&fs->off);dCHK(err); /* Will be freed by FS */
err = dMemcpy(fs->off,xstart,(nregions+1)*sizeof(xstart[0]));dCHK(err);

err = dFree4(xstart,regTopo,regBDeg,xnodes);dCHK(err);

err = dFSBuildSpace_Cont_CreateElemAssemblyMats(fs,idx,meshadj,bdeg,&fs->E,&fs->Ep);dCHK(err);

err = dMeshRestoreAdjacency(mesh,fs->set.active,&meshadj);dCHK(err);
err = dFree5(ents,topo,bdeg,xnodes,idx);dCHK(err);
err = dFree4(ents,topo,bdeg,idx);dCHK(err);
fs->spacebuilt = dTRUE;
}

Expand Down
1 change: 1 addition & 0 deletions src/fs/mesh/interface/mesh.c
Original file line number Diff line number Diff line change
Expand Up @@ -574,6 +574,7 @@ dErr dMeshGetTaggedSet(dMesh mesh,dMeshTag tag,const void *value,dMeshESH *set)
dValidPointer(set,4);
*set = 0;
iMesh_getEntSetsByTagsRec(mesh->mi,mesh->root,&tag,value?(const char*const*)&value:NULL,1,0,&set,&alloc,&size,&ierr);dICHK(mesh->mi,ierr);
if (size != 1) dERROR(PETSC_COMM_SELF,PETSC_ERR_LIB,"Got %d sets, but expected only one",size);
dFunctionReturn(0);
}

Expand Down
1 change: 0 additions & 1 deletion src/vis/Dohp/avtDohpFileFormat.C
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,6 @@ avtDohpFileFormat::GetMesh(int timestate, int domain, const char *meshname)
err = dFSSetOrderingType(fs,MATORDERINGNATURAL);avtCHK(err);
err = dFSLoadIntoFS(this->viewer,meshname,fs);avtCHK(err);
err = dFSGetSubElementMeshSize(fs,&nelem,&nverts,&nconn);avtCHK(err);
//err = dMallocA3(nelems,&topo,nelems+1,&off,nconn,&conn);dCHK(err);
off = new dInt[nelem+1];
topo = new dEntTopology[nelem];
conn = new dInt[nconn];
Expand Down

0 comments on commit 2186fac

Please sign in to comment.