找回密码
 注册
查看: 7770|回复: 7

FLUENT UDF化学反应

[复制链接]
发表于 2015-11-20 17:06:26 | 显示全部楼层 |阅读模式

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

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

x
请各位大神指导一下,初学UDF,我想通过UDF编写化学反应速率以及各方程源项,来实现CH4和O2的燃烧反应,编写的代码如下:
#include "udf.h"
#include "math.h"
#define PRE_EXP 2.119e+011
#define ACTIVE 2.027e+08
#define BETA 0.0

real arrhenius_rate(real temp)
{
        return PRE_EXP*pow(temp,BETA)*exp(-ACTIVE/(UNIVERSAL_GAS_CONSTANT*temp));
}

DEFINE_SOURCE(energy_source,c,t,dS,eqn)
{
  real delt_h,source;
  delt_h=-7.489518e+07;
  source=delt_h*(arrhenius_rate(C_T(c,t)))*C_R(c,t)*C_YI(c,t,0)/16;
  return  source;
}
DEFINE_SOURCE(ch4_source,c,t,dS,eqn)
{
  real source;
  real ss;
  source=-arrhenius_rate(C_T(c,t))*C_R(c,t)*C_YI(c,t,0);
  return  source;
}

DEFINE_SOURCE(o2_source,c,t,dS,eqn)
{
  real source;
  source=-arrhenius_rate(C_T(c,t))*C_R(c,t)*C_YI(c,t,1);
  return  source;
}
DEFINE_SOURCE(co2_source,c,t,dS,eqn)
{
  real source;
  source=arrhenius_rate(C_T(c,t))*C_R(c,t)*C_YI(c,t,2);
  return  source;
}
DEFINE_SOURCE(h2o_source,c,t,dS,eqn)
{
  real source;
  source=arrhenius_rate(C_T(c,t))*C_R(c,t)*C_YI(c,t,3);
  return  source;
}
程序中的指前因子,活化能等参数都是fluent中的材料库中数据。选用的是无反应输运模型,编译UDF后,分别添加各方程源相。但是Fluent运行后并没有发生反应,查看发现arrhenius_rate=0,但是这些数据全部都是来自fluent?那么Fluent又是如何计算arrhenius_rate的呢?后来我认为将arrhenius_rate=1000.0,但是还是没有反应?不知道是怎么回事?请大神指点一下啊?模型说明在附件里面。
发表于 2016-1-20 15:44:21 | 显示全部楼层
首先,你要声明 #define ch4  0
                         #define o2   1
(编号为组分输运里面的顺序,第一个物质编号为0,依次类推)
其次,每个source宏里面加上dS[eqn]=0;在return source 前一行。
发表于 2016-9-26 15:17:51 | 显示全部楼层
UDorcer 发表于 2016-1-20 15:44
首先,你要声明 #define ch4  0
                         #define o2   1
(编号为组分输运里面的顺序, ...

添加了您说的这两点还是没有反应发生,udf是加载在流体域中的源相内吧?
发表于 2019-5-8 18:12:02 | 显示全部楼层
你应该没有给定参数吧,各组分的质量分数
发表于 2022-11-7 09:57:30 | 显示全部楼层
楼主解决了吗
发表于 7 天前 | 显示全部楼层
如果你的流场温度很低(未点火、未初始化高温区),速率本身就非常非常接近 0,这是正常的物理现象,不是 UDF 错误。
发表于 7 天前 | 显示全部楼层
如果你没有在初始化时给计算域内填充CH4和O2,那么 C_YI(c,t,0) 和C_YI(c,t,1) 全是0,任何速率乘以0还是0啊。。。
试试这个:
DEFINE_SOURCE(ch4_source, c, t, dS, eqn)
{
  real source;
  real rate = 1000.0;  /* 强制测试 */
  real y_ch4 = C_YI(c,t,0);
  real temp = C_T(c,t);
  
  /* 调试输出:每个迭代打印一次(会很多,仅用于测试) */
  Message("Cell %d: T=%f, Y_CH4=%e, rho=%f\n", c, temp, y_ch4, C_R(c,t));
  
  source = -rate * C_R(c,t) * y_ch4;
  return source;
}
如果输出中 Y_CH4 全是 0,说明你的初始条件或边界条件没有设置反应物。

评分

1

查看全部评分

发表于 7 天前 | 显示全部楼层
在你已有的UDF中加入这个试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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