idaholab / moose

Multiphysics Object Oriented Simulation Environment
https://www.mooseframework.org
GNU Lesser General Public License v2.1
1.71k stars 1.04k forks source link

Time integration for contact dynamics #18419

Closed recuero closed 2 years ago

recuero commented 3 years ago

Reason

Simulation of contact forces in dynamics requires stabilizing and/or dissipative numerical integration. If regular numerical integration procedures (e.g. classical Newmark-beta) are used, spurious oscillations in contact forces appear, and energy conservation is severely compromised. There is a need then to modify existing Newmark-beta numerical integration scheme to better account for contact forces.

Two options are popular in the literature, see Ref. [1]

  1. Kane's approach introduces dissipation by considering the contact forces to be fully implicit within the Newmark-beta scheme.
  2. An improved approach by Deuflhard et al proposes an additional solution step to stabilize the scheme removing artificial residual contributions from the contact forces.

Design

Approach (1) probably requires significantly less design changes or additions. Whereas approach (2) will require adding a predictor solution step.

Impact

The desired goal is to obtain stable contact forces such that it enables meaningful postprocessing of frictionless and frictional contact forces.

[1] Deuflhard et al, 2008, "A contact-stabilized Newmark method for dynamical contact problems", International Journal for Numerical Methods in Engineering; 73:1274--1290

@lindsayad

lindsayad commented 3 years ago

Here I am scribbling my notes from talking with @fdkong. We want to construct the following function/residual:

F1 = F_noncontact(u) F2 = F_contact(u) F3 = F_noncontact(u_old) F = F1 + 0.5 * (F2 + F3)

And then the corresponding Jacobian is, recognizing that d(F3) with respect to the current solution is 0:

J = d(F1) + 0.5 d(F2) = J1 + 0.5 J2

Evaluating the three different functions to form F is fairly straightforward. I do not think we care too much about the memory due to them, so we probably just evaluate two different tagged vectors (one for contact, and one for non-contact) and together with an old vector of F_noncontact construct F. However, what about forming the matrix? How do we make this? Two different Mats? We could definitely do it that way, but I think instead what we will do is add the ability to supply coefficients to the tagging system such that we can choose to accumulate fractions of local contributions.

recuero commented 3 years ago

My understanding is that, currently, we have F being constructed from a combination (defined by Newmark-beta integration coefficients) of F1, F2, F3, and an additional F4 (F_contact(u_old), which won't be considered in the new alternative implementation as you described above, is this correct?

lindsayad commented 3 years ago

Sure. We could have this custom time integrator manage the tagging coefficients and set the tagging coefficients according to the Newmark-beta integration coefficients

recuero commented 2 years ago

Closing in favor of a more general issue #19671.