felupe icon indicating copy to clipboard operation
felupe copied to clipboard

`MultiPointContact` with custom rigid edge / surface

Open adtzlr opened this issue 1 year ago • 2 comments

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 avatar Jul 06 '24 20:07 adtzlr

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

adtzlr avatar Jul 06 '24 20:07 adtzlr

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.

adtzlr avatar Jul 06 '24 22:07 adtzlr