UDS传输方程定义宏
翻译自ANSYS_Fluent_UDF_Manual。
1. 介绍
对于在ANSYS Fluent模型中指定的每个标量方程,可以为标量传输方程中的扩散系数、通量和非稳态项提供唯一的UDF。对于多相,您还可以在流体区和固体区中按相指定UDF。此外,可以为给定标量方程定义的每个源项以及墙、流入和流出边界上的边界条件指定UDF.
1.1 扩散系数自定义函数
对于在ANSYS FLUENT模型中使用用户定义的标量对话框指定的每个标量方程,可以为流体和固体材料的各向同性和各向异性扩散率提供唯一的用户定义函数(UDF)。
各向同性扩散率UDF使用DEFINE_DEMUSITY宏定义,各向异性系数UDF使用DEFINE_ANCONTIONAL_DEMUSITRITY定义。在用户定义标量(UDS)传输方程式宏中提供了编码UDS函数时可以使用的其他预定义宏。
1.2 通量自定义项
对于在ANSYS Fluent模型中使用用户定义的标量对话框指定的每个标量方程,可以为平流通量项提供唯一的用户定义函数(或UDF)。UDS Flux UDF是使用DEFINE_UDS_FLUX宏(DEFINE_UDS_FLUX定义的。
1.3 非稳态自定义函数
对于在ANSYS FLUENT模型中指定的每个标量方程式,都可以使用“用户定义的标量”(User Defined Scalars)对话框为非稳定函数提供唯一的UDF。非稳态UDF是使用DEFINE_UDS_UNSTATED宏定义。
1.4 源项自定义项
对于在ANSYS Fluent模型中使用用户定义的标量对话框指定的每个标量方程式,可以为每个源提供唯一的UDF。标量源UDF使用DEFINE_SOURCE宏定义,并且必须计算源项及其派生项(DEFINE_SOURCE(p.147))。
1.5 固定值边界条件自定义项
对于在ANSYS Fluent模型中使用用户定义的标量对话框指定的每个标量方程式,可以为流体边界提供固定值配置文件UDF。固定值UDF是使用DEFINE_PROFILE宏定义的。
1.6 墙、流入和流出边界条件UDF
对于已在ANSYS FLUENT模型中使用“用户定义的标量”(User Defined Scalars)对话框指定的每个标量方程式,可以为所有壁、流入和流出边界提供指定值或通量UDF。墙、流入和流出边界UDF是使用DEFINE_PROFILE宏定义的。
2. DEFINE_ANISOTROPIC_DIFFUSIVITY
2.1介绍
可使用DEFINE_ANORANSTIONAL_DEMUSITY为用户定义标量(UDS)传输方程指定各向异性扩散系数。有关ANSYS Fluent中各向异性漫反射材质特性的详细信息,请参见手册的《用户手册》中的各向异性扩散。
2.2 用法
DEFINE_ANISOTROPIC_DIFFUSIVITY (name, c, t, i, dmatrix)
参数类型
symbol name udf名称
cell_t c 网格单元索引
Thread *t 指向要应用各向异性扩散系数函数的单元格线程的指 针
int I 标识用户定义标量的索引
real dmatrix[ND_ND][ND_ND] 由用户填写的各向异性扩散系数矩阵。
无函数返回
定义各向异性扩散率有五个参数:name、c、t、i和dmatrix。您将提供名称,即UDF的名称。C、t、i和dmatrix是由ANSYS Fluent求解器传递给您的UDF的变量。您的函数将计算单个单元格的扩散系数张量,并用它填充dmatrix。请注意,各向异性扩散率自定义函数由ANSYS Fluent从单元线程的循环中调用。因此,您的UDF将不需要循环遍历线程中的单元格,因为ANSYS Fluent是在函数调用之外执行此操作的。
2.3例子(详见UDF手册2.7.2.3)
以下名为cyl_oreo_diff的UDF计算圆柱壳的各向异性扩散系数矩阵,该圆柱壳在径向、切向和轴向具有不同的扩散系数。此函数可作为编译的UDF执行。
3. DEFINE_UDS_FLUX
3.1介绍
可以使用DEFINE_UDS_FLUX定制如何在用户定义的标量(UDS)传输方程式中计算平流通量项。
3.2 用法
DEFINE_UDS_FLUX (name,f,t,i)
参数类型
symbol name 名称
face_t f 面索引
Thread *t 指向要应用用户定义的标量通量的面线程的指针
int I 标识要为其设置通量项的用户定义标量的索引
数据返回
DEFINE_UDS_FLUX有四个参数:name、f、t和i。您可以提供name,即UDF的名称。F、t和i是由ANSYS Fluent求解器传递给您的UDF的变量。您的UDF需要将通过给定面的质量流率的实际值返回给求解器。
微分输运方程中的平流项具有以下最一般的形式:

其中是Φ用户定义的标量守恒量,是向量场。在默认平流项中,默认情况下是标量密度和速度矢量的乘积:

若要使用DEFINE_UDS_FLUX定义公式3.1中的平流项,UDF必须将标量值返回到ANSYS Fluent,其中与公式3.1中定义的值相同,是面的面法向向量。
注意:由您的UDF提供的平流通量场应该是DISGENFREE(即,它满足连续性方程),在离散术语中,这意味着在每个单元的所有面上的通量总和应为零。如果平流场不是无辐散的,那么Φ就不是“守恒的”,并且会导致的Φ单元值超调/欠调。
例如,您需要使用ANSYS Fluent提供的速度矢量和标量密度的预定义宏(参见Chapter 3: Additional Macros for Writing UDFs)或使用您自己的规定在UDF中进行计算。第一种情况如示例C源代码所示,如下所示。
注意:如果要求解多个标量,则可以在UDF中使用条件IF语句为每个i定义不同的通量函数。i=0与标量0(要求解的第一个标量方程)相关联。另请注意,必须有以国际标准为单位的质量流量单位(即千克/秒)。
/*********************************************************************
sample C source code that computes dot product of psi and A
Note that this is not a complete C function
**********************************************************************/
real NV_VEC(psi), NV_VEC(A); /* declaring vectors psi and A */
/* defining psi in terms of velocity field */
NV_D(psi, =, F_U(f,t), F_V(f,t), F_W(f,t));
NV_S(psi, *=, F_R(f,t)) /* multiplying density to get psi vector */
F_AREA(A,f,t) /* face normal vector returned from F_AREA */
return NV_DOT(psi,A); /* dot product of the two returned */
此外,由于ANSYS Fluent中的大多数量在内存中没有分配给内部面,而只分配给边界面(例如,墙区),因此您的UDF还需要从相邻单元格的单元格值计算内部面值。这是使用算术平均法最容易完成的。矢量算术可以使用NV_和ND_宏用C语言编写(Chapter 3: Additional Macros for Writing UDFs)。
请注意,如果必须在的定义中没有流体密度的情况下在UDF中实现缺省平流项(请参见上文),则只需在DEFINE_UDS_FLUX UDF中放入以下行即可:
return F_FLUX(f,t) / rho;
其中可以通过平均相邻像元的密度值来确定
C_R(F_C0(f,t),THREAD_T0(t)) 和 C_R(F_C1(f,t),THREAD_T1(t))
3.3 例子(参见UDF文档2.7.3.3)
以下名为MY_UDS_FLUX的UDF返回通过给定面的质量流速。通量通常可通过ANSYS Fluent提供的宏F_Flux(f,t)获得。如果流动方向与面区域法线方向相同(由F_Area确定),则由ANSYS Fluent求解器计算的通量符号为正,如果流动方向和面区域矢量(F_Area)相同,则通量符号为负。按照惯例,对于边界面,面面积法线始终指向域外,对于内部面,它们指向从单元格c0到单元格c1的方向。UDF必须作为编译的UDF执行。
4. DEFINE_UDS_UNSTEADY
4.1 介绍
使用DEFINE_UDS_UNSTATABLE定制用户定义标量(UDS)传输方程式中的非稳态项。
4.2 用法
DEFINE_UDS_UNSTEADY (name,c,t,i,apu,su)
参数类型
symbol name 名称
cell_t c 网格单元索引
Thread *t 指向要应用用户定义标量传输方程的不稳定项的单元线程的指针
int i 标识要为其设置不稳定项的用户定义标量的索引。
real *apu 指向中心系数的指针。
real *su 指向源项的指针。
无数据返回
DEFINE_UDS_UNSTRATE有六个参数:name、c、t、i、apu和su.您提供name,即UDF的名称。C、t和i是由ANSYS Fluent求解器传递给UDF的变量。您的UDF需要将真实指针apu和su引用的非稳定态项的值分别设置为中心系数和源项。
ANSYS Fluent求解器预计瞬态项将被分解成源项su和中心系数项Ap,这些项包括在方程集中的方式与处理源项的显式和隐式分量的方式相似。因此,非定常项被移到右侧,并按如下方式离散化:

上式4.1展示了su和apu是如何定义的。请注意,如果要求解多个标量,则可在UDF中使用条件IF语句为每个i定义不同的不稳定项。i=0与标量-0(要求解的第一个标量方程)相关联。
4.3例子(参见UDF文档2.7.4.3)
以下名为MY_UDS_UNSTATABLE的UDF使用DEFINE_UDS_UNSTEADY修改用户定义的标量时间导数。源代码可在ANSYS Fluent中解释或编译。
/***********************************************************************
UDF for specifying user-defined scalar time derivatives
************************************************************************/
#include "udf.h"
DEFINE_UDS_UNSTEADY(my_uds_unsteady,c,t,i,apu,su)
{
real physical_dt, vol, rho, phi_old;
physical_dt = RP_Get_Real("physical-time-step");
vol = C_VOLUME(c,t);
rho = C_R_M1(c,t);
*apu = -rho*vol / physical_dt;/*implicit part*/
phi_old = C_STORAGE_R(c,t,SV_UDSI_M1(i));
*su = rho*vol*phi_old/physical_dt;/*explicit part*/
}