24小时热门版块排行榜    

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

歪歪_crazy

银虫 (初入文坛)

[求助] Fluent 中 UDF 计算结果输出到窗口问题 已有1人参与

求助!已经将输出显示在窗口的语句   printf("P_out: %g\n", p);   放在循环外了,为什么计算的时候还是每次都要输出计算结果?

Fluent 中 UDF 计算结果输出到窗口问题
1111.PNG


Fluent 中 UDF 计算结果输出到窗口问题-1
22222.PNG
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sfbook

银虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...
歪歪_crazy: 金币+100, ★★★★★最佳答案 2016-12-01 17:05:41
引用回帖:
10楼: Originally posted by 歪歪_crazy at 2016-12-01 10:27:57
首先,我试验了一下,确实如你所说的,DEFINE_SOURCE 是自带循环的,但是它的循环应该是针对每一个 cell ,也就是说没有一个 cell ,它会循环一次,而嵌在其中的 Loop 循环也会循环一次,并且每次循环得到的也是我先 ...

同学,我感觉你需要系统的学习一下C语言和UDF的编程了。。。。。
默认单相流domain只有1,多相流才需要用到更多的domain,如果你的Phases选项没开就不用考虑Get_Domain了,有问题可以仔细看看udf帮助里的Special Macros这节。我给你修改了一下程序,有问题再跟我说。
#include "udf.h"
// #define zone_ID 0 貌似没有编号为0的区域吧。。。
double P_out=0.;

DEFINE_ADJUST(TEG_adjust,domain) //定义里面有 domain,不用自己定义
{
        Thread *t;
        cell_t c;
      //  Domain *all; 没用,你的函数就是在定义的domain里用的
        int  Zone_ID=2; //两个ID有一个就够啦,不管你是全局变量还是局部变量,你又不会给他重新赋值,除非你要算多个区域的值,这里给个 2是随意定的,而且墙壁编号通常为2
      
        face_t f;
        real temp=0.,grad=0.,source=0.;
        real a=0.,b=0.;
        real u=0.,u_sum=0.,vol=0.,vol_sum=4.752*0.00001;
        real r=0.,r_sum=0.,s=1.76*0.001;
        real p=0.;
t=Lookup_Thread(domain,Zone_ID);  
                begin_c_loop (c,t)
                {
                  temp=C_T(c,t);
                  vol=C_VOLUME(c,t);
                  grad=-0.0003*C_T_G(c,t)[0];/*0 for x,1 for y, 2 for z*/
                  
                  a=-6.035*0.0001+6.270*0.000001*temp-1.571*0.00000001*temp*temp+1.260*0.00000000001*temp*temp*temp;
                  u=a*grad*vol/vol_sum;
                  u_sum+=u;

                  b=-7.188*0.0000001+6.926*0.000000001*temp-3.573*0.000000000001*temp*temp;
                  r=b*vol/s/s;
                  r_sum+=r;
                }
                end_c_loop (c,t) //开始和结束 至少一样啊。。。。

          p=u_sum*u_sum/(2*r_sum);
         
         P_out=p;//直接输出p不好么。。。。

Message("%g, %g %g\n", u_sum,r_sum,P_out);
}
11楼2016-12-01 15:33:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 14 个回答

jie_ge

新虫 (小有名气)

因为循环外还有一个循环,

发自小木虫Android客户端
走好自己的路,下一步就很精彩!
2楼2016-11-27 22:43:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

歪歪_crazy

银虫 (初入文坛)

引用回帖:
2楼: Originally posted by jie_ge at 2016-11-27 22:43:14
因为循环外还有一个循环,

什么意思呢?不太明白…… 还有能否给出个解决方案?
3楼2016-11-27 23:10:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jie_ge

新虫 (小有名气)

引用回帖:
3楼: Originally posted by 歪歪_crazy at 2016-11-27 17:10:46
什么意思呢?不太明白…… 还有能否给出个解决方案?...

thread_loop_c没有结束语吧,在输出之前加结束语!

发自小木虫Android客户端
走好自己的路,下一步就很精彩!
4楼2016-11-27 23:30:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见