找回密码
 注册
查看: 6580|回复: 12

udf比热宏:DEFINE_SPECIFIC_HEAT的用法

[复制链接]
发表于 2010-10-24 18:13:12 | 显示全部楼层 |阅读模式

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

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

x
Ansys 12的udf有个自定义比热的改进,DEFINE_SPECIFIC_HEAT(name,T,Tref,h,yi),可是用这个宏自定义的过程中,我发现没有办法按不同区域的方法定义cp,比如:
DEFINE_SPECIFIC_HEAT(proof,T,Tref,h,yi)
{cell_t c;
Thread *t;
Domain *d;
real cp,x[ND_ND];
d=Get_Domain(1);

thread_loop_c(t,d)
        {
          begin_c_loop(c,t)
          {C_CENTROID(x,c,t);
                  if(x[1]<0.3)
                  cp=1000;
                  else
                  cp=2000;
          }
          end_c_loop(c,t)
        }
return cp;
}
返回的值只有1000或2000两种答案。
当网格总高度y<0.3时,整个区域的cp=1000;
当网格总高度y>0.3时,整个区域的cp=2000;
那么C_CENTROID(x,c,t);
          if(x[1]<0.3)
没有按c,t循环。不知道是怎么回事?望高人指点。
 楼主| 发表于 2010-10-25 10:01:24 | 显示全部楼层
比热的udf难道不能按区域划分么?求助各位啊。
发表于 2010-10-26 09:42:10 | 显示全部楼层

明显不可以。传入的参数是温度T,Cp应该写成T的函数,而不是位置的函数。除非先对整个c循环,然后通过温度相等来判断以获取当前的c号码,但是这样存在风险,如果区域中有两个cell温度相等,那就结果不对了。还是直接将Cp写成温度的函数比较好。

begin_c_loop(c,t)
          {
if(C_T(c,t)==T) then C_CENTROID(x,c,t);


          }
          end_c_loop(c,t)
 楼主| 发表于 2010-10-26 12:21:13 | 显示全部楼层

回复 3# gearboy 的帖子

真是感谢gearboy,帮我答疑解惑好多次了。今天才明白原来DEFINE宏后面()里的参数类型决定了它对于数据的传递方式。
但是对于一个计算区域内有不同的比热表达式,对于比热宏的定义还是很困难表达,只能在找关于T,h或者Yi的表达式了,不知道这样理解对不对?
发表于 2010-10-27 12:09:11 | 显示全部楼层
没试过,如果不行的话可以分成两个fluid zone,分别将比热设定为1000和2000
 楼主| 发表于 2010-11-1 18:05:40 | 显示全部楼层

回复 5# swimming02 的帖子

Define material界面中没有按不同zone的物性参数进行定义,不知道您说的是哪个定义方式?
发表于 2010-11-1 20:06:31 | 显示全部楼层
你可以人为的将计算域分为两个区
 楼主| 发表于 2010-11-1 22:10:58 | 显示全部楼层

回复 7# swimming02 的帖子

哦,没接触过这个功能,不知道是哪个操作命令
发表于 2010-11-2 14:50:26 | 显示全部楼层

回复 7# swimming02 的帖子

你讲的画区是指,先算一个区在一定比热下, 然后打开别一个区算别一个比热下???
发表于 2010-11-3 11:36:12 | 显示全部楼层

回复 9# lovewb 的帖子

我是指在gambit中事先定义两个不同的流体区域,然后在fluent中在这两个区的流体参数分别进行设置
发表于 2010-11-3 12:44:30 | 显示全部楼层

回复 10# swimming02 的帖子

哦,明白
 楼主| 发表于 2010-11-5 14:08:58 | 显示全部楼层

回复 10# swimming02 的帖子

明白了,谢谢大家
发表于 2012-4-12 09:14:16 | 显示全部楼层
原帖由 yc9316 于 2010-10-24 10:13 发表
Ansys 12的udf有个自定义比热的改进,DEFINE_SPECIFIC_HEAT(name,T,Tref,h,yi),可是用这个宏自定义的过程中,我发现没有办法按不同区域的方法定义cp,比如:
DEFINE_SPECIFIC_HEAT(proof,T,Tref,h,yi)
{cel ...


你这个UDF整体思路是对的,只是你还没有定义t 和 d的关系。在你开始loop之前,加上一个
t = Lookup_Thread(d, Zone_ID[x]),具体指出一个cell thread,你接下来的loop才能用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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