[petsc-users] DMPlexCreateFromCellList and hybrid meshes
Cedric Doucet
cedric.doucet at inria.fr
Tue Oct 29 10:24:07 CDT 2013
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);
for (c = 0; c < numCells; ++c) {
ierr = DMPlexSetConeSize(dm, c, numCorners[c]);CHKERRQ(ierr);
}
ierr = DMSetUp(dm);CHKERRQ(ierr);
for (c = 0; c < numCells; ++c) {
ierr = DMGetWorkArray(dm, numCorners, PETSC_INT, &cone);CHKERRQ(ierr);
for (p = 0; p < numCorners[c]; ++p) {
cone[p] = cells[c*numCorners[c]+p]+numCells;
}
ierr = DMRestoreWorkArray(dm, numCorners, PETSC_INT, &cone);CHKERRQ(ierr);
ierr = DMPlexSetCone(dm, c, cone);CHKERRQ(ierr);
}
ierr = DMPlexSymmetrize(dm);CHKERRQ(ierr);
ierr = DMPlexStratify(dm);CHKERRQ(ierr);
------------------------------------------------------------------------------------------------------------------------------------------
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
----- Mail original -----
> De: "Matthew Knepley" <knepley at gmail.com>
> À: "Cedric Doucet" <cedric.doucet at inria.fr>
> Cc: petsc-users at mcs.anl.gov
> 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 <
> cedric.doucet at inria.fr > 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20131029/6fc897dc/attachment.html>
More information about the petsc-users
mailing list