Hi matt,
Le 3/17/2020 à 4:00 PM, Matthew Knepley a écrit :
On Mon, Mar 16, 2020 at 5:20 PM Yann Jobic <[email protected]
<mailto:[email protected]>> wrote:
Hi all,
I would like to implement a nodal DG with the DMPlex interface.
Therefore, i must add the internal nodes to the DM (GLL nodes), with
the
constrains :
1) Add them as solution points, with correct coordinates (and keep the
good rotational ordering)
2) Find the shared nodes at faces in order to compute the fluxes
3) For parallel use, so synchronize the ghost node at each time steps
Let me get the fundamentals straight before advising, since I have never
implemented nodal DG.
1) What is shared?
I need to duplicate an edge in 2D, or a facet in 3D, and to sync it
after a time step, in order to compute the numerical fluxes
(Lax-Friedrichs at the beginning).
We have an implementation of spectral element ordering
(https://gitlab.com/petsc/petsc/-/blob/master/src/dm/impls/plex/examples/tutorials/ex6.c).
Those share
the whole element boundary.
2) What ghosts do you need?
In order to compute the numerical fluxes of one element, i need the
values of the surrounding nodes connected to the adjacent elements.
3) You want to store real space coordinates for a quadrature?
It should be basically the same as PetscFE of higher order.
I add some vertex needed to compute a polynomal solution of the desired
order. That means that if i have a N, order of the local approximation,
i need 0.5*(N+1)*(N+2) vertex to store in the DMPlex (in 2D), in order to :
1) have the correct number of dof
2) use ghost nodes to sync the values of the vertex/edge/facet for
1D/2D/3D problem
2) save correctly the solution
Does it make sense to you ?
Maybe like
https://www.mcs.anl.gov/petsc/petsc-current/src/ts/examples/tutorials/ex11.c.html
With the use of the function SplitFaces, which i didn't fully understood
so far.
Thanks,
Yann
We usually define a quadrature on the reference element once.
Thanks,
Matt
I found elements of answers in those threads :
https://lists.mcs.anl.gov/pipermail/petsc-users/2016-August/029985.html
https://lists.mcs.anl.gov/mailman/htdig/petsc-users/2019-October/039581.html
However, it's not clear for me where to begin.
Quoting Matt, i should :
" DMGetCoordinateDM(dm, &cdm);
<Set field information into cdm instead of dm>
DMCreateLocalVector(cdm, &coordinatesLocal);
<Fill in higher order coordinate values>
DMSetCoordinatesLocal(dm, coordinatesLocal);"
However, i will not create ghost nodes this way. And i'm not sure to
keep the good ordering.
This part should be implemented in the PetscFE interface, for high
order
discrete solutions.
I did not succeed in finding the correct part of the source doing it.
Could you please give me some hint to begin correctly thoses tasks ?
Thanks,
Yann
--
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/>