On 3/31/22 14:36, Jau-Uei Chen wrote:
> *** Caution: EXTERNAL Sender ***
>
> Sorry for causing the confusion. What I am looking for is to implement
> HDG with the discontinuous finite element defined in the splitted
> mortars (blue):
>
> 0 - - - - - - 0 0 0 - - 0 0 - - 0
> | | | | | | |
> | | 0 0 - - 0 0 - - 0
> | | 0 0 - - 0 0 - - 0
> | | | | | | |
> 0 - - - - - - 0 0 0 - - 0 0 - - 0
>
> instead of the full-sided (red) one which is currently used in dealii
> where we put the constraint and hence get a full-sided one.
>
> 0 - - - - - - 0 0 0 - - 0 0 - - 0
> | | | | | | |
> | | | 0 - - 0 0 - - 0
> | | 0
> | | | 0 - - 0 0 - - 0
> | | | | | | |
> 0 - - - - - - 0 0 0 - - 0 0 - - 0
>
> Is it possible to do so in dealii?
(A comment first: I think in the second picture, you wanted to use only
two red DoFs, not three, on the common edge, right?)
I see. That may be possible, but it is difficult.
The way things are implemented is that there is a finite element space
associated with every edge in the mesh (in 2d). This means that there is
a finite element space associated with the coarse edge of the left cell,
and one with each of the small edges of the cells on the right, and then
constraints are used to make sure that the two are the same.
What you now want is to associate a finite element space with the coarse
face *that depends on the fact that that face is refined*. In other
words, you would want to use a different finite element space for the
four edges of the cell on the left: One space for the left, top, and
bottom face, and a different one for the face on the right that has
neighboring cells. This is not how the internal data structures are set
up currently.
If you *had* to implement something like this, then the way to do it
would probably be to implement the space that corresponds to your top
example and use it on *all* edges. Then you would create hanging node
constraints as usual, and after that you would loop over the mesh and
add constraints yourself for all edges that are not further refined;
these constraints would bring the 2+2 DoFs back down to the two you want
on these edges.
This approach is not convenient, because it's not already implemented in
deal.II, but it probably wouldn't be terribly hard to implement. You'd
have to re-implement something like FEFaceQ, though, because you now
want the space to not be defined on a face, but on each of its children
(whether the edge is refined or not doesn't actually matter here). But
it can be done, and you might be interested in seeing something like
this in practice in this paper:
https://www.math.colostate.edu/~bangerth/publications/2016-nonconforming.pdf