初學COMSOL需要注意哪些?
1 COMSOL只是一款“界面非常友善”“功能比較完善”的偏微分方程(PDE)求解器!
雖然COMSOL是多物理場耦合計算軟件。但它相比其他軟件的優點是:有中文版,功能齊全,界面友善。完全適用于習慣了windows操作系統的廣大群眾。但無論叫它什么,它的本質都是“求解器”而已。進行數值建模或數值仿真,需要考慮三大步驟:前處理,求解,后處理。而COMSOL集成了這三大步驟。所有的設置都可以在同一個操作界面完成,而且采用的是樹狀分支結構。方便步驟的查找,展開等等。它實際上非常好學(相比那些敲命令行的軟件而言...)。
2 新手小白,首先應該明確要仿真的物理模型!
正所謂,工欲善其事必先利其器。如果自己研究的物理模型,控制方程都搞不明白,直接去上軟件。那后果只會自己很痛苦(盲人摸象,苦了自己)。
3 了解物理模型之后, 搜索相關案例進行學習!
COMSOL官方有非常多的案例,只要它可以做的模型,基本都會相應的案例教學。但是,即便如此,也不會有完全一樣的案例等著你去學。所以,不要抱著尋找一模一樣的案例的心態學習,那太不現實。
4 如何學習官方案例
官方案例:http://cn.comsol.com/models
技術資料庫:http://cn.comsol.com/resources
學習官方案例要注意:
第一,通過學習案例,學會基本操作。也就是說你要明白怎么使用軟件。
第二,通過學習官方案例,學會一些常用的技巧。
第三,觸類旁通,舉一反三。
通過學習案例,尋找自己解決問題的思路。很多新手,眼高手低。覺得跟自己無關學科模型案例沒用。那就是大錯特錯。模型之間的區別僅在于控制方程不同。也就說,模擬不同的問題,只是數學描述有差別。求解,設置,網格劃分都是類似的。很多技巧在這個模型中可以很好用,在另一個問題中也是大有幫助。所有的技巧都潛藏在案例中。但是僅僅幾個跟你相關模型的案例,你又能吃透多少呢?
5 除了案例,還有那些資料可尋?
案例庫的案例是第一手教程。其次就是幫助文檔,操作手冊。很不幸,COMSOL暫時沒有官方的中文手冊可以看。僅僅只有一部分模塊簡介是中文的。但操作手冊永遠都是你最先相當的輔助材料。因為,沒有誰能比它寫的更詳細了。還有一些資料,可以在網上搜索到,比如百納學術論壇。這里有很多經驗貼可供參考,多翻翻論壇中過往的問題。
6 如何自我學習COMSOL?
我說的“自我學習”不是指自己學習,而是通過自己摸索,探尋等方式學習COMSOL。既然它是電腦程序,那它必須具有可操作性。這就好比,我們在玩LOL,玩DOTA,打農藥的時候是一樣的。多數人不需要看教程就會操作了,那是為什么呢?因為很多技能隨便按一按就明白咋回事兒了。COMSOL也是一樣的。很多功能你在不清楚的時候,自己填幾個數字,改幾個參數,動手實踐一下看看程序的反應,自然就知道對應的功能是做什么的。這就是自我學習的過程。
7 學會提問
很多新手問問題,僅僅截個圖就問咋回事兒。這都是讓人哭笑不得的。當然,新手這樣問無可厚非。所以,要學會自己調錯。關于如何調錯,可以看我之前的帖子。
建立完模型后,特別是多物理場的模型,很少有可以直接計算并得到結果的情況,即便我們再熟悉怎么建模,也可能會出現錯誤。那么如果快速高效的調節錯誤呢?
第一:對于完全不能跑的程序,比如點擊計算后還沒有出現收斂圖就報錯了。這樣情況的錯誤一般可能會有未定義變量,協調初值失敗,網格報錯等等。這類錯誤往往給出了明確的出錯地點,比如某個域中出現未定義值。或者協調初始值失敗。根據錯誤提示,快速定位出錯的環節。特別是對于新手,不要一出現錯誤就沮喪、慌張,亂調一氣。
舉例說明,對于未定義值,這個所謂的未定義值是模塊中沒有定義的變量,就比如用C編程時,調用了一個沒有定義的變量,程序不知道它在哪里,一般這種問題可能出現在變量定義的環節,這里注意兩點,一是全局定義和組件定義的變量范圍是不同的,二是定義變量要用到基本變量和模塊中的變量,要使用最基本的變量來定義新的變量。出現這種錯誤還有可能是自己疏忽造成的,比如選擇兩個模塊,而定義的變量用到兩個模塊的變量,但是計算只計算了一個模塊,顯然是不對的。再說初始值問題,如果是協調初值失敗,可以修改初始值,修改邊界條件,最后修改求解器。
初始值的估計對于程序收斂速度和能夠收斂有很大的關系,而模型的非線性程度也會造成無法協調初始值,這時候如果肯定初始值沒有什么大問題,就更換求解器,比如原本的定常牛頓,換成自動牛頓。再比如說,出現除零錯的情況,那就要仔細定位出現除零錯的變量位置,這種情況很有可能是你定義的參數和變量或函數有問題,比如出現在分母上的變量在計算中等0了。還有可能是初始值造成的,比如模塊的基本變量在模型中是分母位置,而你把它的初始值都等于0了,肯定會報錯。
對于出現諸如,試圖計算負數的開方等錯誤,都是同樣類型的錯誤。如果調了很久也沒發現錯誤所在位置,一個看似很笨的辦法卻能讓你快速定位錯誤的位置。那就是把模型最簡單化,比如一個模塊你設定了一堆邊界條件,那么就禁用所有“多余”的設置節點,只保留方程可以計算的節點即可,然后再計算,如果繼續報同樣的錯誤,說明錯誤不在這些子節點中。如果不報錯了,那么依次開啟每個子節點,重復此過程,最終定位錯誤所在節點。如果是變量的錯誤,同樣把所有的變量都用常數代替計算,然后依次換成對應變量。同樣,對于多物理場耦合出現的錯誤,也可以先關閉其他場只保留一個,然后耦合變量用常數代替,一個模塊一個模塊嘗試,最終定位錯誤位置。
第二:對于程序開始運行,最后不收斂的情況,或收斂曲線無限震蕩。這種情況要么等待報錯,要么直接暫停求解器,關于暫停方法請在論壇中搜索“暫停求解器”。然后再后處理中畫出所有主要變量的圖像,分析哪些變量哪些位置出現了數值錯誤,即數值“噪聲”。比如某個點突然很大的值。這種情況多半是邊界條件(載荷)不適當造成的。調節這類錯誤先排除網格的問題,然后依次調節每個參數或邊界條件。用筆記下每個不同的條件下,程序出現的結果的變化,這樣就知道某個變量或條件對程序計算的影響趨勢。這個過程就是累積經驗的過程。切記,
一,不要直接關掉程序,這樣沒有結果可能看不出什么問題,調錯就沒有針對性;還有就是如果時間步長很短,那么盡量讓程序存儲數據的時間間隔也較短,比如時間步長是1e-5s,而存儲數據是range(0,0.1,1),如果程序在計算時間不到0.1s的時候停了,那什么結果都看不到了,所以間隔至少是1e-5,推薦使用指數形式的時間間隔。
二是調節參數和邊界條件,每次的(調節-計算)過程只改變一個參數,這樣你才能知道到底是哪個出錯了,不要一次調很多參數,這樣你即便計算成功了,但最終還是不知道到底是哪個參數的影響,這樣以后遇到同樣的錯誤,仍然會無頭緒。
很多程序出現的問題,只有在自己反復摸索的過程中,才能逐漸明白是怎么一回事兒。程序錯誤在報錯的提示當中就那么幾個,什么未定義值,什么協調初值失敗,什么最后一個步長不收斂,達到最大迭代次數等等。但這些問題,不同的模型,不同的問題導致的原因是各種各樣的。你不自己動手改,光靠別人的經驗基本上無濟于事。任何人調錯必須親自查看程序才行。所以調錯提問最好的方式是提供物理模型描述和模型文件。否則白搭。
8 要學會學習
使用COMSOL的用戶絕大多數是研究生以上,少數本科生人群。在研究生這個階段,最應該學會的就是“自己學習”。多總結,多動手,多摸索,多嘗試。自己沒有親自驗證不對或對的事情,一定不要先去問別人。如果有學長學姐幫忙自然很好,但如果你周圍只有自己使用,難道不畢業了嗎?
(來源:百納學術論壇 作者:冰封愛萬俟 原文鏈接:http://www.icomsol.cn/portal.php?mod=view&aid=155)
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















