线速度是通过物体上的x方向的力平衡达到的。表达形式为:
此处v为速度,F为外力,m为质量。使用显示欧拉格式表达t时刻速度为:
源代码:
#include "udf.h"
static real v_prev = 0.0;
DEFINE_CG_MOTION(moving_body, dt,
vel, omega, time, dtime)
{
Thread
*t;
face_t
f;
real
NV_VEC(A); //定义一个向量变量A
real
force, dv;
NV_S(vel,
=,
0.0); //对变量vel赋值为0.0
NV_S(omega,
=, 0.0); //对变量omega赋值为0.0
if(!Data_Valid_P())
return;
t =
DT_THREAD(dt); //DT_THREAD
就是获取网格运动所在的 thread 指针
force =
0.0;
begin_f_loop(f,
t)
{
F_AREA(A, f,
t); //获取面上单元的面积,并且存储在向量A当中
force = force + F_P(f, t) *
A[0]; //循环累加获取x方向的力的大小
}
end_f_loop(f,
t)
dv = dtime
* force / 100.0;
v_prev =
v_prev +
dv; //原来的速度加上速度的增量,得到现在的速度
vel[0] =
v_prev; //将现在的速度返回给动网格宏函数
}