覃一海
(廣西建設(shè)職業(yè)技術(shù)學(xué)院,南寧 530007)
在自然界和工業(yè)生產(chǎn)中,不可避免產(chǎn)生各種各樣的氣泡運(yùn)動現(xiàn)象,例如氣泡合并、上升、撕裂、排斥等。氣泡的運(yùn)動體現(xiàn)了極其復(fù)雜的物理現(xiàn)象,研究分析其運(yùn)動特性,對工業(yè)生產(chǎn)有著極其重要的意義。目前,學(xué)者針對氣泡運(yùn)動特性的研究有多種數(shù)值模擬方法,例如流體體積函數(shù)法(VOF)、水平集法(LSM)、格子玻爾茲曼方法(LBM)等。Hua等[1]將VOF與DPM相結(jié)合,成功模擬了二維垂直通道內(nèi)的大氣泡和小氣泡之間的運(yùn)動軌跡和相互作用情況。Karagadde等[2]使用LS方法,充分考慮了微尺度結(jié)構(gòu)域,研究了氫氣泡在該區(qū)域內(nèi)的生長和運(yùn)動,成功模擬了鋁鑄件凝固過程中氫氣泡的生長過程。LBM(Lattice Boltzmann Method,格子玻爾茲曼方法)[3]是當(dāng)前都受學(xué)者青睞的數(shù)值模擬方法,在研究氣泡運(yùn)動方面得到廣泛應(yīng)用,Inamuro等[4]提出了一種具有大密度差的兩相不混溶流體的格子Boltzmann方法,并成功應(yīng)用于毛細(xì)波、二元液滴碰撞和氣泡流的模擬。Chen等[5]采用LBM模擬了恒溫加熱表面氣泡的生長過程,研究了氣泡生長和脫離對溫度分布的影響。LBM是目前使用較多的數(shù)值模擬方法,該方法編程簡單、邊界易于處理、具有天然的并行性,已經(jīng)被廣泛應(yīng)用于多相流、湍流等領(lǐng)域的數(shù)值模擬。
CUDA(Compute Unified Device Architecture,計(jì)算統(tǒng)一架構(gòu))是NVIDIA公司近來年提出一種并行運(yùn)算技術(shù)。CUDA利用GPU天然的多線程特點(diǎn),能較大提高算法的計(jì)算效率,已經(jīng)在流體數(shù)值模擬、天文計(jì)算、生物計(jì)算等多個領(lǐng)域的大規(guī)模運(yùn)算得到廣泛應(yīng)用。例如黃昌盛等[6]在基于LBM的二維方腔流、二維圓柱繞流以及三維方腔流模擬中,引入CUDA并行技術(shù),大大提高了程序的運(yùn)行效率。覃章榮等[7]使用CUDA技術(shù),僅對GPU中的存儲器優(yōu)化,就可實(shí)現(xiàn)LBM程序的加速計(jì)算,獲得107倍的加速比??梢?,CUDA在提高算法效率方面是非常有效的。
本文針對常用LBM模型的一些不足進(jìn)行改進(jìn),并進(jìn)行實(shí)驗(yàn)驗(yàn)證,證明模型的可行性,接著使用CUDA并行技術(shù)對LBM算法進(jìn)行加速優(yōu)化,以提高算法的運(yùn)行效率。
LBM是一種目前使用最多的數(shù)值模擬方法。LBM主要有二維模型和三維模型,本文主要使用二維LBM模型進(jìn)行模擬運(yùn)算,它的基本方程如下:
以上式子中,fi、Ωi、ei、fieq(ρ,u)、τ、ρ、u、δt分別指分布函數(shù)、碰撞算子、速度矢量、平衡態(tài)分布函數(shù)、單馳豫時間、宏觀密度、宏觀速度、步長,fieq可擴(kuò)展為:
其中式子(1)的演化分為碰撞和遷移過程,碰撞的公式為:
流動的公式為:
Shan和Chen等[8]于1993年首次提出基于LBM的偽勢模型,模型引入了分子間的相互作用力。該模型原理簡單、編程容易,適用于復(fù)雜多相流體的模擬??上У氖窃撃P彤a(chǎn)生的虛速度較大,影響模型的穩(wěn)定性。偽勢模型的方程表示如下:
隨后Swift等[9]提出基于自由能的多相流LBM模型,模型引入自由能函數(shù)、熱力學(xué)張量等理論,模型可以模擬大密度比的流體流動。Zheng等[10]進(jìn)一步對Swift的模型進(jìn)行改進(jìn),巧妙引入捕獲方程,能模擬更大的密度比的流體,而有效減小了模型的虛速度。
偽勢模型雖然能很好模擬多相流動,但是模型產(chǎn)生的虛速度較大,影響模型的穩(wěn)定性。Zheng模型雖然能減小虛速度,但模型不符合伽利略不變性。本文將前者的動量方程和后者的界面方程進(jìn)行組合,產(chǎn)生新的LBM組合模型。
本文提出的模型使用雙組分LBM模型。將密度不同的流體定為氣相和液相,密度表示為 ρG、ρL。密度
本文模型的動量方程使用如下公式:
粒子碰撞方程為:
本文使用公式(14)來驗(yàn)證模型的正確性,通過實(shí)驗(yàn)計(jì)算氣泡內(nèi)外壓力差,將數(shù)據(jù)與理論值對比。
上式中,Δp是氣泡內(nèi)外壓力差,R是氣泡半徑,σ是表面張力。設(shè)置流場大小為201×201,界面厚度、氣體密度、液體密度、馳豫時間、表面張力、遷移系數(shù)、序參數(shù)等分別為:5、1、1000、0.875、0.1、100、499.5。取多個不同半徑進(jìn)行模擬,模擬穩(wěn)定后,將壓力差與半徑關(guān)系作圖,結(jié)果如圖1所示,可見實(shí)驗(yàn)數(shù)據(jù)與理論數(shù)據(jù)基本一致,說明本文的模型滿足Laplace定律。
圖1 壓力差Δp與1/R的關(guān)系
設(shè)置界面厚度為3.0,遷移系數(shù)為100,氣泡間距為5,表面張力為0.5。兩氣泡的合并過程如下圖2所示。模擬與文獻(xiàn)[10]完全吻合。
圖2 兩氣泡合并過程 σ=0.5,Γ=100,W=3,d=5
基于CUDA的優(yōu)化方法有維度劃分優(yōu)化、存儲器訪問優(yōu)化、指令流優(yōu)化、綜合優(yōu)化等方案。維度劃分優(yōu)化是指合理分配GPU線程網(wǎng)絡(luò)和線程塊的維度比例來提高程序運(yùn)算效率。存儲器訪問優(yōu)化是指優(yōu)化GPU存儲與訪問之間的數(shù)據(jù)拷貝與數(shù)據(jù)讀取的過程,通過合理的存儲分配,提高運(yùn)算效率。指令流優(yōu)化是指對算法中使用頻率高的代碼通過算術(shù)指令、控制流指令、訪存指令、同步指令等優(yōu)化指令提高程序的運(yùn)算效率。本文主要使用存儲器訪問優(yōu)化方案對LBM進(jìn)行優(yōu)化加速。使用cudaMallocPitch()和cudaMalloc3D()方法給LBM算法劃分存儲空間。使用cudaMemcpy2D()或cudaMemcpy3D()方法將數(shù)據(jù)進(jìn)行拷貝。再通過均衡拷貝與存儲之間的數(shù)據(jù)分配,就可以使合局存儲器達(dá)到最佳的訪問要求。經(jīng)過存儲訪問優(yōu)化后,在不同流場中演化100000步所得的加速結(jié)果如圖3、圖4、表1所示,S1是指算法在CPU上運(yùn)行的結(jié)果,S3是指經(jīng)過存儲訪問優(yōu)化后運(yùn)行的結(jié)果。
圖3 方案S1和S3在不同流場中的耗時對比
表1 方案S1、S3的耗時和加速效果的比較
由以上對比可知,經(jīng)過存儲訪問優(yōu)化后,算法的達(dá)到10000步所耗時間明顯變少,加速比隨著流場規(guī)模變大而變得更高,存儲訪問優(yōu)化最高可獲得25.41倍的加速比。
本文針對主流多相流LBM模型的不足,提出了改進(jìn)的多相流LBM模型,并通過多方式對模型進(jìn)行驗(yàn)證,接著使用改進(jìn)的LBM模型對氣泡合并進(jìn)行模擬,之后使用CUDA并行技術(shù)對氣泡合并算法進(jìn)行優(yōu)化加速,通過對GPU優(yōu)化方案中的存儲訪問優(yōu)化,合理分配存儲器拷貝與存儲之間的比例,就可獲得理想的加速比。接下來會在維度劃分優(yōu)化、指令優(yōu)化等方面作進(jìn)一步研究,希望獲得更大的加速比。
圖4 方案S1和S3在不同流場中的加速比