找回密码
 注册
查看: 2166|回复: 9

新手使用 CENTROID(x,c,t)和 条件分段函数 时的 迷惑 ,请各位 大侠帮帮忙 !

[复制链接]
发表于 2013-8-27 17:53:26 | 显示全部楼层 |阅读模式

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

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

x
模型是这样的 :二维 圆管,x向长1m,网格间隔0.1m,y向0.4m,网格 间隔 0.4m/16,网格 数16*10。UDF的 很简单 ,是 adjust,函数主体如下(省略了些语句,语法没问题编译成功,就是计算结果不对)
{
   real x[ND,ND];
   thread_loop_c(t,d)
   {
      begin_c_loop(c,t)
      {
         CENTROID(x,c,t);
         C_UDMI(c,t,0)=x[0];
          z=x[0];
         if(0<=z<0.1)            /*沿x轴方向分段,相同x坐标的网格进行一次计算,并将计算结果存入自定义内存*/
        { F1=表达式(1);/*表达式1 是与x[1]有关的函数,*/
          C_UDMI(c,t,1)=F1;}
         if(0<=z<0.1)     /*表达式2~10相同的, 是与c_T,C_P有关的函数,*/
        { F2=表达式(2);
          C_UDMI(c,t,2)=F2;}
        if(0.1<=z<0.2)
       { F3=表达式(3);
          C_UDMI(c,t,4)=F3;}
       if(0.3<=z<0.4)
        { F4=表达式(4);
          C_UDMI(c,t,3)=F4;}
..................
else
{ F10=表达式(10);
          C_UDMI(c,t,10)=F10;}
      }
      end_c_loop
   }
}
计算收敛后,通过plotXY查看C_UDMI(C,T,0)的数据设x轴是grid x轴,y轴是UDMI(0)
x            y
0         0.05
0.1       0.1
0.2        0.2
0.3        0.3
...................
0.9        0.9
1            0.95
UDMI(1)的计算结果是当z=0.05和z=0.1对应的函数值,UDMI(2)没计算结果全是0,UDMI(3)是当z=0.1和z=0.2对应的函数值UDMI(4)是z=0.2和z=0.3.......
为什么CENTROID(x,c,t)只对起始点和终点cell起作用,我理解这个语句得到的结果应该是
x            y
0         0.05
0.1       0.15
0.2        0.25
0.3        0.35
...................
0.9        0.95
还有即使是我理解的有问题每个分段函数也唯一对应一个z值,而不是两个,并且为什么UDMI(2)没计算结果!后来我按着UDMI(0)中的计算结果,将条件改成z=0.05,z=0.1...z=0.95,结果UDMI(1)的数据所有z点的函数值,其他条件下无计算值,反正无论怎么改,结果就是很怪异。请高手们帮一下忙,看看问题出在哪?顺便科普一下 UDMI(c,t,i)和CENTROID(x,c,t),谢谢了,这个问题已经纠缠我很久了,不知道啰啰嗦嗦这么多,说清楚没......纠结。
 楼主| 发表于 2013-8-27 17:54:33 | 显示全部楼层

回复 1# 茜茜cctt 的帖子

各位高手,大侠帮个忙!
 楼主| 发表于 2013-8-27 17:54:47 | 显示全部楼层

回复 2# 茜茜cctt 的帖子

顶起
发表于 2013-8-28 02:12:49 | 显示全部楼层
你的大概意思懂了,不过中间隐藏了一些表达式,后面直接又给出结果,还真是有点搞懵了,也许结合表达式跟结果,拿出来推一下,更能知道算出来的结果是怎么来的。另外,我以前也是表达式没有问题,有好几个if语句,结果总是出问题,后来发现是scale的时候不对:一般习惯scale为mm,但是udf中的数字单位统一默认为m。你看看你的是不是这样的
发表于 2013-8-28 13:22:52 | 显示全部楼层
if(0.3<=z<0.4)
这样写是不对的




fluent培训资料
发表于 2013-8-28 19:03:43 | 显示全部楼层

回复 1# 茜茜cctt 的帖子

问题就是5楼说的,另外你写成下面这个格式。全是if格式的计算效率极低。

if(0<z)

else if(z<0.1)

else if(z<0.2)

else if(z<0.3)

......

else if(z<NN)

else
发表于 2013-8-28 21:15:36 | 显示全部楼层

回复 6# fty0083 的帖子

等号在哪里?
发表于 2013-8-29 07:58:23 | 显示全部楼层

回复 7# 5超7 的帖子

向左取等呀,比如 else if(z<0.3)那行,相当于 0.2<=z<0.3。
 楼主| 发表于 2013-8-29 13:52:12 | 显示全部楼层
谢谢指点!

[ 本帖最后由 茜茜cctt 于 2013-8-29 13:56 编辑 ]
 楼主| 发表于 2013-8-30 14:07:01 | 显示全部楼层

回复 6# fty0083 的帖子

这样修改后分段的问题解决了,谢谢!C_CENTROID(x,c,t)算的结果也没问题,是我在XYplot时没有取消NodeValues选项。以后用fluent各种功能前要认真看看帮助,惨痛的教训啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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