24小时热门版块排行榜    

CyRhmU.jpeg
查看: 3260  |  回复: 9
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

ykxyer

铁杆木虫 (文坛精英)

[求助] fluent UDF如何实现瞬态,壁面heat flux为 上一时刻温度与此时温度差的函数的?

壁面热流边界满足公式heat flux=C_all*Density_all*t_all*(T1-T0))/delta_t;其中
C_all为总的热容;
Density_all为总的密度;
t_all为总的厚度;
T1为前一时刻的壁面温度;
T0为此时的壁面温度;
delta_t为两温度时间的差值;
壁面边界处,材料会随着温度的升高而吸收一部分热量,而这部分传热以heat flux形式表示,fluent中heat flux的单位为W/m2,
因此就简化了公式Q=C*m*(T1-T2),m=density*Volume近似等于:密度*厚度*面积,这部分热量不是随着时间变化的,而是随着温度变化的,
fluent中的单位为W/m2,在计算热量 时会乘以时间,因此在UDF中除了时间。

///////////////////////////////////////////////////////////////////////////////
下面是我自己写得UDF,但是初始化的时候有如下提示的错误:
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: #f
///////////////////////////////////////////////////////////////////////////////

#include "udf.h"
/*5-the wall heat flux*/
/*-----------------------------------------------------------------------*/
DEFINE_PROFILE(wall_heat_flux, thread, position)
{
/*--------------壁面材料储热部分--------------------*/
real Density_Al=2700;      /*铝的密度*/
real Density_CRFP=1570;    /*CRFP的密度*/
real C_Al=902;             /*铝的热容*/
real C_CRFP=840;           /*CRFP的热容*/
real t_Al=0.0048;          /*铝的厚度*/
real t_CRFP=0.0025;        /*CRFP的厚度*/
real w1,w2;                /*w1为铝的质量分数,w2为CRFP的质量分数*/
real Density_all,C_all;    /*壁面材料总的密度,热容*/
real heat_flux;          /*壁面材料储热部分近似热流量*/
real current_time step;    /*时间步长*/

real t;
cell_t c;
Thread *t;
face_t f;
begin_f_loop(f,thread)
{
t_wall=F_T(f,thread);
heat_flux_1=(1/(1/h_hydrogen+thickness_all/k_wall+1/h_air))*(t_air-t_wall);  /*对流交换单位面积氢气热流密度*/
w1=Density_Al*t_Al/(Density_Al*t_Al+Density_CRFP*t_CRFP);
w2=Density_CRFP*t_CRFP/(Density_Al*t_Al+Density_CRFP*t_CRFP);
Density_all=1/(w1/Density_Al+w2/Density_CRFP);
C_all=C_Al*w1+C_CRFP*w2;

current_timestep = RP_Get_Real("physical-time-step";
C_UDMI(c,t,0) = C_T_M1(c,t); /*获得前一时刻温度值*/
C_UDMI(c,t,1)= C_T_M2(c,t);/*获得前前时刻温度值*/

heat_flux=C_all*Density_all*(t_Al+t_CRFP)*(C_UDMI(c,t,0) - C_UDMI(c,t,1))/current_timestep;

F_PROFILE(f,thread,position)=heat_flux;

}
end_f_loop(f,thread)
}
回复此楼

» 猜你喜欢

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

You will when you believe.
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ykxyer

铁杆木虫 (文坛精英)

引用回帖:
6楼: Originally posted by MrKin at 2017-07-04 11:20:59
c-t-m中的变量是c和t,与你的面循环不对应,你用f-c0来代替c

我找到的原因了,是因为初始化时,前一时刻是没有值的,所以应该单独初始化。
You will when you believe.
9楼2017-07-04 16:54:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 10 个回答

MrKin

新虫 (正式写手)

udm不能相加减,既然下面已经用到了c-t-m,又何必把它存在udm中

发自小木虫IOS客户端
2楼2017-07-04 10:06:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ykxyer

铁杆木虫 (文坛精英)

引用回帖:
2楼: Originally posted by MrKin at 2017-07-04 10:06:22
udm不能相加减,既然下面已经用到了c-t-m,又何必把它存在udm中

直接就是:heat_flux=C_all*Density_all*(t_Al+t_CRFP)*(C_T_M1(c,t) - C_T_M2(c,t))/current_timestep 吗? 删掉这两行:C_UDMI(c,t,0) = C_T_M1(c,t); /*获得前一时刻温度值*/
C_UDMI(c,t,1)= C_T_M2(c,t);/*获得前前时刻温度值*/???
You will when you believe.
3楼2017-07-04 10:16:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

MrKin

新虫 (正式写手)

看上去没问题,你需要加载进去看看有没有其他报错

发自小木虫IOS客户端
4楼2017-07-04 10:37:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见