偏微分方程與常微分方程
偏微分方程和常微分方程的區別主要就是體現在待求解函數是一元函數還是多元函數。
多元函數存在對不同自變量的偏導數,因此這種帶有多元函數偏導數的方程就是偏微分方程。而對於只有一個自變量的一元函數,由它的各階導數組成的方程就是常微分方程。
描述帶阻尼的簡諧振動的方程
mdt2d2x+νdtdx+kx=0
就是常微分方程
拉普拉斯方程
∂x2∂2φ+∂y2∂2φ=0
就是偏微分方程
計算流體力學通常求解的是偏微分方程。
控制方程與簡化模型方程
計算流體力學控制方程基本就是歐拉方程和NS方程,其中NS方程去掉粘性項就可以得到歐拉方程。
原始的NS方程可以寫成如下形式
∂t∂u+∂x∂E+∂y∂F+∂z∂G=P+∂x∂Eν+∂y∂Fν+∂z∂Gν
u=⎣⎢⎢⎢⎢⎡ρρuρvρwe⎦⎥⎥⎥⎥⎤,E=⎣⎢⎢⎢⎢⎡ρuρu2+pρuvρuw(e+p)u⎦⎥⎥⎥⎥⎤,F=⎣⎢⎢⎢⎢⎡ρvρuvρv2+pρvw(e+p)v⎦⎥⎥⎥⎥⎤,G=⎣⎢⎢⎢⎢⎡ρwρuwρvwρw2+p(e+p)w⎦⎥⎥⎥⎥⎤
P=⎣⎢⎢⎢⎢⎡0ρfxρfyρfzρ(ufx+vfy+wfz)⎦⎥⎥⎥⎥⎤,Eν=⎣⎢⎢⎢⎢⎡0τxxτxyτxzuτxx+vτxy+wτxz+k∂x∂T⎦⎥⎥⎥⎥⎤,Fν=⎣⎢⎢⎢⎢⎡0τyxτyyτyzuτyx+vτyy+wτyz+k∂x∂T⎦⎥⎥⎥⎥⎤,Gν=⎣⎢⎢⎢⎢⎡0τzxτzyτzzuτzx+vτzy+wτzz+k∂x∂T⎦⎥⎥⎥⎥⎤
其中p滿足
p=ρRT=ρ(1−γ)(e−21(u2+v2+w2))
這方程適用於可壓縮的牛頓流體,是計算流體力學求解的基本方程。
從這個方程出發在低速條件下忽略壓縮性(ρ=1)可以得到不可壓的NS方程。
對於不可壓流體形式的NS方程由於ρ是常數,方程的第一個分量將沒有時間導數項,第一個分量將作爲一個約束∂x∂u+∂y∂v+∂z∂w=0加入方程中。這就使得不可壓流動和可壓流動的計算產生了一些比較大的區別。
可以看到流體的控制方程十分複雜,因此通過控制方程直接研究數值格式的性質通常較爲困難,於是我們使用一些簡單的模型方程來對數值格式進行分析。最常用的模型方程主要是兩個一個是一維對流方程∂t∂u+∂x∂u=0和一維Burgers方程∂t∂u+u∂x∂u=0這兩個方程也是有解析解的,因此可以和數值解比對,從而瞭解數值格式的不同特性。另外,這兩個方程都是沒有粘性項的,在兩個方程右端添加粘性項ν∂x2∂2u,即可得到帶粘性的方程。通常我們也會比較關心格式的耗散性能,因此求解不帶粘性的方程時所有耗散效應都是由格式帶來的,能更好的顯示格式粘性的影響。
一維對流方程
{∂t∂u+∂x∂u=0u=u0(x)(t=0)
其解析解爲
u=u0(x−t)
通過驗證數值格式求解這個方程的結果,可以分析格式的穩定性和耗散性能。
一維無粘Burgers方程
{∂t∂u+u∂x∂u=0u=u0(x)(t=0)
其解析解爲
u=u0(x−ut)
這個方程是隱式方程,並且隨着時間的推進可能會出現多值解的情況,這時需要利用能量守恆,在多值區域確定一個間斷(激波)。利用這個方程可以很好的檢驗數值格式的激波捕捉能力。
定解條件/邊界條件
偏微分方程的解可以寫成若干通解加和的形式,但是並不是所有偏微分方程都能得到所有的通解,從而給出一個完整的解析表達式。因此我們很多時候是利用數值方法求解在特定情況下一個特解,而用於確定特解的條件就是定解條件。由於這個定解條件通常是在邊界上給出的,因此叫做邊界條件。對於非定常問題,在時間軸t=0這個邊界上的邊界條件又稱爲初始條件或者初值。
數值方法的收斂性
定解問題的解存在且唯一,並且當原方程或者邊界條件發生微小改變時解的變化也是微小的(穩定)則稱定解問題是適定的。大多有實際物理背景的偏微分方程在數學上仍然沒有很透徹的研究,因此對於其解的適定性仍然沒有足夠的理論支持。但是對於做數值計算的人來講,通常我們相信我們想要模擬的物理問題是確定的,並且現有的偏微分方程確實可以描述它,因此我們求解的前提都是當前求解的定解問題的真解是適定的。
在真解適定的前提下我們認爲所有的誤差和不穩定都來自於數值方法。因此我們要考慮數值方法是否穩定、是否能夠收斂到真解。這就涉及到數值方法的相容性、收斂性和穩定性了。
相容性
如果數值近似方法在空間和時間步長上足夠小時可以逼近原微分方程,那麼我們就認爲採用的數值方法和原微分方程是相容的。
收斂性
如果數值近似方法在空間和時間步長上越小數值解就和真解越接近,那麼我們就認爲數值方法是收斂的。
穩定性
由於數值方法得到的是真解的近似,因此必然存在誤差,這個誤差隨着數值計算的不斷推進累積最終會達到有限值而不是趨於無窮,則稱數值方法是穩定的。
定常與非定常
在流體力學中,流場不隨時間變化則稱流場是定常的,反之則是非定常的。從方程的角度來說,方程(包括邊界條件)中含有對時間的偏導項則稱問題是是非定常的;方程和邊界都不含有時間偏導項則稱問題是定常的。以拉普拉斯方程爲例
∂x2∂2φ+∂y2∂2φ=0
這個形式的拉普拉斯方程可以看作是求解的二維平面上φ的分佈,這個問題是一個定常問題。
∂t2∂2u+∂x2∂2u=0
這個方程就變成了一維波動方程,儘管這個方程看起來只是上面的φ換成了u,y換成了t但是我們不會再叫它拉普拉斯方程了。二者的意義已經完全不同了。它們的邊界條件也不同。
定常問題描述的是在空間邊界(值或導數)給定條件下待求解變量的空間分佈。
非定常問題則是描述在給定初值(t=0)空間分佈(值)和空間邊界(值或導數)時待求解變量空間分佈隨時間的演化過程。
在流體力學中定常問題主要是勢流問題和湍流的雷諾平均方程求解。勢流問題本身就容易求解,而雷諾平均方程較爲依賴封閉模型,因此其精度有限,對於高精度要求的計算不太適合。所以主要還是討論非定常問題求解。
誤差
數值方法只能得到近似解,因此數值解必然有誤差。從泰勒展開的角度看,用差分近似微分,被截斷的高階項根據階數的奇偶分成兩部分,奇數階截斷稱爲色散(彌散)誤差,偶數階截斷項稱爲耗散誤差。其中耗散誤差是會使得數值解隨着時間推進變長相比於真解在空間中分佈更加均勻,表現爲一種擴散作用。而色散誤差則會使空間中不同波數的信號的傳播速度與偏微分方程描述的真實速度產生差距,從而使得經過一定時間後不同波數的信息分離。這種現象和三棱鏡分離不同頻率的可見光非常像,因此叫色散誤差。
守恆型方程
對於如下方程
∂t∂u+∂x∂f=0
我們稱爲守恆形式我們稱f爲通量,上式我們可以改寫爲
∂t∂u+a(u)∂x∂u=0,其中a(u)=dudf
這個方程就稱爲非守恆形式。
對方程在比計算域更大的區域內積分
∫LR∂t∂u+∂x∂fdx=0
得到
∂t∂∫LRudx+fR−fL=0計算域外的值並非我們關心的,因此通量都取0,於是有∂t∂∫LRudx=0,所以得到∫LRudx不隨時間變化,這稱爲守恆律,也是守恆型方程的由來。
對於非守恆形式並不能最終得到這個結果,其∂t∂∫LRudx是一個與a(u)有關的值,儘管對於a(u)=dudf仍然能夠得到守恆律,但是這一形式的方程而言,對任意a(u)未必能保證其一定可積。在構造數值格式時由於方程中各變量的分佈函數都是人爲假定的,這時非守恆形式中a(u)的數值分佈是否可積,積分後是否和通量相容,對於格式是否穩定是否收斂就變得重要。
基本方法
CFD中常用的方法:有限差分法、有限元法、譜方法等。
對於連續方程
L(u)=∂t∂u+∂x∂f(u)=0
以u^=∑ai(t)φi(x)去近似真解u必然有
L(u^)=0
爲了保證近似的u^能夠收斂到真解u,我們需要做一些約束。
另外,通常情況下我們所說的各種方法雖然指的是整個計算的方法,但是在求解非定常問題時,我們是將時間項作爲待定係數,先進行空間離散,構造空間離散格式。利用構造好的空間離散格式,就可以得到關於時間的常微分方程,然後利用R-K方法等直接進行時間推進。也就是說通常情況下時間推進的方法是固定的或者說相似的,而不同的CFD方法的差別主要體現在空間離散上。
譜方法(加權餘量法)
在整個計算域內將φi直接取爲正交基函數,如三角函數、切比雪夫多項式、勒讓德多項式等,構造u^。這時得到的u^是在計算域內的連續函數,只是係數ai(t)待定。只需要將u^代入原微分方程,便可得到一個關於t的常微分方程,根據初值和步長,利用R-K方法等即可求解出待定係數。
在前面的分析中我們有近似解u^,L(u^)=0,但是我們想讓近似解儘可能接近真解u,也就是說儘可能有L(u^)=0。那麼我麼考慮近似解u^是無窮維空間中的真解在截斷後的有限維空間中的投影,並且其投影在有限維空間中滿足L(u^)=0。根據線性代數的知識我們知道,如果在n維空間中某向量v=0,應有對於空間的任意基向量bi都有v⋅bi=0。相應的我們的<L(u^),ψi>=0對n維空間中任意一組基ψi成立。於是得到方程
∫−∞+∞(∂t∂u+∂x∂f(u))ψidx=0
將積分號內部的兩項分開得
∫−∞+∞∂t∂uψidx+∫−∞+∞∂x∂f(u)ψidx=0
第一項中的u展開,第二項利用分步積分先積一次得到。
∑∂t∂ai(t)∫−∞+∞φiψjdx−∫−∞+∞f∂x∂ψjdx+fψj∣−∞+∞=0
其中第二項中的f同樣可以展開,第三項則由基函數和邊界條件即可確定,從而得到一個關於ai(t)的常微分方程,於是可以推進求解ai(t)。如果考慮所有基函數均取爲三角函數,這個方法等價於直接將初值做傅里葉展開,然後代入原微分方程推進求解。
通常我們會選擇上述的φi、ψi是同一組基,這樣計算會簡單一些,但是我們同樣可以讓二者不同。爲了區別,我們稱ψi爲權函數,φi爲基函數。
擬(僞)譜法
僞譜法和譜方法的基本原理完全相同。在譜方法中我們實際上是利用真解u的級數截斷近似,從而推進計算,這一過程中的所有計算都是對連續函數進行的,其中有些連續積分是不容易計算的,比如通量的積分項。考慮譜方法是否能利用空間上離散的點上的值來代替連續函數計算。答案是當然可以,比如我們的快速傅里葉變換。通過在連續函數上等間距取樣,我們可以很容易得到連續函數的三角級數的係數,而且可以快速的求導和積分。像這樣在譜方法的基礎上選取離散點上的值進行計算的方法就稱爲擬譜法或者僞譜法,也叫配置點法。
有限元法
有限元法是一種和譜方法相似的方法,其本質上也是加權餘量法。與譜方法不同的是,譜方法的基函數是在整個計算域內都有值且連續的函數。而有限元的一個基函數只在某一個單元內部有值,而在單元外則沒有值,這時對於基函數的積分∫φiφjdx一項僅在基函數都屬於同一個單元時纔有值。從而使得計算可以分塊進行,更加靈活。對於譜方法難以處理的複雜邊界外形,有限元就更加合適,它可以通過把複雜邊界計算域分割爲規則子區域來計算。
有限差分法
這個方法不構造具體的u^,而是利用一個新的算子Lh來代替L。由於對於偏微分方程而言,很多時候我們的解u是沒有可以通過初等函數顯式表達的結果的,這時我們沒有辦法得到其導數或者不定積分,這樣就無法進行計算。如果利用差分代替空間的微分,可以把原本連續的導數通過離散的點上的值計算得到,這時計算便可以進行下去。並且隨着網格加密差分點的間距減小,近似微分的誤差也越小,最終收斂到真實的空間微分。這就是有限差分法的基本思想。通過這種方式還可以構造相應的有限體積法和通量差分法的格式。
有限體積法
一維方程L(u)=∂t∂u+∂x∂f(u)=0中我們考慮在直線上利用從左至右點A0、A、A1劃分兩個網格
A0------------A------------A1
網格點我們稱爲求解點,計算中其每一時間步結果用於描述真解u。而我們在兩個網格點的中間設置一個虛擬的邊界點,我們記爲l,r。
A0------l------A-------r-----A1
這兩個點作爲網格單元的邊界,而求解點代表網格單元的內部信息。於是我們對方程在網格單元內積分。
∫lr∂t∂u+∂x∂f(u)dx=0變形後得到
∂t∂∫lrudx+f(u)∣lr=0
以u在A點的值近似代替網格內部的分佈,得到
∂t∂uA(r−l)+f(ur)−f(ul)=0
利用uA0、uA、uA1插值得到ur、ul即可得到一個uA的常微分方程,其它點以同樣的方式處理於是便可推進求解。
通量差分
同樣考慮有限體積法相同的網格劃分
A0------l------A-------r-----A1
這裏我們稱點l和r爲通量點,而A0,A,A1爲求解點,直接利用通量的一階差分代替微分得到離散化方程
∂t∂uA+r−lf(ul)−f(ur)=0到這一步爲止其實與上面的有限體積法並沒有很大的區別,二者的主要差別在於通量點上通量值的求解。有限體積法在通量點上是通過相鄰網格單元內求解點插值得到通量點上的u然後代入通量表達式求出通量。而通量差分則忽略掉了通量點上u的構造,轉而直接構造fl和fr,對任意函數g(ui−j,...,ui−1,ui,ui+1,...,ui+j)(ui表示第i個求節點上的u值),只要當網格單元足夠密時,g可以收斂到真實的f(ui)即g(ui,...ui,...ui)=f(ui),即可使用g來代替通量點上通量的計算。從這個角度看有限體積法可以認爲是一種特殊的通量差分方法。
通量差分和有限體積法保證了網格單元交界的通量點(面)兩側上的通量值連續,從而保證了守恆律。這在間斷捕捉中很有意義,研究表明流場中存在間斷時,數值通量的誤差明顯大於沒有間斷的情況,如果網格交界處的左右通量因爲誤差原因不能抵消,就會引起錯誤。因此這個算法在超音速可壓縮流動中經常使用。而由於通量差分構造通量函數g相對較爲自由,因此不斷有研究人員提出新的通量構造方式,並發展出來了一系列高階算法。
迎風、特徵線和信息傳播方向
考察線性的一維對流方程∂t∂u+∂x∂u=0
可以在t−x平面上尋找一條曲線,使得u的值沿該曲線不發生改變。設曲線爲x=x(t),於是u(x,t)可以寫成u(x(t),t),可以得到
dtdu=∂t∂u+∂x∂udtdx
代入原方程得
dtdu−∂x∂udtdx+∂x∂u=0
當dtdx=1時得到
dtdu=0
因此在x=C+t這族曲線上,u的值不隨時間變化。從任意初始位置C出發,這表明初場任意一點的信息ui隨着時間的推進,會逐漸向x軸的正方向運動,因此這個方程的信息是從x軸負方向傳向正方向,不存在反向傳播的情況。
從上面的方法介紹上可以看到,除了譜方法外,其它方法在構造數值格式時,我們需要利用不同網格單元的值更新單元上的值從而使得計算不斷推進下去。當微分方程本身描述了信息的傳播方向時,使用單元左側(x軸負方向)還是右側(x軸正方向)的值更新就變得重要起來。如果方向不對,計算結果必然是非物理的,通常對應的就是計算髮散(例如信息從上游來,而每次都用下游值更新當前點的值,顯然與真實的信息傳播方向相反,得到的結果必然是錯誤的)。因此爲了保證計算信息傳播方向正確,於是就有了所謂迎風格式,即保證數值推進採用的值總是信息傳播方向的上游點的值,這就叫迎風(風從上游刮來,用上游的值,就是迎着風去取值)。
CFL數
CFL是Courant,Friedrichs,Lewy三個人的首字母。其定義如下:
對於線性的一維對流方程∂t∂u+c∂x∂u=0利用有限差分法求解,空間步長Δx,時間步長Δt,CFL定義爲cΔxΔt
這個參數用於表示有限差分格式的穩定性,當CFL數大於1時差分法不穩定,小於1時差分法穩定。利用馮諾依曼穩定性分析的方法,通過對離散格式做傅里葉-拉普拉斯變換,在譜空間裏求得的譜系數的衰減條件。具體分析就不寫了,主要說一下其物理或者說是數值意義。ΔtΔx表示了網格所能捕捉的信息傳播的最快速度,如果微分方程描述的信息的傳播速度快於網格捕捉到的速度,那麼網格就無法分辨信息傳播的完整過程,因此就會出現非物理的解(發散)。對於一維對流方程來講其信息傳播速度爲c,因此需要有ΔtΔx>c,對其變形即得到CFL條件。