How to implement the penalty method to avoid self-contact

Hi,

I am working on a self-contact problem of deforming elastic solid. I would like to know how to implement well the penalty method in FEniCS to avoid auto-collisions.

`***`
Supposing the problem is:

• Supposing the solid undergoes large deformations that lead to auto-penetration as shown on the below pictures:

(reference: V. A. Yastrebov, Numerical methods in contact mechanics, John Wiley & Sons, 2013), with xS: a slave node and xM: its projection onto the opposite boundary of the same solid (~master node) and n: the normal vector at xM, as shown on the two above pictures.

Then, in case of self-penetration, the variation form would becomes:

And writting the above equation with v instead of du as the test-function, the variational form to implement in FEniCS would be:

`***`
Here are my questions:

• Is that last equation correct and should-it be the one to implement in FEniCS?

• Do I have to compute local test function v (vS and vM) for both contact boundaries, i.e. at both slave node xS and at its master projection xM ? If so, how should I express the test function locally with FEniCS?

• How to correctly project the â€ťslaveâ€ť node xS onto â€ťmasterâ€ť boundary to get the normal gap:

• As in that case, the â€śslaveâ€ť and â€śmasterâ€ť contact boundaries are actually the same object (self-
contact), how to distinguish them? Which are the methods with FEniCS? Building two local submeshes with distinct boundaries?

• Then, to compute the projection xM of the slave node, are there also specific methods?

Anne

This is far from a trivial question, especially since your deformation is quite large, and the gap has to be computed for each step.
There has been done quite a lot of work on this at: GitHub - Wells-Group/asimov-contact: Contact models for ASiMoV using DOLFINx and an unbiased Nitsche method for enforcement of contact conditions.

1 Like

Many thanks @dokken, I will have a look on that. Do you have anything with penalty method?
Kind regards,
Anne

Hello @anneker,

Please have you been able to find a solution to your problem?
Iâ€™m currently working on a similar problem. The Nitsche method proposed by Dokken via Contact-Asimov is a really good alternative. But I canâ€™t find enough documentation to be able to implement this resource.

Kind regard.