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