這次想討論一下2D情況下顯格式和隱格式的FVM處理唇兑,并說(shuō)三種不同于TDMA的迭代方法剥险!
1. 2D:
有了之前1D的知識(shí)儲(chǔ)備,2D就好理解了数焊。
照貓畫虎,寫出2D情況下的方程:
?
模型參考:
再一次假設(shè)當(dāng)我們把控制體無(wú)窮小分開(kāi)時(shí)崎场,物理量符合線性分布佩耳,這樣利用線性插值來(lái)近似,時(shí)間上采用顯格式形式谭跨,有:
同樣對(duì)于上面的式子干厚,我們寫成系數(shù)的形式:
觀察上面的式子,依然可以利用1D的思想螃宙,中心控制體是受到周圍四個(gè)控制體影響的蛮瞄,是他們的加權(quán)平均值。
????? ? 于是谆扎,考慮以下的問(wèn)題:有一個(gè)3米*2米的矩形挂捅。
我們將這個(gè)面分成5*5的結(jié)構(gòu)化網(wǎng)格。
顯式格式:
類似于1D情況燕酷,2D我們也在邊界外側(cè)引入虛擬點(diǎn)籍凝。套用(3)式,先對(duì)于內(nèi)部節(jié)點(diǎn)進(jìn)行賦值計(jì)算:
對(duì)于T11角節(jié)點(diǎn):
很好理解苗缩,距離縮小一半饵蒂,影響程度擴(kuò)大一半。
對(duì)于T12邊界節(jié)點(diǎn):
對(duì)于這三類節(jié)點(diǎn)(內(nèi)部節(jié)點(diǎn)酱讶,角節(jié)點(diǎn)退盯,邊界節(jié)點(diǎn)),全部按照各自思路來(lái)計(jì)算泻肯,這樣一共得到25個(gè)公式渊迁。
各個(gè)節(jié)點(diǎn)的溫度,如下圖(當(dāng)然了灶挟,網(wǎng)格越密結(jié)果越精確琉朽。):
隱格式:
想著重說(shuō)一下隱格式的處理:
同樣的柠傍,利用(4)式將表達(dá)式表示成系數(shù)形式:
將未知量和已知量分開(kāi)表示峭梳,如(6)式:
這樣的話瞧剖,如果你代入數(shù)據(jù)整理积蔚,你會(huì)發(fā)現(xiàn)它的系數(shù)矩陣就是一個(gè)五對(duì)角稀疏矩陣。類比于1D情況耕漱,求解未知的系數(shù)矩陣的方法算色,TDMA是否在2D情況下派上用場(chǎng)呢?答案是否定的螟够,三角追趕法只適用于三對(duì)角矩陣灾梦,所以五對(duì)角稀疏矩陣得另外找方法。
除了三角追趕法妓笙,《數(shù)值分析》中的還有Guass消去法若河,假設(shè)我們的模型網(wǎng)格非常多,千萬(wàn)數(shù)量級(jí)给郊。它和三角追趕法的不同是:消元法隨著方程個(gè)數(shù)的增加牡肉,計(jì)算量超線性增大,但是TDMA算法計(jì)算量和方程個(gè)數(shù)是線性增加的淆九。所以,歸根結(jié)底毛俏,消元法就是普通的手算解決一個(gè)方程組就行炭庙,工程計(jì)算消元法實(shí)在是計(jì)算量太大!
雖然精確解無(wú)望煌寇,那么近似解的迭代法如何焕蹄?
對(duì)于(6)式進(jìn)行修改:
這完全就可以用迭代的思想取求解,同一個(gè)時(shí)間下一共有25個(gè)Tp阀溶,最開(kāi)始假設(shè)一組TE腻脏、TW、TN银锻、TS永品,例如:算出一個(gè)T1,1之后緊接著帶入到T1击纬,2的公式中鼎姐,之后類推同理...直到每個(gè)控制體的溫度迭代前后的值達(dá)到誤差范圍之內(nèi)為止!
?????在這一段過(guò)程中更振,迭代前后的未知量的變化量就是“殘差”炕桨!如果說(shuō)最后的迭代過(guò)程式收斂的,殘差應(yīng)該是越來(lái)越小最后趨于0的肯腕,如果熟悉Fluent等商用軟件献宫,對(duì)這個(gè)概念應(yīng)該不陌生。但是對(duì)于2D情況來(lái)說(shuō)实撒,因?yàn)橐还灿泻芏嗫刂企w在依次迭代姊途,每個(gè)控制體都有自己的殘差帖池,對(duì)于每一個(gè)來(lái)說(shuō),迭代前后的殘差叫做:絕對(duì)殘差吭净。但是整體來(lái)看睡汹,就本例來(lái)說(shuō),25個(gè)控制體寂殉,25個(gè)方程囚巴,一共有25個(gè)絕對(duì)殘差。如果將這25個(gè)殘差寫成向量形式友扰,又該如何描述整體的殘差呢彤叉?有兩種表述方法:1.Rmax,n=max(Rabs,n),即找25個(gè)絕對(duì)殘差中的最大值l村怪;2.Rrms,n將每個(gè)絕對(duì)殘差進(jìn)行均方根計(jì)算秽浇,這叫做均方根殘差。
可以發(fā)現(xiàn)甚负,不管隱格式還是顯格式柬焕,最后的結(jié)果必定是一樣的!
2.幾種迭代的討論:
對(duì)于線性方程組梭域,最常見(jiàn)的就是Jacobi和Guass-Seidel還有SOR法斑举。這里利用之前《數(shù)值傳熱學(xué)》課中的一個(gè)小作業(yè)為例,先用有限差分的思想說(shuō)一下這三種方法病涨。之后再討論一下利用Guass-Seidel在FVM時(shí)的應(yīng)用富玷。
四邊的邊界值已知,給中間6點(diǎn)一個(gè)初始值:假設(shè)給的全部為0.
?????對(duì)于拉普拉斯離散方程的求解既穆,可以運(yùn)用Jacobi迭代或者Gauss-Seidel迭代赎懦,還有SOR法。
2.1? Jacobi:
先用假設(shè)的值計(jì)算6點(diǎn)溫度幻工,利用公式:
?????將每一個(gè)點(diǎn)都計(jì)算一遍励两。這時(shí),每個(gè)點(diǎn)的溫度都得到了一次更新但還不是穩(wěn)定時(shí)候的結(jié)果会钝,仍然需要第二次更新伐蒋,同樣利用的(1)式。就這樣迁酸,每一次迭代更新先鱼,都會(huì)得到一組新計(jì)算出來(lái)的值,直到迭代前后的數(shù)值之間的誤差非常小奸鬓,滿足誤差要求為止焙畔,所以迭代法就是近似解而非精確解。
這里我設(shè)置的誤差為(10^-6),可以看到Jacobi迭代的結(jié)果:34次迭代完畢:
2.2? Guass-Seidel迭代
同樣上述例子串远,同樣內(nèi)部點(diǎn)的初始值為0宏多。
第一次迭代儿惫,我要計(jì)算1點(diǎn)的值,利用公式(1)伸但,算完之后肾请,計(jì)算2點(diǎn)的值,仍然利用(1)只不過(guò)計(jì)算2點(diǎn)的公式中要將剛剛算出的1點(diǎn)值立馬用起來(lái)帶入到2點(diǎn)計(jì)算里更胖;計(jì)算3點(diǎn)铛铁,要立馬將1,2點(diǎn)剛剛算出的值帶入用來(lái)計(jì)算3點(diǎn)却妨;往后每個(gè)點(diǎn)都如此饵逐;
?????第一次迭代結(jié)束之后的每個(gè)點(diǎn)數(shù)值肯定不會(huì)是最終的解,那么就得第二次彪标、第三次倍权、.....迭代,直到迭代前后的數(shù)值之間的誤差非常小捞烟,滿足誤差要求為止薄声,所以迭代法就是近似解而非精確解。
(可以明顯發(fā)現(xiàn)坷襟,Guass-Seidel的計(jì)算要明顯快于Jacobi<榧怼)
2.3? SOR
關(guān)于松弛因子取決于具體的問(wèn)題:當(dāng)他介于0和1之間-稱為亞松馳;介于1和2之間-稱為超松馳法婴程。
可以發(fā)現(xiàn),SOR法比高斯-賽德?tīng)柕€要快抱婉,這里我的松弛因子設(shè)的是1.29档叔。關(guān)于松弛因子的最佳值,也許目前有方法了蒸绩,但我不知道衙四?我的想法就是一直試,看哪個(gè)最佳患亿。
回到FVM中:
?????想一下传蹈,在計(jì)算機(jī)輔助的情況下,計(jì)算的方向是:x軸從左向右步藕,y軸從下往上惦界。在計(jì)算每一個(gè)點(diǎn)的值的時(shí)候,可以參考Jacobi的思路咙冗,每一點(diǎn)的計(jì)算利用上一次迭代的結(jié)果沾歪;也可以利用Guass迭代的思路,算完T11雾消,在算T21或者T12的時(shí)候灾搏,將本次迭代之前的計(jì)算結(jié)果(T11)值立馬帶入挫望,因?yàn)榻?jīng)過(guò)新一次迭代后的值更接近于最終解,所以Guass迭代的思路要更快狂窑!