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

解释型UDF出现错误:macro `ND_SUM' used with only 2 args

[复制链接]
发表于 2014-11-9 16:13:14 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 学习小能手_二流 于 2014-11-10 14:00 编辑

程序如下,模型是简单的两维模型,要实现的功能是找到某一点的当前温度和上一时刻的温度,
然后通过控制器的计算: temp=r-C_T(c,t);        temp_last=r-C_T_M1(c,t);       m+=kp*(temp-temp_last)+ki*temp,
将计算得到的值赋给边界入口作为初始值。

#include "udf.h"
#include "mem.h"
#include "metric.h"
int kount=0;
real m;
real r=350.;
real kp=0.01,ki=0.01;
real temp_last;
/* real temp;*/
DEFINE_ADJUST(demo_calc,domain)
{
kount++;
printf("kount=%d\n",kount);
}
DEFINE_ADJUST(best_point_temp,domain)
{
cell_t c;
Thread *t;
real xc[ND_ND];
real temp;
/* loop over all cell threads in the domain*/
thread_loop_c(t,domain)
{
/* loop over all cells*/
        if(kount<=50.)
        {
begin_c_loop(c,t)
  {
     C_CENTROID(xc,c,t);
   
         if(sqrt(ND_SUM(pow(xc[0]-.07,2.),pow(xc[1]-.07,2.)))<.001)    (这句提示错误,本来就是两维的啊,不明白错误)
      {
         m=1;
        temp=r-C_T(c,t);
        temp_last=r-C_T_M1(c,t);
       m+=kp*(temp-temp_last)+ki*temp;
       printf("temp_last=%d\n",temp_last);
       }
     else
      {
       return;
       }
    }
     end_c_loop(c,t)
        }
        else
        {       
       C_CENTROID(xc,c,t);
   
         if(sqrt(ND_SUM(pow(xc[0]-.07,2.),pow(xc[1]-.07,2.)))<.001)
      {
         m=2;
        temp=r-C_T(c,t);
        temp_last=r-C_T_M1(c,t);
       m+=kp*(temp-temp_last)+ki*temp;
       printf("temp_last=%d\n",temp_last);
       }
     else
      {
       return;
       }
    }
     end_c_loop(c,t)
        }

  }
}

DEFINE_PROFILE(x_velocity,thread,nv)
{
float x[2];
  float y;
  face_t f;
begin_f_loop(f,thread)
{
y=x[1];            /* x[0]=x; x[1]=y; x[2]=z */


        F_PROFILE(f,thread,nv)=m;
}
end_f_loop(f,thread)
}





经过解释型UDF,提示33 行:macro `ND_SUM' used with only 2 args,不明白哪里错在哪里。我找了很多ND_SUM都是这么用的。

QQ截图20141109161448.png
 楼主| 发表于 2014-11-9 16:18:04 | 显示全部楼层
希望这次有大神大牛回答我,我找不出错误啊
 楼主| 发表于 2014-11-9 16:29:23 | 显示全部楼层
每次都是望穿秋水的等大牛回复啊

点评

你要把你写的程序大体说明一下,不然程序这么长,都不知道你要做什么,谁也懒得看了。你如果写出来你要做什么,就很容易结合你的意图看明白程序,也就能容易帮你找问题。。  详情 回复 发表于 2014-11-9 22:09
发表于 2014-11-9 22:09:17 | 显示全部楼层
学习小能手_二流 发表于 2014-11-9 16:29
每次都是望穿秋水的等大牛回复啊

你要把你写的程序大体说明一下,不然程序这么长,都不知道你要做什么,谁也懒得看了。你如果写出来你要做什么,就很容易结合你的意图看明白程序,也就能容易帮你找问题。。
发表于 2014-11-10 12:56:31 | 显示全部楼层
我的理解: ND_SUM(u,v,w)是一种固定形式,如果是二维模型,自然就只读取数据u和v
改成
if(sqrt(ND_SUM(pow(xc[0]-.07,2.),pow(xc[1]-.07,2.),0.))<.001)
试一下
 楼主| 发表于 2014-11-10 13:51:35 | 显示全部楼层
hongfu2233 发表于 2014-11-9 22:09
你要把你写的程序大体说明一下,不然程序这么长,都不知道你要做什么,谁也懒得看了。你如果写出来你要做 ...

恩,积累教训
 楼主| 发表于 2014-11-10 13:56:36 | 显示全部楼层
classic1573 发表于 2014-11-10 12:56
我的理解: ND_SUM(u,v,w)是一种固定形式,如果是二维模型,自然就只读取数据u和v
改成
if(sqrt(ND_SUM(p ...

我试了一下,还是不行,还是报同样的错。
 楼主| 发表于 2014-11-10 14:28:36 | 显示全部楼层
本帖最后由 学习小能手_二流 于 2014-11-10 14:34 编辑
classic1573 发表于 2014-11-10 12:56
我的理解: ND_SUM(u,v,w)是一种固定形式,如果是二维模型,自然就只读取数据u和v
改成
if(sqrt(ND_SUM(p ...


刚才又试了一次,macro `ND_SUM' used with only 2 args 这个错误没有了,还是编写的时候不够仔细。。。。。
 楼主| 发表于 2014-11-10 14:58:35 | 显示全部楼层
修改后,程序不报错了,但是迭代出来的图形不对。。。这说明程序还是有错误。。。。。

点评

程序的错误就难改了,尤其是逻辑性错误,这个恐怕忙不好帮,需要自己慢慢完善  详情 回复 发表于 2014-11-10 17:24
发表于 2014-11-10 17:24:12 | 显示全部楼层
学习小能手_二流 发表于 2014-11-10 14:58
修改后,程序不报错了,但是迭代出来的图形不对。。。这说明程序还是有错误。。。。。

程序的错误就难改了,尤其是逻辑性错误,这个恐怕忙不好帮,需要自己慢慢完善
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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