lantian0606 发表于 2006-8-10 12:07:24

我做的程序,大家共享.

#include "udf.h"
#include "mem.h"
#include "dynamesh_tools.h"
static real v_x = 0.0,v_y=0.0,omega_z=0.0;
DEFINE_CG_MOTION(piston,dt,vel,omega,time,dtime)
{
face_t f;
cell_t c;
real f_glob,m_glob,x_cg,dv_x,dv_y,domega_z;
Domain *domain= Get_Domain (1);
Thread *tf1 = Lookup_Thread (domain, 3);
int i;
/* reset velocities */
NV_S(vel, =, 0.0);
NV_S(omega, =, 0.0);
if (!Data_Valid_P())
return;
for(i=0;i<=ND_ND;i++)
{
f_glob=0;
m_glob=0;
}
/* get the thread pointer for which this motion is defined */
for(i=0;i<ND_ND;i++)
x_cg=DT_CG(dt);

if(time<=0.001)
{
vel=34.5;
Message ("\ntime=%f ,x=%.10lf ,y=%.10lf , force_x=%.1f ,force_y=%.1f ,moment_x=%f,moment_y=%f,moment_z=%f ,Vx=%f ,Vy=%f ,omega_z=%f\n", time,x_cg,x_cg,f_glob,f_glob,m_glob,m_glob,m_glob,v_x,v_y,omega_z);
return;
}
/* compute pressure force , viscosity force and moment on body by looping through all faces */
Compute_Force_And_Moment (domain, tf1, x_cg, f_glob, m_glob, TRUE);
/* compute change in velocity and angle velocity, i.e., dv = F * dt / mass
velocity update using explicit Euler formula */
dv_x = dtime * f_glob / 39400;
v_x += dv_x;
dv_y = dtime * f_glob / 39400;
v_y += dv_y;
domega_z=dtime*m_glob/390000;
omega_z+=domega_z;

Message ("\ntime=%f ,x=%.10lf ,y=%.10lf , force_x=%.1f ,force_y=%.1f ,moment_x=%f,moment_y=%f,moment_z=%f ,Vx=%f ,Vy=%f ,omega_z=%f\n", time,x_cg,x_cg,f_glob,f_glob,m_glob,m_glob,m_glob,v_x,v_y,omega_z);
/* set components of velocity */
vel = v_x,vel=v_y,omega=omega_z;
}
经过多次试验,此程序在三维动网格模型下已经通过.程序的功能为(现在可以说功能了):先计算三维物体所受的力和力矩.然后能过牛顿定律,求x,y方向上的速度和绕z轴的角速度.下面就具体程序我解释一下:数组变量f_glob和m_glob为存放物体受的力和力矩,数组x_cg存放物体的转动中心坐标(对于我试验时间的模型,转动中心即为质心).宏DT_CG(dt)可以得到物体的转动中心,详见UDF手册。Compute_Force_And_Moment (domain, tf1, x_cg, f_glob, m_glob, TRUE)是FLUENT自带的宏,这个在UDF手册上没有(反正我没找到,不知除了手册还有什么其它资料有它的讲解)。指针tf1 = Lookup_Thread (domain, 3),其中3为运动物体的编号,这个在边界条件设置上可以查到。其它的我想大家都能看懂了,我就不解释了。这个程序我不要金币,大家随便看,呵呵。
不知道站长能不能给加点威望啊,这个程序我可连编再查资料再试验了好长时间啊。

zhangstar123 发表于 2006-8-10 15:03:50

我做的程序,大家共享.

好东东,支持

hp270388026 发表于 2006-8-10 21:08:23

我做的程序,大家共享.

zhichi

chbo76 发表于 2006-8-11 19:04:04

我做的程序,大家共享.

的确是好东西,在这里要谢谢楼主了。
不过有点小问题!就是&#35;include "mem.h"和&#35;include "dynamesh_tools.h"这两个头文件是用来说明什么的啊?在这里分别用来说明哪些函数啊?
请楼主进一步地说明一下。谢谢。

lantian0606 发表于 2006-8-12 23:02:41

我做的程序,大家共享.

宏DT_CG(dt)需要dynamesh_tools.h
mem.h 没有用,是我以前调程序时忘了删掉了

chbo76 发表于 2006-8-13 09:13:29

我做的程序,大家共享.

谢谢楼主的解惑!

boyfeng 发表于 2006-8-19 20:08:17

我做的程序,大家共享.

强烈支持!

topshen 发表于 2006-9-2 16:53:20

我做的程序,大家共享.

谢谢,多多指点!

ludejun 发表于 2006-9-6 22:38:20

我做的程序,大家共享.

谢谢,好好向楼主学习!

sj51603 发表于 2006-10-10 09:22:25

我做的程序,大家共享.

好东西,谢谢

zhoudaqing03 发表于 2006-10-24 17:56:14

我做的程序,大家共享.

谢谢!

xiaov 发表于 2006-10-24 23:13:51

我做的程序,大家共享.

不错,有几个问题想问问:不知道,搂主的物体形状是什么样子?domega_z=dtime*m_glob/390000中的390000应该是Izz吧?如果形状不规则,它是怎么求得?CG的位置又怎么算么?谢谢!

owenjiang 发表于 2006-10-26 07:19:10

我做的程序,大家共享.

这个程序是有问题的,因为在算平动和转动时两者是耦合的,你把两者分开算就应考虑到坐标系的转换,是在局地坐标系下呢,还是在全局坐标系下,这两者的关系还得有个转换矩阵。
进一步讨论,请联系QQ:489636555

cryopig 发表于 2006-10-26 09:08:37

我做的程序,大家共享.

嗯,谢谢分享,我也学习学习

mottolin 发表于 2017-12-11 15:40:38

学习啦,谢谢
页: [1] 2
查看完整版本: 我做的程序,大家共享.