翻譯自COMSOL的用戶手冊。 對使用其他仿真軟件也很有指導價值。
用戶可以調整求解設置、使用對稱或其他模型屬性來獲得模擬解,如果不行的話,可以中斷求解來恢復部分解。
提綱:
1. 使用對稱性
2. 有效的內存管理
3. 選擇單元類型
4. 分析模型收斂性和準確性
5. 求解非線性方程時實現收斂
6. 避免過快的瞬變
7. 物理相關檢查和指南
8. 非物理值
正文:
1. 使用對稱性
建模時使用對稱性可以減少一半或以上的計算量,對于求解大的問題這是一種有效的手段。它適用于包含對稱幾何結構或模型假定的情況下。對稱有軸對稱和對稱和反對稱平面或線:
a) 軸對稱:通常是圓柱體或相似的3D幾何。如果幾何是軸對稱的,那么它只能在軸向和徑向變化,而在周向保持不變。
b) 對稱和反對稱平面或線:在2D和3D模型中比較常見。對稱:分割線或平面兩邊是相同的。對于標量場,穿過對稱線的法向流量為零。在結構力學中,對稱條件是不同的。反對稱:分割線或平面兩邊是反向平衡的。對于標量場,穿過對稱平面或線的獨立變量為零。結構力學使用另外的反對稱。很多模型界面都支持對稱邊界條件。
為了使用對稱平面或線,所有的幾何、材料性能、邊界條件都必須是對稱的,任何載荷或源項也必須是對稱或反對稱的。然后就可以建立一個對稱模型,它可以是整個幾何體的1/2,1/4,1/8,然后施加合適的對稱邊界條件。
2. 有效的內存管理
特別在3D建模時,巨大的內存消耗必須采取額外的預防措施。首先,檢查是否選擇了線性迭代求解器。通常,用戶不需要考慮選擇什么求解器,因為模型界面會自動挑選合適的求解器。但是在一些情況下,用戶還是需要對求解設置做適當的調整。
估算模型消耗的內存
當內存分配不足時COMSOL會提示”out-of-memory”。雖然內存大小和數組所占用的相同就足夠了,但是由于內存碎片的存在,需要更大的內存。
那么求解一個特定的模型需要多大的內存,則有下面幾個因素決定:
a) 節點數目
b) 獨立和不獨立變量數
c) 單元階數
d) 矩陣的稀疏模式。稀疏模式取決于幾何和網格的形狀。例如,一個擴展的橢球比球的矩陣更稀疏。
MUMPS和PARDISO out-of-core求解器可以在內存不夠時,借用磁盤存儲來求解大的模型。用戶可以通過觀察右下角的內存使用情況來了解當前物理內存和虛擬內存使用情況。
建立一個高效內存使用的幾何
首先在處理大的模型時,應該盡量減小求解幾何。通常使用對稱會使模型減少到原來的1/2,1/4甚至是1/8。雖然內存消耗并不是線性的,而是多項式(Cnk,k>1),那么這意味著當模型減小一半時,內存消耗會減少一半以上。而其他的途徑是:
a) 避免使用那些不必要的小幾何體,用貝塞爾曲線代替多邊形輪廓;
b) 盡量使用線性單元;
c) 保證劃分的網格質量高。高質量的網格對線性迭代求解器尤為重要,這樣會提高迭代的收斂性;
d) 避免幾何存在尖的、狹窄的轉角。網格單元會在這些地方變得很薄,使得鄰近的網格質量下降。尖角同時會造成非物理現象和巨大的應力集中。
3. 選擇單元類型
大部分模型界面默認選擇一階或二階Lagrange單元或形函數。二階及以上的單元類型會在網格單元的中點和內部節點上增加額外的自由度。自由度的增加會提高解的準確性,但是也會由于減小了離散系統的稀疏程度而加大了內存消耗。對于很多的應用,如結構力學中的應力分析,需要使用二階單元來提高準確度,這是由于一階單元的空間差分為常數。
COMSOL推薦用戶使用默認的單元類型,而對于某些計算可能需要減低單元階數,但是用戶必須注意那些重要的量被求解了。
4. 分析模型收斂性和準確度
有限元法可以精確的獲得如應力集中模型解的局部變化。在有些情況下,用戶可以與參考書、測量結果或其他的原始數據做比較。而COMSOL模型庫中也包含了一些計算好的結果或理論解。通過查看這些基準模型,來檢查結果的準確性。
如果一個模型不能通過其他方法來驗證正確性,那么只能通過收斂性測試來檢查網格密度是否合適。用戶通過加密網格重新計算來檢查解是否可以穩定的收斂。如果加密網格后解的結果發生改變,那么解依賴于網格,該模型需要更密的網格。用戶可以使用自適應網格,它基于誤差準則來加密那些誤差較大的區域網格。
為了收斂性,必須避免幾何中的奇異點。
5. 在求解非線性方程時實現收斂
非線性問題通常很難被求解。在很多情況下,它的解不唯一。COMSOL使用Newton迭代法來求解非線性PDE方程組。這種方法對初始值敏感。如果初始條件偏離期望值,那么可能就無法收斂,即便該方程組使用其他初值時可能很容易收斂。
用戶可以通過下面的方法來提高得到難解的非線性方程組的相關解:
a) 提供最可能的初始值;
b) 順序求解單一方程,當獲取到好的初始值后再進行全耦合計算;
c) 保證邊界條件與初始值一致,相鄰的邊界有一個兼容條件從而不產生奇異值;
d) 加密那些梯度大的區域網格;
e) 對于對流問題,引入人工擴散來提高數值計算性能。大多數流動和化學傳質建模界面將引用人工擴散作為默認設置;
f) 當一個解的成分趨于零時應采用縮放因子。在這些情況下,自動縮放可能并不能工作。
g) 將一個穩態非線性問題轉化為瞬態問題。通過這種方法可以使問題易于收斂。當瞬態計算趨于穩態時,再去求解穩態問題;
h) 采用參數化掃描求解器,調整一個材料的屬性或調整PDE系數的起始值從而減小方程組的非線性。用這種方法,可以得到一系列非線性解,使得非線性問題容易計算。
6. 避免過快的瞬變
在求解不一致初始條件的瞬態問題時,或著其邊界條件、源項在一段時間內發生巨大的變化,那么求解系統引入了很強的瞬態信號。這時時間步進算法會選用很小的步長來求解這個變化,因此求解時間變得很長,有的時候求解會終止。穩態問題則可能會遇上網格分辨率的問題,諸如無線通量問題造成的過沖或下沖。
除非你想知道這些瞬變的細節,一般以可以獲得一致解達到穩態的條件開始。然后再改成模型在真實條件下一個時間段內的邊界值、源項或驅動流。
在多數情況下,可以通過一個平滑函數來引入源項。使得階躍或轉變不那么突然。
7. 物理相關檢查和指南
流體流動和傳質現象
a) 如果所有的邊界條件都不含壓力條件,那么需要在流體域內某個點上指定壓強。如果不指定它,求解就會缺乏約束從而難以收斂;
b) 確保網格足夠細,例如在狹窄的通道內至少保證有4-6個網格單元。
c) 確保邊界條件和初始條件與瞬態問題相吻合。例如,在流體域內初始速度為零時,就不要使用全速度,而是采用一個平滑或斜坡函數將初始速度緩緩的加上去,這樣才能使流場的初始值與邊界條件相匹配,最終達到全速度。
d) 對于流動模型,需要通過Reynolds數來判斷是層流還是湍流。當流動為湍流時,應采用湍流模型。
聲學、結構、電磁波傳播
對于描述波傳播的模型,需要考慮它的時間和空間性。這意味著,最大的網格單元約提供每個波長下10個線性或5個兩階單元。對于瞬態問題,固定時間步長需要足夠小。
結構力學
a) 確保模型是全約束的。約束模型以避免所有的剛性運動,對于3D實體力學模型需要6個約束,即3個平移和3個轉動。否則模型就沒有定義好,計算無法收斂。不可能把6個約束條件加載到一個點上,在它上面最多只能限制3個平移自由度。對于一個3D實體力學模型,可以使用“3-2-1準則”來約束3個自由度在一個點(一個固定約束)上,2個自由度在另外一個點上,1個自由度在第三個點上。可以選擇三個分開的點(頂點)來操作。然后在三個方向上固定第一個點。限制第二個點在兩個正交的方向上,并確保兩點間的連線沒有變形的限制。最后約束第三個點在由三個點組成的平面法線方向上。為了驗證這種方法,模型一個溫度載荷下可以膨脹或收縮,整個過程中應力沒有集中。2D模型則是在一個點上約束2個平動自由度,在另外一個點上約束轉動自由度。
b) 在變形量小的時候考慮使用線彈性材料模型,否則使用非線性材料模型;
c) 避免有尖的轉角,否則會帶來非物理解或帶來無限大的應力集中。
8. 非物理解
哪里和為什么會出現非物理解?
在一些模型中,由于數值計算會帶來一些少量的非物理解。如:
a) 質量擴散中的負濃度;
b) 瞬態熱傳導中溫度略大于初始條件;
c) 結構力學中在沒荷載的方向上出現少量反作用力;
d) 接觸分析中少量負間隙;
e) 少量負的有效塑性應變;
f) 實體力學中理想塑性材料的應力大于屈服應力。
一些原因:
a) 數值噪聲造成的。當一個獨立變量的值趨于零,那么數值噪聲的影響就相對比較大,從而引起了少量的非物理的負值。
b) 插值和外推造成的。例如,結果在有限元中的一個積分點(Gauss點)對于一個彈塑性材料是正確的(在一定的誤差內),但是當外推到單元邊界上時變成了非物理值。
c) 模型不連續造成的。例如,由于初值不連續產生負濃度。對于對流模型,沿著某個邊界初值為零,例如,物理插值是一個初始尖銳,遠離邊界則是逐漸擴散的,然而,有限元模型默認的形函數(二階Lagrange單元)只允許采用連續的函數。因此程序會在迭代前首先修改這些不連續的初始條件,這通常會在起始時間在解中引入一些“小坑”。如下圖所示,濃度在t=0時出現負值:
d) 缺少足夠的網格分辨率。如在高的對流區域(高的Peclet數)和大的反應項或快速反應動力學中(高的Damkohler數)會產生負濃度從而遇到收斂性問題。
e) 不合理的物理模型。例如對于質量輸運,只能在高濃度時使用定常減少的反應項,當濃度接近零時,反應項繼續消耗組分,從而產生負濃度。
避免非物理值
a) 在一些情況下,也可以對獨立變量使用基線,從而在獨立變量接近零時數值噪音不會影響求解。例如加任意一個基線溶度使濃度大于0。這種縮放方法對于某些情況無效,例如,一個反應項它與濃度有關。
b) 避免使用不連續值,用合適的平滑階躍函數代替。
c) 使用對數變量可以消除網格分辨率和負值問題。這是因為線性變換的網格有時無法描述濃度變化的指數行為。另外,使用對數變量可以保證求解過程中原變量不會出現負值。
d) 在繪圖時避免顯示數值噪音造成的非物理值。例如使用c*(c>0)來代替c,這樣在c小于零的部分都強制等于0。同時還可以通過調整繪圖的范圍來去掉它們。
e) 研究細化網格時非物理值是否變好或變壞。如果變好,那么就可以繼續加密網格。如果變壞,那么就應檢查物理模型是否正確。