SPH基本公式
通过差值的方式,将所有的粒子更新,A为rj处的场量,j遍历所有粒子,mj为粒子j的质量,rj为粒子j的位置,ρj为密度,
SPH算法中,去除网格概念,将流体通过大量的粒子进行模拟,所以一般来说可以用密度代替质量来表示力,对于每一个粒子而言,其由三部分组成,及“外力(或者叫重力)”,“压力”,“粘度力”
是外力,一般而言就是重力,或者因为交互产生的力
是流体内部的压力产生的作用力,相当于压力场的梯度,力的方向上需要是压力高的地方流向压力低的地方
是由于粒子之间的速度差产生的力,称之为粘度,在液体内部,快速流动的部分会是假类似于剪切力的作用到速度慢的部分,这个力的大小和粘度系数以及速度差的二阶微分算子有关。
加速度
再根据牛顿定律:可以推导出 ,很多时候,我们会简化液体质量为1(不简化也没事,最终会消元),也因此,可以推导出任意一点的粒子加速度为:
注意,这个公式的质量m会消元
密度
密度的计算需要将当前粒子和所有的粒子进行比较(包括自己这个粒子),求出密度结果
压力
对于某个粒子,压力可以这样算, 这个共识不太容易理解,B是体积模量(Bulk module),是粒子所在点的流体密度, 是一个常数
再根据加速度公式,和SPH基本场量公式,可以知道
体积模量B,表示不可压缩量,是材料对于表面四周压强产生形变程度的度量。它被定义为产生单位相对体积收缩所需的压强。单位为:Pa(N/m2),计算公式一般为:
粘度
粘度可以用这样的表示方式
在加速度中,可以消元m
速度
根据引擎和模拟设置的时间微分参数 以及加速度求速度公式 求的最终的速度
迭代
1. 欧拉法(Euler Method)
公式:
对于物体的运动,我们有经典的牛顿第二定律:
其中,a是加速度,v是速度,x是位置。
在欧拉法中,位置和速度的更新公式如下:
思想: 欧拉法是一种显式的方法,利用当前时刻的速度和加速度来预测下一个时刻的状态。这种方法简单直观,但精度较低。
优缺点:
-
优点:实现简单,计算量小,适合初学者和较简单的物理系统。
-
缺点:不适合高精度模拟,尤其是在系统中有大的加速度变化时,可能导致数值不稳定。
2. 隐式欧拉法(Implicit Euler Method)
公式:
隐式欧拉法的更新公式如下:
思想: 隐式欧拉法是隐式方法,速度和加速度的更新依赖于下一时刻的状态。这种方法相比显式欧拉法更为稳定,尤其在处理刚性物体或大加速度变化时具有更好的数值稳定性。
优缺点:
-
优点:数值稳定性好,适用于刚性系统。
-
缺点:每一步需要求解一个方程(例如求解加速度),计算量相对较大,且不容易并行化。
3. 半隐式欧拉法(Semi-Implicit Euler Method)
公式:
半隐式欧拉法结合了显式和隐式方法的优点:
思想: 半隐式欧拉法在处理刚性物体时表现良好,能够在不增加太多计算负担的情况下,改进数值稳定性。它常用于物理引擎中,尤其是处理速度和加速度的耦合。
优缺点:
-
优点:相较于显式欧拉法具有更好的稳定性,计算成本低。
-
缺点:虽然有较好的稳定性,但仍然可能在某些物理系统中出现不准确的结果,特别是对于较复杂的系统。
4. Verlet积分(Verlet Integration)
公式:
Verlet积分的基本公式如下:
该公式没有直接显式计算速度,而是通过加速度和位置更新来间接计算。
思想: Verlet积分是一种经典的积分方法,广泛应用于分子动力学和物理引擎中。它的优点是对数值稳定性较好,并且能够避免速度的直接计算,因此适合需要精确位置变化的模拟。
优缺点:
-
优点:对能量保存较好,数值稳定性较强,尤其适用于模拟长时间尺度的物理系统。
-
缺点:没有直接计算速度,难以在某些情况下得到精确的速度信息。计算成本较高。
5. 经典4阶Runge-Kutta(RK4)
公式:
RK4法是四阶精度的Runge-Kutta方法,计算公式如下:
其中, f(t_n, x_n) 是对系统状态的微分(etc. 速度、加速度)
思想: RK4法是一种显式方法,通过对系统进行四次估计,采用加权平均的方式来提高精度。它比欧拉法等简单方法具有更高的准确性。
优缺点:
-
优点:精度高,比欧拉法和隐式方法有更好的表现,适用于对精度要求较高的系统。
-
缺点
0 条评论