找回密码
 注册
查看: 5794|回复: 7

求助!wrong return type: void udf function expected

[复制链接]
发表于 2011-1-19 15:42:04 | 显示全部楼层 |阅读模式

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

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

x
大家好,我是做街道污染的,现在在udf中加入污染源,编写的udf如下
#include "udf.h"

DEFINE_SOURCE(uds_source,c,t,dS,eqn)
{
   face_t  f;
   Thread  *cell_thread;
   Domain  *d;
   real source,x,y;
   real xc[ND_ND];
     begin_f_loop_all(f,cell_thread)
   {   
    F_CENTROID(xc,f,cell_thread);
     x=xc[0];
     y=xc[1];
       {
         if((x>-0.3&&x<0.3)&&(y>0&&y<0.2))
        {
           source=0.3;
           dS[eqn]=0;
        }
       else
          source=0;
      return source;
     }
   }
    end_f_loop_all(f,cell_thread)
}
可以编译通过,即在User—Defined————Functions——interpreted可以通过,但在最后的计算中出现chip-exec: uds_source: wrong return type: void udf function expected
Error:
FLUENT received fatal signal (ACCESS_VIOLATION)
1. Note exact events leading to error.
2. Save case/data under new name.
3. Exit program and restart to continue.
4. Report error to your distributor.
Error Object: ()
错误,希望高手能给予解答,万分谢谢!
发表于 2011-1-19 18:04:15 | 显示全部楼层
#include "udf.h"

DEFINE_SOURCE(uds_source,c,t,dS,eqn)
{
        face_t  f;
        /* Thread  *cell_thread; */
        Domain  *d;
        real source, x, y;
        real xc[ND_ND];
        begin_f_loop_all(f, t)
        {   
                F_CENTROID(xc, f, t);
                x = xc[0];
                y = xc[1];
                if((x > -0.3 && x < 0.3) && (y > 0 && y < 0.2))
                {
                        source = 0.3;
                        dS[eqn] = 0;
                }
                else
                        source = 0;
        }
        end_f_loop_all(f, t)
                return source;
}

看来还得练啊,费了好大劲才修好,
 楼主| 发表于 2011-1-20 08:40:31 | 显示全部楼层
谢谢invader鼎立相助,刚刚把程序保存修改了一下,在最后初始化后计算时一直卡在了iterating处,半个小时也没计算一步,这个错误,不知道是什么原因,希望能赐教!

[ 本帖最后由 sky52311 于 2011-1-20 09:18 编辑 ]
发表于 2011-1-20 09:35:06 | 显示全部楼层
#include "udf.h"

DEFINE_SOURCE(uds_source,c,t,dS,eqn)
{
        face_t  f;
        /* Thread  *cell_thread; */
        Domain  *d;
        real source, x, y;
        real xc[ND_ND];
                F_CENTROID(xc, f, t);
                x = xc[0];
                y = xc[1];
                if((x > -0.3 && x < 0.3) && (y > 0 && y < 0.2))
                {
                        source = 0.3;
                        dS[eqn] = 0;
                }
                else
                        source = 0;
               return source;
}

再修改下,才注意到,你为什么要加上循环呢?
如果有问题,最好将你的cas也说明下
发表于 2011-1-20 16:31:43 | 显示全部楼层
借用楼主的cas,得到了如下的污染物扩散过程:
  污染物为点源,扩散时间步长为0.5s才起作用,应该是主流区正压较高,因此,污染物不能扩散到街道上去
aaa.gif
发表于 2011-1-20 16:36:19 | 显示全部楼层
各扫门前雪呀,哪管他人味道来,哈哈,污染物还是可以扩散到他人门前的,虽然量很小,
   污染物流向表明主流区压力过高,不能将污染物带走,反而将跑出来的污染物逼入了两边死角,并在其中形成了自循环

[ 本帖最后由 invader 于 2011-1-20 08:38 编辑 ]
bbb.gif
ccc.gif
发表于 2012-9-4 12:58:04 | 显示全部楼层

回复 1# sky52311 的帖子

您好,我也做的污染物点源,想跟您学习交流下。qq472355007
发表于 2013-3-25 16:41:59 | 显示全部楼层
F_CENTROID(xc, f, t);-----应该改为:F_CENTROID(xc, c, t);

哎,害我花了几个小时啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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