adtzlr / felupe

:mag: finite element analysis for continuum mechanics of solid bodies
https://felupe.readthedocs.io/
GNU General Public License v3.0
67 stars 10 forks source link

`MultiPointContact` with custom rigid edge / surface #810

Open adtzlr opened 2 months ago

adtzlr commented 2 months ago

In #805 and #808, a non-flat rigid edge would also be of interest.

$$f(\boldsymbol{x})$$

It is important to deal with coordinates of the deformed configuration (the rigid edge / surface is fixed in space). This requires the first partial derivatives $\partial f / \partial \boldsymbol{x}_t$ and $\partial f / \partial \boldsymbol{x}_C$.

The corresponding weak-form expression:

$$ \delta W\text{ext} = \int{\partial v} \delta u \cdot \lambda (x-x_\text{ext})^+ da $$

with the ramp function

$$ (x)^+ = \frac{x + |x|}{2} $$

adtzlr commented 2 months ago

$$ \delta W\text{ext} = \int{\partial v} \delta u \cdot \lambda ((X + u) - x_\text{ext})^+ da $$

adtzlr commented 2 months ago

The MultiPointContact does not need the centerpoint. The external displacements should be passed as array. This removes 3/4 of the entries of the stiffness matrix.

$$ \hat{r} = \lambda (\hat{x}_t - \hat{x}_C) $$

with the rigid obstacle

$$ \hat{x}_C = f(\hat{x}_t) $$

The coordinate-dependent obstacle is evaluated for the coordinates of the deformed configuration.

$$ \hat{K} = \lambda (1 - \frac{\partial f}{\partial \hat{x}})$$

This should be implemented as a new class, like Obstacle. The obstacle's coordinates must be provided by a callable,

def obstacle(points):
    return surface, derivatives_of_surface_wrt_points

The idea is to use an interpolated line mesh for this kind of obstacle; this also includes a special mesh.points_derivative array.