solution (on a mesh) as boundary condition (on an adjacent mesh)

76 views
Skip to first unread message

Greg Wang

unread,
Feb 16, 2023, 6:55:17 AM2/16/23
to deal.II User Group
Hi there,

I'm trying to use a space-time HDG method to solve time-dependent problems with deforming domains. Specifically, we want the solution process to adopt a slab-by-slab approach. Please see the picture attached.

As shown in blue dots and arrows, we want the solution on the top boundary of the n^{th} space-time slab to contribute to boundary conditions of the (n+1)^{th} space-time slab. I'm wondering how to go about doing this in dealii.

The closest thing I found is the get_function_values function whereby a finite element function is evaluated at face quadrature points. My reference is the static condensation routine in step-51. The specific line reads:

        fe_face_values.get_function_values(solution, trace_values);

The problem I have with this is that the FEFaceValues object needs to be on the same page with the solution vector in terms of the global DoF indices whereas for my case, it doesn't seem quite possible without getting hacky since I have two different triangulations.

Any help would be much appreciated!

Best,
Greg
space-time-slab.png

Wolfgang Bangerth

unread,
Feb 17, 2023, 4:11:21 PM2/17/23
to dea...@googlegroups.com
Greg,
do the two meshes (at the end of the previous slab and at the start of the
next slab) match? If so, what
fe_face_values.get_function_values (...)
gives you is the solution values at the quadrature points that the
FEFaceValues object was initialized at. The order of DoFs in the solution
vector does not matter -- the solution vector just has to match the DoFHandler
the FEFaceValues object was initialized at.

Best
W.

--
------------------------------------------------------------------------
Wolfgang Bangerth email: bang...@colostate.edu
www: http://www.math.colostate.edu/~bangerth/


Greg Wang

unread,
Feb 17, 2023, 6:42:14 PM2/17/23
to deal.II User Group
Hi Wolfgang, thanks a lot for your response!

By two meshes matching do you mean there is no hanging nodes? Or they come from the same Triangulation object (and same DoFHandler object, for that matter)?

If it's the first, we want to eventually include space- and time-adaptivity solving each slab, at which point we might need some sort of projection procedure to impose initial condition (with part of the solution vector from DoFs on the top boundary of the previous slab). I haven't paid my due diligence on finding out how to do this because the current aim is a first working example with uniform refinement.

If it's the second, they don't. The only matching aspect is coordinates of their vertices. For better or for worse, I opted to always work with the same Triangulation and when moving to the next step, manually modify the vertices in a way illustrated by the attached picture. I think this means if I straightly use fe_face_values.get_function_values(...), what's being fetched are solutions from DoFs on the bottom boundary of the previous slab.

Would really appreciate your thoughts on these.

Best regards,
Greg
slab_movement.png

Wolfgang Bangerth

unread,
Feb 19, 2023, 2:41:40 PM2/19/23
to dea...@googlegroups.com

Greg,

> By two meshes matching do you mean there is no hanging nodes? Or they come
> from the same Triangulation object (and same DoFHandler object, for that matter)?

I meant that a face of the triangulation used for the "old" slab exactly
matches a face of the triangulation used for the "new" slab. I think that
matches your first option above.

(Adding one level of refinement won't make this much more difficult. But using
two completely unrelated triangulations does.)

The key to what you want to do is to find matching face pairs where you move
from one slab to the next. Since they are geometrically at the same location,
you basically end up with the same kind of terms that you also need to
assemble when doing discontinuous Galerkin methods.
Reply all
Reply to author
Forward
0 new messages