ANSYS Fluent二次開發(fā)指南_第1頁
ANSYS Fluent二次開發(fā)指南_第2頁
ANSYS Fluent二次開發(fā)指南_第3頁
ANSYS Fluent二次開發(fā)指南_第4頁
ANSYS Fluent二次開發(fā)指南_第5頁
已閱讀5頁,還剩188頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

ANSYSFluent二次開發(fā)指南1UDF第1章FluentUDF基 UDF簡 FluentUDF的學習路 UDF代碼編輯 UDF使用限 C語言基 C語言中的注 常

函 指 C語言庫函 UDF使用流 Fluent中的 編寫UDF源文 解釋 Hook 第2章UDF的編譯及解 解釋型UDF的局限 在Fluent中解釋 C編譯 GUI方式編譯

GCC方式編譯 設(shè)置UDF環(huán)境變 UDF中的網(wǎng)格結(jié) UDF中的數(shù)據(jù)類 第3章UDF數(shù)據(jù)訪問

所有單 所有

Error 其他

2D及3D處 ND操作 NV Message

第4章常用的DEFINE 通用DEFINE

DEFINE_ZONE_MOTION_

UDS及UDS Fluent中定義 UDS 并行UDF介

外部Thread數(shù)據(jù)存 DPM模型的并行 并行UDF host與node節(jié)點通

并行UDF宏限 并行UDF中的文件讀 2Fluent第6章Fluent用戶界面開發(fā)基

一個簡單的Scheme程 使用.fluent文 第7章Scheme語言基 Scheme編輯 注 if結(jié) cond結(jié) case結(jié)

and結(jié) or結(jié) 遞 循 FluentRP變 創(chuàng)建RP變 修改RP變 GUI中訪問RP變 UDF中訪問RP變 保存及加載RP變 第8章Fluent界面元 引 表 控

輸入 按

第9章Fluent界面開發(fā)實

UDF交 Scheme代 UDF代 3部分流程封裝第10章Fluent進程封 Fluent文本操作界

Fluent命令啟 ACT流程開 ACT介 ACT的功能概 ACT開發(fā)示 1部分UDFUDF作為商用軟件,F(xiàn)luent給高級用戶開了一扇窗口,允許用戶根據(jù)自己的需求對軟件進行UserDefinedFunctionUDF。FluentUDFCFluentUDFFluentFluentUDFudf.h文件UDF的過程中,UDF手冊是必不可少的文檔。UDFUDFFluentGUIUDF。GUIUDF去做。FluentUDF的正確性負UDFFluentUDF實現(xiàn)某項功能,需要查閱Fluent幫助文檔。UDF文件這部分工作是UDF的核心工作。作為一個計算機程序,UDF同樣UDFUDF手冊中的示例程序,在其基礎(chǔ)上進行修改。UDFWindows環(huán)境下需要安裝C++C編譯器。FluentUDF加載的方式可以是解釋型,也可以是編譯型。通常解釋型的UDFC語言是必要的,但并不需要非常精通。UDF宏的編寫實際上只是應(yīng)①基本語法語法重要性自然不用多說。UDFCCUDF中的控制形式有特別的宏來完CUDF中的循環(huán)結(jié)構(gòu)。UDF中有很多的內(nèi)置變量類型是數(shù)組或指針,C語言的特色。C語言函數(shù)傳值調(diào)用與傳址調(diào)用的區(qū)別。尤其是搞明白傳址調(diào)用,UDF宏中存在極多的傳址調(diào)用。UDF則可以找一些專業(yè)的編輯器,如免費的編輯器Notepad++、VisualStudioCode、Atom等,一ultraEdit、EditPlus、Sublimetext等也都是非常不錯的選擇。Notepad++1-1VisualStudioCode1-2UDFFluentUDFANSYSFluentUDF功能可以用于廣泛的工程應(yīng)用場景,但依然無法涵蓋所有的應(yīng)用。UDF并不能訪問所有的求解變量及計算模型。②通常情況下,UDF使用國際單位制。也有一些極特殊情況,如普適氣體常量1-1Notepad++1-2VisualStudioCodeFluent時,UDFFluentUDF使用串行版本,若要將其用于并行求解,則可能需要修改UDF給使用者提供了較多的訪問求解器內(nèi)核的途徑,但方便的同時往往也意UDFFluentC語言基礎(chǔ)FluentUDFCUDFC語言知識,UDF手冊。CC語言中的注釋利用/*及*/ 跨行注釋跨行注釋UDFDEFINE宏(DEFINE_PROFILE)放置在注釋FluentUDFC數(shù)據(jù)類型如下:Int1、2、3之類的整數(shù)。longint類似,但范圍更廣。float:浮點型,存儲小數(shù),如1.234等。double:雙精度浮點型,與float類似。double類型相同,而在單精度求解器中,realfloat類型。UDF自動進行real類型。#define#defineWALL_ID#defineYMIN#defineYMAX WALL_ID=WALL_ID C語言中的全局變量定義在函數(shù)的外部,該變量可以被源文件中所有的函數(shù)引用。全局#include#includerealvolume*此處定義的是全局變量*/DEFINE_PROPERTY(cell_viscosity,DEFINE_PROPERTY(cell_viscosity,cell,real /*realtempC_T(cellthread);/**/if(temp>288.)mu_lam=5.5e-3;elseif(temp>286.)mu_lam=143.2135-0.49725*temp;mu_lam=1.;returnstatic的全局變量后,若想在另一個源文件中調(diào)用此 externreal externexternUDFextern#include"udf.h"realvolume;#include"udf.h"realvolume;volume=volumeexternextfile.h externreal #include"udf.h"#include"extfile.h"real#include"udf.h"#include"extfile.h"realtotal_source=...;realsource;source=total_source/volume;returnsource;◎提示:外部變量使用起來很麻煩,也很容易出錯,如果對其不甚了解,建議不要使用。靜態(tài)變量(static關(guān)鍵字)在用于局部變量或全局變量時具有不同的作用。static時,當函數(shù)返回后變量并不銷毀,變量的值依舊被保留。全局變量static時,該變量能夠被此源文件中的所有函數(shù)調(diào)用,但不能被其他源文件中的函#includestatic#includestaticrealabs_coeff1.0*靜態(tài)全局變量/*DEFINE_SOURCE(energy_source,c,t,dS,realsource;/*局部變量*/intP1*局部變量*//**/dS[eqn]=-16.*abs_coeff;source=-abs_coeff*(4.*SIGMA_SBC);returnsource;DEFINE_SOURCE(p1_source,c,t,dS,realsource;intP1=...;dS[eqn]=-source=abs_coeff*(4.*SIGMA_SBC);returnsource;typedefstructtypedefstructinta;realb;intc;mylistintxintxrealy=3.1415926;intz=x+(int)y;計算完畢后,z=4C語言中的函數(shù)執(zhí)行獨立的任務(wù)。函數(shù)能夠被同一源文件中的其他函數(shù)調(diào)用,也可以由函數(shù)返回特定數(shù)據(jù)類型的值(例如,實數(shù)void,則不返回任何值。要確DEFINEudf.h文件中宏的相應(yīng)#define語句。Cname[size]name為數(shù)組變量的名稱,size為數(shù)組中存儲的單元數(shù)量。C0開始。intinta[10],realrad[5];a[0]=1;rad[4]=b[10][10]= int*ip;/*定義指針變量 intint*ip;ip=&a; *ip #include<stdio.h>intadd(int#include<stdio.h>intadd(int*a,intb)intsum=0;sum=*a+b;*a=5;returnsum;intmain(){int*ip;inta=1;intb=intsum=0;ip=&a;sum=add(ip,b);return0; (1)ifC(1)ifif語句塊if-elsey=else(x>=0&&y=x=y=inti,j,n=10;j=i*i;inti,j,n=10;j=i*i;除此以外,Cwhile、do…whileswitch開關(guān)判斷等流程控制。C語言類圖書。1-11-2Cdoubleacos(doubledoubleacos(doublex);doubleasin(doublex);doubleatan(doubledoubleatan2(doublex,doubley);doublecos(doublex);doublesin(doublex);doubletan(doublex);doublecosh(doublex);doublesinh(doubledoubletanh(double(2)doublesqrt(doubledoublepow(doublex,doubley);doubleexp(doublex);doublelog(doublex);doublelog10(doublex);doublefabs(doublex);doubleceil(doublex);doublefloor(double(3)FILE*fopen(char*filename,char*mode);intfclose(FILE*fp);intprintf(charintfprintf(FILE*fp,constchar*format,...);intfscanf(FILE*fp,char*format,...);,存在各種以#1-3#ifndef#ifndef_FLUENT_UDF_H#define#ifdefcplusplusextern"C"{#define_UDF#define_CRT_SECURE_NO_DEPRECATE#define_CRT_NONSTDC_NO_DEPRECATE#ifdef#includeUDFCONFIG_H#include1-3這些以#CC語言的預處理工作由一個預處理程序來完成。任何C系統(tǒng)都有一個預處理程序,負責處理源程序中的所有預處理命令,從而生成不含預處理命令的源程序。C語言的預處理目的預處理命令以獨立的預處理命令行的形式出現(xiàn)在源程序中,#是其特殊的引導符號。如include文件名>include文件名#define#define#define#defineSLDstaticlongSLDstaticlongdoubleSLDSLDx=2.4,staticstaticlongdoubleC語言程序段,其只是簡單地完成文本替換工作。#define#define宏名字(參數(shù)列表)#define#definemin(A,B)zz=zz=條件編譯的作用是在源程序中劃出一些片段,使預處理程序可根據(jù)條件保留或丟掉一段,或從幾段中選擇一段保留。實現(xiàn)條件編譯的預處理命令有四個,分別是:#if#if*代碼片段,條件成立時保留*/*條件成立時保留*/*條件不成立時保留*條件成立時保留*/#elif整型表達式/*elif部分,可以有多個*/#elif整型表達式*條件都不成立時保留0==!=definedefine標識符definedefine標識符被作為條件編譯的條件。此外還有兩個預處理命令#ifdefifndef,它們相當于#if和#define#ifdef#ifdef標識符/*相當于#ifdefine(標識符)*/#ifndef/*相當于#if!define(標識符)*/UDFUDF的源代碼編寫、編譯及加載過程。通過此案UDF的整個使用流程。FluentFluentPatch功能。對于整體區(qū)域的全局初始化可以采用Patch功能來實現(xiàn)。SolutionCellRegistersNew→Region...可彈出區(qū)域定義對話框(1-41-4可以在彈出的對話框中設(shè)置幾何條件來標記(Mark)1-51-5Hex、SphereCylinder。對于更復雜的形狀則無能為力,此時可以借助UDF來解決問題。1-6300K1-61-7編寫UDFUDFDEFINE_INIT宏來實現(xiàn)這(x0.05)2(x0.03)2

#include"udf.h"#include"udf.h"cell_tc;Thread*t;realxc[ND_ND];realx;realy;x=y=C_T(c,t)=解釋UserDefinedFunctions8,F(xiàn)luent1-8UDF1-9,待解釋完畢后可關(guān)閉對話框。1-9Hook1-10所示。1-10UDF1-11InitializationUDF1-121-11UDF

1-12UDF1-131-14所示。初始化完畢后1-15。圖1-13開啟能量方 圖1-14初始化計1-15500KUDFUDF,則需要配合第三方編UDFMicrosoftVisualStudio。解釋型UDF不需要額外的編譯器,利用Fluent軟件自身即可解釋源代碼。在解釋過程中,UDFC預處理器解釋成中間的獨立于計算機體系之外的機器代碼。之后UDF當然,這種以解釋的方式運行無可避免地會損失計算性能。但是以解釋方式運行的UDF有個好處:其可以不加修改地在不同體系的計算機、不同的操作系統(tǒng)以及不同的Fluent版本中運行。Fluent加載。解釋型UDFUDF的最大優(yōu)勢是一次解釋,到處可以執(zhí)行,能夠跨平臺、跨架構(gòu)、跨操作系UDF也存在其局限性,主要體現(xiàn)在:gotoANSI-C③不支持直接數(shù)據(jù)結(jié)構(gòu)引用(directdatastructurereferences;UDFC編程語言或其他求解器數(shù)據(jù)結(jié)構(gòu)的限制。1UDFcas文件在同一目錄下。SharingandSecuritySharethisfolder。22-1Parameters&Customization→UserDefinedFunctionsInterpreted..(2-12-2所示的對話框。圖2-1解釋 圖2-2UDF解釋對話4InterpretTUI窗口會有解釋信息。UDF了,此時可以選擇使用。編譯型Fluent版本,UDF對象庫必須重新構(gòu)建。UDF的編譯過程通常涉及源代碼的編譯和編譯/UDF的源文件(myudf.c,并將它們編譯成對象文件(myudf.omyudf.obj,之后將其構(gòu)建成一個共享庫(libudf.dll)與目標GUI方式編譯源文件,則當用戶單擊“CompiledUDF”對話框中的“Build”按鈕時,將執(zhí)行編譯/構(gòu)建過程。FluentANSYSlibudf,并存儲UDF對象文件。如果使用TUI方式編譯源文件,則首先必須設(shè)置共享庫的目標文件夾,同時修改名為TUI方式編譯UDF具有允許從非ANSYSFluent源文件派生的預處理對象文件鏈接到ANSYSFluentGUI編譯無法實現(xiàn)。可以使用“CompiledUDFs”對話框中的“Load”按鈕來執(zhí)行此操作。加載完成后,共享庫中包含UDFANSYSFluent的圖形對話框中變?yōu)榭梢姾涂蛇x。編譯編譯的UDF顯示在ANSYSFluent對話框中相關(guān)聯(lián)的UDF庫稱由兩個冒” 為libudf的共享庫相關(guān)聯(lián)的為rrate的編譯UDF將出現(xiàn)在ANSYSFluent對話框中,如rrate:libudf。此稱可以區(qū)分解釋型UDF和編譯型UDF。UDFcasecase文件一起保存,并在之后讀取該case文件時自動加載。這種“動態(tài)加載”過程可以節(jié)省用戶每次運行模擬時重新加載編譯CUDFMicroSoftVisualStudio。對于Linux機器,ANSYSFluentANSIC編譯器(GCC。2-3所示。GUIWindowsUDFVisualStudioVisualC++C1UDFcasdat文件在同一工作路徑下。2:讀取(或創(chuàng)建)case文件。3CompiledUDFs2-4Parameters&Customization→UserDefinedFunctions→Compiled...啟動該對話框。4CompiledUDFAdd...2-3Fluent2-42-5OK按鈕繼續(xù)。2-52-62-7UDF外,F(xiàn)luentUDF。Fluent源文件之外的庫文件。采用該方UDFmakefilemakefile文user_nt.udf文件中指定源文件編譯參數(shù)。構(gòu)建文件目錄結(jié)構(gòu)采用以下步驟:1UDFlibudf。2libudfsrc。3UDFsrc4libudf64bitWindows2d2-12-8所示。2-12d_node3d_node2ddp_node3ddp_node2-8UDF6Fluent安裝路徑中(c:\ANSYSInc\v180\fluent\fluent18.0.0\src\udf)拷貝user_nt.udf到所有的版本子文件夾中(libudf\win64\3d。7Fluent安裝路徑中(c:\ANSYSInc\v180\fluent\fluent18.0.0\src\udf)拷貝makefile_nt.udf到所有的版本子文件夾中(libudf\win64\3dmakefile。user_nt.udfLinuxUDFWindows系統(tǒng)中,采用以下步驟:1user_nt.udf文件。修改文件中的四個參數(shù):CSOURCES、HSOURCESVERSIONPARALLEL_NODE。user_nt.udf2-9CSOURCES=UDF源文件。在所有文件名前面加上前綴$(SRC)。多個(SRC)udfexaple1.c(SRC)udfexaple2.HSOURCES=UDF頭文件。同樣在所有文件名前面加上$(SRC)前綴。(SRC)udfexaple1.h(SRC)udfexaple2.2-92d,3d2ddp,3ddp2d_host2d_node3d_host,3d_node2ddp_host,2ddp_node,3ddp_host,or3ddp_node。MPIhostnodeuser_nt.udf文件。libudf\win64\2d入nmakenmakeclean及nmakeGCCFluentUDFVisualStudioFluentCC/C++MSVC(VisualStudio中的編譯器GCC/G++(GNUC/C++Linux系統(tǒng)下很流行、ICC(IntelC/C++Intel體系有特別優(yōu)化、Clang(近幾年風頭很火的C/C++BSD協(xié)議、IBMXLC++(IBMIBM硬件及平臺上表現(xiàn)FluentUDFCUDF需要利用編譯器將這段代碼編(.dllMinGW、MinGW-win64TDM-GCC等。TDM-GCCFluentUDFTDM-GCCtdm-gccTDM-GCCNextTDM-GCCPath中。TDM-GCC安裝文件夾中找到可執(zhí)行文件gendef.exe2-102-11GCC2-12gendef.exe(2)cdFluentC:\ProgramC\ProgramInc\v201\fluent\fluent20.1.0\multiport\win64下的所有文件夾。CC:\ProgramFiles\ANSYSInc\V201\fluent\fluent20.1.0\win64\2dC:\ProgramFiles\ANSYSInc\V201\fluent\fluent20.1.0\win64\2d_hostC:\ProgramFiles\ANSYSInc\V201\fluent\fluent20.1.0\win64\2d_nodeC:\ProgramFiles\ANSYSInc\V201\fluent\fluent20.1.0\win64\2ddpC:\ProgramFiles\ANSYSInc\V201\fluent\fluent20.1.0\win64\2ddp_hostC:\ProgramFiles\ANSYSInc\V201\fluent\fluent20.1.0\win64\2ddp_nodeC:\ProgramFiles\ANSYSInc\V201\fluent\fluent20.1.0\win64\3dC:\ProgramFiles\ANSYSInc\V201\fluent\fluent20.1.0\win64\3d_hostC:\ProgramFiles\ANSYSInc\V201\fluent\fluent20.1.0\win64\3d_nodeC:\ProgramFiles\ANSYSInc\V201\fluent\fluent20.1.0\win64\3ddpC:\ProgramFiles\ANSYSInc\V201\fluent\fluent20.1.0\win64\3ddp_hostC:\ProgramFiles\ANSYSInc\V201\fluent\fluent20.1.0\win64\3ddp_node2ddefcdcd"C:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\win64\2d"gendeffl2010.exe2-132-13創(chuàng)建defANSYSCWin10C盤的保護,默認情況下系統(tǒng)盤中的文件夾是沒有寫操作權(quán)限的。而這里需要在當前文件夾中創(chuàng)建def文ANSYS安裝在非系統(tǒng)盤,則不會出現(xiàn)這個問題。def2-142-14創(chuàng)建defdlltool--dllnamefl2010.exe--defdlltool--dllnamefl2010.exe--deffl2010.def--output-lib2-15創(chuàng)建a2dfl2010.a2-162-16win64win64文件夾中的子defa文件。c:c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\win64\2d_nodec:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\win64\2ddp_nodec:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\win64\3d_nodec:\ProgramFiles\ANSYSgendefgendef(3)(3)gendefdlltool--dllnamemport.dll--defmport.def--output-libUDFc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\win64\2dc:\ProgramFiles\ANSYSc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\addon-wrapperc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\ioc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\speciesc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\pbnsc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\numericsc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\sphysicsc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\storagec:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\mphasec:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\bcc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\modelsc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\materialc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\amgc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\utilc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\meshc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\udfc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\htc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\dxc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\turbulencec:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\parallelc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\etcc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\uec:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\dpmc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\dbnsC:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\acousticsc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\cortex\srcc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\client\srcc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\tgrid\srcc:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\multiport\srccdmkdirgcccdmkdirgcc-shared-o.\libudf\win64\2d\libudf.dlldemo.c"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\win64\2d\fl2010.a"-I.-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\win64\2ddp"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\main"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\addon-wrapper"-I"c:\ProgramFiles\ANSYSfluent20.1.0\src\io"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\species"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\pbns"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\numerics"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\sphysics"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\storage"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\mphase"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\bc"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\models"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\material"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\amg"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\util"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\util"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\mesh"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\udf"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\ht"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\dx"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\turbulence"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\ue"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\dpm"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\dbns"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\cortex\src"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\client\src"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\tgrid\src"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\multiport\src"-I"c:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\multiport\mpi_wrapper\src"-I"C:\ProgramFiles\ANSYSfluent\include"-I"C:\ProgramFiles\ANSYSInc\v201\fluent\fluent20.1.0\src\若要編譯并行版,則需要創(chuàng)建兩個文件夾,如2d并行版需要創(chuàng)建文件夾2d_host2d_nodelibudf.dll2-172-17UDF在WindowsUDFFluentCFluentudf.batMicrosoftVisualStudio的安裝路徑來實現(xiàn)環(huán)境變量的設(shè)置。FluentEnvironmentudf.bat2-182-18udf.bat2-19MSVC_DEFAULTMicrosoftVisualStudio2-19MicrosoftVisualStudio采用的是默認路徑安裝(MicrosoftVisualStudio2019c:\ProgramFiles(x86)\MicrosoftVisualStudio\2019下,則無需修udf.bat文件。UDFFluent2-202-22-202-2nodecellcellfaceUDFUDFCC++語言數(shù)據(jù)類型(int、double、float等)外,還FluentFluent數(shù)據(jù)類型如下。(storageSvar。在多Thread結(jié)構(gòu)。用于標識Thread存儲中的指針的索引。該索引變量的所有可取值都在文件storage.hDomainDomain結(jié)構(gòu)。FluentFluent①數(shù)據(jù)訪問宏主要功能為獲取求解器中的數(shù)據(jù),如得到單元中的溫度、壓力、速度②循環(huán)控制宏主要提供遍歷搜索功能,如設(shè)置邊界條件數(shù)據(jù),則需要利用循環(huán)控制③向量及標量操作宏④輸入輸出功能x、y、z三方向坐標,或獲取網(wǎng)格面上的節(jié)metric.hNODE_X,NODE_Y,NODE_Z3-1。3-1Node返回node的x坐標,realNode返回node的y坐標,realNode返回node的z坐標,realNode*v,然后在循環(huán)體中利用F_NODENODE_X(v)vx坐標。(2)Node*v;intn;face_t(2)Node*v;intn;face_tf;Thread*tf=DT_THREAD(dt);F_NNODESmem.h中定義,具體信3-2。3-2face_tf,Thread返回face上的節(jié)點數(shù)量,intcell循環(huán)體內(nèi)使用,如下面的程序片段。intnumber;face_tf;Thread*tf=DT_THREAD(dt);number=metric.hmem.hF_Fluent3-1domaincell,再下為facenode。在訪問過程中,也是從上往下逐層訪問,采用循環(huán)遍歷的方式。3-1(1)F_CENTROID(1)F_CENTROIDF_CENTROID宏用于網(wǎng)格面心坐標。宏調(diào)用形式:F_CENTROID(xft。宏參數(shù):realx[ND_ND],face_tf,Thread*t。x數(shù)組獲得。(2)F_AREA(2)F_AREArealx[ND_ND];realy;face_tf;y=x[1];ANSYSFluent中,邊界面的法向通常指向計算域的外部。對于內(nèi)部面的法向方向,通常利用節(jié)點排序采用右手定則進行確定。A[0]X方向投影面積。宏調(diào)用形式:F_AREA(Af,t)宏參數(shù):realA[ND_ND],face_tf,Thread*t。A數(shù)組獲得。realrealNV_VEC(A/*A*/F_AREA(A,f,t);如果定義為向量,后面可以很方便地利用向量運算(點積和叉積等(3)3-3所示。3-3face_tf,Threaduface_tf,Threadvface_tf,Threadwface_tf,Threadface_tf,Threadface_tf,Threadface_tf,Threadface_tf,Thread*t,intrealrealtemperature=F_K(f,t),3-4face_tf,Thread返回面上壓力值,realface_tf,Thread返回通過面的質(zhì)量流量,realmetric.hC_作為前綴。C_CENTROID用于獲取網(wǎng)格單元中心坐標。宏參數(shù):realx[ND_ND],cell_tc,Thread*t。x傳址調(diào)用返回。cell_trealx[cell_trealx[ND_ND];realy;y=x[1];C_VOLUME宏用于獲取網(wǎng)格單元體積。宏參數(shù):cell_tc,Thread*t。real值。realvol=C_NNODES宏用于獲取單元體內(nèi)節(jié)點數(shù)量。宏參數(shù):cell_tc,Thread*tint宏參數(shù):cell_tc,Thread*t(5)int(5)mem.h3-5。3-5cell_tc,Threadcell_tc,Threadcell_tc,Threadreal,ucell_tc,Threadreal,vcell_tc,Threadreal,wcell_tc,Threadcell_tc,Threadcell_tc,Threadcell_tc,Threadcell_tc,Threadcell_tc,Threadcell_tc,Thread*t,intcell_tc,Threadcelltc,Threadcell_tc,Thread*t,real變量nv(6)(6)計算單元內(nèi)部物理量的梯度的宏,通常以_GC_T_G例如:當定義了能量源項后,UDF中能夠利用宏C_T_G訪問單元溫度,卻不能使用Keeptemporarysolvermemoryfrombeingfreed?yesrealxtG=3-63-6cell_tc,Threadcell_tc,Threaducell_tc,Threadvcell_tc,Threadwcell_tc,Threadcell_tc,Threadcell_tc,Threadcell_tc,Threadcell_tc,Threadcell_tc,Threadcell_tc,Thread*t,int注:1.C_P_G2.C_YI_G只能用于密度基求解器,若要在壓力基中使用此宏,則需要設(shè)置'species/save-gradients?為#tFluent提供的拓撲關(guān)系宏可以方便地定義連接網(wǎng)格中心的矢量以及連接網(wǎng)格中心和面中量的梯度可用,則網(wǎng)格面上該標量的值可近似為:f0?式中,drf的標量DfDff?fFluent非結(jié)構(gòu)求解器中,沿面法線方向的梯度可 (

→→?→ 0A ADf →→f?A?es→→A?

A?es c0c0c1c0c13-23-7所示。3-2相鄰網(wǎng)格c0及c13-7Threadc0的threadThreadc1的thread(2)(2)3-83-8返回參數(shù)表(一realrealc0c1→→→A?realc0realc1利用宏可以輸出給定網(wǎng)格面t3-93-9返回參數(shù)表(二realrealc0→→→A?realc0(4)(4)TRUEthread.hudf.h中,無需額外包含。BOUNDARY_SECONDARY_GRADIENT_SOURCE(source,n,dphi,dx,A_by_es,k)可以3-103-10返回參數(shù)表(三SvarSvarrealrealc0→→→A?realThreadUDFThread進行Lookup_Thread實現(xiàn)。宏參數(shù):Domain*d,intid。返回值:Thread*t。ID3-33-3zone(區(qū)域)ID#include"udf.h"DEFINE_ADJUST(print_f_centroids,#include"udf.h"DEFINE_ADJUST(print_f_centroids,domain)realFC[2];face_tf;intID=1;Thread*thread=Lookup_Thread(domain,ID);begin_f_loop(f,thread)printf("x-coord=%f,y-coord=%f",FC[0],IDTHREAD_ID來實現(xiàn)。宏參數(shù):Thread*tThreadID值,int類型。(3) intzone_id=(3)Get_DomainGet_Domainid的區(qū)DEFINE_ON_DEMAND宏。宏參數(shù):intid。返回值:Domain*d3-43-4Domainmixture_domain=Domainsubdomain=F_PROFILE來實現(xiàn)。宏參數(shù):face_tf,Thread*t,inti。返回值:void(5)#include(5)#includerealx[ND_ND];realy;face_tf;y=x[1];F_PROFILE(f,t,i)=1.1e5-THREAD_SHADOWThread。宏參數(shù):Thread*t。返回值:Thread*tUDF3-11。3-11(cellDomainDomainThread(faceThreadThreadDomaincell_tcell_tThreadbegin_c_loop(c,end_c_loop(c,c_threadbegin_c_loopbegin_c_loop(c,temp+=C_T(c,end_c_loop(c,利用宏begin_f_loop與end_f_loop來遍歷給定faceface_tface_tThreadbegin_f_loop(f,end_f_loop(f,begin_f_loop(f,begin_f_loop(f,temp+=F_T(f,end_f_loop(f,cell_tc;Thread*cell_tc;Thread*t;face_tf;Thread*tf;intn;c_face_loop(c,t,n)/*loopsoverallfacesofacellf=tf=cell_tc;Threadcell_tc;Thread*t;intn;Nodenode=face_tface_tThreadintintNodenode=UDF對于這些向量操作宏,UDF頭文件中對這些宏的名稱進行了區(qū)分。如宏名稱中包含v,則表示向量,S表示標量,D2D模型中,第三個分量被忽略。2D3DUDF2D3D的表達式。第一種方法:可以使用顯式方2D3DifRP_2D和RP_2Dz方向分量。NVND宏作用于標量或#if/*#if/*3D*/ND(1)ND_NDUDFNDND_ND、ND_SUMND_SET(1)ND_NDND_ND2D23D3ND_NDND_NDND_ND=1是錯誤的。在實際應(yīng)用過程中,ND_ND當做是數(shù)字。 real (2)ND_SUM(2)ND_SUM宏ND_SUM2D3D(3)ND_SET(3)ND_SET宏ND_SET2Duu=v=3Duu=v=w=NV(1)NV_VNVNDNV(1)NV_VNV_VNV_V(a,NV_V(a,=,a[0]a[0]=a[1]=a[2]=(2)NV_VVa[0](2)NV_VVa[0]+=a[1]+=a[2]+=NV_VVNV_VV(aNV_VV(a,=,x,+,(3)NV_V_VS(3)NV_V_VS宏a[0]=x[0]+a[1]=x[1]+NV_V_VS(a,NV_V_VS(a,=,x,+,y,*,(4)NV_VS_VS(4)NV_VS_VS宏a[0]=x[0]+y[0]*a[1]=x[1]+y[1]*NV_VS_VS(a,NV_VS_VS(a,=,x,*,2.0,+,y,*,a[0]a[0]=(x[0]*2.0)+a[1]=(x[1]*2.0)+(1)NV_MAG(1)NV_MAGNV_MAG2Dsqrt(x[0]*x[0]sqrt(x[0]*x[0]+3Dsqrt(x[0]*x[0]sqrt(x[0]*x[0]+x[1]*x[1]+NV_MAG22D(x[0]*x[0](x[0]*x[0]+3D(2)NV_DOT宏(2)NV_DOT宏(x[0]*x[0]+x[1]*x[1]+NV_DOT3-123-12NV_DOT2D3DND_DOT(x,y,z,u,v,(x*u+(x*u+y*v+NV_DOT(x,(x[0]*u[0]+(x[0]*u[0]+x[1]*u[1]+NVD_DOT(x,u,v,(x[0]*u+(x[0]*u+x[1]*v+(3)(3)2D:0.03D:(((x1)*(y2))-3D:(((x1)*(y2))-2D:0.03D:(((x2)*(y0))-2Dand3D:(((x0)*(y1))-a[0]=NV_CROSS_X(x,y);a[1]=NV_CROSS_Y(x,y);a[2]=FluentUDFUDF宏或RPUDF3-133-13UDF注:使用這些宏需要包含頭文件unsteady.hN_ITERUDFrealcurrent_time;current_timerealcurrent_time;current_time=CURRENT_TIME;realrealcurrent_time=RP_Get_Real("flow-RP3-143-14RPUDFRP注:RPANSYSFluentCI/O函數(shù)(scanf、print、fscanf、fprintf等)外,還Message(formate,…)Error(formate,…)MessageMessage intMessage(constchar 在引號中定義。格式字符串后面的替換變量的值將在顯示中替換為%type的所有實例。一些常見的格式字符串有:%d整數(shù),%f浮點數(shù),%g雙精度數(shù),%e指數(shù)格式的浮點數(shù)printfI/O函數(shù)。 Message("turbulentdissipation:%g\n", UDFMessageprintfUDFUDF。一個簡單的案例如下: Error("errorreading FluentUDFNULLP&Data_Valid_PUDF中出現(xiàn)的變量的單元格值是否可被cxbooleancxbooleanTRUEFALSEif(!Data_Valid_P())if(!Data_Valid_P())FLUID_THREAD_P來檢查CellThreadThreadCellThreadtThread1(或TRUE),如果不是,則0(FALSE)。宏形式如下:cxbooleancxbooleanGet_Report_Definition_ValuesAPIFluent中創(chuàng)建的任何報告的最后一次計intGet_Report_Definition_Values(constchar*intGet_Report_Definition_Values(constchar*name,inttimeStep/iteration,int*nrOfvalues,real*values,int*ids,int*index)013-153-15constchar*int01。0提供迭代時計算的值,1int*int*值對應(yīng)的表面/區(qū)域int*intintnrOfvalues=0;real*values;int*ids;intindex;intcounter;/*Firstcalltogetthenumberofvalues.Fornumberofvalues,theintpointerispassed,whichis0foriterations.*/intrv=Get_Report_Definition_Values("report-def-0",0,&nrOfvalues,NULL,if(rv==0&&Message("Reportdefinitionevaluatedatiterationhas%dvalues\n",/*Memoryisallocatedforvaluesandvalues=(real*)malloc(sizeof(real)*nrOfvalues);ids=(int*)malloc(sizeof(int)*nrOfvalues);/*Secondcalltogetdata.Thenumberofvaluesisnull,butthe*threearerv=Get_Report_Definition_Values("report-def-0",0,NULL,values,ids,Message("Valuescorrespondtoiterationindex:%d\n",for(counter=0;counter<nrOfvalues;counter++Message("reportdefinitionvalues:%d,%f\n",ids[counter],/*Memoryisfreed.*//*Thecommandcanbeunsuccessfulifthereportdefinitiondoesnotexistorifithasnotbeenevaluatedyet.*/if(rv==Message("reportdefinition:%sdoesnotexist\n","report-def-elseif(nrOfvalues==0Message("reportdefinition:%snotevaluatedatiterationlevel\n",intintnrOfvalues=0;real*values;int*ids;intindex;intcounter;/*Firstcalltogetthenumberofvalues.Fornumberofvalues,theintpointerispassed,whichis1fortimesteps.*/intrv=Get_Report_Definition_Values("report-def-0",1,&nrOfvalues,NULL,if(rv==0&&Message("Reportdefinitionevaluatedattime-stephas%dvalues\n",/*Memoryisallocatedforvaluesandvalues=(real*)malloc(sizeof(real)*nrOfvalues);ids=(int*)malloc(sizeof(int)*nrOfvalues);/*/*Secondcalltogetdata.Thenumberofvaluesisnull,butthe*threearerv=Get_Report_Definition_Values("report-def-0",1,NULL,values,ids,Message("Valuescorrespondtotime-stepindex:%d\n",for(counter=0;counter<nrOfvalues;counter++ /*Memoryisfreed.*//*Thecommandcanbeunsuccessfulifthereportdefinitiondoesnotexistorifithasnotbeenevaluatedyet.*/if(rv==Message("reportdefinition:%sdoesnotexist\n","report-def-elseif(nrOfvalues==0Message("reportdefinition:%snotevaluatedattime-steplevel\n",UDMmodels.h中UDSkDEFINEFluentUDFFluent在使用過程中的一些行為,一些比較常4-1。4-1在FluentUDFCaseHDF可以利用DEFINE_ADJUST宏調(diào)整或控制一些流動參數(shù)。例如用戶可以使用DEFINE_ADJUSTDEFINE_ADJUST宏在每一個迭代步被執(zhí)行,并且在每一個迭代中傳輸方程求解宏形式:DEFINE_ADJUST(named)宏參數(shù):symbolname,Domain*dDEFINE_ADJUST宏在每一步迭代過程中計算區(qū)域內(nèi)的console中。#include"udf.h"#include"udf.h"Thread/*Integratedissipation.*/realsum_diss=0.;cell_tc;sum_diss+=C_D(c,t)*printf("總耗散率%g\n"DEFINE_ADJUST宏編譯或解釋后,可以通過UserDefined標簽頁下的FunctionHooks...工具按鈕來加載,如圖4-1所示。選擇此工具按鈕后彈出UDF加載對話框,如圖4-2所示。4-14-2UDF4-3UDF這樣,DEFINE_ADJUSTFluent宏參數(shù):symbolname,Domain*d返回值:real0.2s。#include"udf.h"#include"udf.h"realrealflow_time=CURRENT_TIME;if(flow_time<0.5)time_step=0.1;time_step=0.2;returntime_step;RunCalculationTimeAdvancementTypeUser-DefinedFunctionUser-DefinedTimeStepUDF4-4所示。4-4宏參數(shù):symbolname#include#includeDomainThread/*Integratedissipation.*/realsum_diss=0.;cell_td=Get_Domain(1);/*mixturedomainifmultiphaseifsum_diss+=C_D(c,t)*C_VOLUME(c,t);printf("Volumeintegralofturbulentdissipation:%g\n",sum_diss);UDFFunctionHooks…打開宏加載對話4-6所示對話框中,選擇AvaliableExecuteatEndFunctionsUDFAdd按UDF宏。4-54-64-7UDFFluent退出時執(zhí)行操作(如保存數(shù)據(jù)等宏參數(shù):symbolnameatExit4-8所示。4-8DEFINE_EXECUTE_FROM_GUISchemeGUI調(diào)用4-24-2SymbolUDFcharFluentUDFInt從SchemeGUI#include#includeDEFINE_EXECUTE_FROM_GUI(reset_udm,myudflib,Domain*domain=Get_Domain(1);/*GetdomainpointerThreadThread*t;cell_tc;inti;/*Returnifmodeisnotzeroif(mode!=0)/*ReturnifnoUser-DefinedMemoryisdefinedinANSYSFluentif(n_udm==0)/*Loopoverallcellthreadsindomain*/thread_loop_c(t,domain)/*Loopoverallcells*/begin_c_loop(c,t)/*SetallUDMstozerofor(i=0;i<n_udm;C_UDMI(c,t,i)=end_c_loop(c,DEFINE_EXECUTE_ON_LOADINGFluentUDF編譯加載過程中執(zhí)行一系列操(,Char*libnameUDF#includestatic#includestaticintversion=1;staticintrelease=Message("Loading%sversionDEFINE_EXECUTE_AFTER_CASE及EFINE_EXECUTE_AFTER_DATA宏用于在Fluentcasedata(,DEFINE_EXECUTE_ON_LOADING的參數(shù)相同,這兩個宏也無需掛載。Fluentcasedata文件時在控制臺輸出一段文本信息。#include"udf.h"DEFINE_EXECUTE_AFTER_CASE#include"udf.h"DEFINE_EXECUTE_AFTER_CASE(after_case,libname)Message("EXECUTE_AFTER_CASEcalledfrom$s\n",Message("EXECUTE_AFTER_DATAcalledfrom$s\n",DEFINE_INITFluentPatchDEFINE_INITUDFsymblename:UDFDomain*d#includecell_tc#includecell_tc;Thread*t;real/*loopoverallcells*/ifif(sqrt(ND_SUM(pow(xc[0]-pow(xc[1]-pow(xc[2]-0.5,2.)))<C_T(c,t)=C_T(c,t)=DEFINE_INITUser-DefinedFunctionHooks對話4-9所示。4-9UDFFluent宏參數(shù):symbolnameGet_DomainDomain結(jié)構(gòu)。f(T)

TTminTmaxTmin#include#includeDomainrealtavg=0.;realtmax=0.;realtmin=realtemp,volume,vol_tot;Thread*t;cell_td=Get_Domain(1);volume=C_VOLUME(c,t);temp=C_T(c,t);if(temp<tmin||tmin==0.)tmin=temp;if(temp>tmax||tmax==0.)tmax=temp;vol_tot+=volume;tavg+=tavg/=vol_tot;printf("\nTmin=%gTmax=%gTavg=%g\n",tmin,tmax,tavg);temp=C_UDMI(c,t,0)=(temp-tmin)/(tmax-UserDefinedExecuteonDemand...加載,如4-10所示。4-10UDFUDF4-114-11UDF宏參數(shù):symbolname返回值:realsymbol#include"udf.h"#include"udf.h"realinlet_velocity=Get_Input_Parameter("vel_in");realinlet_area=0.015607214;realvolumeFlow=inlet_velocity*inlet_area;returnvolumeFlow;UDF4-13所示。4-124-13DEFINE_RW_FILEcase或datacasedata文件中宏參數(shù):symbolname,F(xiàn)ILEfpfscanffprintf函數(shù)向文件寫入信息。dataDEFINE_ADJUSTdata文件中#include#includeintkount=0;/*defineglobalvariablekount*/printf("kount=printf("WritingUDFdatatodatafile...\n");fprintf(fp,"%d",kount);/*writeoutkounttodatafile*/printf("ReadingUDFdatafromdatafile...\n");fscanf(fp,"%d",&kount);/*readkountfromdatafile*/DEFINE_ADJUSTUser-DefinedFunctionHooks對話框中,4-14所示。4-14(CFF,如files宏參數(shù):symbolname,char*filenamefscanffprintf函數(shù)向文件寫入信息。鑒DEFINE_RW_FILEUDF宏的使用方式不再贅述。FluentUDFFluentDEFINE_ZONE_MOTION宏形式:DEFINE_ZONE_MOTION(name,omega,axis,origin,velocitytime,dtime)symbolnamereal*omegarealaxis[3]realorigion[3]:旋轉(zhuǎn)中心。realvelocity[3]:評議速度。realcurrent_time:當前時間。realdtime:當前時間步長。X1m/s平移速度,以及一個旋轉(zhuǎn)中心為(0,0Z250rad/s的旋轉(zhuǎn)速度。if(time<*omega=2500.0**omega=N3V_D(velocity,=,1.0,0.0,0.0);DEFINE_PROFILE④壁面熱條件(溫度、熱流、熱生成率、換熱系數(shù)、外部發(fā)射率等??宏形式:DEFINE_PROFILE(name,t,i)symbolnamethread*tinti#include"udf.h"real#include"udf.h"realx[ND_ND];realy;face_tf;y=x[1];F_PROFILE(f,t,i)=1.1e5-宏形式:DEFINE_PROPERTY(name,c,t)symbolname:宏名稱。cell_tc:網(wǎng)格單元索引。Thread*t#include"udf.h"#include"udf.h"realrealtemprealtemp=C_T(c,t);if(temp>288.)mu_lam=5.5e-3;elseif(temp>286.)mu_lam=143.2135-0.49725*temp;mu_lam=1.;returnFluentDEFINE_SPECIFIC_HEATsymbolname:宏名稱。realT:溫度。real*h:焓值。real*yi返回值:real#include"udf.h"DEFINE_SPECIFIC_HEAT(my_user_cp,#include"udf.h"D

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論