【GAMES201学习笔记】线性有限元

1. 形变参数

1.1 形变映射

形变映射 ϕ \phi ϕ :静止材料位置 ↦ \mapsto 形变材料位置

x d e f o r m e d = ϕ ( x r e s t ) \bold{x_{deformed}} = \phi (\bold{x_{rest}}) xdeformed=ϕ(xrest)

1.2 形变梯度

形变梯度 F \bold{F} F

F ≔ ∂ x d e f o r m e d ∂ x r e s t \bold{F} \coloneqq \cfrac{\partial \bold{x_{deformed}}}{\partial \bold{x_{rest}}} F:=xrestxdeformed

Note

  • 平移过程中形变梯度保持不变: ϕ 1 = ϕ ( x r e s t ) \phi_1 = \phi(\bold{x_{rest}}) ϕ1=ϕ(xrest) ϕ 1 = ϕ ( x r e s t ) + c \phi_1 = \phi(\bold{x_{rest}}) + c ϕ1=ϕ(xrest)+c 有相同的形变梯度

1.3 变形/静止体积比

变形/静止体积比 J J J

J = det ⁡ ( F ) J = \det(\bold{F}) J=det(F)

Note

  • 三维空间中,矩阵行列式的性质,即体积变化倍数

2. 弹性体

2.1 超弹性体(Hyperelasticity)

超弹性材料:应力 – 应变关系应变能密度函数 定义 :

Ψ = Ψ ( F ) \Psi = \Psi(\bold{F}) Ψ=Ψ(F)

直观理解: Ψ \Psi Ψ 是惩罚形变的势函数。

应力 :材料的内部弹性力。

应变 :现在用 形变梯度 F \bold{F} F 代替。

Note

  • Ψ \Psi Ψ 是应变能量密度函数
  • ϕ \phi ϕ 是形变映射

2.2 应力张量

应力:代表材料微元施加在其周围为材料微元的内力。

2.2.1 三种常用的应力张量

  • Piola - Kirchhoff 应力张量PK1):
    P ( F ) = ∂ Ψ ( F ) ∂ F \bold{P(F)} = \cfrac{\partial \Psi(\bold{F})}{\partial \bold{F}} P(F)=FΨ(F)
    (计算简单,是在静止空间计算,需要变换到形变空间)
     
  • 基尔霍夫应力(Kirchhoff stress) τ \tau τ
     
  • 柯西应力张量(Cauchy stress tensor) σ \sigma σ
    (对称,因为角动量守恒)

2.2.2 关系式

  • τ = J σ = P F T \tau = J\sigma = \bold{PF}^T τ=Jσ=PFT
  • P = J σ F − T \bold{P} = J\sigma\bold{F}^{-T} P=JσFT

Note

  • F − T \bold{F}^{-T} FT :补偿材料变形
  • F − T \bold{F}^{-T} FT 替代 F − 1 \bold{F}^{-1} F1 :因为变换的是法向量 n \bold{n} n 而不是 x \bold{x} x

2.2.3 牵引力

  • t = σ T n \bold{t} = \sigma^T\bold{n} t=σTn

直观来说,将法向量乘以应力张量即可获得材料向周围微元施加的力。

2.3 弹性模量(各向同性材料)

  • 杨氏模量 :应力张量与应变张量的比值
    E = σ ϵ E = \cfrac{\sigma}{\epsilon} E=ϵσ

  • 体积模量 :压强关于体积的变化,常用于液体
    K = − V d P d V K = - V \cfrac{dP}{dV} K=VdVdP

  • 泊松比
    ν ∈ [ 0.0 , 0.5 ) \nu \in [0.0,0.5) ν[0.0,0.5)

Note

  • 辅助项具有负泊松比;
  • 泊松比为 0 时,拉长物体时,截面积不会发生变化;
  • 泊松比较大时,物体会尽量保持体积不变,例如在拉长物体时,物体会变细。

拉梅常数(Lamé parameters)

  • Lamé 第一参数: λ \lambda λ
    表示材料的压缩性,等价与体弹性模量或者杨氏模量
     
  • Lamé 第二参数: μ \mu μ
    表示材料的剪切模量,用 G 表示

换算公式

  • K = E 3 ( 1 − 2 ν ) K = \cfrac{E}{3(1 - 2\nu)} K=3(12ν)E (常用于可压缩液体)
     
  • λ = E ν ( 1 + ν ) ( 1 − 2 ν ) \lambda = \cfrac{E\nu}{(1 + \nu)(1 - 2\nu)} λ=(1+ν)(12ν)Eν
     
  • μ = E 2 ( 1 + ν ) \mu = \cfrac{E}{2(1 + \nu)} μ=2(1+ν)E

广义胡克定律 :均匀和各向同性的材料

σ = 2 μ ϵ + λ t r ( ϵ ) \sigma = 2 \mu \epsilon + \lambda tr(\epsilon) σ=2μϵ+λtr(ϵ)

3. 常见的超弹性模型

  • 经典的 MPM 方法将每个粒子看做材料的一个微元,材料的本构模型会有一个能量密度函数 Ψ \Psi Ψ
  • 对能量密度函数 Ψ \Psi Ψ 关于整个模型求积分,得到整个材料的势能;
  • 势能对材料点的形变梯度进行求导: P ( F ) = ∂ Ψ ∂ F P(\bold{F}) = \cfrac{\partial \Psi}{\partial \bold{F}} P(F)=FΨ
  • 物理意义上来说,势能对位置求导的结果就是力, P ( F ) P(\bold{F}) P(F) 可以看做材料点的受力。

3.1 Neo-Hookean 模型

适用于各向同性材料

  • Ψ ( F ) = μ 2 ∑ i [ ( F T F ) i i − 1 ] − μ log ⁡ ( J ) + λ 2 log ⁡ 2 ( J ) \Psi(\bold{F}) = \cfrac{\mu}{2} \sum_i [(\bold{F}^T\bold{F})_{ii} - 1] - \mu \log(J) + \cfrac{\lambda}{2} \log^2(J) Ψ(F)=2μi[(FTF)ii1]μlog(J)+2λlog2(J)
     
  • P ( F ) = ∂ Ψ ∂ F = μ ( F − F T ) + λ log ⁡ ( J ) F − T P(\bold{F}) = \cfrac{\partial \Psi}{\partial \bold{F}} = \mu(\bold{F} - \bold{F}^T) + \lambda\log(J)\bold{F}^{-T} P(F)=FΨ=μ(FFT)+λlog(J)FT

因为 Neo-Hookean 模型容易造成能量流失,这时可以考虑 Corotated 模型。

FEM 中应用 Neo-Hookean 模型的示例代码

dim = 2

E, nu = 1000, 0.3
la = E * nu / ((1 + nu) * (1 - 2 * nu))
mu = E / (2 * (1 + nu))

element_V = 0.01

pars = ti.Vector(dim, dt=real, shape=n_nodes, needs_grad=True)
vels = ti.Vector(dim, dt=real, shape=n_nodes)

total_energy = ti.var(dt=real, shape=(), needs_grad=True)

# 计算势能
@ti.kernel
def compute_total_energy():
    for i in range(n_elements):
        # get F:见 4.2
        ......
        # NeoHookean
        I1 = (F @ F.transpose()).trace()
        # 防止 J 的值过小引起错误
        J = max(0.2, F.determinant())
        element_energy_density = 0.5 * mu * (I1 - dim) - mu * ti.log(J) + 0.5 * la * ti.log(J)**2
        total_energy[None] += element_energy_density * element_V

# 渲染循环
while
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值