Open adtzlr opened 2 months ago
$$ \delta W\text{ext} = \int{\partial v} \delta u \cdot \lambda ((X + u) - x_\text{ext})^+ da $$
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.
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} $$