Ansys Fluent文档-UDF篇:模型特定的DEFINE宏(二)
①描述
可以使用DEFINE_CURVATURE_CORRECTION_CCURV来指定自定义函数,以定义用于曲率修正项中的系数Ccurv,从而在特定流动需要时影响曲率修正的强度。
Ccurv系数应为正数,在用户自定
义函数的情况下,提供的值会自动限制为max(Ccurv,0)。
②用法
DEFINE_CURVATURE_CORRECTION_CCURV (name,c,t)
name:UDF名称。
cell_t c:用于应用曲率校正系数Ccurv的单元格标识索引。
Thread *t:指向单元格线程的指针。
DEFINE_CURVATURE_CORRECTION_CCURV包含三个参数:name、c和t。需要提供UDF的名称name,而c和t是由Fluent求解器传递给UDF的变量。
③示例
在以下示例中,演示了分区方法:根据x坐标的不同,曲率修正系数Ccurv具有不同的取值。
# include"udf.h"DEFINE_CURVATURE_CORRECTION_CCURV(user_curvcor_ccurv, c, t){real curvature_correction_ccurv;real xc[ND_ND];C_CENTROID(xc,c,t);if (xc[0] > 2.0)curvature_correction_ccurv = 1.1;elsecurvature_correction_ccurv = 1.0;return curvature_correction_ccurv;}
(7)DEFINE_DIFFUSIVITY
①描述
可以使用DEFINE_DIFFUSIVITY来指定组分输运方程(例如质量扩散系数)或用户自定义标量(UDS)输运方程的扩散系数。
②用法
DEFINE_DIFFUSIVITY (name,c, t, i)
name:UDF名称。
cell_t c:单元格索引。
Thread *t:指向要应用扩散函数操作的单元格线程的指针。
int i:标识物种或用户定义标量的索引。
DEFINE_DIFFUSIVITY有四个参数:name、c、t和i。需要提供name,即UDF的名称。c、t和i是由Fluent求解器传递给UDF的变量。
请注意,扩散性UDF是由Fluent在单元线程循环内部调用的。因此,UDF无需在线程中遍历单元,因为Fluent已在函数调用外部完成了这一操作。
③示例
以下名为mean_age_diff的UDF函数,通过用户自定义标量计算空气平均滞留时间的扩散率。请注意,空气平均滞留时间的计算不需要执行能量、辐射或物种传输的计算。需要在模型的所有入口和出口设置uds-0 =0.0。该函数可作为解释型或编译型UDF执行。
# include"udf.h"DEFINE_DIFFUSIVITY(mean_age_diff, c, t, i){// 返回计算得到的扩散系数// 公式:ρ × 2.88e-05 + μ_eff / 0.7// 其中:// 1. C_R(c,t) 返回单元(c,t)的密度(kg/m³)// 2. 2.88e-05 是常数,可能是某种分子扩散系数或经验系数// 3. C_MU_EFF(c,t) 返回单元(c,t)的有效粘度(kg/(m·s))// 4. 除以0.7 是湍流施密特数(turbulent Schmidt number)的倒数// 施密特数 Sc_t = 0.7 是湍流输运中常用的经验值return C_R(c,t) * 2.88e-05 + C_MU_EFF(c,t) / 0.7;}
(8)DEFINE_DOM_DIFFUSE_REFLECTIVITY
①描述
可以使用DEFINE_DOM_DIFFUSE_REFLECTIVITY来修改Fluent基于折射率值在半透明漫反射壁面处计算的界面反射率。在执行过程中,Fluent会为每个半透明壁面以及每个波段(对于非灰离散坐标(DO)模型)调用DEFINE_DOM_DIFFUSE_REFLECTIVITY函数。因此,该函数可用于修改界面处的漫反射率和漫透射率值。
②用法
DEFINE_DOM_DIFFUSE_REFLECTIVITY(name,t,nb,n_a,n_b,diff_ref_a,diff_tran_a,diff_ref_b,diff_tran_b)
请注意,DEFINE宏的所有参数都必须放在源代码的同一行。将DEFINE语句拆分成多行会导致编译错误。
name:UDF名称。
Thread *t:指向要应用离散方向扩散函数的线程的指针。
int nb:波段编号(非灰色离散坐标(DO)模型所需)。
real n_a:介质a的折射率。
real n_b:介质b的折射率。
real *diff_ref_a:界面朝向介质a的漫反射率。
real *diff_tran_a:界面上朝向介质a的扩散透射率。
real *diff_ref_b:面向介质b的界面的漫反射率。
real *diff_tran_b:界面上朝向介质b的扩散透射率。
DEFINE_DOM_DIFFUSE_REFLECTIVITY包含九个参数:name、t、nb、n_a、n_b、diff_ref_a、diff_tran_a、diff_ref_b和diff_tran_b。需要提供UDF的名称name,而t、nb、n_a、n_b、diff_ref_a、diff_tran_a、diff_ref_b和diff_tran_b是由Fluent求解器传递给UDF的变量。
③示例
以下名为user_dom_diff_refl的UDF用于修改介质a与b分界面两侧的漫反射率和透射率值。该UDF会被所有半透明壁面调用,并输出a侧和b侧的漫反射率与透射率数值。
#include"udf.h"DEFINE_DOM_DIFFUSE_REFLECTIVITY(user_dom_diff_refl,t,nband,n_a,n_b,diff_ref_a,diff_tran_a,diff_ref_b,diff_tran_b){// 输出介质a侧的漫反射和漫透射系数当前值到控制台// %f: 浮点数格式// *diff_ref_a: 解引用指针,获取漫反射系数的值// *diff_tran_a: 解引用指针,获取漫透射系数的值printf("diff_ref_a = %f diff_tran_a = %f \n", *diff_ref_a, *diff_tran_a);// 输出介质b侧的漫反射和漫透射系数当前值到控制台printf("diff_ref_b = %f diff_tran_b = %f \n", *diff_ref_b, *diff_tran_b);}
(9)DEFINE_DOM_SOURCE
①描述
可以使用DEFINE_DOM_SOURCE来修改辐射传输方程中的发射项以及离散坐标(DO)模型中的散射项。
②用法
DEFINE_DOM_SOURCE (name, c, t, ni, nb, emission, in_scattering,abs_coeff, scat_coeff)
name:UDF名称。
cell_t c:单元格索引。
Thread *t:指向单元线程的指针。
int ni:立体角表示的方向。
int nb:波段编号(非灰色离散坐标(DO)模型所需)。
real *emission:辐射传输方程中的辐射项指针。
real *in_scattering:辐射传输方程中散射项的指针。
real *abs_coeff:指向吸收系数的指针。
real *scat_coeff:散射系数的指针。
DEFINE_DOM_SOURCE包含九个参数,需要定义UDF名称name,其他参数由Fluent求解器传递给UDF的变量。DEFINE_DOM_SOURCE由Fluent为每个单元调用。
③示例
在下面名为dom的UDF中,对辐射传输方程中的发射项进行了修改。该UDF会对所有单元格调用,并将发射项增加5%。
# include"udf.h"// 定义离散坐标法(DOM)辐射模型的源项函数// dom: 函数名(表示DOM辐射源项)// c: 单元索引(cell index)// t: 线程指针(thread pointer),指向当前单元所在的网格区域// ni: 离散方向索引(discrete direction index),表示当前求解的辐射方向// nb: 波段索引(band index),当使用多波段辐射模型时,表示当前波段编号// emission: 指向辐射发射项的指针(输入输出参数,可修改) - 单位:W/m³// in_scattering: 指向辐射入射散射项的指针(输入输出参数,可修改) - 单位:W/m³// abs_coeff: 指向吸收系数的指针(输入参数,不建议修改) - 单位:1/m// scat_coeff: 指向散射系数的指针(输入参数,不建议修改) - 单位:1/m// 函数无返回值(void)DEFINE_DOM_SOURCE(dom, c, t, ni, nb, emission, in_scattering, abs_coeff, scat_coeff){/* increased the emission by 5% */ // 注释:将辐射发射增加5%// 修改辐射发射项:将当前发射值乘以1.05(增加5%)// *emission: 解引用指针,获取当前的辐射发射值// *= 1.05: 将原值乘以1.05后赋值回去*emission *= 1.05;}
(10)DEFINE_DOM_SPECULAR_REFLECTIVITY
①描述
可以使用DEFINE_DOM_SPECULAR_REFLECTIVITY来修改半透明镜面反射壁的界面反射率。当反射率受标准边界条件无法满足的其他条件影响时,可能需要使用此功能。在Fluent执行过程中,系统会为半透明壁面的每个面、每个方向调用相同的UDF。
②用法
DEFINE_DOM_SPECULAR_REFLECTIVITY (name,f,t,nband,n_a,n_b,ray_direction, en, internal_reflection,specular_reflectivity,specular_transmissivity)
注意:DEFINE宏的所有参数都必须放在源代码的同一行。将DEFINE语句拆分成多行会导致编译错误。
name:UDF名称。
face_t f:面索引。
Thread *t:指向要应用镜面反射函数的面线程。
int nband:波段数(非灰离散坐标(DO)模型需要)。
real n_a:介质a的折射率。
real n_b:介质b的折射率。
real ray_direction:方向向量(s)
real en:界面法向量(n)
int internal_reflection:用于标记发生全内反射代码的变量。
real *specular_reflectivity:给定方向的镜面反射率s。
real *specular_transmissivity:给定方向的镜面透射率s。
DEFINE_DOM_SPECULAR_REFLECTIVITY包含十一个参数,需要定义UDF的名称f、t、nband、n_a、n_b、ray_direction、en、internal_reflection、specular_reflectivity和specular_transmissivity则是由Fluent求解器传递给UDF的变量。
③示例
在名为user_dom_spec_refl的UDF中,针对给定射线方向s在面f上的镜面反射率和透射率数值会被修改。
# include "udf.h"DEFINE_REPORT_DEFINITION_FN(volume_flow_rate_inlet){real inlet_velocity = Get_Input_Parameter("vel_in");real inlet_area = 0.015607214;real volumeFlow = inlet_velocity*inlet_area;return volumeFlow;}
参考资料:《Ansys Fluent UDF Manual》 2023R1
CFD理论基础合集(持续更新中):
Ansys Fluent帮助文档-UDF篇:用户自定义函数概述(UDFs)(一)
Ansys Fluent帮助文档-UDF篇:用户自定义函数概述(UDFs)(二)
Ansys Fluent帮助文档-UDF篇:通用DEFINE宏(一)
Ansys Fluent帮助文档-UDF篇:通用DEFINE宏(二)
Ansys Fluent帮助文档-UDF篇:通用DEFINE宏(三)
Ansys Fluent帮助文档-UDF篇:模型特定的DEFINE宏(一)
特别感谢您的阅读、点赞、转发、推荐!
夜雨聆风
