| 查看: 1382 | 回复: 15 | |||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | |||
malu430金虫 (小有名气)
|
[求助]
求程序查错,关于多组分多相流指针问题,解决的话送上所有金币
|
||
|
程序目的:计算licl溶液的表面张力系数 Licl溶液的表面张力系数是温度和浓度的函数 有高手能帮忙看下下面的程序,为什么液相指针找的不对呢? C_UDMI(cell, mixture_thread, 0)的值按理应该是在液相等于sigma_water*(1+a1*MF+a2*MF*T/647.3+a3*MF*pow(T/647.3,2)+a4*pow(MF,2)+a5*pow(MF,3))。在气相应该等于初始值0,因为我对udm赋值只在液相中循环的。 但是情况却不是这样:C_UDMI(cell, mixture_thread, 0)的值在液相没问题,但 在气相C_UDMI(cell, mixture_thread, 0)= sigma_water 感觉这个程序的结果是并没有在液相循环,而是在整个区域都循环了,由于调用的浓度MF=0,所以在气相算出的结果就变成了sigma_water。 这个是什么原因呢? /*计算表面张力系数,公式来源为参考文献的第页*/ DEFINE_PROPERTY(sigma_licl,cell,mixture_thread) { return C_UDMI(cell, mixture_thread, 0); } DEFINE_ADJUST(my_adjust,domain) { int zone_ID=13;//fluid的zone ID是,从界面获得 int phase_ID=1;//液相的ID是 int comp_ID=0;//组分licl的ID是 cell_t cell; Thread *mixture_thread = Lookup_Thread(Get_Domain(1), zone_ID);//因为adjust不传输mixture_thread这个指针变量,所以先通过domain找到mixture_thread Thread *thread_l = THREAD_SUB_THREAD(mixture_thread, phase_ID);//通过mixture_thread找到液相指针 real sigma_water;//水的表面张力 real T;//温度,K real MF;//licl的浓度 real a1=2.757115; real a2=-12.011299; real a3=14.751818; real a4=2.443204; real a5=-3.147739; real a6=235.8; real a7=0.625; real a8=1.256; begin_c_loop(cell, thread_l) //Licl溶液的表面张力系数是温度和浓度的函数,所以只在液相循环 { T=C_T(cell,thread_l);//得到温度 sigma_water=a6*(1-a7*(1-T/647.3))*pow((1-T/647.3),a8)*0.001;//得到水的表面张力系数 MF= C_YI(cell, thread_l, comp_ID);//得到licl溶液的浓度 C_UDMI(cell, mixture_thread, 0) = sigma_water*(1+a1*MF+a2*MF*T/647.3+a3*MF*pow(T/647.3,2)+a4*pow(MF,2)+a5*pow(MF,3));//得到licl溶液的表面张力系数 } end_c_loop(cell, thread_l) } |
» 猜你喜欢
职称评审没过,求安慰
已经有56人回复
最近几年招的学生写论文不引自己组发的文章
已经有5人回复
26申博自荐
已经有3人回复
A期刊撤稿
已经有4人回复
» 本主题相关价值贴推荐,对您同样有帮助:
关于多相流中DEFINE_SOURCE中指针的问题——希望大家多交流
已经有8人回复
关于 Get_Domain()的问题
已经有5人回复
DEFINE_ADJUST中的
已经有18人回复
300金币求帮忙解决个PMF相关的问题
已经有10人回复
有关水蒸汽冷凝的UDF
已经有8人回复
malu430
金虫 (小有名气)
- 应助: 2 (幼儿园)
- 金币: 1154.4
- 散金: 65
- 红花: 7
- 帖子: 235
- 在线: 133.1小时
- 虫号: 1277136
- 注册: 2011-04-25
- 性别: MM
- 专业: 多相流热物理学
|
谢谢kylafree的热心帮助,不过有几点还是不提清楚的 1. 不太明白为什么要在AT_END执行,能再具体解释下吗? 2. d是domain,不是指针吧 3.我刚刚试过这样 Domain *domain_l=Get_Domain(3); thread_loop_c(thread_l,domain_l) { begin_c_loop(cell, thread_l) { 。。。。。。 } end_c_loop(cell, thread_l) } 也就是你提到的,但是还是不行,和之前的结果完全一样 4. 我也试过 if(0.5<=C_VOF(c,t)&&C_VOF(c,t)<=1.0),但是计算结果很诡异。。。。但有一点要说的是, 表面张力系数不需要找界面再定义的,因为表面张力源项里是有一个体积分数梯度的,不是界面的话,这个梯度就为0。这样就实现了在界面加表面张力源项。 |
4楼2012-10-26 22:29:46
【答案】应助回帖
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
malu430: 金币+10 2012-10-26 22:21:49
xiegangmai: 金币+2, 谢谢应助 2012-10-27 20:14:05
感谢参与,应助指数 +1
malu430: 金币+10 2012-10-26 22:21:49
xiegangmai: 金币+2, 谢谢应助 2012-10-27 20:14:05
|
1.对你的情况把DEFINE_ADJUST换为DEFINE_EXECUTE_AT_END可能好些。 2.Thread *mixture_thread = Lookup_Thread(Get_Domain(1), zone_ID);//因为adjust不传输mixture_thread这个指针变量,所以先通过domain找到mixture_thread---///////我的理解中DEFINE_ADJUST(name,d)中的参数d就是mixture domain的指针。 3.int phase_ID=1;//液相的ID是---///////这里的ID=1???? 我猜测可能=3! ![]() 4.要找液相不妨试下如下方法 Domain *d = Get_Domain(3); /* d为 secondary phase domain(液相)指针(上面第3条中的猜测) ,3来自phase panel. 1-mixture phase; 2-primary phase; 3-secondary phase*/ Thread *t; thread_loop_c(t,d) { begin_c_loop(c, t) { if(0.5<=C_VOF(c,t)&&C_VOF(c,t)<=1.0) /*找到液相CELL,,,交界面处一个CELL中既有气相又有液相如何处理?!*/ { |
3楼2012-10-26 21:40:05
5楼2012-10-27 11:16:15
★ ★
xiegangmai: 金币+2, 辛苦了! 2012-10-27 20:14:22
xiegangmai: 金币+2, 辛苦了! 2012-10-27 20:14:22
|
试试下面这种方式看看。 1) Thread *mixture_thread = Lookup_Thread(Get_Domain(1), zone_ID); 这行中把Get_Domain(1)换为domain 2) DEFINE_ADJUST(my_adjust,domain) { int zone_ID=13;//fluid的zone ID是,从界面获得 int comp_ID=0;//组分licl的ID是 cell_t cell; Domain *d_l = Get_Domain(3); Thread *thread_l = Lookup_Thread(d_l, zone_ID); real sigma_water;//水的表面张力 |
» 本帖已获得的红花(最新10朵)
6楼2012-10-27 16:33:44













回复此楼

malu430