大龙猫 发表于 2015-12-6 19:13

UDF出错,请大家指点迷津

#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
求大神指点迷津

Fluidmach 发表于 2015-12-7 06:58


#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, position) =0;
    }
end_f_loop(f, thread)
}

大龙猫 发表于 2015-12-8 14:32

谢谢,这下对了

大龙猫 发表于 2015-12-8 14:34

如果选择双精度求解器,用把real改成double吗

大龙猫 发表于 2015-12-8 14:35

Fluidmach 发表于 2015-12-7 06:58



如果选择双精度求解器,用把real改成double吗

大龙猫 发表于 2015-12-8 14:35

Fluidmach 发表于 2015-12-7 06:58



如果选择双精度求解器,用把real改成double吗

大龙猫 发表于 2015-12-8 14:36

Fluidmach 发表于 2015-12-7 06:58


采用双精度时用把real改成double吗

大龙猫 发表于 2015-12-9 18:33

Fluidmach 发表于 2015-12-7 06:58


您好,我按改过的程序把它加到进口边界算非定常流动,然后对进口x=0处设置监测点看它的压力时间历程,理论上讲进口应该是半个周期的正弦波,但是算了好几次都只是一条水平线,请问是我的程序有问题吗?

Fluidmach 发表于 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 数据类型是很好的编程习惯。

Fluidmach 发表于 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 为对称轴。

入口水流速度为 u=0.5-0.5x(y/0.02)2
2.fluent
编写udf
#include"udf.h"
DEFINE_PROFILE(velocity_inlet,thread,position)
{
real x;
real y;
face_t f;
begin_f_loop(f,thread)
{
   F_CENTROID(x,f,thread);
   y=x;
   F_PROFILE(f,thread,position)=0.5-y*y/(0.02*0.02)*0.5;
}
end_f_loop(f,thread)
}
其中宏的有两自变量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

boundary condition
zone 下inlet中,velocity magnitude(m/s)后面的小三角即可找到udf velocity_inlet

initialize, compute from 为inlet。
solve即可
后处理
plot---xy plot

得到出口处的速度分布。同时点击write to file 即可得到数据文件,用记事本就可以打开。

大龙猫 发表于 2015-12-18 16:50

Fluidmach 发表于 2015-12-10 13:15
转发一个例子,你参照一下,看看操作是否有失误!

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

非常感谢,这几天没有上论坛,感谢的有点晚了{:{51}:}
页: [1]
查看完整版本: UDF出错,请大家指点迷津