24小时热门版块排行榜    

查看: 3390  |  回复: 11

leixiaobo713

银虫 (正式写手)

[求助] fluent中UDF编译的问题!

本人想编的程序是这样的:
材料是有初始温度的,而且初始温度为X(X轴坐标)的函数;模拟开始后,在很短时间内材料的温度将发生变化,变化的温度为初始温度的函数,在一定时间后(上面提到的很短时间),材料的温度仅随流体的流动而自然发生变化,没有再生热源。我变得程序是这样的,虽然能编译,但是模拟一开始就出现错误,请高手指点,本人是小白,谢谢!

#include "udf.h"
DEFINE_PROFILE(unsteady_temperature,thread,position)
{
real t, temperature;
face_t f;
real x;
begin_f_loop(f,thread)
{
t=RP_Get_Real("flow-time";
if(t<=0.000000001)
{temperature=325.0-0.115*x;
F_PROFILE(f,thread,position) =temperature+(297.68625-7.37218/(1+exp((temperature-299.65187)/7.97379)));
}
else
F_PROFILE(f,thread,position) =temperature;
}
end_f_loop(f,thread);
}
模拟出现的错误提示:
Updating solution at time level N... done.
  iter continuity x-velocity y-velocity     energy     time/iter
chip-exec: unsteady_temperature: wrong return type: float udf function expectedchip-exec: unsteady_temperature: argument 1: incorrect type (36): int expectedchip-exec: unsteady_temperature: argument 2: incorrect type (5): pointer 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: ()
回复此楼

» 猜你喜欢

» 本主题相关商家推荐: (我也要在这里推广)

» 本主题相关价值贴推荐,对您同样有帮助:

天道酬勤!
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fangdian

木虫 (正式写手)

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
xiegangmai: 金币+2, 谢谢参与! 2013-09-08 22:06:42
是不是温度没有赋初值?如果t<=0.000000001条件达不到temperature等于多少呢??还有,即使满足t<=0.000000001,那么x值为多少?x不知道的话,温度也确定不了了啊

» 本帖已获得的红花(最新10朵)

2楼2013-09-04 08:41:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

leixiaobo713

银虫 (正式写手)

送红花一朵
引用回帖:
2楼: Originally posted by fangdian at 2013-09-04 08:41:46
是不是温度没有赋初值?如果t<=0.000000001条件达不到temperature等于多少呢??还有,即使满足t<=0.000000001,那么x值为多少?x不知道的话,温度也确定不了了啊

对,你说的很对,这个赋初值以及对X的定义我的确不知道怎么办,希望你能给点指点,谢谢!
天道酬勤!
3楼2013-09-04 09:11:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

leixiaobo713

银虫 (正式写手)

#include "udf.h"
DEFINE_PROFILE(unsteady_temperature,thread,position)
{
real t, temperature=298.0;
face_t f;
real x[ND_ND];
F_CENTROID(x,f,thread);
begin_f_loop(f,thread)
  {
    t=RP_Get_Real("flow-time";
      if(t>0&&t<=0.1)
         F_PROFILE(f,thread,position)=temperature;
      else if(t>=0.1&&t<0.4)
         {
           temperature=298.0+5*x[1];
           F_PROFILE(f,thread,position) =temperature+(297.68625-7.37218/(1+exp((temperature-299.65187)/7.97379)));
         }
      else
         {
           temperature=F_PROFILE(f,thread,position);
           F_PROFILE(f,thread,position) =temperature;
         }
  }
end_f_loop(f,thread);
}
我改成这样,还是上面的问题啊,请指教!

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: ()
天道酬勤!
4楼2013-09-04 11:13:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

转石千仞

金虫 (正式写手)

击破长空

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
xiegangmai: 金币+2, 鼓励讨论交流! 2013-09-08 22:06:50
将F_CENTROID(x,f,thread);放到begin_f_loop(f,thread)里面。
另外,你的这两句:
    temperature=F_PROFILE(f,thread,position);
           F_PROFILE(f,thread,position) =temperature;
其中第一句,是没有用的。应该去掉。
故善战人之势,如转圆石于千仞之山者,势也
5楼2013-09-04 12:40:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

leixiaobo713

银虫 (正式写手)

引用回帖:
5楼: Originally posted by 转石千仞 at 2013-09-04 12:40:09
将F_CENTROID(x,f,thread);放到begin_f_loop(f,thread)里面。
另外,你的这两句:
    temperature=F_PROFILE(f,thread,position);
           F_PROFILE(f,thread,position) =temperature;
其中第一句,是没有 ...

谢谢你的指点,不过按照你说的做了,课结果还是那样啊,出现上面的错误提示。
天道酬勤!
6楼2013-09-04 17:59:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

转石千仞

金虫 (正式写手)

击破长空

【答案】应助回帖

★ ★
xiegangmai: 金币+2, 鼓励讨论交流! 2013-09-08 22:06:58
引用回帖:
6楼: Originally posted by leixiaobo713 at 2013-09-04 17:59:38
谢谢你的指点,不过按照你说的做了,课结果还是那样啊,出现上面的错误提示。...

#include "udf.h"
DEFINE_PROFILE(unsteady_temperature,thread,position)
{
real t, temperature=298.0;
face_t f;
real x[ND_ND];

begin_f_loop(f,thread)
  {
  F_CENTROID(x,f,thread);
    t=RP_Get_Real("flow-time";
      if((t>0)&&(t<=0.1))
         F_PROFILE(f,thread,position)=temperature;
      else if((t>=0.1)&&(t<0.4))
         {
           temperature=298.0+5.*x[1];
           F_PROFILE(f,thread,position) =temperature+(297.68625-7.37218/(1.+exp((temperature-299.65187)/7.97379)));
         }
      else
         {
           F_PROFILE(f,thread,position) =temperature;
         }
  }
end_f_loop(f,thread);
}
我修改了一下你的程序,然后编译了运行。是没有问题的。
你自己认真与修改后的核对一下。
这个程序,一点儿也不难,你用点心,完全可以搞定的。
故善战人之势,如转圆石于千仞之山者,势也
7楼2013-09-04 22:24:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

leixiaobo713

银虫 (正式写手)

恩恩,我已经弄好啦,是我udf加载时弄错了,多谢指点,想问一个另一个问题,就是对于
else
         {
           F_PROFILE(f,thread,position) =temperature;
         }
这部分的表示方法有问题没,我是想着,在0.4s以后,就不提供热源了,材料的温度随流体的流过自然发生变化,不知道怎么写合适!
天道酬勤!
8楼2013-09-05 09:49:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

死天

专家顾问 (著名写手)

【答案】应助回帖

先face_t f;然后real

不提供热源就赋值为0
9楼2013-09-09 16:19:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

leixiaobo713

银虫 (正式写手)

引用回帖:
9楼: Originally posted by 死天 at 2013-09-09 16:19:41
先face_t f;然后real

不提供热源就赋值为0

对热源赋值为0,就是在
else
         {
           F_PROFILE(f,thread,position) =temperature;
         }
中令 F_PROFILE(f,thread,position) =0?
我刚接触udf不是很理解,但是 F_PROFILE(f,thread,position) =0,我试了下,是不正确的,希望您指点下!
天道酬勤!
10楼2013-09-10 09:40:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 leixiaobo713 的主题更新
信息提示
请填处理意见