找回密码
 注册
查看: 3405|回复: 3

[求助]用UDS求解对流扩散方程,边界条件很复杂,用UDF设置的时候出问题。

[复制链接]
发表于 2009-2-23 23:18:10 | 显示全部楼层 |阅读模式

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

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

x
先谢谢……
最近在用Fluent求一个血液在血管中流动时,血液中某溶解物C扩散的问题,在用UDS的时候遇到一些问题,麻烦前辈们帮忙看看:
1)上下边界处: 在流动的作用下,会产生物质C ,其满足 dC/dy=k1*C-k2*f(u) (其中k1,k2为参数,u为边界处的流速,y为垂直于流向的方向)。
不知道用什么宏写比较好,暂时用UDF define_profile 宏编写了一个程序,但是dC/dy在表述的时候不知道怎么写出来;

2)因为在流场中会产生C,虽然UDS入口条件已知,但是出口边界条件不是一个已知的定值,只能认为充分发展后dC/dx=0   (x为流向方向),我看了一些UDS的例子,都是把UDS所求的边界条件给确定值的。应该是也需要编UDF,自己初学,编了个程序出错,麻烦前辈帮忙看看:
//************************************************//
//************************************************//
#include "udf.h"
DEFINE_PROFILE(atp_outflow,thread,position)
{
  Thread *t0;         /* 定义"t0"为"Thread"(线程)型变量 */
  cell_t c0;          /* 定义"c0"为"Cell"(单元)型变量 */
  face_t f;                //定义face_t类型的变量f

begin_f_loop(f,thread)
    { c0 = F_C0(f,thread);           /* returns the "adjacent CO" cell type( cell_t) variable */
      t0 = THREAD_T0(f,thread);     /*( where t = face thread ) returns the "adjacent cell thread" */

      F_PROFILE(f,thread,position)= C_UDSI(c0,t0,0);  //定义抛物线上的速度;
    }
end_f_loop(f,thread)
}

非常感谢!
发表于 2012-10-14 22:21:31 | 显示全部楼层

楼主此问题是否已经解决?

我遇到楼主一类的问题了,求楼主不吝赐教。
发表于 2012-12-28 00:11:23 | 显示全部楼层
求赐教
发表于 2012-12-28 22:29:20 | 显示全部楼层
t0 = THREAD_T0(f,thread);     写的不对
应该是t0=THREAD_T0(thread)。其中thread就是面线,这样能反馈这个面所在的cell的线。我用的是fluent 6.3,它的THREAD_T0就是这么要求的。

你若是想要dC/dx其实可以利用UDSI_G这个宏。首先调用DEFINE_ADJUST这个宏,做全线检索,将所有的C的值都存到一个UDS里面,迭代的时候,调用USDI_G,就可以得到相应的一阶梯度了。那么dC/dx就是UDIS_G(c,t,i)[0],dC/dy就是UDSI_G(c,t,i)[1]。

还有另一种方法,自己写这个梯度,这个时候你就要考虑用什么迎风格式了。做之前,你要找到cell,然后对cell做线循环,做循环的时候找到所有c1,如此你就有了c0的所有相邻网格了。
dC/dx=SUM((C1-C0)/dx),因为所有的方向都有梯度,所以在做面循环的时候把各个面的梯度加起来就行了。唯一要注意的就是,你如果只想要x方向的话,那么各个分面上的梯度应该再做x方向的投影,可以利用那个face上的INTERIOR_FACE_GEOMETRY的宏,有个dr0向量,具体看udf手册。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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