[petsc-users] DMPlex tetrahedra facets orientation
Matthew Knepley
knepley at gmail.com
Mon Mar 8 09:11:01 CST 2021
On Mon, Mar 8, 2021 at 10:08 AM Isaac, Tobin G <tisaac at cc.gatech.edu> wrote:
> What Nicolas wants is pretty common in DG, and the quantity is available
> as just the cross product of the two vectors of the facet Jacobian.
> Computing it the way you suggest is kind of a backward reconstruction.
>
I do not quite understand. The facet Jacobian will not know what the
orientation with respect to the cell should be, and that is what he wants.
Thanks,
Matt
> Toby Isaac, Assistant Professor, GTCSE
>
> ------------------------------
> *From:* petsc-users <petsc-users-bounces at mcs.anl.gov> on behalf of
> Matthew Knepley <knepley at gmail.com>
> *Sent:* Monday, March 8, 2021, 09:56
> *To:* Nicolas Barral
> *Cc:* PETSc
> *Subject:* Re: [petsc-users] DMPlex tetrahedra facets orientation
>
> On Mon, Mar 8, 2021 at 4:02 AM Nicolas Barral <
> nicolas.barral at math.u-bordeaux.fr> wrote:
>
>> On 07/03/2021 22:56, Matthew Knepley wrote:
>> > On Sun, Mar 7, 2021 at 4:51 PM Nicolas Barral
>> > <nicolas.barral at math.u-bordeaux.fr
>> > <mailto:nicolas.barral at math.u-bordeaux.fr>> wrote:
>> >
>> >
>> > On 07/03/2021 22:30, Matthew Knepley wrote:
>> > > On Sun, Mar 7, 2021 at 4:13 PM Nicolas Barral
>> > > <nicolas.barral at math.u-bordeaux.fr
>> > <mailto:nicolas.barral at math.u-bordeaux.fr>
>> > > <mailto:nicolas.barral at math.u-bordeaux.fr
>> > <mailto:nicolas.barral at math.u-bordeaux.fr>>> wrote:
>> > >
>> > > On 07/03/2021 16:54, Matthew Knepley wrote:
>> > > > On Sun, Mar 7, 2021 at 8:52 AM Nicolas Barral
>> > > > <nicolas.barral at math.u-bordeaux.fr
>> > <mailto:nicolas.barral at math.u-bordeaux.fr>
>> > > <mailto:nicolas.barral at math.u-bordeaux.fr
>> > <mailto:nicolas.barral at math.u-bordeaux.fr>>
>> > > > <mailto:nicolas.barral at math.u-bordeaux.fr
>> > <mailto:nicolas.barral at math.u-bordeaux.fr>
>> > > <mailto:nicolas.barral at math.u-bordeaux.fr
>> > <mailto:nicolas.barral at math.u-bordeaux.fr>>>> wrote:
>> > > >
>> > > > Matt,
>> > > >
>> > > > Thanks for your answer.
>> > > >
>> > > > However, DMPlexComputeCellGeometryFVM does not compute
>> > what I
>> > > need
>> > > > (normals of height 1 entities). I can't find any
>> > function doing
>> > > > that, is
>> > > > there one ?
>> > > >
>> > > >
>> > > > The normal[] in DMPlexComputeCellGeometryFVM() is exactly
>> what
>> > > you want.
>> > > > What does not look right to you?
>> > >
>> > >
>> > > So it turns out it's not what I want because I need
>> > non-normalized
>> > > normals. It doesn't seem like I can easily retrieve the norm,
>> > can I?
>> > >
>> > >
>> > > You just want area-weighted normals I think, which means that you
>> > just
>> > > multiply by the area,
>> > > which comes back in the same function.
>> > >
>> >
>> > Ah by the area times 2, of course, my bad.
>> > Do you order height-1 elements in a certain way ? I need to access
>> the
>> > facet (resp. edge) opposite to a vertex in a tet (resp. triangle).
>> >
>> >
>> > Yes. Now that I have pretty much settled on it, I will put it in the
>> > manual. It is currently here:
>> >
>> >
>> https://gitlab.com/petsc/petsc/-/blob/main/src/dm/impls/plex/plexinterpolate.c#L56
>> <https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.com%2Fpetsc%2Fpetsc%2F-%2Fblob%2Fmain%2Fsrc%2Fdm%2Fimpls%2Fplex%2Fplexinterpolate.c%23L56&data=04%7C01%7Ctisaac%40cc.gatech.edu%7Cfc7c2a129127412423eb08d8e2424867%7C482198bbae7b4b258b7a6d7f32faa083%7C0%7C0%7C637508121599336310%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=Ri17JMapieeD7CJm8BfQNLkQ0V00WG6IFgCLtsNNKbM%3D&reserved=0>
>> >
>> > All normals are outward facing, but hopefully the ordering in the
>> sourse
>> > file makes sense.
>>
>> Thanks Matt, but I'm not sure I understand well. What I do so far is:
>>
>> ierr = DMPlexGetCone(dm, c, &cone);CHKERRQ(ierr);
>> for (i=0; i<dim+1; ++i) {
>> f = cone[i];
>> ierr = DMPlexComputeCellGeometryFVM(dm, f, &area, NULL,
>> &vn[i*dim]);CHKERRQ(ierr);
>> if (dim == 3) { area *= 2; }
>> for (j=0; j<dim; ++j) { vn[i*dim+j] *= area; }
>>
>> So in 3D, it seems that:
>> (vn[9],vn[10],vn[11]) is the inward normal to the facet opposing vertex0
>> (vn[6],vn[7],vn[8]) " " 1
>> (vn[3],vn[4],vn[5]) " " 2
>> (vn[0],vn[1],vn[2]) " " 3
>>
>> in 2D:
>> (vn[2],vn[3]) is a normal to the edge opposing vertex 0
>> (vn[4],vn[5]) " " 1
>> (vn[0],vn[1]) " " 2
>> Yet in 2D, whether the normals are inward or outward does not seem
>> consistent across elements.
>>
>> What am I wrongly assuming ?
>>
>
> Ah, I see the problem. I probably need another function. You can tell that
> not many people use Plex this way yet.
> The logic for what you want is embedded my traversal, but it simple:
>
> ierr = DMPlexGetConeSize(dm, c, &coneSize);CHKERRQ(ierr);
> ierr = DMPlexGetCone(dm, c, &cone);CHKERRQ(ierr);
> ierr = DMPlexGetConeOrientation(dm, c, &ornt);CHKERRQ(ierr);
> for (i=0; i<coneSize; ++i) {
> f = cone[i];
> flip = ornt[i] >= 0 ? 1 : -1;
> ierr = DMPlexComputeCellGeometryFVM(dm, f, &area, NULL,
> &vn[i*dim]);CHKERRQ(ierr);
> if (dim == 3) { area *= 2; }
> for (j=0; j<dim; ++j) { vn[i*dim+j] *= area * flip; }
>
> I could make a function that returns all normals, properly oriented. It
> would just do this.
>
> Thanks,
>
> Matt
>
> Thanks,
>>
>> --
>> Nicolas
>>
>> >
>> > Thanks,
>> >
>> > Matt
>> >
>> > Thanks
>> >
>> > --
>> > Nicolas
>> >
>> >
>> > > Thanks,
>> > >
>> > > Matt
>> > >
>> > > If not, I'll fallback to computing them by hand for now. Is
>> the
>> > > following assumption safe or do I have to use
>> > DMPlexGetOrientedFace?
>> > > > if I call P0P1P2P3 a tet and note x the cross product,
>> > > > P3P2xP3P1 is the outward normal to face P1P2P3
>> > > > P0P2xP0P3 " P0P2P3
>> > > > P3P1xP3P0 " P0P1P3
>> > > > P0P1xP0P2 " P0P1P2
>> > >
>> > > Thanks
>> > >
>> > > --
>> > > Nicolas
>> > > >
>> > > > Thanks,
>> > > >
>> > > > Matt
>> > > >
>> > > > So far I've been doing it by hand, and after a lot of
>> > > experimenting the
>> > > > past weeks, it seems that if I call P0P1P2P3 a
>> tetrahedron
>> > > and note x
>> > > > the cross product,
>> > > > P3P2xP3P1 is the outward normal to face P1P2P3
>> > > > P0P2xP0P3 " P0P2P3
>> > > > P3P1xP3P0 " P0P1P3
>> > > > P0P1xP0P2 " P0P1P2
>> > > > Have I been lucky but can't expect it to be true ?
>> > > >
>> > > > (Alternatively, there is a link between the normals
>> > and the
>> > > element
>> > > > Jacobian, but I don't know the formula and can find
>> them)
>> > > >
>> > > >
>> > > > Thanks,
>> > > >
>> > > > --
>> > > > Nicolas
>> > > >
>> > > > On 08/02/2021 15:19, Matthew Knepley wrote:
>> > > > > On Mon, Feb 8, 2021 at 6:01 AM Nicolas Barral
>> > > > > <nicolas.barral at math.u-bordeaux.fr
>> > <mailto:nicolas.barral at math.u-bordeaux.fr>
>> > > <mailto:nicolas.barral at math.u-bordeaux.fr
>> > <mailto:nicolas.barral at math.u-bordeaux.fr>>
>> > > > <mailto:nicolas.barral at math.u-bordeaux.fr
>> > <mailto:nicolas.barral at math.u-bordeaux.fr>
>> > > <mailto:nicolas.barral at math.u-bordeaux.fr
>> > <mailto:nicolas.barral at math.u-bordeaux.fr>>>
>> > > > > <mailto:nicolas.barral at math.u-bordeaux.fr
>> > <mailto:nicolas.barral at math.u-bordeaux.fr>
>> > > <mailto:nicolas.barral at math.u-bordeaux.fr
>> > <mailto:nicolas.barral at math.u-bordeaux.fr>>
>> > > > <mailto:nicolas.barral at math.u-bordeaux.fr
>> > <mailto:nicolas.barral at math.u-bordeaux.fr>
>> > > <mailto:nicolas.barral at math.u-bordeaux.fr
>> > <mailto:nicolas.barral at math.u-bordeaux.fr>>>>> wrote:
>> > > > >
>> > > > > Hi all,
>> > > > >
>> > > > > Can I make any assumption on the orientation of
>> > triangular
>> > > > facets in a
>> > > > > tetrahedral plex ? I need the inward facet
>> > normals. Do
>> > > I need
>> > > > to use
>> > > > > DMPlexGetOrientedFace or can I rely on either
>> > the tet
>> > > vertices
>> > > > > ordering,
>> > > > > or the faces ordering ? Could
>> > > DMPlexGetRawFaces_Internal be
>> > > > enough ?
>> > > > >
>> > > > >
>> > > > > You can do it by hand, but you have to account for
>> > the face
>> > > > orientation
>> > > > > relative to the cell. That is what
>> > > > > DMPlexGetOrientedFace() does. I think it would be
>> > easier
>> > > to use the
>> > > > > function below.
>> > > > >
>> > > > > Alternatively, is there a function that
>> > computes the
>> > > normals
>> > > > - without
>> > > > > bringing out the big guns ?
>> > > > >
>> > > > >
>> > > > > This will compute the normals
>> > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DMPLEX/DMPlexComputeCellGeometryFVM.html
>> <https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.mcs.anl.gov%2Fpetsc%2Fpetsc-current%2Fdocs%2Fmanualpages%2FDMPLEX%2FDMPlexComputeCellGeometryFVM.html&data=04%7C01%7Ctisaac%40cc.gatech.edu%7Cfc7c2a129127412423eb08d8e2424867%7C482198bbae7b4b258b7a6d7f32faa083%7C0%7C0%7C637508121599346300%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=ut9h%2Bj4CWdc0JHHVCH1ZiM5ryR3M%2BJTEry2gfnSQuWI%3D&reserved=0>
>> > > > > Should not be too heavy weight.
>> > > > >
>> > > > > THanks,
>> > > > >
>> > > > > Matt
>> > > > >
>> > > > > Thanks
>> > > > >
>> > > > > --
>> > > > > Nicolas
>> > > > >
>> > > > >
>> > > > >
>> > > > > --
>> > > > > 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/
>> <https://nam12.safelinks.protection.outlook.com/?url=https:%2F%2Fwww.cse.buffalo.edu%2F~knepley%2F&data=04%7C01%7Ctisaac%40cc.gatech.edu%7Cfc7c2a129127412423eb08d8e2424867%7C482198bbae7b4b258b7a6d7f32faa083%7C0%7C0%7C637508121599346300%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=K%2BiksJEah9OWRTKBmN5V%2BuhGcbpq7%2BcOGj7f4ROR%2Fu4%3D&reserved=0>
>> > > > <http://www.cse.buffalo.edu/~knepley/
>> <https://nam12.safelinks.protection.outlook.com/?url=http:%2F%2Fwww.cse.buffalo.edu%2F~knepley%2F&data=04%7C01%7Ctisaac%40cc.gatech.edu%7Cfc7c2a129127412423eb08d8e2424867%7C482198bbae7b4b258b7a6d7f32faa083%7C0%7C0%7C637508121599356300%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=auAm0U9Q7TWyqYSWAs8zSjbIAk20DycTMk5ICVKEVik%3D&reserved=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/
>> <https://nam12.safelinks.protection.outlook.com/?url=https:%2F%2Fwww.cse.buffalo.edu%2F~knepley%2F&data=04%7C01%7Ctisaac%40cc.gatech.edu%7Cfc7c2a129127412423eb08d8e2424867%7C482198bbae7b4b258b7a6d7f32faa083%7C0%7C0%7C637508121599356300%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=ViZdydtMchq0A0ue%2FAaFBnvjo5ZGU37x7Q%2BPGG0%2F9pM%3D&reserved=0>
>> > > <http://www.cse.buffalo.edu/~knepley/
>> <https://nam12.safelinks.protection.outlook.com/?url=http:%2F%2Fwww.cse.buffalo.edu%2F~knepley%2F&data=04%7C01%7Ctisaac%40cc.gatech.edu%7Cfc7c2a129127412423eb08d8e2424867%7C482198bbae7b4b258b7a6d7f32faa083%7C0%7C0%7C637508121599366290%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=JSvoNaYHiClCWi4my4TharBR4J5SgV82Dydvjpq9%2FDU%3D&reserved=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/
>> <https://nam12.safelinks.protection.outlook.com/?url=https:%2F%2Fwww.cse.buffalo.edu%2F~knepley%2F&data=04%7C01%7Ctisaac%40cc.gatech.edu%7Cfc7c2a129127412423eb08d8e2424867%7C482198bbae7b4b258b7a6d7f32faa083%7C0%7C0%7C637508121599366290%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=L%2FE8H2yjaHb0y2xexhjcz0CY9psrLdDNv1mmuuTCgcU%3D&reserved=0>
>> > <http://www.cse.buffalo.edu/~knepley/
>> <https://nam12.safelinks.protection.outlook.com/?url=http:%2F%2Fwww.cse.buffalo.edu%2F~knepley%2F&data=04%7C01%7Ctisaac%40cc.gatech.edu%7Cfc7c2a129127412423eb08d8e2424867%7C482198bbae7b4b258b7a6d7f32faa083%7C0%7C0%7C637508121599376285%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=SYp%2BRkQx8aVp%2BtJvvfzqSi8nnDvd9ezxh2kEtiRyLSY%3D&reserved=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/
>> <https://nam12.safelinks.protection.outlook.com/?url=https:%2F%2Fwww.cse.buffalo.edu%2F~knepley%2F&data=04%7C01%7Ctisaac%40cc.gatech.edu%7Cfc7c2a129127412423eb08d8e2424867%7C482198bbae7b4b258b7a6d7f32faa083%7C0%7C0%7C637508121599376285%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=vwTodVxb3WpSg1SSgyQcBEzWq6PwOGfy1usuDAf%2FjZg%3D&reserved=0>
>> <http://www.cse.buffalo.edu/~knepley/
>> <https://nam12.safelinks.protection.outlook.com/?url=http:%2F%2Fwww.cse.buffalo.edu%2F~knepley%2F&data=04%7C01%7Ctisaac%40cc.gatech.edu%7Cfc7c2a129127412423eb08d8e2424867%7C482198bbae7b4b258b7a6d7f32faa083%7C0%7C0%7C637508121599376285%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=SYp%2BRkQx8aVp%2BtJvvfzqSi8nnDvd9ezxh2kEtiRyLSY%3D&reserved=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/
> <https://nam12.safelinks.protection.outlook.com/?url=http:%2F%2Fwww.cse.buffalo.edu%2F~knepley%2F&data=04%7C01%7Ctisaac%40cc.gatech.edu%7Cfc7c2a129127412423eb08d8e2424867%7C482198bbae7b4b258b7a6d7f32faa083%7C0%7C0%7C637508121599386283%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=Za%2Fud4xn%2FTbDAWv3jtZJgGaRvp5PevATTO2XdkLISzw%3D&reserved=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/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20210308/d1aa99ea/attachment-0001.html>
More information about the petsc-users
mailing list