找回密码
 注册
查看: 2430|回复: 6

壁面组分消耗UDF计算太慢

[复制链接]
发表于 2012-3-14 10:28:41 | 显示全部楼层 |阅读模式

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

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

x
大家好,我要模拟壁面消耗组分的过程,然后定义了一个壁面附近的组分消耗的源项UDF,但是加进去之后,速度很慢,一晚上才迭代了几步,这个是要在壁面的一段上消耗组分,所以里面有个判断位置语句,然后源项消耗量是固定的。希望大家能给错误找出来啦,真不知道改什么了

#include "udf.h"
#define Coating_weight 0.06
#define Coat_Al    0.004
#define Strip_wide  0.5
#define Strip_velocity  2.3
DEFINE_SOURCE(Al_source,c,t,dS,eqn)
{
real source;
real CC[ND_ND];
int zone_ID = 5;
real volume=0.0;
real y;
real area;
Thread *inletstrip;
Thread *t0;

y=0.9-0.2*Strip_velocity*cos(33.5);
area=0.2*Strip_velocity*Strip_wide;

inletstrip = Lookup_Thread(Get_Domain(1),zone_ID);
t0=THREAD_T0(inletstrip);

begin_c_loop(c,t0)
{
  C_CENTROID(CC,c,t0);
C_UDMI(c,t0,0)=CC[1];

if (CC[1]>=y&&CC[1]<=0.9)
volume+=C_VOLUME(c,t0);
}
end_c_loop(c,t0)
C_UDMI(c,t0,1)=volume;

if (C_UDMI(c,t0,0)>=y&&C_UDMI(c,t0,0)<=0.9)
{source=-5*Coating_weight*Coat_Al*area/volume;
C_UDMI(c,t0,2)=source;
}
else source=0;
return source;
}
 楼主| 发表于 2012-3-14 21:03:22 | 显示全部楼层
麻烦各位出手相助啊,真看不出来有什么问题了
发表于 2012-3-15 08:09:04 | 显示全部楼层
DEFINE_SOURCE(Al_source,c,t,dS,eqn)是对单个cell进行计算的,你又加一个begin_c_loop(c,t0),计算的步数就是整个网格的量的平方。
DEFINE_SOURCE(Al_source,c,t,dS,eqn)中已经有c,t的值传递了,你直接用这个c,t值就可以了,不需要begin_c_loop(c,t0)。
 楼主| 发表于 2012-3-16 21:49:53 | 显示全部楼层

回复 3# aaa-1234 的帖子

我知道源项定义里面自带循环,我这个循环就是为了获得那部分加源项的体积的
发表于 2012-3-17 10:45:21 | 显示全部楼层
那你也可以分开写,每次迭代只计算一次体积,而不是每个网格都计算一次体积
 楼主| 发表于 2012-3-17 21:37:03 | 显示全部楼层

回复 5# aaa-1234 的帖子

不是这样的,我文章中公式给的面的单位时间的质量流量,现在源项要给体积源,所以我只有把吸收组分的面积附近的体积求和出来,所以必须要循环一遍然后得到那部分的体积,我看看把这个写在外边,然后调用行不行
发表于 2012-6-11 15:56:30 | 显示全部楼层

回复 6# luckyhuman1 的帖子

LZ,壁面消耗的flux是通过什么定义的,看到你的UDF没有定义相应的宏,是UDS吗?我定义老出错。

[ 本帖最后由 hihaoer 于 2012-6-12 09:04 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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