劉禮勛, 朱凱杰, 郝琛, 李富
(1.清華大學(xué) 核能與新能源技術(shù)研究院,北京 100084; 2.哈爾濱工程大學(xué) 核科學(xué)與技術(shù)學(xué)院,黑龍江 哈爾濱 150001)
進(jìn)行全堆芯三維精細(xì)化中子輸運(yùn)計(jì)算必須依賴于有效的加速手段,粗網(wǎng)有限差分 (coarse mesh finite difference, CMFD) 方法[1]因其便于實(shí)施、加速效果好,被廣泛地應(yīng)用在全堆芯輸運(yùn)計(jì)算的加速算法中。然而,三維全堆芯Pin尺度的CMFD是一個大型稀疏非對稱線性方程組,其系數(shù)矩陣的規(guī)模可達(dá)到上億級別,高效求解CMFD線性方程組對實(shí)現(xiàn)加速至關(guān)重要。廣義極小殘差算法是求解大型非對稱線性方程組的優(yōu)秀方法,但該方法的優(yōu)越性取決于良好預(yù)處理技術(shù)的應(yīng)用,特別是針對條件數(shù)很大或者嚴(yán)重病態(tài)的線性方程組,高效的預(yù)處理技術(shù)尤為重要[2]。針對于串行計(jì)算,不完全LU分解(incomplete LU decomposition, ILU)、對稱超松弛(symmetric over-relaxation, SOR)、塊預(yù)處理、稀疏近似逆等是很好的預(yù)處理技術(shù)[3]。但是針對于并行計(jì)算,需要采用紅黑網(wǎng)格策略,才能充分發(fā)揮ILU、SOR的預(yù)處理效果[4],但同時帶來的問題就是引入不必要的計(jì)算等待時間,以及使得程序開發(fā)變得異常復(fù)雜。目前在核反應(yīng)堆計(jì)算領(lǐng)域,Block-Jacobi不完全LU分解(block-jacobi incomplete LU decomposition, BJILU) 因其實(shí)施方便而得到了廣泛的應(yīng)用,如美國的MPACT程序[5],但其僅對各自CPU中的元素進(jìn)行了預(yù)處理,對不同核心間需要信息傳遞的元素并未做任何預(yù)處理。Xu[6]提出了一種簡化對稱超松弛預(yù)處理技術(shù)(reduced symmetric over-relaxation, RSOR) 與不完全LU分解的混合預(yù)處理方法(RSOR and ILU, RSILU),有效解決了上述問題,但在實(shí)際應(yīng)用中發(fā)現(xiàn)該方法有待進(jìn)一步優(yōu)化。
本文采用以下2種方法對現(xiàn)有的RSILU預(yù)處理進(jìn)行了優(yōu)化:1)將不完全LU分解預(yù)處理子替換為修正不完全LU分解(modified incomplete LU decomposition, MILU)預(yù)處理子,以進(jìn)一步提高RSILU的預(yù)處理效率;2)由嚴(yán)格計(jì)算對角塊矩陣的逆改為近似計(jì)算,以解決RSILU方法在復(fù)雜能群結(jié)構(gòu)的多群CMFD問題中,預(yù)處理計(jì)算耗時過多的問題。利用C5G7-3D基準(zhǔn)題和VERA Problem #4基準(zhǔn)題搭建CMFD線性方程組對優(yōu)化后的RSILU方法進(jìn)行了測試分析。所有測試均基于MPI并行編程模型[7],采用空間區(qū)域分解的方式進(jìn)行并行計(jì)算。
建立在Pin尺度上的三維多群CMFD方程組為:
(1)
式中:φ、Σt、Σs、vΣf、χ、keff分別是中子通量密度、總截面、散射截面、吸收截面、裂變譜和有效增殖因子。式(1)在數(shù)學(xué)上可表示為線性方程組:
Ax=b
(2)
式中:未知量x即為待求的中子通量φ,按照“先能群、后空間”的順序進(jìn)行排列;系數(shù)矩陣A∈Rn×n是七對角、稀疏、非對稱矩陣,其中主對角線的對角塊由能群散射矩陣構(gòu)成:
(3)
式中:D為對角塊矩陣;LA和UA為嚴(yán)格非對角塊矩陣。對于能群、空間耦合求解的CMFD線性方程組;Di為G×G稠密矩陣(如圖1所示);G為能群數(shù);LA,i和UA,i為稀疏矩陣。對幾何空間進(jìn)行區(qū)域分解,并基于MPI進(jìn)行分布式內(nèi)存計(jì)算,此時系數(shù)矩陣A可進(jìn)一步表示為:
圖1 對角塊中的散射矩陣(47群)Fig.1 The scattering matrix in diagonal block (47 groups)
A=LI+LP+D+UP+UI
(4)
式中:LP和UP是存儲在當(dāng)前CPU內(nèi)的嚴(yán)格非對角塊,LI和UI是存儲在不同CPU內(nèi)的嚴(yán)格非對角塊,如圖2所示。
圖2 CMFD線性方程組系數(shù)矩陣Fig.2 Coefficient matrix of CMFD linear system
廣義極小殘差算法(generalized minimum residual method, GMRES)是求解非對稱線性方程組的有效方法,該方法是Krylov子空間法的一種,通過在子空間上進(jìn)行投影以迭代的形式尋找近似解。記r0=b-Ax0為初始?xì)埐钕蛄?,由r0生成的Krylov子空間可表示為:
Km(A,r0)=span{r0,Ar0,A2r0,…,Am-1r0}
(5)
(6)
GMRES方法在Krylov子空間中產(chǎn)生一系列近似解,這些近似解逐步逼近于真解,同時這些近似解的殘差向量rm滿足二范數(shù)最小的性質(zhì)。rm可表示為:
β=‖r0‖2
(7)
經(jīng)過m步GMRES算法形成近似解xm滿足:
xm=x0+Vmym
(8)
其中ym∈Rn通過極小化式(9)得到,即:
(9)
GMRES方法的優(yōu)越性取決于良好的預(yù)處理技術(shù)的應(yīng)用,特別是針對條件數(shù)很大或者嚴(yán)重病態(tài)的線性方程組,高效的預(yù)處理技術(shù)尤為重要。預(yù)處理的本質(zhì)是對線性方程組(2)作同解變換,以右預(yù)處理為例:
(10)
式中M為預(yù)處理子(預(yù)處理矩陣)。本文中采用右預(yù)處理GMRES算法求解CMFD線性方程組[8],右預(yù)處理GMRES算法如下:
算法1:右預(yù)處理GMRES算法
1) 選取初值x0∈Rn, 計(jì)算初始?xì)埐顁0=b-Ax0, 定義β=‖r0‖2,v1=r0/β
2) Forj=1, 2, …,mDo
3) 計(jì)算w:=AM-1vj
4) Fori= 1, 2, …,jDo
7) End Do
8) 計(jì)算hj+1,j=‖w‖2,vj+1=w/hj+1,j
10) End Do
12) 計(jì)算xm=x0+M-1(Vmym)
13) 如果滿足收斂標(biāo)準(zhǔn)則停止;否則置x0:=xm并轉(zhuǎn)向1。
預(yù)處理矩陣M的選取對GMRES收斂速率影響極大。文獻(xiàn)[6]提出了高效的RSILU混合預(yù)處理方法,該方法由RSOR和ILU預(yù)處理子共同構(gòu)成,不僅對各自CPU中的元素進(jìn)行了預(yù)處理,還對不同CPU間需要信息傳遞的元素也進(jìn)行了預(yù)處理,如圖3所示。其中,RSOR高效預(yù)處理不同CPU間需要信息傳遞的元素,RSOR預(yù)處理子為:
圖3 不同預(yù)處理算子示意Fig.3 Diagram of different preconditioner
(11)
式中ω為松弛因子。RSOR不需要紅黑網(wǎng)格技術(shù),便于實(shí)施,并且當(dāng)核數(shù)的增加時GMRES所需的迭代次數(shù)保持不變,同時還能保證解的對稱性,是一種簡單高效的并行預(yù)處理算法,更多詳細(xì)內(nèi)容可參考文獻(xiàn)[6]。
ILU高效預(yù)處理各自CPU中的元素,ILU(0)預(yù)處理為:
(12)
(13)
結(jié)合式(11)和式(12),RSILU預(yù)處理為:
ω(LI+UI)D-1]
(14)
為減少RSILU預(yù)處理實(shí)施過程中的存儲和計(jì)算負(fù)擔(dān),使用DE替換上式中的D,D為DE的對角元素。最終RSILU預(yù)處理子可定義為:
ω(LI+UI)DE-1]
(15)
算法2:z=M-1v
2)將w1傳遞給其他CPU,以用于并行計(jì)算
3)計(jì)算w2=v-ω(LI+UI)w1
2.3.1 MILU替換ILU
(16)
2.3.2 對角塊矩陣的近似求逆
為驗(yàn)證優(yōu)化后的RSILU算法的預(yù)處理效果,本文基于C語言開發(fā)了預(yù)處理GMRES求解器,并選用C5G7-3D基準(zhǔn)題[9-11]和VERA Problem #4基準(zhǔn)題[12]搭建pin尺度單群/多群CMFD線性方程組作為測試題(見表1),其中單群CMFD通過對多群CMFD進(jìn)行能群歸并得到[9],單群CMFD方程組的系數(shù)矩陣沒有對角塊,是一個傳統(tǒng)的7對角矩陣。為了后續(xù)表述更簡便,優(yōu)化前的RSILU算法用RSILU-old表示,優(yōu)化后的RSILU算法用RSILU-new表示。
表1 CMFD線性方程組介紹Table 1 CMFD linear system information
預(yù)處理GMRES選用相對殘差10-8作為收斂標(biāo)準(zhǔn)。串行計(jì)算環(huán)境:Inter(R) Core(TM) i5-7200U CPU@2.71Hz, RAM 8.0GB;并行計(jì)算環(huán)境:“天河一號”超級計(jì)算機(jī),采用商用InfiniteBand網(wǎng)絡(luò)連接,每個計(jì)算節(jié)點(diǎn)包含28個計(jì)算核心(14個2×Intel Xeon CPU E5-2690 v4 @2.60 GHz),RAM 128 GB。編譯器選用英特爾編譯器Intel-16.0.3;MPI編譯環(huán)境選用mvapich2-2.2。
3.1.1 串行計(jì)算
圖4中給出了串行環(huán)境下,RSOR、RSILU-old和RSILU-new預(yù)處理GMRES求解一次C5G7-3D單群/多群CMFD線性方程組的迭代次數(shù)和計(jì)算時間。由圖4可知:
圖4 不同預(yù)處理算法下串行GMRES的收斂歷史Fig.4 Convergence history of serial GMRES method preconditioned by different preconditionor
1) 3種的預(yù)處理算子中,RSILU-new收斂最快,計(jì)算用時也最少,RSILU-old次之,最次是RSOR;
2) RSILU-new針對單群CMFD的預(yù)處理效果要優(yōu)于多群CMFD。單群CMFD下RSILU-new預(yù)處理效果顯著優(yōu)于RSILU-old;多群CMFD下RSILU-new的預(yù)處理效果略優(yōu)于RSILU-old。
3.1.2 并行計(jì)算
圖5和圖6給出了不同核數(shù)下BJILU、RSILU-old和RSILU-new預(yù)處理GMRES求解C5G7-3D單群/多群CMFD線性方程組的迭代次數(shù)和計(jì)算時間。圖7和圖8分別給出了不同核數(shù)下RSOR、BJILU、RSILU-old、RSILU-new、和串行ILU(SILU)預(yù)處理GMRES求解C5G7-3D單群/多群CMFD線性方程組的殘差收斂歷史。其中,SILU是指GMRES在串行環(huán)境下用ILU(0)作預(yù)處理時的收斂結(jié)果,用作對照,以顯現(xiàn)出各種預(yù)處理算法在并行核數(shù)逐漸增加時的預(yù)處理效果的變化趨勢。
圖5 不同預(yù)處理算法下并行GMRES求解C5G7-3D單群CMFD計(jì)算時間比較Fig.5 Computing time of parallel GMRES preconditioned by different preconditionor for one-group CMFD of C5G7-3D
圖6 不同預(yù)處理算法下并行GMRES求解C5G7-3D多群CMFD計(jì)算時間比較Fig.6 Computing time of parallel GMRES preconditioned by different preconditionor for multigroup CMFD of C5G7-3D
圖7 不同預(yù)處理算法下并行GMRES求解C5G7-3D單群CMFD收斂歷史比較Fig.7 Convergence history of parallel GMRES preconditioned by different preconditionor for one-group CMFD of C5G7-3D
圖8 不同預(yù)處理算法下并行GMRES求解C5G7-3D多群CMFD收斂歷史比較Fig.8 Convergence history of parallel GMRES preconditioned by different preconditionor for multigroup CMFD of C5G7-3D
不同預(yù)處理算法比較如圖5~8所示,可知:
1) 隨著并行核數(shù)的增加,RSILU-old、RSILU-new和BJILU的預(yù)處理GMRES計(jì)算時間逐漸減少,GMRES迭代次數(shù)逐漸增加,但迭代次數(shù)隨核數(shù)的增長地很緩慢;
2) 隨著并行核數(shù)的增加,RSILU-old和RSILU-new的預(yù)處理效果的差距不斷縮小,但RSILU-new效果始終不差于RSILU-old,且始終優(yōu)于BJILU;
3) RSILU-new針對單群CMFD的預(yù)處理效果要優(yōu)于多群CMFD,且RSILU-new針對單群CMFD的預(yù)處理效果甚至可以超過SILU (如圖7中的(a)~(c)所示)。
圖9 不同計(jì)算方案下的RSILU-new預(yù)處理并行GMRES用時Fig.9 The calculation time of RSILU-new preconditioned parallel GMRES method with different strategy
BJILU、RSILU-old和RSILU-new預(yù)處理效果的測試結(jié)果如表2和圖10所示。從結(jié)果中可以看出:不論是單群CMFD還是多群CMFD、BJILU和RSILU-old相比,RSILU-new預(yù)處理效果都是最優(yōu)的,不僅GMRES的迭代次數(shù)是最少的,而且迭代計(jì)算和預(yù)處理計(jì)算的耗時也是最少的。其中,RSILU-new的預(yù)處理計(jì)算耗時僅是RSILU-old的1/2左右。整體GMRES的計(jì)算耗時相比于優(yōu)化之前減少30%。
表2 BJILU、RSILU-old和RSILU-new預(yù)處理并行GMRES完整求解VERA problem #4基準(zhǔn)題Table 2 BJILU, RSILU-old and RSILU-new preconditioned parallel GMRES for solving VERA problem #4 benchmark
圖10 BJILU、RSILU-old和RSILU-new預(yù)處理GMRES用時Fig.10 The calculation time of GMRES precoditioned by BJILU, RSILU-old and RSILU-new
1)優(yōu)化后的RSILU彌補(bǔ)了該方法之前的一些缺陷,進(jìn)一步提高了RSILU預(yù)處理并行GMRES方法求解大規(guī)模CMFD線性方程組的計(jì)算效率。
2)本文中的并行GMRES算法僅基于MPI編程模型,未來可開發(fā)MPI和OpenMP混合并行編程技術(shù)進(jìn)一步減少處理器間的通信時間,從而提高并行效率。