UDF总结.docx

上传人:b****9 文档编号:25325867 上传时间:2023-06-07 格式:DOCX 页数:34 大小:32.57KB
下载 相关 举报
UDF总结.docx_第1页
第1页 / 共34页
UDF总结.docx_第2页
第2页 / 共34页
UDF总结.docx_第3页
第3页 / 共34页
UDF总结.docx_第4页
第4页 / 共34页
UDF总结.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

UDF总结.docx

《UDF总结.docx》由会员分享,可在线阅读,更多相关《UDF总结.docx(34页珍藏版)》请在冰豆网上搜索。

UDF总结.docx

UDF总结

UDF使用技巧

1、查找相应的函数的时候,可以现在word里面找到相应的函数名字,然后依次去中文帮助文档、英文帮助文档和网页帮助文档,看看详细解释并找找是否有相应的例子。

2、打个比方来说,thread就是公路,连接的cell和face,cell和face就相当于公路上汽车停靠的站点,

cell_t这个面向的是单元,而face_t面向的是边或者面(二维或三维)

在fluent循环过程中,一般是用thread作线程检索,而cell或者face作检索过程中位置(相当于指示位置的参数)参数的指示

3、对于UDF来说,积分就是做加法,把通过面上每个网格的质量流量相加

4、cell和face的区别,什么时候用cell,什么时候用face?

5、1.begin,end_c_loopmacroisusedforloopingoverallthecellsinparticularthreadforserialprocessing.

2.Forparallelprocessing,thecellsinsideapartitioncanbecategorizedasinteriorandexteriorcells.

3.Themacrosbegin,end_c_loop_int;begin,end_c_loop_extandbegin,end_c_loop_allareusedforloopingoverinterior,exteriorandallthecells(inapartition)respectively.

4.Inparallelsimulations,bothbegin,end_c_loopandbegin,end_c_loop_allmacroswilldothesamejob.

5.Forfacestheloopingmacroinparallelarebegin,end_f_loop_int;begin,end_f_loop_extandbegin,end_f_loopforloopingoverinterior,boundaryandallfacesrespectively.Forallpracticalpurpose,theuserneednotseparatetheinteriorandboundaryfacesofapartition.Hence,begin,end_f_loop_intandbegin,end_f_loop_extmacrosarerarelyused.

 

实际问题

 

1、DEFINE_UDS_UNSTEADY中的apu包括的函数是不是不包括当前时刻的变量,而su包含前一时刻的变量,所以用了C_STORAGE_R存储前一时刻的变量。

2、等于零是因为计算源项的时候温度还没有更新,所以两个温度值是相等的。

这个时候其实是需要两个UDM,分别保存上一步和再上一步的温度。

而且可以考虑全部在源项里完成,不用Adjust宏:

source=(C_UDMI(c,t,1)-C_UDMI(c,t,0))/TIME_STEP;

C_UDMI(c,t,0)=C_UDMI(c,t,1);

C_UDMI(c,t,1)=C_T(c,t);

returnsource;

当然,在刚开始计算的时候要注意下UDM的初始问题,防止出错。

从第三个时间步开始,就是正常的了。

这个方法挺好的,只要一开始的用DEFINE_INIT,对

C_UDMI(c,t,0)=0.;

C_UDMI(c,t,1)=0.;

 

一、数据类型

cell_tc

单元格标识符

face_tf

面标识符

Thread*t

指向线程的指针

Thread**pt

象限矩阵线程的指针

Node*node

指向节点的指针

Domain*d

指向定义域的指针

二、node宏函数

NODE_X(node)

节点在x方向上的坐标(real)

NODE_Y(node)

节点在y方向上的坐标(real)

NODE_Z(node)

节点在z方向上的坐标(real)

F_NNODES(f,t)

面上节点的数目(int)

 

三、cell宏函数

1、

C_CENTROID(x,c,t)

realx[ND_ND]

单元格的重心坐标x[]

注意:

这句话直接使用,结果会输出到求解器中,需要使用的时候,调用x[];其中,x[0]代表x方向坐标,x[1]代表y方向坐标,x[2]代表z方向坐标。

2、

C_VOLUME(c,t)

单元格的体积(real)

C_NNODES(c,t)

单元格的节点的数目(int)

C_NFACES(c,t)

单元格的面的数目(int)

3、

C_FACE(c,t,i)

返回给定单元cell_tc和Thread*t的面face_tf;

注意:

索引号i可以被传递给c_face_loop。

C_FACE_THREAD(c,t,i)

返回面face_tf(由C_FACE返回)的Thread*t;

注意:

索引号i可以被传递给c_face_loop。

4、

C_R(c,t)

返回线程t的单元c上的密度

C_P(c,t)

压力

C_U(c,t)

速度分量u

C_V(c,t)

速度分量v

C_W(c,t)

速度分量w

C_T(c,t)

温度

C_H(c,t)

C_K(c,t)

湍流动能k

C_NUT(c,t)

Spalart-Allmaras模型中的湍流密度

C_D(c,t)

湍流动能耗散率(和ε像,看小木虫)

C_O(c,t)

比耗散率w

C_YI(c,t,i)

组分质量分数

5、

C_R_G(c,t)

返回线程t的单元c上的密度梯度

C_P_G(c,t)

压力梯度

C_U_G(c,t)

速度分量u梯度

C_V_G(c,t)

速度分量v梯度

C_W_G(c,t)

速度分量w梯度

C_T_G(c,t)

温度梯度

C_H_G(c,t)

焓梯度

C_K_G(c,t)

湍流动能k梯度

C_NUT_G(c,t)

Spalart-Allmaras模型中的湍流密度梯度

C_D_G(c,t)

湍流动能耗散率梯度(和ε像,看小木虫)

C_O_G(c,t)

比耗散率w梯度

C_YI_G(c,t,i)

组分质量分数梯度

注意:

①C_T_G(c,t)[0]:

温度梯度x方向的分量;[1]:

y方向;[2]:

z方向

②C_R_G(c,t)只能用于密度基求解器,C_P_G(c,t)只能用于压力基求解器③C_YI_G(c,t,i)只能用于密度基求解器,用于压力基求解器要设置,一切设置好后,输入rpsetvar’species/save-gradients?

#t

④只有当已经求解出包含这个变量的方程时才能得到梯度变量,需要如下设置solve/set/expert回车然后两个yes。

输入q可以返回上级目录

6、

C_R_RG(c,t)

返回线程t的单元c上的密度改造梯度

C_P_RG(c,t)

压力改造梯度

C_U_RG(c,t)

速度分量u改造梯度

C_V_RG(c,t)

速度分量v改造梯度

C_W_RG(c,t)

速度分量w改造梯度

C_T_RG(c,t)

温度改造梯度

C_H_RG(c,t)

焓改造梯度

C_K_RG(c,t)

湍流动能k改造梯度

C_NUT_RG(c,t)

Spalart-Allmaras模型中的湍流密度改造梯度

C_D_RG(c,t)

湍流动能耗散率改造梯度(和ε像,看小木虫)

C_O_RG(c,t)

比耗散率w改造梯度

C_YI_RG(c,t,i)

组分质量分数改造梯度

注意:

①C_T_RG(c,t)[0]:

温度梯度x方向的分量;[1]:

y方向;[2]:

z方向

②C_R_RG(c,t)只用于密度基求解器,C_P_RG(c,t)只用于压力基求解器③C_YI_RG(c,t,i)只能用于密度基求解器

④只有当已经求解出包含这个变量的方程时才能得到梯度变量,需要如下设置solve/set/expert回车然后两个yes。

输入q可以返回上级目录

7、

C_R_M1(c,t)

返回上一个时刻(t-Δt)的密度

C_P_M1(c,t)

返回上一个时刻(t-Δt)的压力

C_U_M1(c,t)

返回上一个时刻(t-Δt)的速度分量u

C_V_M1(c,t)

返回上一个时刻(t-Δt)的速度分量v

C_W_M1(c,t)

返回上一个时刻(t-Δt)的速度分量w

C_T_M1(c,t)

返回上一个时刻(t-Δt)的温度

C_YI_M1(c,t,i)

返回上一个时刻(t-Δt)的组分质量分数

注意:

①datafrom C_T_M1 isavailable only ifuser-definedscalarsaredefined.

②详细可以看宏DEFINE_UDS_UNSTEADY( name,c,t,i,apu,su)。

8、

C_R_M2(c,t)

返回上两个时刻(t-2Δt)的密度

C_P_M2(c,t)

返回上两个时刻(t-2Δt)的压力

C_U_M2(c,t)

返回上两个时刻(t-2Δt)的速度分量u

C_V_M2(c,t)

返回上两个时刻(t-2Δt)的速度分量v

C_W_M2(c,t)

返回上两个时刻(t-2Δt)的速度分量w

C_T_M2(c,t)

返回上两个时刻(t-2Δt)的温度

C_YI_M2(c,t,i)

返回上两个时刻(t-2Δt)的组分质量分数

注意:

①datafrom C_T_M2 isavailable only ifuser-definedscalarsaredefined.

9、

C_MU_L(c,t)

层流粘度

C_MU_T(c,t)

湍流粘度

C_MU_EFF(c,t)

有效粘度

C_K_L(c,t)

导热系数

C_K_T(c,t,prt)

湍流热导率

C_K_EFF(c,t,prt)

有效热导率

C_DIFF_L(c,t,i,j)

层流组分扩散率

C_DIFF_EFF(c,t,i)

有效组分扩散率

注意:

prt是湍流普朗特常数。

10、

C_CP(c,t)

比热容

C_RGAS(c,t)

气体常数/相对分子质量

C_NUT(c,t)

Spalart-Allmaras湍流粘度

11、

C_FMEAN(c,t)

primarymeanmixturefraction

C_FMEAN2(c,t)

secondarymeanmixturefraction

C_FVAR(c,t)

primarymixturefractionvariance

C_FVAR2(c,t)

secondarymixturefractionvariance

C_PREMIXC(c,t)

reactionprogressvariable

C_LAM_FLAME_SPEED(c,t)

层流火焰速度

C_SCAT_COEFF(c,t)

散射系数

C_ABS_COEFF(c,t)

吸收系数

C_CRITICAL_STRAIN_ RATE(c,t)

临界应变率

C_LIQF(c,t)

cell中的液体分数

C_POLLUT(c,t,i)

污染物的质量分数

注意:

①C_LIQF isavailableonlyinfluidcellsandonlyifsolidificationisturnedON

②C_POLLUT(c,t,i):

0-MassFractionofNO;

1-MassFractionofHCN;

2-MassFractionofNH3;

3-MassFractionofN2O;

4-SootMassFraction;

5-NormalizedRadicalNuclei

③ Concentrationinparticles(颗粒浓度) *10(-15次方)/kg,具体公式需要看fluent中的介绍。

12、

C_RUU(c,t)

uu雷诺应力

C_RVV(c,t)

vv雷诺应力

C_RWW(c,t)

ww雷诺应力

C_RUV(c,t)

uv雷诺应力

C_RVW(c,t)

vw雷诺应力

C_RUW(c,t)

uw雷诺应力

13、

C_VOF(c,t)

volumefractionforthephasecorrespondingtophasethread t

注意:

多相流VOF模型,只适用于压力基求解器

 

四、Face宏函数(只能用于压力基求解器)

1、

F_CENTROID(x,f,t)

realx[ND_ND]

面的重心坐标x[]

注意:

这句话直接使用,结果会输出到求解器中,需要使用的时候,调用x[];其中,x[0]代表x方向坐标,x[1]代表y方向坐标,x[2]代表z方向坐标。

2、

F_AREA(A,f,t)

realA[ND_ND]

返回A向量(面的法向量)

3、

F_U(f,t)

速度分量u

F_V(f,t)

速度分量v

F_W(f,t)

速度分量w

F_T(f,t)

温度

F_H(f,t)

F_K(ft)

湍流动能k

F_D(f,t)

湍流动能耗散率(和ε像,看小木虫)

F_YI(f,t,i)

组分质量分数

4、

F_P(f,t)

压力

F_FLUX(f,t)

返回通过一个面的质量流速

注意:

①如果流动方向是离开domain的话,F_FLUX的结果为正值,否则为负值。

②thesignofthefluxthatiscomputedbythesolverisoppositetothatwhichisreportedinthe FLUENTuser-interface(e.g., Reports 

 Fluxes...).

 

五、Connectivity宏函数

一个面两边的cell可能不是属于同一个thread下的,如果这个面在domain的外表面上,则只存在C0,如果这个面在domain内部,则存在C0和C1。

1、AdjacentCellIndex(相邻cell的索引)

F_C0(f,t)

返回一个面相邻的C0(cell_tc)

F_C1(f,t)

返回一个面相邻的C1(cell_tc)

注意:

一个domain外表面相邻的只有C0,没有C1;内部面相邻的有C0和C1

2、AdjacentCellThread

THREAD_T0(t)

返回一个面相邻的C0对应的thread

THREAD_T1(t)

返回一个面相邻的C1对应的thread

3、INTERIOR_FACE_GEOMETRY(需要增加#include“sg.h”)

INTERIOR_FACE_GEOMETRY(f,t,A,ds,es,A_by_es,dr0,dr1);/这样可以单独使用。

注意:

使用之前需定义下面的变量:

(用法和C_CENTROID(x,c,t)类似,调用该函数后相应的值会存放在求解器中,需要哪个值自己再调用)

realA[ND_ND];

theareanormalvector面的法向量

realds;

distancebetweenthecellcentroids

reales[ND_ND];

theunitnormalvectorinthedirectionfromcellc0toc1

realA_by_es;

thevalue 

realdr0[ND_ND];

vectorthatconnectsthecentroidofcell c0 tothefacecentroid

realdr1[ND_ND];

thevectorthatconnectsthecentroidofcell c1 tothefacecentroid

4、BOUNDARY_FACE_GEOMETRY(需要增加#include“sg.h”)

BOUNDARY_FACE_GEOMETRY(f,t,A,ds,es,A_by_es,dr0);/这样可以单独使用。

注意:

使用之前需定义下面的变量:

(用法和C_CENTROID(x,c,t)类似,调用该函数后相应的值会存放在求解器中,需要哪个值自己再调用)

realA[ND_ND];

theareanormalvector面的法向量

realds;

distancebetweenthecellcentroidandthefacecentroid

reales[ND_ND];

unitnormalvectorinthedirectionfromcentroidofcellc0tofacecentroid

realA_by_es;

thevalue 

realdr0[ND_ND];

vectorthatconnectsthecentroidofcell c0 tothefacecentroid

 

5、

BOUNDARY_FACE_THREAD_P(t)

如果t是边界面上的thread,则返回TRUE

注意:

具体可以看帮助文件,有相关例题。

6、BOUNDARY_SECONDARY_GRADIENT_SOURCE(需要增加#include“sg.h”)

BOUNDARY_SECONDARY_GRADIENT_SOURCE(source,n,dphi,dx,A_by_es,k)

注意:

使用它之前一般会使用BOUNDARY_FACE_GEOMETRY

其他注意事项看看中英文帮助文档

 

六、Special宏函数

1、ThreadPointerforZoneID( Lookup_Thread)//可以用于边界条件的设置

如果你想对某个边界区域进行操作,你可以使用 Lookup_Thread找到你需要的区域对应的指针t,然后进行相应操作。

使用方法如下:

intzone_ID=2;//ID是边界区域的编号,可以右击网格就可以查到

Thread*t=Lookup_Thread(domain,zone_ID);

注意:

多相流情况下使用会有点麻烦,具体看看帮助

2、ZoneID( THREAD_ID)

使用方法如下:

intzone_ID=THREAD_ID(t);

可以得到t对应的zone的ID整数值。

3、DomainPointer( Get_Domain)

Get_Domain(domain_id);

注意:

domain_id是整数,对于混合相是1,对于某一个相,可以查看define-phases找到相应的ID。

Get_Domain(domain_id)经常用在宏DEFINE_ON_DEMAND中,DEFINE_ON_DEMAND这个宏一般用于初始化或迭代后数据进行处理(取平均,最大值,最小值等),不能使用在迭代过程当中。

例:

DEFINE_ON_DEMAND(my_udf)

{

Domain*mixture_domain;

mixture_domain=Get_Domain

(1);

}

4、SetBoundaryConditionValue( F_PROFILE)

F_PROFILE( f, t, i)=…….;

注意:

①F_PROFILE是对面进行操作,一般用于边界条件的设定,改变边界条件上各种参数(压力,速度,组分参数)的值。

②i不需要提前定义或赋值,一般配合DEFINE_PROFILE(pressure_profile,t,i)使用,而这里已经定义了i。

具体可以参照DEFINE_PROFILE提供的例子。

5、THREAD_SHADOW(t)

if(!

NULLP(ts=THREAD_SHADOW(t)))

{

/*Dothingshereusingtheshadowwallthread(ts)*/

t是薄壁的一部分,对t进行操作

}

如果边界不是薄壁的一部分,THREAD_SHADOW(t)返回NULL

NULLP()括号里面的如果没有分配内存返回TRUE

七、Time-SampledData(C_STORAGE_R)时间取样数据

 

八、Model-SpecificMacros用于特定模型的宏

1、DPM宏

2、NOx宏

3、SOx宏

4、动网格宏

DT_THREAD(dt)

Dynamic_Thread*dt

pointertofacethread

DT_CG(dt)

Dynamic_Thread*dt

centerofgravityvector

DT_VEL_CG(dt)

Dynamic_Thread*dt

cgvelocityvector

DT_OMEGA_CG(t)

Dynamic_Thread*dt

angularvelocityvector

DT_THETA(dt)

Dynamic_Thread*dt

orientationofbody-fixedaxisvector

DYNAMESH_CURRENT_TIME

N/A

currentdynamicmeshtime

TIME_TO_ABSOLUTE_CRANK_ANGLE(time)

realtime

absolutevalueofthecrankangle

 

九、User-DefinedScalar(UDS)TransportEquationMacros用户自定义标量输运方程宏

在使用和本节UDS有关的宏的之前,必须先去fluent面板中进行设置标量的个数。

Define—User-Defined—Scalars

1、Set_User_Scalar_Name

当你在fluent面板中设置了UDS个数后,系统会给分配的变量相应的名字,例如,分配了2个标量,则两个标量的名字为UserScalar0和UserScalar1。

但你可以使用下面的函数对名字进行修改,i代表对第几个标量进行修改,name是字符串格式,可用”……”表示。

Set_User_Scalar_Name(inti,char*name);

注意:

上述修改只能修改一次,要改一下改完;最好使用EXECUTE_ON_LOADING宏

2、F_UDSI

F_UDSI(f,t,i)

i为标量的序号

返回使用用户自

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1