在 Fenics 中实施收缩力

计算科学 有限元 芬尼克斯 边界条件
2021-12-20 11:38:14

有没有办法实现元素明智的收缩力(即,一种导致 FE 自身收缩到自身的力)?例如,当某些东西脱水时会发生这种情况。最好使用一阶四面体元素,但如果唯一的方法是在元素的中心有一个顶点,那么更高阶将不得不做(它只会打开其他需要解决的问题)我也只感兴趣x[2] 方向。这将是一种类似于身体力的东西,例如

点(体力,位移)*dx(子域)

但不是在全局意义上定义体力,而是从参考点沿全局方向作用(例如重力在整个域上向下作用,受边界条件约束,例如地面阻止物体下落),它将是在局部元素内,参考系依赖于元素。我已经尝试在多个子域上以相反方向作用的多个体力来实现这一点,但这似乎会导致这些力有效地相互抵消。

一个简单的物理示例是坐在桌子上晾干的湿海绵。它有两股力量作用在它上面。第一个简单的原因是垂直方向的重力使其保持坐在桌子上,桌子的边界条件不允许它下落。二是水分蒸发,海绵变小时产生的收缩力。如果我们使用 1 个元素对此进行建模,则定义单元的每个顶点都需要收缩到单元的本地中心。

这是在 Fenics 中实现的。

1个回答

看起来您只是想计算弹性问题(大位移)。我看不出这有什么问题。只需检查hyperelasticity演示。但要小心 - 如果您将初始状态作为参考状态,请注意您的参考状态不是无压力的,这是推导本构关系时非常常见的假设。毕竟,如果从无压力状态开始,您将一无所获。

如果您需要(出于某种目的)根据计算出的位移使网格变形,则可以在 FEniCS 中执行此操作 - 检查void Mesh::move(const GenericFunction& displacement)然后很自然地使用连续分段线性元素(CG1)进行位移,它只定义了所有网格顶点的位移。您只需要在每个时间步之后重置您的参考配置。