在UDF中定义源项通常利用宏DEFINE_SOURCE来实现。
可以应用的地方包括:
-
质量、动量以及能量
-
k与epsilon
-
组分质量分数
-
P1辐射模型
-
UDS标量输运方程
-
颗粒温度(欧拉、混合多相流模型)
使用方式:
DEFINE_SOUCE(name, c, t ,dS, eqn)
宏参数:
-
symbol name
:用户自定义UDF名称 -
cell_t c
:加载源项的网格索引,由Fluent传入 -
Thread *t
:网格线索指针,Fluent传入 -
real dS[]
:源项导数项数组 -
int eqn
:方程数量
返回值:real
源项的导数常用于线性化源项,增强求解稳定性。源项通常可表达为:
式中,Φ为因变量,A为源项的显式部分,BΦ为隐式部分。为何要如此处理,可参阅任何一本计算流体力学教材中的源项线性化部分,线性化处理得不好,轻则不收敛引起误差,重则导致错误。
指定合适的B值能够增加求解矩阵的对角项,有利于提高求解的稳定性及收敛速度。Fluent自动判断用户输入的B值是否能够增强计算稳定性,如果能够提高稳定性,则fluent会定义:
用户必须在UDF中计算源项并将其返回至求解器,不过可以选择设置隐式项dS[eqn],也可以强制使隐式项为0。
用一个简单的案例描述DEFINE_SOURCE的处理方式。
如要定义一个动量源项:
假设:
其中
因此:
源项返回值为:
因此可写成UDF为:
#include "udf.h"
#define C2 100.0
DEFINE_SOURCE(xmom_source,c,t,dS,eqn)
{
real x[ND_ND];
real con, source;
C_CENTROID(x,c,t);
con = C2*0.5*C_R(c,t)*x[1];
source = -con*fabs(C_U(c, t))*C_U(c,t);
dS[eqn] = -2.*con*fabs(C_U(c,t));
return source;
}
本篇文章来源于微信公众号: CFD之道
评论前必须登录!
注册