24小时热门版块排行榜    

查看: 1731  |  回复: 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)
}
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xiegangmai: 金币-1, 专业版块交流贴,请勿灌水 2012-10-27 20:13:59
2楼2012-10-26 18:43:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kylafree

至尊木虫 (知名作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +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
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

malu430

金虫 (小有名气)

引用回帖:
3楼: Originally posted by kylafree at 2012-10-26 21:40:05
1.对你的情况把DEFINE_ADJUST换为DEFINE_EXECUTE_AT_END可能好些。
2.Thread *mixture_thread = Lookup_Thread(Get_Domain(1), zone_ID);//因为adjust不传输mixture_thread这个指针变量,所以先通过domain找到mixtu ...

谢谢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
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kylafree

至尊木虫 (知名作家)

引用回帖:
3楼: Originally posted by kylafree at 2012-10-26 21:40:05
1.对你的情况把DEFINE_ADJUST换为DEFINE_EXECUTE_AT_END可能好些。
2.Thread *mixture_thread = Lookup_Thread(Get_Domain(1), zone_ID);//因为adjust不传输mixture_thread这个指针变量,所以先通过domain找到mixtu ...

我错了
5楼2012-10-27 11:16:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kylafree

至尊木虫 (知名作家)

★ ★
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
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

malu430

金虫 (小有名气)

送鲜花一朵
引用回帖:
6楼: Originally posted by kylafree at 2012-10-27 16:33:44
试试下面这种方式看看。
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;//fl ...

恩 谢谢 试试看 嘿嘿
7楼2012-10-28 14:10:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

malu430

金虫 (小有名气)

引用回帖:
6楼: Originally posted by kylafree at 2012-10-27 16:33:44
试试下面这种方式看看。
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;//fl ...

结果还是一样啊
8楼2012-10-28 14:38:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fangdian

木虫 (正式写手)

可以的话将case发上来,这么感觉那个ID不是很清楚。。

» 本帖已获得的红花(最新10朵)

9楼2012-10-28 15:46:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

malu430

金虫 (小有名气)

送鲜花一朵
引用回帖:
9楼: Originally posted by fangdian at 2012-10-28 15:46:02
可以的话将case发上来,这么感觉那个ID不是很清楚。。

发上来了
嘿嘿 谢谢
10楼2012-10-28 17:49:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 malu430 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 基金不中,共勉 +8 eulota 2026-08-26 8/400 2026-08-27 12:34 by lice_1987
[基金申请] 为什么资助数各大高校都创新高,自己申请怎么就这么难 +5 Kittylucky 2026-08-27 5/250 2026-08-27 12:10 by 姜太公烤鱼
[教师之家] 导师吐槽:我怎么摊上了这么个极品研究生! +5 苏东坡二世 2026-08-23 5/250 2026-08-27 10:39 by 炜雨
[文学芳草园] 梦想 +3 myrtle 2026-08-26 3/150 2026-08-27 10:01 by angelyueyi
[基金申请] 国自然面上复盘~欢迎讨论 +7 晴天加油 2026-08-26 8/400 2026-08-27 07:53 by longfie172
[教师之家] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +3 LIbGuocjEEYw 2026-08-26 4/200 2026-08-27 04:33 by Ie9AyIAvGbvs
[基金申请] 我不理解! +15 Edward_pc 2026-08-26 23/1150 2026-08-26 20:34 by zzuzxg
[基金申请] 2026年的国家社科基金项目通讯评审的新规则与新动向、新挑战 +7 process2012 2026-08-23 10/500 2026-08-26 19:23 by hmhminy
[基金申请] 怎么查啊 +5 huang1991js 2026-08-26 5/250 2026-08-26 16:09 by Equinoxhua
[基金申请] 2026国自然函评费到账 +22 羊腰板 2026-08-21 25/1250 2026-08-26 15:00 by zuocuiping
[基金申请] 2026年8月25日国自然放榜前突然收到列入评审专家邮件,有关系吗? +25 木水思豆 2026-08-25 28/1400 2026-08-26 14:53 by draco1987
[基金申请] 出来了 +9 trojank 2026-08-26 9/450 2026-08-26 14:25 by 宝贝虫子
[基金申请] 国合里面能看到了 +7 一怀馨秋 2026-08-26 7/350 2026-08-26 11:23 by zhaosm1982
[基金申请] 明天应该可查了!? +6 chengyan1220 2026-08-23 6/300 2026-08-25 19:45 by zfd97
[基金申请] 人气不行了 +11 fansofjerry 2026-08-21 11/550 2026-08-25 11:04 by 孤独的英雄6
[基金申请] 我面上完蛋了 +13 且听虎啸 2026-08-20 14/700 2026-08-25 09:10 by mrkang
[基金申请] 建议基金发布提前给出明确的时间点 +13 kulium 2026-08-21 16/800 2026-08-24 16:27 by superceng
[基金申请] 时间戳今天,20号变了 +5 archvillain 2026-08-20 5/250 2026-08-22 06:12 by hui_daxiao
[基金申请] 看来今天不会放榜了? +8 chengyan1220 2026-08-21 11/550 2026-08-21 17:52 by dcqxinyang
[基金申请] 应该是下周三26日公布了吧? +4 哈哈蛤? 2026-08-21 4/200 2026-08-21 10:58 by Vivilian
信息提示
请填处理意见