Thank you, I added DMPlexInterpolate(). Now I get a different error in DMPlexInterpolate(): ... [0]PETSC ERROR: Dimension 0 not supported ...
The source code and full output are attached. Anybody able to fix this? regards Chris -- Securely sent with Tutanota. Get your own encrypted, ad-free mailbox: https://tutanota.com Mar 12, 2019, 1:08 PM by knep...@gmail.com: > On Tue, Mar 12, 2019 at 9:03 AM Chris Finn via petsc-users <> > petsc-users@mcs.anl.gov <mailto:petsc-users@mcs.anl.gov>> > wrote: > >> Hello, >> with the code below, I create a tetrahedron using DMPlexCreateFromDAG, then >> I try to run DMPlexComputeCellGeometryFVM on this cell. The latter call >> fails with output: >> > > All the geometry stuff requires that you interpolate the mesh I think, Just > use DMPlexInterpolate(). > > Thanks, > > Matt > > >> >> ... >> [0]PETSC ERROR: --------------------- Error Message ----------------- >> [0]PETSC ERROR: Argument out of range >> [0]PETSC ERROR: Cannot handle faces with 1 vertices >> ... >> (full output is attached). >> >> What am I doing wrong? >> regards >> Chris >> >> Here is the code: >> static char help[] = "No help \n"; >> >> #include <petscdmplex.h> >> >> #undef __FUNCT__ >> #define __FUNCT__ "main" >> int main(int argc,char **args) >> { >> PetscErrorCode ierr; >> PetscInitialize(&argc,&args,(char*)0,help); >> >> DM dm; >> int cStart,cEnd; >> int fStart,fEnd; >> >> int depth = 3; >> int dim = 3; >> >> PetscInt numPoints[4] = {1,4,6,4}; >> PetscInt coneSize[15] = {4,3,3,3,3,2,2,2,2,2,2,0,0,0,0}; >> PetscInt cones[28] = {1,2,3,4, 5,9,8, 9,6,10, 10,8,7, 5,6,7, >> 11,12, 12,13, 13,11, 11,14, 12,14, 13,14}; >> PetscInt coneOrientations[28] = {0 }; >> PetscScalar vertexCoords[12] = {0,0,0, 1,0,0, 0,1,0, 0,0,1}; >> >> DMCreate(PETSC_COMM_WORLD, &dm); >> DMSetType(dm, DMPLEX); >> DMSetDimension(dm,dim); >> DMPlexCreateFromDAG(dm, depth, numPoints, coneSize, cones, >> coneOrientations, vertexCoords); >> >> DMPlexGetHeightStratum(dm, 0, &cStart, &cEnd); >> DMPlexGetHeightStratum(dm, 1, &fStart, &fEnd); >> >> for (int k =cStart;k<cEnd;k++){ >> double vol; >> double centroid[3]; >> double normal[3]; >> ierr = DMPlexComputeCellGeometryFVM(dm, k, &vol, >> centroid,NULL);CHKERRQ(ierr); >> printf("FVM: V=%f c=(%f %f %f) n=(%f %f >> %f)\n",vol,centroid[0],centroid[1],centroid[2], >> normal[0],normal[1],normal[2]); >> } >> ierr = PetscFinalize(); >> return 0; >> } >> >> >> > > > -- > What most experimenters take for granted before they begin their experiments > is infinitely more interesting than any results to which their experiments > lead. > -- Norbert Wiener > > https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/> >
static char help[] = "No help \n"; #include <petscdmplex.h> #undef __FUNCT__ #define __FUNCT__ "main" int main(int argc,char **args) { PetscErrorCode ierr; PetscInitialize(&argc,&args,(char*)0,help); DM dm; int cStart,cEnd; int fStart,fEnd; int depth = 3; int dim = 3; PetscInt numPoints[4] = {1,4,6,4}; PetscInt coneSize[15] = {4,3,3,3,3,2,2,2,2,2,2,0,0,0,0}; PetscInt cones[28] = {1,2,3,4, 5,9,8, 9,6,10, 10,8,7, 5,6,7, 11,12, 12,13, 13,11, 11,14, 12,14, 13,14}; PetscInt coneOrientations[28] = {0 }; PetscScalar vertexCoords[12] = {0,0,0, 1,0,0, 0,1,0, 0,0,1}; DMCreate(PETSC_COMM_WORLD, &dm); DMSetType(dm, DMPLEX); DMSetDimension(dm,dim); ierr = DMPlexCreateFromDAG(dm, depth, numPoints, coneSize, cones, coneOrientations, vertexCoords); CHKERRQ(ierr); DM idm=NULL; ierr = DMPlexInterpolate(dm, &idm);CHKERRQ(ierr); ierr = DMPlexCopyCoordinates(dm, idm);CHKERRQ(ierr); dm=idm; DMPlexGetHeightStratum(dm, 0, &cStart, &cEnd); DMPlexGetHeightStratum(dm, 1, &fStart, &fEnd); for (int k =cStart;k<cEnd;k++){ double vol; double centroid[3]; double normal[3]; ierr = DMPlexComputeCellGeometryFVM(dm, k, &vol, centroid,NULL);CHKERRQ(ierr); printf("FVM: V=%f c=(%f %f %f) n=(%f %f %f)\n",vol,centroid[0],centroid[1],centroid[2], normal[0],normal[1],normal[2]); } ierr = PetscFinalize(); return 0; }
log2
Description: Binary data