UDF使用指南-1

UDF有多种功能,如:定制边界条件,定义材料属性,定义表面和体积反应率,定义Fluent输运方程中的源项,用户自定义标量输运方程UDS中的源项扩散率函数等。
实体瘤一、UDF基础
1、Fluent的求解次序
了解fluent的求解过程有助于理解UDF的调用过程,确定在给定的任意时间内哪些数据是当前的和有效的。对于不同的求解器,其求解次序是不一样的。
在分离式求解器求解过程中,用户定义的初始化函数(使用DEFINE_INIT定义的)在迭代循环开始之前执行。然后迭代循环开始执行用户定义的调整函数(使用DEFINE_ADJUST定义的)。接着,求解守恒方程,顺序是从动量方程和后来的压力修正方程到与特定计算相关的附加标量方程。守恒方程之后,属性被更新(包含用户定义属性)。这样,如果模型涉及气体定律,这时,密度将随更新的温度(和压力、物质质量分数)而被更新,进行收敛或者附加要求的迭代的检查、循环或者继续或者停止。
在耦合求解器求解过程中,用户定义的初始化函数(使用DEFINE_INIT定义的)在迭代循环
开始之前执行;然后迭代循环开始执行用户定义的调整函数(使用DEFINE_ADJUST定义的);接着,Fluent求解连续、动量和(适合的地方)能量的控制方程及相关的物质输运或矢量方程。其余的求解步骤与分离式求解器相同。
2、Fluent网格拓扑
1 单元(cell):区域被分割成的控制体积
2 单元中心(cell center):Fluent中数据存储的地方纳纱
3 面(face):单元(二维或三维)的边界
4 边(edge):面(三维)的边界
5 节点(node):网格点
6 单元线索(cell thread):在其中分配了材料数据和源项的单元组
7 面线索(face thread):在其中分配了边界数据的面组
8 节点线索(node thread):节点组
9 区域(domain):由网格定义的所有节点、面和单元线索的组合
3、Fluent的数据类型
在编写UDF时,除了可以使用C语言数据类型外,还可以直接使用Fluent指定的与求解器数据相关的数据类型。常用的Fluent数据类型如下。
cell_t是线索内单元标示符的数据类型,是一个识别给定线索内单元的整数索引。face_t是线索内面标示符的数据类型,是一个识别给定线索内面的整数索引。Thread是单元或面的组合相关的数据容器。Node是单元或面的拐角相关的数据容器。Domain是Fluent中最高水平的数据结构,是一个与网格中所有节点、面和单元线索组合相关的数据容器。
二、UDF中访问Fluent变量的宏
(一)访问单元的宏
1、访问单元流体变量的宏
在Fluent中可以用来访问单元上流体变量的宏在表1中列出,注意加了_G、_RG、_M1和_M2这些下标的单元格温度的宏,可以应用于表1中除单元格压力(C_P)的所有求解器的变量中。这些下标表示的是矢量梯度、改造的矢量梯度、前一次的步长和前两次的步长。而对于单元格压力,它的矢量梯度和相应的分量是使用C_DP得到的,而不是C_P_G。
表1  在mem.件中的流体标量宏
林州地震中子测井
名称(参数)
参数类型
返回值
C_T(c,t)
cell_t c,Thread*t
温度
C_T_G(c,t)
cell_t c,Thread*t
温度梯度矢量
C_T_G(c,t)[i]
cell_t c,Thread*t,inti
温度梯度矢量的分量
C_T_RG(c,t)
cell_t c,Thread*t
改造后的温度梯度矢量
C_T_RG(c,t)[i]
cell_t c,Thread*t,inti
改造后的温度梯度矢量的分量
C_T_M1(c,t)
cell_t c,Thread*t
温度的前一次步长
C_T_M2(c,t)
cell_t c,Thread*t
温度的前二次步长
C_P(c,t)
cell_t c,Thread*t
压力
C_DP(c,t)
cell_t c,Thread*t
压力梯度矢量
C_DP(c,t)[i]
cell_t c,Thread*t,inti
压力梯度矢量的分量
C_U(c,t)
cell_t c,Thread*t
u方向的速度
C_V(c,t)
cell_t c,Thread*t
可爱四兄弟
v方向的速度
C_W(c,t)
cell_t c,Thread*t
w方向的速度
C_YI(c,t,i)
cell_t c,Thread*t,inti
物质质量分数
C_K(c,t)
cell_t c,Thread*t
湍流运动能
C_D(c,t)
cell_t c,Thread*t
湍流运动能的分散速率
(1)可以在宏中加入下标_G来得到梯度矢量和其分量。例如,C_T_G(c,t)就是返回单元格的温度梯度矢量。注意:只有当已经求解出包含这个变量的方程时才能得到梯度变量。例如,如果定义了一个关于能量的源程序,那么所编的UDF可以使用C_T_G读写单元格的温度梯度,而不能使用C_T_G读写X方向的速度分量。而且,如果建立一个由使用者确定的方式转移方程,那么就不能得到一部分的梯度了。这是因为求解器不断地移走它不需要的数据。可以使用下面的方法来阻止存储器释放记忆:发出文本命令save/set/expert,然后对计算机提出的‘是否阻止暂时的求解器记忆释放’这一提问回答‘是’,按照这种做法就可以保留所有的梯度数据,但是这种计算需要更多的内存。
(2)在调用梯度矢量时把某一分量作为参数,这样就可以得到梯度分量了,参数0代表X方向的分量,1代表Y方向的分量,2代表Z方向的分量。例如,C_T_G(c,t)[0]就是返回温度梯度X方向的分量.注意:在表1中,虽然只列出了温度梯度和其分量求解的宏,但是却可以扩展到除了压力以外的所有变量中去,对于压力只能按照表1中的方法使用C_DP来得到压力梯度和其分量。
(3)和梯度一样的方式,可以通过加RG的下标在宏中得到梯度向量和其分量。通过使用
恰当的整数作为参数来获得想要的矢量分量,参数0代表X方向的分量,1代表Y方向的分量,2代表Z方向的分量。当完成自己的插补计划时可以使用改造过的梯度。改造过的温度梯度和其分量在表1中列出了,同样可以推广到所有的变量。注意:改造过的梯度矢量和梯度矢量一样都只有在梯度方程被求解出来时才可以得到。
(4)在表1中的宏中加入下标_M1就可以得到前一次步长时间下的变量的值,得到的这些数据可以在瞬态的模拟中使用。例如,C_T_M1(c,t),返回前一步时间下的单元格温度的值。若在表1里宏的后面加上下标_M2就可以得到前两次步长下的时间,这些数据可用于瞬态的模拟计算中。在表1中仅列出了温度的前一次步长的求法,也可以扩展到其他的变量中去。
2、访问导数的宏
表2  在mem.件中访问导数个宏
名称(参数)
参数类型
返回值
C_DUDX(c,t)
cell_t c,Thread*t
U速度对x方向的导数
C_DUDY(c,t)
cell_t c,Thread*t
U速度对y方向的导数
C_DUDZ(c,t)
cell_t c,Thread*t
U速度对z方向的导数
C_DVDX(c,t)
cell_t c,Thread*t
V速度对x方向的导数
C_DVDY(c,t)
cell_t c,Thread*t
V速度对y方向的导数
产品附加值
C_DVDZ(c,t)
cell_t c,Thread*t
V速度对z方向的导数
C_DWDX(c,t)
cell_t c,Thread*t
W速度对x方向的导数
C_DWDY(c,t)
cell_t c,Thread*t
W速度对y方向的导数
C_DWDZ(c,t)
cell_t c,Thread*t
W速度对z方向的导数

本文发布于:2024-09-22 06:52:24,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/285186.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:求解   方程   定义
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议