FLUENT多相模型的數(shù)據(jù)結(jié)構(gòu)及循環(huán)_第1頁(yè)
FLUENT多相模型的數(shù)據(jù)結(jié)構(gòu)及循環(huán)_第2頁(yè)
FLUENT多相模型的數(shù)據(jù)結(jié)構(gòu)及循環(huán)_第3頁(yè)
FLUENT多相模型的數(shù)據(jù)結(jié)構(gòu)及循環(huán)_第4頁(yè)
FLUENT多相模型的數(shù)據(jù)結(jié)構(gòu)及循環(huán)_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1

名詞解釋學(xué)習(xí)FLUENTUDF編程,必須要從網(wǎng)格拓?fù)浜蛿?shù)據(jù)結(jié)構(gòu)(幾何數(shù)據(jù)、求解數(shù)據(jù)存儲(chǔ)的空間)兩方面來(lái)理解一些重要概念。節(jié)點(diǎn)node;面face;單元cell。線thread:=1\*GB2⑴線是一塊存儲(chǔ)空間,有節(jié)點(diǎn)線、面線和單元線三類(lèi),存儲(chǔ)了存在某種聯(lián)系的節(jié)點(diǎn)組、面組或單元組的信息。=2\*GB2⑵定義線的指針Thread*t;=3\*GB2⑶線對(duì)應(yīng)的是網(wǎng)格拓?fù)淅锩娴膠one,例如某邊界就是一個(gè)zone,顯然它對(duì)應(yīng)的存儲(chǔ)空間是面線。=4\*GB2⑷在多相模型中,還要區(qū)分超級(jí)線superthread和子線subthread。域domain:=1\*GB2⑴域是比線更大的存儲(chǔ)空間,包含了存在某種聯(lián)系的所有線。=2\*GB2⑵定義域的指針Domain*d;=3\*GB2⑶域?qū)?yīng)的是網(wǎng)格拓?fù)淅锩娴膁omain,由網(wǎng)格定義的所有節(jié)點(diǎn)、面和單元線索的組合。=4\*GB2⑷在多相模型中,還要區(qū)分超級(jí)線superdomain和子線subdomain。總的邏輯關(guān)系是,域->線->節(jié)點(diǎn)/面/單元,這可以從常用的循環(huán)中看出:Domain

*domain;Thread

*c_thread;cell_t

c;/*cell_t是線索(thread)內(nèi)單元標(biāo)識(shí)符的*/thread_loop_c(c_thread,

domain)

/*對(duì)域內(nèi)所有單元線做loop*/{begin_c_loop(c,

c_thread)/*

對(duì)線內(nèi)所有單元做循環(huán)*/{……}end_c_loop(c,

c_thread)

}2

Multiphase-specificDataTypes多相專用數(shù)據(jù)類(lèi)型除了在\o"1.7.

DataTypesinANSYSFLUENT"DataTypesinANSYSFLUENT中呈獻(xiàn)的ANSYSFLUENT專用的數(shù)據(jù)類(lèi)型,還有一些專用于多相UDF的線(thread)和域(domain)數(shù)據(jù)結(jié)構(gòu)。當(dāng)使用多相模型時(shí)(Mixture,VOF,orEulerian),這些數(shù)據(jù)結(jié)構(gòu)用來(lái)存儲(chǔ)混合相(mixtureofallofthephases)和每個(gè)單獨(dú)相的屬性和變量。在多相應(yīng)用中,最高級(jí)別的域是超級(jí)域(superdomain)。每一相占據(jù)一個(gè)子域(subdomain)。第三種域是交互域(interactiondomain),被用于相的相互作用機(jī)制的定義。如果需要混合態(tài)屬性或變量(各相的總和),應(yīng)該用超級(jí)域;而如果需要每單相(individualphase)的這些信息,則應(yīng)該使用子域。在單相模型情況(只有一相),混合相(mixture)的概念用來(lái)代表各組分(species,components)的總和;多相模型的情況,它代表各相的總和。這個(gè)區(qū)別非常重要,因?yàn)镕LUENT有能力處理多相多組分分析。這時(shí)一個(gè)相可能是多個(gè)組分的混合。因?yàn)榍蠼庑畔⒋鎯?chǔ)在線thread數(shù)據(jù)結(jié)構(gòu)中,線必須與超級(jí)域或子域聯(lián)系起來(lái)。也就是說(shuō),對(duì)于每一個(gè)在超級(jí)域中定義的單元線或面線,在各子域里面都有對(duì)應(yīng)有單元線或面線。有些超級(jí)域的線包含的信息與相應(yīng)的子域里的線共享。超級(jí)域內(nèi)的線稱為超級(jí)線,mixture-levelthread,而與子域聯(lián)系的線稱為子線,phase-levelthread.\o"Figure

1.5

DomainandThreadStructureHierarchy"Figure1.5總結(jié)了域和線的體系結(jié)構(gòu)。\o"Figure

1.5

DomainandThreadStructureHierarchy"Figure1.5引入了domain_id和phase_domain_index的概念。domain_id用于將超級(jí)域與子域區(qū)分開(kāi),超級(jí)域(mixturedomain)的domain_id總是1,第一相對(duì)應(yīng)的子域domain_id是2,以此類(lèi)推,同時(shí)交互域也有domain_id??梢允褂煤瘮?shù)Domain*d=Get_Domain(domain_id)來(lái)得到域的指針d。在Phases設(shè)置面上,ID顯示的就是domain_id。phase_domain_index用來(lái)區(qū)分不同單相的線。第一相的phase_domain_index是0,第二相的phase_domain_index是1。不同多相模型的數(shù)據(jù)結(jié)構(gòu)也有不同。比如,在Mixture模型中,只求解混合相的動(dòng)量方程,而在Eulerian模型中,對(duì)每一相都要求解動(dòng)量方程。如果對(duì)它們指定源項(xiàng),數(shù)據(jù)結(jié)構(gòu)式不同的。勾在(hookedto)混合態(tài)的UDF函數(shù),求解器為其傳遞超級(jí)域結(jié)構(gòu);而勾在某一相的函數(shù)則獲得子域結(jié)構(gòu)輸入。DEFINE_ADJUST和DEFINE_INITUDFs是固定超級(jí)域上的。其他類(lèi)型的函數(shù)可以勾在不同的相域。3

AdvancedMultiphaseMacros高級(jí)多相宏對(duì)于大多數(shù)多相模型的標(biāo)準(zhǔn)UDF,函數(shù)需要的變量(域指針,線指針等)都會(huì)由求解器在求解時(shí)直接通過(guò)參數(shù)的方式傳遞給函數(shù)。你所要完成的就是將這些函數(shù)勾到你的模型。但是,可能有些復(fù)雜函數(shù)需要一些沒(méi)有通過(guò)參數(shù)直接傳遞的變量。比如,DEFINE_ADJUST,DEFINE_INIT函數(shù)只獲得了超級(jí)域的變量。如果UDF需要相域(subdomain)的指針,則需要使用本節(jié)所述的宏來(lái)獲取。ON_DEMANDUDF沒(méi)有獲得任何參數(shù)傳遞,因此ondemand函數(shù)也常常要用到這些宏。當(dāng)你在編寫(xiě)多相模型的UDF時(shí),必須要牢記多相模型的數(shù)據(jù)結(jié)構(gòu)體系。要注意函數(shù)獲得的參數(shù),函數(shù)勾在什么域上(GUI或者固定的)。同樣還有注意你使用的多相模型的類(lèi)型。3.1PhaseDomainPointer(DOMAIN_SUB_DOMAIN)相域(子域)的指針已有超級(jí)域指針的情況下,有兩種方式獲取子域的指針:DOMAIN_SUB_DOMAIN宏或Get_Domain。int

phase_domain_index

=

0;

/*

第一相的phase_domain_index是

0

*/Domain

*mixture_domain;

/*

超級(jí)域的指針

*/Domain

*subdomain

=

DOMAIN_SUB_DOMAIN(mixture_domain,phase_domain_index);

在上面的例子中,要事先獲得超級(jí)域的指針。如前文所述,某些函數(shù)勾在超級(jí)域上,求解器就會(huì)自動(dòng)傳遞超級(jí)域指針到UDF。而某些函數(shù)則不能顯式地得到超級(jí)域的指針,則需要用宏Get_Domain(1)來(lái)獲取。3.2

Phase-LevelThreadPointer(THREAD_SUB_THREAD)相級(jí)線的指針已知超級(jí)線的指針,則可以使用THREAD_SUB_THREAD宏求的其子線的指針。intphase_domain_index=0;/*

第一相的phase_domain_index是

0

*/Thread*mixture_thread;/*

超級(jí)線的指針

*/Thread*subthread=THREAD_SUB_THREAD(mixture_thread,phase_domain_index);在上面的例子中,要事先獲得超級(jí)線的指針。同樣,超級(jí)線的指針可能通過(guò)函數(shù)形參獲取,或者使用Lookup_Thread獲取。int

zone_ID

=

2;/*通過(guò)ZONEID來(lái)求的線*/Thread

*thread_name

=

Lookup_Thread(domain,zone_ID);3.2

PhaseThreadPointerArray(THREAD_SUB_THREADS)子線的指針數(shù)組已知超級(jí)線的指針,可以使用THREAD_SUB_THREADS宏求得其所有子線的指針組成的數(shù)組。Thread

*mixture_thread;Thread

**pt;

/*

initialize

pt

*/pt

=

THREAD_SUB_THREADS(mixture_thread);

pt[i],數(shù)組的一個(gè)單元,是phase_domain_index為i的單相對(duì)應(yīng)的子線的指針。例如,C_R(c,pt[i])可用于返回第i相在單元c的密度。3.4

MixtureDomainPointer(DOMAIN_SUPER_DOMAIN)超級(jí)域的指針如果已知某子域的指針,可以用DOMAIN_SUPER_DOMAIN宏求的它的超級(jí)域(可以成為父域)的指針。Domain

*subdomain;Domain

*mixture_domain

=

DOMAIN_SUPER_DOMAIN(subdomain);

在上面的例子中,要事先獲得子域(即相域)的指針。如果UDF勾在某一相域上,相域的指針也可以由求解器自動(dòng)傳遞給UDF。在當(dāng)前版本FLUENT中,DOMAIN_SUPER_DOMAIN與Get_Domain(1)返回的指針是一樣的。但是還是建議在UDF中,盡可能使用DOMAIN_SUPER_DOMAIN,考慮到FLUENT版本的更新,未來(lái)可能處理多個(gè)超級(jí)域。3.5

MixtureThreadPointer(THREAD_SUPER_THREAD)超級(jí)線的指針如果已知子線的指針,可以用THREAD_SUPER_THREAD宏求超級(jí)線的指針。Thread

*subthread;Thread

*mixture_thread

=

THREAD_SUPER_THREAD(subthread);

3.6DomainID(DOMAIN_ID)如果已知某一子域的指針,可以用DOMAIN_ID宏獲取該子域的domain_id。Domain

*subdomain;int

domain_id

=

DOMAIN_ID(subdomain);

3.7

PhaseDomainIndex(PHASE_DOMAIN_INDEX)如果已知某一子域的指針,可以用PHASE_DOMAIN_INDEX宏獲取該子域的phase_domain_index。Domain

*subdomain;int

phase_domain_index

=

PHASE_DOMAIN_INDEX(subdomain);

4.

MultiphaseLoopingMacros多相循環(huán)宏本節(jié)討論只在多相UDF中應(yīng)用的循環(huán)。4.1

LoopingOverPhaseDomainsinMixture(sub_domain_loop)子域循環(huán)該循環(huán)對(duì)所有子域進(jìn)行循環(huán),這是一種獲取各單相域的指針的方法之一。int

phase_domain_index;/*

index

of

subdomain

pointers*/Domain

*mixture_domain;Domain

*subdomain;sub_domain_loop(subdomain,

mixture_domain,

phase_domain_index)

參數(shù)中,subdomain是子域的指針;mixture_domain是超級(jí)域的指針。例子:下面UDF分塊初始化某一相的體積分?jǐn)?shù),只在求解開(kāi)始執(zhí)行一次。/*****************************************************************UDF

for

initializing

phase

volume

fraction*****************************************************************/#include

"udf.h"/*

domain

pointer

that

is

passed

by

INIT

function

is

mixture

domain*/DEFINE_INIT(my_init_function,

mixture_domain){int

phase_domain_index;cell_t

cell;Thread

*cell_thread;Domain

*subdomain;real

xc[ND_ND];/*

loop

over

all

subdomains

(phases)

in

the

superdomain

(mixture)

*/sub_domain_loop(subdomain,

mixture_domain,

phase_domain_index){/*

loop

if

secondary

phase*/if

(DOMAIN_ID(subdomain)

==

3)/*

loop

over

all

cell

threads

in

the

secondary

phase

domain*/thread_loop_c

(cell_thread,subdomain){/*

loop

over

all

cells

in

secondary

phase

cell

threads*/begin_c_loop_all

(cell,cell_thread){C_CENTROID(xc,cell,cell_thread);if

(sqrt(ND_SUM(pow(xc[0]

-

0.5,2.),pow(xc[1]

-

0.5,2.),pow(xc[2]

-

0.5,2.)))<0.25)/*set

volume

fraction

to

1

for

centroid*/C_VOF(cell,cell_thread)

=

1.;else/*otherwise

initialize

to

zero*/C_VOF(cell,cell_thread)

=

0.;}end_c_loop_all

(cell,cell_th

溫馨提示

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

評(píng)論

0/150

提交評(píng)論