找回密码
 注册
查看: 2391|回复: 2

热源的udf,编译成功,但是结果不对,错在哪儿?

[复制链接]
发表于 2007-3-6 20:10:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x

问题是这样的,一个圆管.里面是金属粉末,氢气进入后与金属发生化合发应,生成金属氢化物,放热.
老板现在让我把问题简化成,圆管里面是固体,内热源,但是热源放热是沿着x方向逐层放热的,每层放热的时间一定,即x=0的层面最先开始放热,放热时间为0-t,x=a的层面,放热的时间为b-b+t.
编写了几个udf,都不成功,算出来的温度场都是一样的,不存在温度梯度,原因肯定在udf这里:

#include"udf.h"
DEFINE_SOURCE(heat_source,f,t,dS,eqn)
{
real source;
real y;
real time;
real x[ND_ND];
face_t f;
begin_f_loop(f,t)
{
F_CENTROID(x,f,thread);
y=x[0];
time=RP_Get_Real("flow-time");
if(y <=time<=y+2)
{
source=5e8;
dS[eqn]=5e8;
}
else
source=dS[eqn]=0;
return source;
}

我的意思是,x=0的层面,放热的时间为从0秒开始,到第2秒结束,其他层面因为x坐标不同,放热滞后.
理论上预计的温度场应该是左边温度比较高,右边比较低,随着时间的推移,温度又逐渐达到一致.
但是我每次算出来的,温度从左到右都是一致.请教:问题在哪儿?
发表于 2007-3-7 10:01:53 | 显示全部楼层

热源的udf,编译成功,但是结果不对,错在哪儿?

程序思路就不正确,你可以用time=RP_Get_Real控制热源,如果time<2,只有x[0]=0的地方有值,其他地方为0,依次类推。
另外,source=5e8下的ds[eqn]也应该为0。
 楼主| 发表于 2007-3-7 16:08:30 | 显示全部楼层

热源的udf,编译成功,但是结果不对,错在哪儿?

谢谢楼上的同志!
感激ing……[br][br][以下内容由 yuisea 在 2007年03月07日 06:51pm 时添加] [br]
time=0的一瞬间,只有x[0]=0有值,time>0的时候,其他的层面也开始放热了
楼主能不能指点一下,具体的表达式该怎么写呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表