libMesh / libmesh

libMesh github repository
http://libmesh.github.io
GNU Lesser General Public License v2.1
651 stars 285 forks source link

Dual shape functions for 3D mortar #3021

Open jbadger95 opened 3 years ago

jbadger95 commented 3 years ago

Currently dual shape functions are computed once for a single element, then reused. For 3D mortar the dual shape functions depend on element deformation so need to be recomputed on each element.

Additionally on edge dropping elements (see #18853) the dual shape functions should be recomputed on only the active part of the element using the mortar quadrature.

Additional modifications would be needed to enable dual shape functions on TRI6 elements, these are outlined in Section 3.3 of Alexander Popp's thesis.

(Note: I'm going to submit a draft PR for this issue since I'm winding down my internship this week, technically it fixes the issues but is inefficient and slow. I'm just trying to get this all documented in case anyone is interested in finishing it.)

roystgnr commented 3 years ago

For 3D mortar the dual shape functions depend on element deformation so need to be recomputed on each element.

Technically shouldn't this dependence occur for nearly any non-affine element? It looks as if right now we're not even bothering to multiply quadrature weights by a mapping Jacobian before we calculate the L2 matrix that gets solved for the dual shape function coefficients... which is equivalent to assuming the mapping Jacobian doesn't change from point to point, no?

jbadger95 commented 3 years ago

It looks as if right now we're not even bothering to multiply quadrature weights by a mapping Jacobian before we calculate

You're exactly right, we do need to include the Jacobian (I did this in my fix, I'll push the code a bit later today). Essentially I separated the Initialization of the dual coefficients from the reinit routine. In MOOSE I have a reinitDual(qpts, JxW) that calls the corresponding dual initialization routine in Libmesh to compute coefficients.