找回密码
 注册
查看: 2270|回复: 1

求UDF高手帮忙看看我的问题

[复制链接]
发表于 2011-1-3 16:37:39 | 显示全部楼层 |阅读模式

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

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

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

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

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

. 选用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)
溶解平衡分配关系完成后,根据上面物理原理第(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文件改的程序一段,有错 ,无法使用。
#include "udf.h"
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;   

Thread *zhong_thread=Lookup_Thread(domain,ID);                                                
begin_f_loop(f,zhong_thread)     
{
c0=F_C0(f,zhong_thread);   
tc0=THREAD_T0(zhong_thread);   
c1=F_C1(f,zhong_thread);   
tc1=THREAD_T1(zhong_thread);   

a=C_YI(c0,tc0,from_species_index);  
b=C_YI(c1,tc1,to_species_index);                        

if(a>(10.0/11.0)*(a+b))  
c=(10.0/11.0)*(a+b)-a;  
  
if(b<(1.0/11.0)*(a+b))
c=(1.0/11.0)*(a+b)-b;   
}
return(c);      
end_f_loop(f,zhong_thread)
} twophase.jpg

[ 本帖最后由 kylafree 于 2011-1-5 16:13 编辑 ]
twophase.jpg
发表于 2011-1-21 23:58:03 | 显示全部楼层
}
return(c);      
end_f_loop(f,zhong_thread)

这里的返回return(c); ,是不是得执行完loop才行啊,loop还没执行完毕就返回了,这函数剩下的部分不就出问题了吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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