24小时热门版块排行榜    

查看: 8389  |  回复: 18
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

kylafree

至尊木虫 (知名作家)


[交流] 【求助】求UDF高手帮忙看看我的问题


如图:
(1).初始时刻,矩形区域内上半部分(区域1+2)为质量分数为5%的甲醛+95%的空气的混合气体。下半部分(区域3+4)为0%的甲醛+100%的水。

(2). 空气中的甲醛会在气液交界面处发生溶解,即区域2中的甲醛因溶解而进入区域3中(设溶解过程瞬间即可完成),于是水区域的上部(区域3)有了甲醛,而水区域4还没有甲醛,于是由于浓度差甲醛会从水区域的上部(区域3)往下部(区域4)扩散。
同时空气区域的下部(区域2)由于甲醛溶解到水中而浓度降低,也引起空气区域中甲醛从上部(区域1)往下部(区域2)扩散。

(3). 甲醛的溶解过程由平衡分配关系决定。假设甲醛在空气和水中的平衡分配系数为0.1(即,上述溶解与扩散过程经过足够长时间后总会稳定,设稳定后 [甲醛在空气中的浓度a0):(甲醛在水中的浓度b0)=0.1] 这是一个物理定律。稳定后的浓度比是定值,与初始状态无关。

(4). 选用VOF两相流模型(主相设为甲醛(占5%)+空气(占95%)的混合气,第二相设为甲醛(占0%)和水(占100%)的混和物)
+species transport模型。

气液交界面为边界条件设为wall,其它边界也为wall
两相交互作用Phase interacion中设置一个mass transfer mechnism

(5).编程想法:
找到气液交界面,然后提取出交界面上方单元(区域2)甲醛的浓度,设其为a;
  再提取出交界面下方单元(区域3)甲醛的浓度,设为b;
再根据甲醛在气相和液相中的平衡分配系数0.1
由     a+b=a0+b0   (分配前后质量守恒)
       a0/b0=0.1     (分配稳定后满足平衡分配系数关系)
解上面方程组得a0=(0.1/(0.1+1) )* (a+b) ,b0=(1/(0.1+1)) * (a+b)
并把a更新为a0,b更新为b0。
即a=(0.1/(0.1+1)) * (a+b)
   b=(1/(0.1+1) )* (a+b)
(6).溶解平衡分配关系完成后,根据上面物理原理第(2)条,由于扩散原因会打破这个平衡。于是新的平衡分配又开始了。过通过循环完成。
If (b/a<0.1) 溶解平衡分配就会发生。

比如最开始甲醛在气相的浓度为a=5%,甲醛在水中的浓度为b=0,
显然b/a<0.1,所以按平衡分配关系把a,b更新为
a=0.1/(0.1+1) * 5%
b=1/(0.1+1) *5%
这样气液两相中便出现浓度差了,两相中各自又会发生扩散,扩散又会打破平衡分配关系......
就是这个过程。
下面为根据 HELP 中UDF写的程序,但编译有错。也不知道能不能正确描述我的问题。望各个高手帮忙看看。万分感谢。

DEFINE_MASS_TRANSFER(liq_gas_transfer, cell, mix_thread, from_index, from_species_index, to_index, to_species_index)
{
real a,b,c;
cell_t c0,c1;
Thread *tc0,*tc1;
Domain *domain=Get_Domain(1);
face_t f;
int ID=9;    /* 交界处wall边界的ID*/

Thread *zhong_thread=Lookup_Thread(domain,ID);  /* 获取交界面处wall的指针*/                                                  
begin_f_loop(f,zhong_thread)     /* 循环于交界面中的所有face*/
{
c0=F_CO(f,zhong_thread);    /*左边的cell标为c0*/
tc0=THREAD_T0(zhong_thread);    /*左边的cell的指针tc0*/
c1=F_C1(f,zhong_thread);    /*右边的cell标为c1*/
tc1=THREAD_T1(zhong_thread);    /*右边的cell的指针tc1*/

a=C_YI(c0,tc0,from_species_index);  /*获取co的质量分数*/
b=C_YI(c1,tc1,to_species_index);  /*获取c1的质量分数*/                          

if(a>(10.0/11.0)*(a+b))  
c=(10.0/11.0)*(a+b)-a;   /*按分配关系,如果a>分配后的a0,则记录应返回值c=a0-a*/
  
if(b<(1.0/11.0)*(a+b))
c=(1.0/11.0)*(a+b)-b;    /*按分配关系,如果b<分配后的b0,则记录应返回值c=b0-b*/
}
return(c);       /*返回c*/
end_f_loop(f,zhong_thread)
}

[ Last edited by kylafree on 2011-1-5 at 16:37 ]
回复此楼

» 收录本帖的淘帖专辑推荐

多相流UDF fluent气液两相udf

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

» 抢金币啦!回帖就可以得到:

查看全部散金贴

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jdzlplq

铁虫 (小有名气)



小木虫: 金币+0.5, 给个红包,谢谢回帖
请问LZ,在设置的mass transfer mechanism时采用的是什么mechanism?
fluent14的user Guide,26.2.8中有关Mass Transfer Effects有这么一句:Unidirectional constant rate mass transfer (not available for VOF calculations),不知道LZ当时采取的是哪一种mechanism呢?cavitation, evaporation-condensation,or boiling?还是自定义的?能够贴出自定义的项目。
16楼2013-05-14 15:49:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 19 个回答

47425804

木虫 (正式写手)


★ ★ ★
kylafree(金币+30): 2011-01-04 16:07:18
robert2020(金币+3):辛苦了! 2011-01-11 10:48:25
问题是有一些:
1. domain指针没有赋值,要加上这么一句:dimain = Get_Domain(1);
2. DEFINE_MASS_TRANSFER宏是用于每个cell的,好像不是对face赋值的,更不能用begin_f_loop了。
3. 我对这个UDF的理解还不深,或许用begin_f_loop是没有问题的,但是在循环里面用return (c);就有问题了,你的第一次循环就会返回值并结束函数。
4. begin_f_loop(f,interior_thread) 对应的应该是end_f_loop(f,interior_thread) 。
5. 你确认一下单位的问题,返回值单位要求是kg/m3-s,我对你的公式不熟,不知道对不对。
2楼2011-01-04 10:00:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

47425804

木虫 (正式写手)


★ ★
xiegangmai(金币+2):谢谢参与 2011-01-15 08:42:43
关于楼主的这个问题,我说说我想的编程思路吧:
用DEFINE_MASS_TRANSFER宏,在函数里,先判断当前的cell是不是靠近相界面的cell;如果不是,返回0;如果是,判断是液相还是气相;如果是气相,那么要找到与之相对应的液相cell,分别获取二者中需要的参数,求取质量传递速率,并返回值;如果是液相,同样找到对应的气相cell,求取传递速率并返回值。
3楼2011-01-04 10:06:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

47425804

木虫 (正式写手)



xiegangmai(金币+1):辛苦了 2011-01-14 16:44:50
关于判断气相还是液相及查找对应的另一相cell,方法就很多了。
可以通过组分含量判断,也可以通过cell坐标判断,楼主自己根据编程方便选择就行。
4楼2011-01-04 10:07:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见