24小时热门版块排行榜    

查看: 2998  |  回复: 3

ngesh

新虫 (初入文坛)

[求助] Fluent,UDF中的UDMI使用问题求助!已有1人参与

请问各位,我在fluent得UDF编程中,用UDMI的过程中遇到了如下问题!发现UDMI中的值在DEFINE_PROFILE中调用错误,我用patch初始化了所有UDMI都为303.15,可是最后输出壁面平均温度却总是零点几K,应该是300K左右才对!
我对UDMI的使用不熟悉,不知道能不能这样用。
还有我用DEFINE_EXECUTE_AT_END的原因是,我想让壁面温度在每个time step才更新一次,而不是每个迭代步更新!
按照我下面写的程序,应该是UDMI的数每个时间步更新一次,然后赋值给壁面的free stream tem,可是实际运行总是走不通,求大家懂这方面的指点一下,搞了好几天这个程序,一直搞不定,脑袋都快蒙了。。

#include "udf.h"
#include "mem.h"
DEFINE_EXECUTE_AT_END(updatetimestepend)
{
Domain *d;
Thread *t,*t_walltem_4,*t_walltem_3,
face_t f;
cell_t c;
real NV_VEC(A4),NV_VEC(A3);
d=Get_Domain(1);
real sum_A4=0.0,sum_A3=0.0;
real sum_T4=0.0,sum_T3=0.0;
real ave_T4,ave_T3;
t_walltem_4=Lookup_Thread(d,66);/*获取ID=66壁面指针*/
t_walltem_3=Lookup_Thread(d,67);/*获取ID=67壁面指针*/
begin_f_loop(f,t_walltem_4)/*求壁面66平均温度*/
{
F_AREA(A4,f,t_walltem_4);
sum_A4+=NV_MAG(A4);
sum_T4+=NV_MAG(A4)*F_T(f,t_walltem_4);
}
end_f_loop(f,t_walltem_4)
ave_T4=sum_T4/sum_A4;
begin_f_loop(f,t_walltem_3)/*求壁面67平均温度*/
{
F_AREA(A3,f,t_walltem_3);
sum_A3+=NV_MAG(A3);
sum_T3+=NV_MAG(A3)*F_T(f,t_walltem_3);
}
end_f_loop(f,t_walltem_3)
ave_T3=sum_T3/sum_A3;
thread_loop_c(t,d)/*将需要的值存在UDM中,在下面的PROFILE调用*/
{
begin_c_loop(c,t)
  {
  C_UDMI(c,t,5)=C_UDMI(c,t,4)-0.2*(C_UDMI(c,t,4)-ave_T4);
  C_UDMI(c,t,4)=C_UDMI(c,t,3)-0.2*(C_UDMI(c,t,3)-ave_T3);
  C_UDMI(c,t,3)=303.15;
  }
end_c_loop(c,t)
}
}

DEFINE_PROFILE(tem_5,t,i)/*66壁面的Free stream temperature*/
{
face_t f;
cell_t c;
real tem5;
tem5=C_UDMI(c,t,5);
begin_f_loop(f,t)
{
F_PROFILE(f,t,i)=tem5;
}
end_f_loop(f,t)
}
DEFINE_PROFILE(tem_4,t,i)/*65壁面的Free stream temperature*/
{
face_t f;
cell_t c;
real tem4;
tem4=C_UDMI(c,t,4);
begin_f_loop(f,t)
{
F_PROFILE(f,t,i)=tem4;
}
end_f_loop(f,t)
}
DEFINE_PROFILE(tem_3,t,i)/*64壁面的Free stream temperature*/
{
face_t f;
cell_t c;
real tem3;
tem3=C_UDMI(c,t,3);
begin_f_loop(f,t)
{
F_PROFILE(f,t,i)=tem3;
}
end_f_loop(f,t)
}
回复此楼
心中所想行动所向
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

liukan12

银虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
UDMI是比较简单和方便的 你如果要每个时间步更新 不就直接用ADJUST 然后设置一个N_TIME的整除数就行了?
不要用你这个 你这个是退出的时候执行
ANSYSFluent流体仿真研究人员。
2楼2018-12-18 00:12:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ngesh

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by liukan12 at 2018-12-18 00:12:25
UDMI是比较简单和方便的 你如果要每个时间步更新 不就直接用ADJUST 然后设置一个N_TIME的整除数就行了?
不要用你这个 你这个是退出的时候执行

请问具体怎么在adjust实现这个功能,目前我用这个DEFINE_EXECUTE_AT_END好像也可以实现我想要的效果,不过听你这么一说我用的这个是在时间步退出的时候执行?用adjust能在时间步的最后一次迭代执行吗,我所了解的adjust是在每个迭代步执行,然后也可以控制只在第一个迭代步执行,具体怎么实现您说的我不太理解啊
心中所想行动所向
3楼2018-12-18 18:55:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

liukan12

银虫 (小有名气)

【答案】应助回帖

N_TIME可以获取当前的时间步 如果你要时间步更新执行 你直接用一个判断 只要N_TIME不同不就行了?
然后你这个宏基本不是做这种用途的
ANSYSFluent流体仿真研究人员。
4楼2018-12-18 20:35:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 ngesh 的主题更新
信息提示
请填处理意见