On Thu, Jan 2, 2014 at 8:08 AM, Cedric Doucet <[email protected]>wrote:
> > Hello, > > indeed, I need to have a generalized version of DMPlexCreateFromCellList > function which can take an hybrid mesh as an input parameter. > What interface? > Modern mesh generators often provide mixed generation functionalities > (e.g. gmsh which can generate pyramids and prisms). > As a matter of fact, cells are never numbered independently of vertices in > hybrid meshes because different generators are used (structured and > unstructured ones). > From a practical point of view, it is far much easier to let each > generator number its own cells without renumbering shared vertices. > Therefore, cells of hybrid meshes are sorted in a canonical way: cells of > generator 1, cells of generator 2, etc. > I don't understand what you want here. Its imprecise. Matt > I deeply think that this new version is very useful for real-life > applications. > Please let me know when this new version will be available. > > Thank you very much, > > Cédric Doucet > > > > > > ------------------------------ > > *De: *"Matthew Knepley" <[email protected]> > *À: *"Cedric Doucet" <[email protected]> > *Cc: *[email protected] > *Envoyé: *Jeudi 31 Octobre 2013 14:13:14 > *Objet: *Re: [petsc-users] DMPlexCreateFromCellList and hybrid meshes > > On Thu, Oct 31, 2013 at 5:20 AM, Cedric Doucet <[email protected]>wrote: > >> >> Thank you very much for your help. >> Do you plan to add this code to Petsc? >> It would be better for us to call an official Petsc function than >> maintaining a Petsc-style code into our C++ software. >> > > If this is really what you need, then I will put it in. However, I > intended this to be used primarily for mesh generators, since they > tend to number cells and vertices independently and have the int and > double types hardwired. > > If you are writing your own code, please consider DMPlexCreateFromDAG() > which has the flexibility for cell topology that you > want. The main differences are that it uses PETSc types and a single > contiguous numbering. Would this work for you? > > Thanks, > > Matt > > >> Best regards, >> >> Cédric Doucet >> >> >> >> ------------------------------ >> >> *De: *"Matthew Knepley" <[email protected]> >> *À: *"Cedric Doucet" <[email protected]> >> *Cc: *[email protected] >> *Envoyé: *Mardi 29 Octobre 2013 17:24:03 >> *Objet: *Re: [petsc-users] DMPlexCreateFromCellList and hybrid meshes >> >> On Tue, Oct 29, 2013 at 10:24 AM, Cedric Doucet >> <[email protected]>wrote: >> >>> Hello, >>> >>> I have a short question about the code I need to modify. >>> As far as I understand, numCorner should be replaced by an array >>> numCorners[numCells] containing the number of vertices of each cell. >>> The body of DMPlexBuildFromCellList_Private function becomes >>> >>> --------------------------------------------------------------------------------------------------------------------------------------- >>> ierr = DMPlexSetChart(dm, 0, numCells+numVertices);CHKERRQ(ierr); >>> >> maxCorners = 0; >> >>> for (c = 0; c < numCells; ++c) { >>> ierr = DMPlexSetConeSize(dm, c, numCorners[c]);CHKERRQ(ierr); >>> >> maxCorners = PetscMax(maxCorners, numCorners[c]); >> >>> } >>> ierr = DMSetUp(dm);CHKERRQ(ierr); >>> >> >> ierr = DMGetWorkArray(dm, maxCorners, PETSC_INT, &cone);CHKERRQ(ierr); >> >> >>> for (c = 0, off = 0; c < numCells; ++c) { >>> for (p = 0; p < numCorners[c]; ++p) { >>> cone[p] = cells[off+p]+numCells; >>> } >>> ierr = DMPlexSetCone(dm, c, cone);CHKERRQ(ierr); >>> >> off += numCorners[c]; >> >>> } >>> >> ierr = DMRestoreWorkArray(dm, maxCorners, PETSC_INT, >> &cone);CHKERRQ(ierr); >> >>> >> >>> >>> ierr = DMPlexSymmetrize(dm);CHKERRQ(ierr); >>> ierr = DMPlexStratify(dm);CHKERRQ(ierr); >>> >> >> Matt >> >> >>> >>> ------------------------------------------------------------------------------------------------------------------------------------------ >>> However, I am not quite sure that DMGetWorkArray and DMRestoreWorkArray >>> should be used like this. >>> I guess that DMRestoreWorkArray behaves like free function in ansi c but >>> I am not sure. >>> Do you think that calling DMGetWorkArray and DMRestoreWorkArray inside a >>> loop is a good thing from the point of view of computational time and >>> memory management? >>> >>> Note: the best way to do this may be to first sort cells by numCorners >>> to avoid many calls to DMGetWorkArray and DMRestoreWorkArray. This is >>> actually what I have in my own code but I would like to maintain Petsc's >>> philosophy. >>> >>> Thanks, >>> >>> Cédric >>> >>> >>> >>> >>> >>> ------------------------------ >>> >>> *De: *"Matthew Knepley" <[email protected]> >>> *À: *"Cedric Doucet" <[email protected]> >>> *Cc: *[email protected] >>> *Envoyé: *Vendredi 25 Octobre 2013 16:31:59 >>> *Objet: *Re: [petsc-users] DMPlexCreateFromCellList and hybrid meshes >>> >>> On Fri, Oct 25, 2013 at 7:23 AM, Cedric Doucet >>> <[email protected]>wrote: >>> >>>> Hello, >>>> >>>> I've noticed that DMPlexCreateFromCellList assumes that cells have the >>>> same number of vertices (numcorners argument). >>>> What should be done when one wants to create a DMPlex from a mesh >>>> containing different types of cells? >>>> Does one have to create several DMPlex structures and merge them? >>>> Does one have to create a unique DMPlex by hand? >>>> >>> >>> The code is very short: >>> >>> ierr = DMPlexSetChart(dm, 0, numCells+numVertices);CHKERRQ(ierr); >>> for (c = 0; c < numCells; ++c) { >>> ierr = DMPlexSetConeSize(dm, c, numCorners);CHKERRQ(ierr); >>> } >>> ierr = DMSetUp(dm);CHKERRQ(ierr); >>> ierr = DMGetWorkArray(dm, numCorners, PETSC_INT, &cone);CHKERRQ(ierr); >>> for (c = 0; c < numCells; ++c) { >>> for (p = 0; p < numCorners; ++p) { >>> cone[p] = cells[c*numCorners+p]+numCells; >>> } >>> ierr = DMPlexSetCone(dm, c, cone);CHKERRQ(ierr); >>> } >>> ierr = DMRestoreWorkArray(dm, numCorners, PETSC_INT, >>> &cone);CHKERRQ(ierr); >>> ierr = DMPlexSymmetrize(dm);CHKERRQ(ierr); >>> ierr = DMPlexStratify(dm);CHKERRQ(ierr); >>> >>> This code is all in plexcreate.c. If you want different cells, you can >>> change numCorners for each cell. >>> I could make a convenience form if necessary. >>> >>> Matt >>> >>> >>>> >>>> Thank you very much for your help. >>>> >>>> Cédric >>>> >>>> >>>> >>>> >>> >>> >>> -- >>> 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 >>> >>> >>> >> >> >> -- >> 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 >> >> >> > > > -- > 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 > > > -- 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
