找回密码
 注册
查看: 3118|回复: 8

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

[复制链接]
发表于 2011-2-22 22:34:32 | 显示全部楼层 |阅读模式

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

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

x
我先要自定义一个速度边界条件,UDF如下:
#include "udf.h"
#include "sg_pdf.h"

DEFINE_PROFILE(inlet1_velocity,t,i)
{
        real u;
        int j;
        face_t f;
        real x[2];
        real x_vel[18]={ 3.8020e-02,5.5568e-01,1.0187,1.5633,2.1072,2.5420,3.0039,
                        3.4929,3.9544,4.4703,4.8769,5.0390,5.4447,5.6855,5.7353,5.8111,5.9949,6};
                real vel[18]={1.3264,1.3205,1.3116,1.2966,1.2667,1.2307,1.1948,1.1528,1.1048,1.0538,
                           9.6083e-01,9.3281e-01,8.2077e-01,6.8065e-01,5.7049e-01,4.4028e01,2.0606e-01,0};

        for(j=0;j<18;j++)
        { x_vel[j]=x_vel[j]*1e-3;
          vel[j]=vel[j]*50;
        }  
        begin_f_loop(f,t){
                F_CENTROID(x,f,t);
                if(x[0]<=x_vel[0])
                        u=vel[0];
                else if(x[0]>=x_vel[17])
                        u=vel[17];
                else
                        {
                        for(j=0;j<18;j++)
                                if(x[0]>=x_vel[j]&&x[0]<=x_vel[j+1]) break;
                                u=(vel[j+1]-vel[j])/(x_vel[j+1]-x_vel[j])*(x[0]-x_vel[j])+vel[j];
                        }
                F_PROFILE(f,t,i)=u;
        }end_f_loop(f,t)
}
导入fluent中采用的是interpreted UDF,导入没有问题,但是计算的时候我输出了一下边界上的速度分布,结果表明UDF没起作用,这是怎么回事,请高手赐教,不胜感激!
发表于 2011-2-22 23:06:10 | 显示全部楼层
for(j=0;j<18;j++)
             if(x[0]<=x_vel[j]&&x[0]>=x_vel[j+1]) break;
             u=(vel[j+1]-vel[j])/(x_vel[j+1]-x_vel[j])*(x[0]-x_vel[j])+vel[j];


for(j=0;j<18;j++)
             if(x[0]>=x_vel[j]&&x[0]<=x_vel[j+1])
                        u=(vel[j+1]-vel[j])/(x_vel[j+1]-x_vel[j])*(x[0]-x_vel[j])+vel[j];

[ 本帖最后由 invader 于 2011-2-22 23:08 编辑 ]
 楼主| 发表于 2011-2-23 11:03:36 | 显示全部楼层

回复 2# invader 的帖子

谢谢,问题我已经找到了,我的坐标写错了,x[0]全部改成x[1]就对了,不过很感谢你的回复!
发表于 2011-2-23 11:15:32 | 显示全部楼层
我修改的是你的udf的赋值问题,并不是坐标问题,
坐标问题不是大问题,
修改的程序是因为坐标判断上存在误差,到底是怎么给速度赋值的

本来是判断出来在那个坐标附近就赋值,而原程序是判断坐标之外的地方赋值,这肯定有问题,这种程序,也就是网格少点,网格多点的话,这18怎么办?网格数量变动一下就不成立了
 楼主| 发表于 2011-2-23 14:30:40 | 显示全部楼层

回复 4# invader 的帖子

我的程序缩进有问题
for(j=0;j<18;j++)
               if(x[0]>=x_vel[j]&&x[0]<=x_vel[j+1]) break;
u=(vel[j+1]-vel[j])/(x_vel[j+1]-x_vel[j])*(x[0]-x_vel[j])+vel[j];
其中,当找到赋值点附近的点后,就直接跳出for循环了,然后再插值赋值。你的意思我理解应该是这样:
for(j=0;j<18;j++)
{
               if(x[0]<=x_vel[j] || x[0]>=x_vel[j+1])  continue;
               u=(vel[j+1]-vel[j])/(x_vel[j+1]-x_vel[j])*(x[0]-x_vel[j])+vel[j];
}
不知道理解对不对
 楼主| 发表于 2011-2-23 14:31:55 | 显示全部楼层

回复 4# invader 的帖子

不管怎样能讨论一下还是很受益的
发表于 2011-2-23 15:31:54 | 显示全部楼层

回复 5# yangjinhu 的帖子

是我把break的作用范围理解错了,
呵呵
发表于 2011-2-23 15:34:01 | 显示全部楼层

回复 5# yangjinhu 的帖子

这个理解会有一半的无用cpu耗时
 楼主| 发表于 2011-2-23 16:09:32 | 显示全部楼层

回复 8# invader 的帖子

我现在属于UDF和UDS的初学者,以后还需要与版主多多讨论!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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