声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2404|回复: 10

[UDF专题] UDF出错,请大家指点迷津

[复制链接]
发表于 2015-12-6 19:13 | 显示全部楼层 |阅读模式

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

您需要 登录 才可以下载或查看,没有账号?我要加入

x
#include "udf.h"

DEFINE_PROFILE(inlet_pressure, thread, position)
{
  face_t f;

  begin_f_loop(f, thread)
    {
      real t=RP_Get_Real("flow-time");
      if (0<t<0.00025)

      F_PROFILE(f, thread, position) = 20*sin(12566.0*t);
      else
        
      F_PROFILE(f, thread, index) =0;

    }
  end_f_loop(f, thread)
}
程序改成这个以后,解释时出错cpp -I"D:\ANSYS\ANSYSI~1\v150\fluent\fluent15.0.0/src" -I"D:\ANSYS\ANSYSI~1\v150\fluent\fluent15.0.0/cortex/src" -I"D:\ANSYS\ANSYSI~1\v150\fluent\fluent15.0.0/client/src" -I"D:\ANSYS\ANSYSI~1\v150\fluent\fluent15.0.0/multiport/src" -I. -DUDFCONFIG_H="<u
fconfig.h>" "E:\muffler\kaitihou\hypermesh\myudfliumeoling.c"
Error: E:\\muffler\\kaitihou\\hypermesh\\myudfliumeoling.c: line 20: index: undeclared variable
求大神指点迷津
回复
分享到:

使用道具 举报

发表于 2015-12-7 06:58 | 显示全部楼层

  1. #include "udf.h"

  2. DEFINE_PROFILE(inlet_pressure, thread, position)
  3. {
  4.   face_t f;

  5.   begin_f_loop(f, thread)
  6.     {
  7.       real t=RP_Get_Real("flow-time");
  8.       if (0<t<0.00025)
  9.       F_PROFILE(f, thread, position) = 20*sin(12566.0*t);
  10.       else
  11.         
  12.       F_PROFILE(f, thread, position) =0;
  13.     }
  14.   end_f_loop(f, thread)
  15. }
复制代码


 楼主| 发表于 2015-12-8 14:32 | 显示全部楼层
谢谢,这下对了
 楼主| 发表于 2015-12-8 14:34 | 显示全部楼层
如果选择双精度求解器,用把real改成double吗
 楼主| 发表于 2015-12-8 14:35 | 显示全部楼层


如果选择双精度求解器,用把real改成double吗
 楼主| 发表于 2015-12-8 14:35 | 显示全部楼层


如果选择双精度求解器,用把real改成double吗
 楼主| 发表于 2015-12-8 14:36 | 显示全部楼层

采用双精度时用把real改成double吗
 楼主| 发表于 2015-12-9 18:33 | 显示全部楼层

您好,我按改过的程序把它加到进口边界算非定常流动,然后对进口x=0处设置监测点看它的压力时间历程,理论上讲进口应该是半个周期的正弦波,但是算了好几次都只是一条水平线,请问是我的程序有问题吗?
发表于 2015-12-10 13:12 | 显示全部楼层
大龙猫 发表于 2015-12-8 14:34
如果选择双精度求解器,用把real改成double吗

FLUENT 的 UDF 解释程序支持下面的 C 数据类型: Int:整型 Long:长整型 Real:实数 Float:浮点型 Double:双精度 Char:字符型

注意:UDF 解释函数在单精度算法中定义 real 类型为 float 型,在双精度算法宏定义 real 为 double 型。

因为解释函数自动作如此分配, 所以使用在 UDF 中声明所有的 float 和 double 数据变量时使用 real 数据类型是很好的编程习惯。
发表于 2015-12-10 13:15 | 显示全部楼层
大龙猫 发表于 2015-12-9 18:33
您好,我按改过的程序把它加到进口边界算非定常流动,然后对进口x=0处设置监测点看它的压力时间历程,理 ...

转发一个例子,你参照一下,看看操作是否有失误!

内径为r,长度为L 的圆管,给出入口流速的分布,来模拟实际的工作过程。
1.gambit
简化为2d对称模型,inlet长度为0.02m,wall长度为0.4m,axis——symm 为对称轴。
001.jpg
入口水流速度为 u=0.5-0.5x(y/0.02)2
2.fluent
编写udf
  1. #include"udf.h"
  2. DEFINE_PROFILE(velocity_inlet,thread,position)
  3. {
  4. real x[ND_ND];
  5. real y;
  6. face_t f;
  7. begin_f_loop(f,thread)
  8. {
  9.    F_CENTROID(x,f,thread);
  10.    y=x[1];
  11.    F_PROFILE(f,thread,position)=0.5-y*y/(0.02*0.02)*0.5;
  12. }
  13. end_f_loop(f,thread)
  14. }
复制代码

其中宏的有两自变量thread 和 position,thread 是一个指向面的thread的指针,position是一个整数,它是每一个循环(loop)内为变量设置的数字标签。
begin_f_loop(f,thread) 是用来扫描整个区域内所有面。在每个循环中,通过fluent提供的函数F_CENTROID(x,f,thread);得到面f的质心,并且把质心的坐标值赋值给x。
注意:
基本求解器中space项变为axisymmetric,
udf的编译
define—user defined –function –interpreted
002.jpg
boundary condition
zone 下inlet中,velocity magnitude(m/s)后面的小三角即可找到udf velocity_inlet
003.jpg
initialize, compute from 为inlet。
solve即可
后处理
plot---xy plot
004.jpg
得到出口处的速度分布。同时点击write to file 即可得到数据文件,用记事本就可以打开。
005.jpg

点评

非常感谢,这几天没有上论坛,感谢的有点晚了  详情 回复 发表于 2015-12-18 16:50
 楼主| 发表于 2015-12-18 16:50 | 显示全部楼层
Fluidmach 发表于 2015-12-10 13:15
转发一个例子,你参照一下,看看操作是否有失误!

内径为r,长度为L 的圆管,给出入口流速的分布,来 ...

非常感谢,这几天没有上论坛,感谢的有点晚了
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-25 02:02 , Processed in 0.089937 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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