版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、本章包含了 FLUENT 中如何寫 UDFs 的概述。概述寫解釋式 UDFs 的限制FLUENT 中 UDFs 求解過程的順序FLUENT 網(wǎng)格拓?fù)銯LUENT 數(shù)據(jù)類型使用 DEFINE Macros 定義你的 UDF在你的 UDF 源文件中包含 udf.h 文件定義你的函數(shù)中的變量函數(shù)體UDF 任務(wù)為多相流應(yīng)用寫 UDFs在并行中使用你的 UDF3.1 概述(roduction)在你開始編寫將掛到 FLUENT 代碼以增強(qiáng)其標(biāo)準(zhǔn)特征的 UDF 之前,你必須知道幾個基本的要求。首先,UDFs 必須用 C 語言編寫。它們必須使用 FLUENT提供的 DEFINE macros 來定義。UDFs
2、 必須含有包含于源代碼開始指示的 udf.h文件;它允許為 DEFINE macros 和包含在編譯過程的其它 FLUENT 提供的函數(shù)定義。UDFs 只使用預(yù)先確定的宏和函數(shù)從 FLUENT 求解器數(shù)據(jù)。通過 UDF傳遞到求解器的任何值或從求解器返回到 UDF 的,都指定為國際(SI)總之,當(dāng)寫 UDF 時,你必須記住下面的 FLUENT 要求。 UDFs:。1.2.3.4.5.采用 C 語言編寫。必須為 udf.h 文件有一個包含。使用 Fluent.Inc 提供的 DEFINE macros 來定義。使用 Fluent.Inc 提供的預(yù)定義宏和函數(shù)來FLUENT 求解器數(shù)據(jù)。必須使返回到
3、 FLUENT 求解器的所有值指定為國際。3.2 寫解釋式 UDFs 的限制(Restriction on Writingreted UDFs)無論 UDFs 在 FLUENT 中以解釋還是編譯方式執(zhí)行,用戶定義 C 函數(shù)(說明在Section 3.1 中)的基本要求是相同的,但還是有一些影響解釋式 UDFs 的編程限制。FLUENT 解釋程序不支持所有的 C 語言編程原理。解釋式 UDFs 不能包含以下 C 語言編程原理的任何一個:1.2.3.4.5.6.7.在goto 語句。非 ANSI-C 原型語法直接的數(shù)據(jù)結(jié)構(gòu)查詢(direct data structure referen局部結(jié)構(gòu)的)
4、聯(lián)合(unions)指向函數(shù)的指針(po函數(shù)數(shù)組。ers to functions)FLUENT 求解器數(shù)據(jù)的方式上解釋式 UDFs 也有限制。解釋式 UDFs 不能在 FLUENT 結(jié)構(gòu)中的數(shù)據(jù)。它們只能通過使用 Fluent 提供的宏間這些數(shù)據(jù)。另一方面,編譯式 UDFs 沒有任何 C 編程語言或其它注意的直接接地求解器數(shù)據(jù)結(jié)構(gòu)的限制。3.3 FLUENT 求解過程中UDFs 的先后順序(Sequencing of UDFshe FLUENTSolution Pros)當(dāng)你開始寫 UDF 代碼的過程時(依賴于你寫的 UDF 的類型),理解 FLUENT 求解過程中 UDFs 調(diào)用的內(nèi)容或許
5、是重要的。求解器中包含連接你寫的用戶定義函數(shù)的 call-outs。知道 FLUENT 求解過程中迭代之內(nèi)函數(shù)調(diào)用的先后順序能幫助你在給定的任意時間內(nèi)確定那些數(shù)據(jù)是當(dāng)前的和有效的。分離式求解器在分離式求解器求解過程中(Figure 3.3.1),用戶定義的初始化函數(shù)(使用 DEFINE_INIT 定義的)在迭代循環(huán)開始之前執(zhí)行。然后迭代循環(huán)開始執(zhí)行用戶定義的調(diào)整函數(shù)(使用 DEFINE_ADJUST 定義的)。接著,求解守恒方程,順序是從動量方程和后來的壓力修正方程到與特定計算相關(guān)的附加標(biāo)量方程。守恒方程之后,屬性被更新(包含用戶定義屬性)。這樣,如果你的模型涉及到氣體定律,這時,密度將隨更新
6、的溫度(和壓力 and/or 物質(zhì)質(zhì)量分?jǐn)?shù))而被更新。進(jìn)行收斂或者附加要求的迭代的檢查,循環(huán)或者繼續(xù)或停止。Figure 3.3.1: Solution Procedure for the Segregated Solver耦合求解器在耦合求解器求解過程中(Figure 3.3.2),用戶定義的初始化函數(shù)(使用 DEFINE_INIT 定義的)在迭代循環(huán)開始之前執(zhí)行。然后,迭代循環(huán)開始執(zhí)行用戶定義的調(diào)整函數(shù)(使用 DEFINE_ADJUST 定義的)。接著,F(xiàn)LUENT 求解連續(xù)、動量和(適合的地方)能量的控制方程和同時地一套物質(zhì)輸運(yùn)或矢量方程。其余的求解步驟與分離式求解器相同(Figure
7、3.3.1)。Figure 3.3.2: Solution Procedure for the Coupled Solver3.4 FLUENT 網(wǎng)格拓?fù)銯LUENT 特殊的數(shù)據(jù)類型之前,你必須理解網(wǎng)格拓?fù)鋵W(xué)的術(shù)語在開始因為 FLUENT 數(shù)據(jù)類型是為這些實(shí)體定義的。下面是顯示在 Figure 3.4.1 中的網(wǎng)格實(shí)體的定義。單元(cell)單元中心(cell center)面(face)邊(edge) 節(jié)點(diǎn)(node)單元線索(cell thread)區(qū)域被分割成的控制容積FLUENT 中場數(shù)據(jù)的地方單元(2D or 3D)的邊界面(3D)的邊界網(wǎng)格點(diǎn)在其中分配了材料數(shù)據(jù)和源項的單元組面線索
8、(face thread)節(jié)點(diǎn)線索(node thread)在其中分配了邊界數(shù)據(jù)的面組節(jié)點(diǎn)組區(qū)域()由網(wǎng)格定義的所有節(jié)點(diǎn)、面和單元線索的組合Figure 3.4.1: Grid Terminology3.5 FLUENT 數(shù)據(jù)類型(FLUENT Daypes)除了標(biāo)準(zhǔn)的 C 語言數(shù)據(jù)類型如 real,等可用于在你的 UDF 中定義數(shù)據(jù)外,還有幾個 FLUENT 指定的與求解器數(shù)據(jù)相關(guān)的數(shù)據(jù)類型。這些數(shù)據(jù)類型描述了FLUENT 中定義的網(wǎng)格的計算(見 Figure 3.4.1)。使用這些數(shù)據(jù)類型定義的變量既有代表性地補(bǔ)充了 DEFINE macros 的自變量,也補(bǔ)充了其它專門的FLUENT 求
9、解器數(shù)據(jù)的函數(shù)。一些更為經(jīng)常使用的 FLUENT 數(shù)據(jù)類型如下:cell_t face_tThreadNodecell_t 是線索(thread)內(nèi)單元標(biāo)識符的數(shù)據(jù)類型。它是一個識別給定線索內(nèi)單元的整數(shù)索引。face_t 是線索內(nèi)面標(biāo)識符的數(shù)據(jù)類型。它是一個識別給定線索內(nèi)面的整數(shù)索引。Thread 數(shù)據(jù)類型是 FLUENT 中的數(shù)據(jù)結(jié)構(gòu)。它充當(dāng)了一個與它描述的單元或面的組合相關(guān)的數(shù)據(jù)容器。Node 數(shù)據(jù)類型也是 FLUENT 中的數(shù)據(jù)結(jié)構(gòu)。它充當(dāng)了一個與單元或面的拐角相關(guān)的數(shù)據(jù)容器。數(shù)據(jù)類型代表了 FLUENT 中最高水平的數(shù)據(jù)結(jié)構(gòu)。它充當(dāng)了一個與網(wǎng)格中所有節(jié)點(diǎn)、面和單元線索組合相關(guān)的數(shù)據(jù)容器
10、。!注意,F(xiàn)LUENT 中所有數(shù)據(jù)類型都是 情形敏感的(case-sensitive)。3.6 使用 DEFINE Macros 定義你的 UDF(Defining Your UDF Using DEFINE Macros)Fluent.Inc 為你提供了一套你必須使用它來定義你的 UDF 的預(yù)定義函數(shù)。這些定義 UDFs 的函數(shù)在代碼中作為宏執(zhí)行,可在作為 DEFINE(全部大寫)宏的文獻(xiàn)中查閱。對每個 DEFINE 宏的完整描述和它的應(yīng)用例子,可參考第四章。 DEFINE 宏的通用格式為:DEFINE_MACRONAME(udf_name, passed-in variables)這里括號
11、內(nèi)第一個自變量是你的 UDF 的名稱。名稱自變量是情形敏感的必須用小寫字母指定。一旦函數(shù)被編譯(和連接),你為你的 UDF 選擇的名字在 FLUENT下拉列表中將變成可見的和可選的。第二套輸入到 DEFINE 宏的自變量是從 FLUENT 求解器傳遞到你的函數(shù)的變量。在下面的例子中,宏DEFINE_PROFILE(inlet_x_velocity, thread, index)用兩個從 FLUENT 傳遞到函數(shù)的變量 thread 和 index 定義了名字為 inlet_x_velocity 的分布函數(shù)。這些 passed-in 變量是邊界條件區(qū)域的 ID(作為指向 thread 的指針)而
12、 index 確定了被的變量。一旦 UDF 被編譯,它的名字(例如,inlet_x_velocity)將在 FLUENT 適當(dāng)?shù)倪吔鐥l件面板(例如,Velocity Inlet面板)的下拉列表中變?yōu)榭梢姷暮涂蛇x的。!注意,所有用于 DEFINE 宏的自變量必須放在你的源代碼的同一行上。分割DEFINE 的為幾行可能導(dǎo)致編譯錯誤。3.7 在你的 UDF 源文件中包含 udf.h 文件(Including the udf.h File in Your UDF Source File)DEFINE 宏的定義位于稱為 udf.h(見附錄 A 的列表)的頭文件中。為了使 DEFINE宏延伸到編譯過程,你
13、必須在你寫的每個 UDF 源文件的開始包含 udf.h 文件。#include udf.h/* Always include udf.h when writing a UDF. It translates the DEFINE */* and other macroso C, which is what the compiler understands.*/通過在你的 UDF 源文件中包含 udf.h,編譯過程中所有的 DEFINE 宏的定義與源代碼一起被包含進(jìn)來。udf.h 文件也為所有的 C 庫函數(shù)頭文件包含#include 指示,與大部分頭文件是針對 Fluent 提供的宏和函數(shù)是一樣的
14、(例如,mem.h)。除非有另外的指示,沒必要在你的 UDF 中個別地包含這些頭文件。還有,當(dāng)你編譯你的 UDF 時,你不必放置 udf.h 的拷貝在你的當(dāng)?shù)啬夸浵拢灰坏┠愕?UDF 被編譯,F(xiàn)LUENT 求解器會自動地從 Fluent.Inc/fluent6.x/src/目錄來讀取 udf.h 文件。舉例從前面部分的宏DEFINE_PROFILE(inlet_x_velocity, thread, index)定義在 udf.h 文件中為#define DEFINE_PROFILE(name, t, i) void name(Thread *t,在編譯過程中延伸為i)void inlet_x
15、_velocity(Thread *thread,index)名字為 inlet_x_velocity 的函數(shù)不返回值由于它被為空的數(shù)據(jù)類型。3.8 在你的函數(shù)中定義變量(Defining Variable in Your Function)在你的 UDF 源文件中包含了 udf.h 頭文件后,你必須定義真實(shí)的變量。使用把它們定義在所有函數(shù)之外的全局變量(如果它們被源文件中大部分或所有函數(shù)共享)是非常方便的。關(guān)于全局變量的信息見 Section 2.5.3。局部于函數(shù)的任何變量必須在函數(shù)內(nèi)。局部變量的信息見 Section 2.5.2。3.9 函數(shù)體(Functin Body)你的 UDF 源
16、文件中的 C 函數(shù)體被包含在 DEFINE之下的一對大括號內(nèi),顯示在下面的例子中。在這個例子中,mu_lan 和temp 是局部變量。只有cell_viscosity函數(shù)認(rèn)識它們。例子DEFINE_PROPERTY(cell_viscosity, cell, thread)real mu_lam;real temp = C_T(cell, thread);if (temp 288.) mu_lam = 5.5e-3;else if (temp 286.)mu_lam = 143.2135 - 0.49725 * temp; elsemu_lam = 1.;return mu_lam;3.10U
17、DF 任務(wù)(UDF Tasks)UDF 可執(zhí)行的任務(wù)有五種不同的類型:1.2.3.4.5.返回值修改自變量返回值和修改自變量修改 FLUENT 變量(不能作為自變量傳遞)寫信息到(或信息從)case 或 data 文件函數(shù)能返回值,除非它們在 udf.h 文件中被定義為 void。如果它們不返回值,它們能修改自變量,修改在內(nèi)存中的變量,或與 case 和 data 文件一起執(zhí)行輸入輸出(I/O)任務(wù)。在 Section 3.10.1-3.10.5 中,提供了描述上面提到的五種不同的函數(shù)任務(wù)中每一種的 UDF 源代碼例子。3.10.1 返回值的函數(shù)(Functiont Return a Valu
18、e)下面的 UDF 是一個返回值到 FLUENT 求解器的函數(shù)例子。名為 cell_viscosity 的函數(shù)計算了依賴溫度的粘度值(mu_lam)并返回這個值到求解器。/*/* UDFt returns a value to the solver*/*/* Specifies a temperature-dependent viscosity property/*/#include udf.hDEFINE_PROPERTY(cell_viscosity, cell, thread)real mu_lam;real temp = C_T(cell, thread);if (temp 288.)
19、 mu_lam = 5.5e-3;else if (temp 286.)mu_lam = 143.2135 - 0.49725 * temp; elsemu_lam = 1.;return mu_lam;cell_viscosity 使用了 DEFINE_PROPERTY宏(在 Section 4.3.6 中描述)來定義。DEFINE_PROPERTY 返回一個 udf.h 中指定的 real 數(shù)據(jù)類型。兩個 real 變量傳入函數(shù):通過函數(shù)計算的層流粘度 mu_lam; 和 C_T(cell,thread)的值,它是在考慮中的單元的溫度值。溫度值在它下降范圍的基礎(chǔ)上被檢測,mu_lam 的適
20、當(dāng)值被計算。在函數(shù)結(jié)尾,mu_lam 的計算值被返回。3.10.2 修改自變量的函數(shù)(Functiont Modify an Argument)下面的 UDF 是一個修改一個自變量的函數(shù)的例子。名字為 user_rate 的函數(shù)為一個兩種氣態(tài)物質(zhì)的的簡單系統(tǒng)產(chǎn)生一個自定義的體積反應(yīng)速率。Real 指針 rr 作為自變量傳遞給函數(shù),指針指向的變量在函數(shù)內(nèi)被修改。/*/* UDFt modifies one of its arguments*/*/* Specifies a reaction rate in a porous medium/*/#include udf.h#define K1 2.
21、0e-2#define K2 5.DEFINE_VR_RATE(user_rate, c, t, r, mole_weight, species_mf, rr, rr_t)real s1 = species_mf0;real mw1 = mole_weight0;if (FLUID_THREAD_P(t) & THREAD_VAR(t).fluid.porous)*rr = K1*s1/ else*rr = 0.;(1.+K2*s1),2.0)/mw1;user_rate 使用了 DEFINE_VR _RATE 宏(見 Section 4.3.14)來定義。該函數(shù)執(zhí)行一個當(dāng)前考慮的單元是否在多
22、孔區(qū)域的測試,這個反應(yīng)速率只應(yīng)用于多孔區(qū)域。real 指針變量 rr 是一個傳遞給函數(shù)的自變量。UDF 使用廢棄操作符 * 分配反應(yīng)棄指針 *rr。指針 rr 指向的目標(biāo)是設(shè)置反應(yīng)速率。通過這個操作,存速率值儲在內(nèi)存中這個指針上的字符的地址被改變了,不再是指針地址本身。(關(guān)于廢棄指針的詳細(xì)內(nèi)容見3)。3.10.3 返回一個值和修改一個自變量的函數(shù)(Functions Modify an Argument)t Return a Value ans下面的 UDF 是一個修改它的自變量并返回一個值到 FLUENT 求解器的函數(shù)例子。名字為 user_swirl 的函數(shù)修改 ds 自變量,指定旋轉(zhuǎn)速度
23、源項并返回它到求解器。/*/* UDFt returns a value and modifies an argument*/*/* Specifies a swirl-velocity source term/*/#include udf.h#define OMEGA 50./* roional speed of swirler */#define WEIGHT 1.e20 /* weighting coefficients in linearized equation */DEFINE_SOURCE(user_swirl, cell, thread, dS, eqn)real w_vel,
24、 xND_ND, y, source;C_CENTROID(x, cell, thread);y = x1;w_vel = y*OMEGA;/* linear w-velocity at the cell */source = WEIGHT*(w_vel - C_WSWIRL(cell,thread);dSeqn = -WEIGHT;return source;user_swirl 使用 DEFINE_SOURCE 宏來定義(在 Section 4.3.8 中描述)。 DEFINE_SOURCE 返回一個在 udf.h 中指定的數(shù)據(jù)類型。函數(shù)采用自變量 ds(它是數(shù)組的名字)并設(shè)置由 eqn
25、指定的元素為關(guān)于w 速度(w_vel)導(dǎo)數(shù)的值。(這是 z 動量方程源項)。這個函數(shù)也計算了旋轉(zhuǎn)速度源項的值 source,并返回這個值到求解器。3.10.4 修改 FLUENT 變量的函數(shù)(Functionst Modify a FLUENT Variable)下面的 UDF 是一個修改在內(nèi)存中 FLUENT 變量的函數(shù)例子。名字為inlet_x_velocity 的函數(shù)使用 F_PROFILE(a Fluent Inc. provided utility)來修改在內(nèi)存中的 x 速度分布邊界條件。/*/* UDFt modifies a FLUENT solver variable*/*/*
26、 Specifies a steady-se velocity profioundary condition/*/#include udf.hDEFINE_PROFILE(inlet_x_velocity, thread, index)real xND_ND; real y;face_t f;/* this will hold theition vector */begin_f_loop(f, thread)F_CENTROID(x,f,thread); y = x1;F_PROFILE(f, thread, index) = 20. - y*y/(.0745*.0745)*20.;end_f
27、_loop(f, thread)inlet_x_velocity 使用 DEFINE_PROF宏來定義(在 Section 4.3.5 中描述)。它的自變量是 thread 和 index。Thread 是一個指向面線索的指針,而 index 是一個每個循環(huán)內(nèi)為變量設(shè)置數(shù)值的整數(shù)。DEFINE_PROPERTY 在 udf.h 文件中一個返回 void 的數(shù)據(jù)類型。函數(shù)由變量 f 作為 face_t 數(shù)據(jù)類型開始。一維數(shù)組 x 和變量 y 是 real 數(shù)據(jù)類型。循環(huán)宏用來在區(qū)域中每個面上循環(huán)以創(chuàng)建型線或數(shù)據(jù)數(shù)組。在每個循環(huán)內(nèi),F(xiàn)_CENTROID 為含有 index f 的面輸出面質(zhì)心的值(
28、數(shù)組 x),index f 在由 thread指向的線索上。在 x1中的 y 坐標(biāo)分配給變量 y,它用于計算 x 速度。然后這個值分配給 F_PROFILE, 它使用整數(shù) index(由求解器傳遞個它)來設(shè)置內(nèi)存中面上的 x 速度值。3.10.5 寫入 Case 或 Data 文件或從中from a Case or Data File)的函數(shù)(Functionst Write to or Read下面的 C 源代碼包含了寫信息到 data 文件和讀回它的函數(shù)例子。這是一個包含多個連接在一起的 UDFs 的單個 C 文件例子。/*/* UDFst increment a variable, wr
29、ite it to a data file*/*/* and read it back in/*/#include udf.hkount = 0;/* define global variable kount */DEFINE_ADJUST(demo_calc,kount+;)prf(kount = %dn,kount);DEFINE_RW_FILE(writer, fp)prf(Writing UDF dao data file.n);fprf(fp, %d,kount); /* write out kount to data file */DEFINE_RW_FILE(reader, fp
30、)prf(Reading UDF data from data file.n);fscanf(fp, %d,&kount); /* read kount from data file */在頂部的列表中,整數(shù) kount 被定義為全局的(由于它被源代碼文件中的所有三個函數(shù)使用)并初始化為 0 。名字為 demo_calc 的第一個函數(shù),使用 DEFINE_SDJUST 宏來定義。(關(guān)于 DEFINE_ADJUST 的詳細(xì)信息見 Section4.2.1 )。在 demo_calc 中, kount 的值每次迭代后增加因為每次迭代調(diào)用 DEFINE_ADJUST 一次。名字為 writer 的第
31、二個函數(shù),使用 DEFINE_RW_FILE宏來定義。(關(guān)于 DEFINE_RW_FILE 的詳細(xì)信息見 Section 4.2.4)。當(dāng)保存數(shù)據(jù)文件時,它指示 FLUENT 寫當(dāng)前 kount 值到數(shù)據(jù)文件。名字為 reader 的第三個函數(shù),當(dāng)數(shù)據(jù)文件時,它指示 FLUENT 從這個數(shù)據(jù)文件中kount 的值。這三個函數(shù)一起工作如下。如果你運(yùn)行 10 次迭代計算(kount 將增加到值為 10)并保存這個數(shù)據(jù)文件,當(dāng)前 kount(10)的值被寫入你的數(shù)據(jù)文件。如果你讀這個數(shù)據(jù)返回到 FLUENT 并繼續(xù)計算,kount 將以值 10 開始隨著每次迭代繼續(xù)增加。注意,你可盡你所想的保存靜態(tài)
32、變量,但是必須保證以與它們被寫的相同順序來它們。3.11 為多相流應(yīng)用寫 UDFs(Writing UDFs for Mulutiphase Applications)當(dāng)一個多相流模型在 FLUENT 中被激活時,屬性和變量的和對單相一樣應(yīng)當(dāng)為所有相的混合設(shè)置它們。這可以通過使用附加線索(thread)和區(qū)域數(shù)據(jù)結(jié)構(gòu)在代碼中得以表明。3.11.1 多相應(yīng)用的數(shù)據(jù)結(jié)構(gòu)(Data Structure for Multiphase Applications)s and Threads)別的區(qū)域被用作超級區(qū)域。每相占據(jù)的區(qū)域用作子區(qū)域區(qū)域和線程(在多相流應(yīng)用中,第三種類型區(qū)域是相互作用區(qū),為了定義相間
33、的相互作用才引入它的。當(dāng)混合屬性和變量必要時(所有相的和),超級區(qū)域用于這些數(shù)量而子區(qū)域攜帶了單相的信息。在單一相中混合的概念用于描述所有種類(成分)的和而在多相中它描述了所有相的總和。這個區(qū)別是非常重要的因為以后代碼將延伸到多相多組分(例如,這里相是種類的混合)。程(thread)數(shù)據(jù)結(jié)構(gòu)中,線程必須既和超級區(qū)域相由于求解器的數(shù)據(jù)聯(lián)系又和每個子區(qū)域相聯(lián)系。就是說,對定義在超級區(qū)域上的每個單元或面線程,有相應(yīng)的單元或面線程定義在每個子區(qū)域上。定義在超級區(qū)域每個線程上的某些信息與子區(qū)域每個相應(yīng)線程上的共享。與超級區(qū)域相關(guān)的線程被用作超級線程,而與子區(qū)域相關(guān)的線程被用作相級別線程或子線程。區(qū)域和線
34、程的層次總結(jié)在Figure 3.11.1 中。Figure 3.11.1:and Thread Structure HierarchyFigure 3.11.1 也引入了_id 和 phase_indexed 的概念。_id 在 UDFs 中用于辨別超級區(qū)域從主要和次要的相級別區(qū)域中。超級區(qū)域的_id 值總是被指定為 1。相互作用_id_ids 不必要如Figure3.11.1 顯示的順序排列。dhase_index區(qū)域也有相同的在 UDFs 中用于從次要相級別線程中辨別主要相級別線程。對主要相級別線程,phase_index 總是分配值為 0。數(shù)據(jù)(Acsing Data)當(dāng)你寫 UDF 或
35、為多相應(yīng)用使用宏時,參考與嘗試其屬性的相(sub)或混合(super)相關(guān)的數(shù)據(jù)結(jié)構(gòu)(thread or)是很重要的。作為例子,宏 C_R(c,t)將返回線程 t的單元 c 上的密度。如果 t 是指向超級線程的指針,那么返回的是混合密度。如果 t 是指向子線程的指針,那么返回的是相密度。當(dāng)傳遞到你的 UDF 的線程或區(qū)域指針不被你的函數(shù)需要時,也有一些例子。這取決于你使用的多相模型,你嘗試修改的屬性或項(例如,你使用的那個 DEFINE 宏),還有受到影響的相或混合。為了更好地理解這點(diǎn),回想一個混合模型和多相模型之間區(qū)別的例子。在混合模型中,為混合相求解單一的動量方程,混合相的屬性由它的相的總
36、和來決定。在模型中,動量方程為每一相求解。當(dāng)使用混合模型時,F(xiàn)LUENT 允許你直接為混合相指定動量源項(使用DEFINE_SOURCE),但是不能為模型。對后者,你可以為單個相指定動量源項。因此,多相模型及被 UDF 修改的項,決定了那哪個區(qū)域或線程是需要的。從求解器傳遞到你的 UDF 的特定的區(qū)域或線程的結(jié)構(gòu)取決于你使用的 DEFINE 宏。例如, DEFINE_INIT 和 DEFINE_ADJUST 函數(shù)總是傳遞與超級區(qū)域相關(guān)的區(qū)域結(jié)構(gòu)。 DEFINE_ON_DEMAND 函數(shù)不能傳遞任何區(qū)域結(jié)構(gòu)。如果你的 UDF 不能明確地傳遞指針到你的函數(shù)定義要求的線程或區(qū)域,那么你可以使用 mu
37、ltiphase-specific utility macro 找會它(見第 6 章)。為了你方便使用,表 3.11.1-3.11.6 總結(jié)了每個多相模型和相,在該相上為每個給定變量指定了 UDF。從這些信息,你可推斷出那些區(qū)域結(jié)構(gòu)是從求解器傳遞到 UDF 的。單相和多相模型應(yīng)用 UDFs 之間的區(qū)別(DifferenMultiphase Applications)Betn UDFs for Single-Phase and注:在許多例子中,為單相寫的 UDF 源代碼和為多相寫的是相同的。例如,假設(shè)函數(shù)只從它被連接(hooked)到的相級別區(qū)域數(shù)據(jù),為單相邊界型線(使用 DEFINE_PROF
38、IEL 定義的)寫的 C 代碼為多相邊界型線寫的代碼之間是沒有區(qū)別的。然而,如果那些函數(shù)從除混合級別區(qū)域之外的任何區(qū)域數(shù)據(jù),調(diào)整和初始化 UDFs 的代碼對單相和多相是不同的。3.11.2 對多相模型使用 UDFs(Using UDFs for Multiphase Ms)在多相模型中,從求解器傳遞到你的 UDF 的數(shù)據(jù)結(jié)構(gòu)(例如區(qū)域和線程指針)取決于你使用的 DEFINE 宏。傳遞哪一個特定的區(qū)域或線程取決于函數(shù)連接到求解器的什么地方。例如,被連接到混合模型的函數(shù)傳遞超級區(qū)域結(jié)構(gòu),而連接到特定相的函數(shù)傳遞子區(qū)域結(jié)構(gòu)。表 3.11.1-3.11.6列舉了 DEFINE 和對每個多相模型 UDF
39、 被連接到的相。從這些信息你可推斷出那些數(shù)據(jù)結(jié)構(gòu)被傳遞?;叵?DEFINE_ADJUST 和 DEFINE_INIT UDFs are hardwired to the mixture-levelDEFINE_ON_DEMAND 函數(shù)不能連接到任何區(qū)域。,而Table 3.11.1: DEFINE Macro Usage for the VOF MVariableMacroPhase Specified Onvolume fractionDEFINE_PROFILEsecondary phase(s)velocityata boundaryDEFINE_PROFILEmixtureprerea
40、ta boundaryDEFINE_PROFILEmixtureboundary temperatureDEFINE_PROFILEmixtureturbulent kinetic energyDEFINE_PROFILEmixtureturbulent dissipation rateDEFINE_PROFILEmixturemass sourceDEFINE_SOURCEprindsecondary phase(s)momentum sourceDEFINE_SOURCEmixtureenergy sourceDEFINE_SOURCEmixtureturbulent kinetic en
41、ergy sourceDEFINE_SOURCEmixtureturbulent dissipationrate sourceDEFINE_SOURCEmixturedensityDEFINE_PROPERTYprindsecondary phase(s)viscosityDEFINE_PROPERTYprindsecondary phase(s)Table 3.11.2: DEFINE Macro Usage for the Mixture MVariableMacroPhase Specified Onvolume fractionDEFINE_PROFILEsecondary phase
42、(s)velocityata boundaryDEFINE_PROFILEprindsecondary phase(s)prereata boundaryDEFINE_PROFILEmixtureboundary temperatureDEFINE_PROFILEmixtureturbulent kinetic energyDEFINE_PROFILEmixtureturbulent dissipation rateDEFINE_PROFILEmixturemass sourceDEFINE_SOURCEprindsecondary phase(s)momentum sourceDEFINE_
43、SOURCEmixtureenergy sourceDEFINE_SOURCEmixtureturbulent kinetic energy sourceDEFINE_SOURCEmixtureturbulent dissipationrate sourceDEFINE_SOURCEmixturedensityDEFINE_PROPERTYprindsecondary phase(s)viscosityDEFINE_PROPERTYprindsecondary phase(s)diameterDEFINE_PROPERTYsecondary phase(s)slip velocityDEFIN
44、E_VECTOR_phaseeractionEXCHANGE_PROPERTYTable 3.11.3: DEFINE Macro Usage for the Eulerian M(Laminar Flow)VariableMacroPhaseSpecified Onvolume fractionDEFINE_PROFILEsecondary phase(s)velocityata boundaryDEFINE_PROFILEprindsecondary phase(s)prereata boundaryDEFINE_PROFILEmixturegranular temperatureDEFI
45、NE_PROFILEsecondary phase(s)mass sourceDEFINE_SOURCEprindsecondary phase(s)momentum sourceDEFINE_SOURCEprindsecondary phase(s)densityDEFINE_PROPERTYprindsecondary phase(s)viscosityDEFINE_PROPERTYprindsecondary phase(s)granular diameterDEFINE_PROPERTYsecondary phase(s)granular viscosityDEFINE_PROPERT
46、Ysecondary phase(s)granularbulk viscosityDEFINE_PROPERTYsecondary phase(s)granular frictional viscosityDEFINE_PROPERTYsecondary phase(s)drag coefficientDEFINE_EXCHANGE_PROPERTYphaseeractionlift coefficientDEFINE_EXCHANGE_PROPERTYphaseeractionTable 3.11.4: DEFINE Macro Usage for the Eulerian M(Mixtur
47、e Turbulence M)VariableMacroPhase Specified Onvolume fractionDEFINE_PROFILEsecondary phase(s)velocity at a boundaryDEFINE_PROFILEprindsecondary phase(s)prere at a boundaryDEFINE_PROFILEmixturegranular temperatureDEFINE_PROFILEsecondary phase(s)turbulent kinetic energyDEFINE_PROFILEmixtureturbulent d
48、issipation rateDEFINE_PROFILEmixturemass sourceDEFINE_SOURCEprindsecondary phase(s)momentum sourceDEFINE_SOURCEprindsecondary phase(s)turbulent kinetic energy sourceDEFINE_SOURCEmixtureturbulent dissip. rate sourceDEFINE_SOURCEmixturedensityDEFINE_PROPERTYprindsecondaryphase(s)viscosityDEFINE_PROPER
49、TYprindsecondary phase(s)granular diameterDEFINE_PROPERTYsecondary phase(s)granular viscosityDEFINE_PROPERTYsecondary phase(s)granular bulk viscosityDEFINE_PROPERTYsecondary phase(s)granular frictional viscosityDEFINE_PROPERTYsecondary phase(s)drag coefficientDEFINE_EXCHANGE_PROPERTYphaseeractionlif
50、t coefficientDEFINE_EXCHANGE_PROPERTYphaseeractionTable 3.11.5: DEFINE Macro Usage for the Eulerian M(Dispersed Turbulence M)VariableMacroPhase Specified Onvolume fractionDEFINE_PROFILEsecondary phase(s)velocity at a boundaryDEFINE_PROFILEprimary andsecondary phase(s)prere at a boundaryDEFINE_PROFIL
51、Emixturegranular temperatureDEFINE_PROFILEsecondary phase(s)turbulent kinetic energyDEFINE_PROFILEprimary phaseturbulent dissipation rateDEFINE_PROFILEprimary phasemass sourceDEFINE_SOURCEprimary andsecondary phase(s)momentum sourceDEFINE_SOURCEprimary andsecondary phase(s)turbulent kinetic energy s
52、ourceDEFINE_SOURCEprimary phaseturbulent dissip. rate sourceDEFINE_SOURCEprimary phasedensityDEFINE_PROPERTYprimary andsecondary phase(s)viscosityDEFINE_PROPERTYprimary andsecondary phase(s)granular diameterDEFINE_PROPERTYsecondary phase(s)granular viscosityDEFINE_PROPERTYsecondary phase(s)granular bulk viscosityDEFINE_PROPERTYsecondary phase(s)granular frictional viscosityDEFINE_PROP
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年福建莆田市特殊教育學(xué)校春季編外合同教師公開招聘2人考試參考題庫及答案解析
- 2026山東濰坊東辰育英中學(xué)教師招聘9人備考考試題庫及答案解析
- 2026年唐山青龍湖(河北)產(chǎn)業(yè)發(fā)展集團(tuán)有限公司招聘工作人員15名備考考試題庫及答案解析
- 2026黑龍江黑河學(xué)院招聘博士筆試備考題庫及答案解析
- 2026福建漳州詔安縣四都中心衛(wèi)生院招聘1人備考考試試題及答案解析
- 2026重慶璧山區(qū)人民政府璧城街道辦事處招聘2人筆試備考試題及答案解析
- 公安法律常識試題及答案
- 2026年普洱市教育體育局招募基礎(chǔ)教育銀齡教師備考題庫(71人)及答案詳解(新)
- 2026年度濟(jì)寧經(jīng)濟(jì)開發(fā)區(qū)事業(yè)單位公開招聘初級綜合類崗位人員備考題庫含答案詳解
- 2026廣東佛山市獅山鎮(zhèn)聯(lián)表小學(xué)招聘教師1人備考題庫及答案詳解(奪冠系列)
- 經(jīng)圓孔翼腭神經(jīng)節(jié)射頻調(diào)節(jié)術(shù)
- 中藥學(xué)教材課件
- 夢雖遙追則能達(dá)愿雖艱持則可圓模板
- 能源與動力工程測試技術(shù) 課件 第一章 緒論確定
- 配件售后管理制度規(guī)范
- 浙江省紹興市上虞區(qū)2024-2025學(xué)年七年級上學(xué)期期末語文試題(解析版)
- 《隸書千字文》-清席夔
- 2024校長在寒假期末教職工大會上精彩發(fā)言主要引用3個關(guān)鍵詞善待自己改變自己提升自己
- 《鐵路技術(shù)管理規(guī)程》(普速鐵路部分)
- 2024-2025年度“地球小博士”全國地理科普知識大賽參考試題庫(含答案)
- 2024年度工程成本控制優(yōu)化合同
評論
0/150
提交評論