001 CFD與樂高
來自專欄 CFD科學匠人
雖然CFD不是什麼新鮮事物了,但是開發CFD仍然是一件麻煩的事情。特別是對於從事CFD演算法研究的學生與研究人員來說,要麼面對祖傳代碼,或者面對複雜度很高的成熟開源軟體(OpenFOAM、SU2之類)。問題在於,我們這個領域,似乎從來沒有簡單、高度可重用的基本模塊,能夠讓研究者比較自由的組裝出CFD應用,或者進行各種擴展。即使對於OpenFOAM和SU2這樣比較成熟的軟體,它們都是由數百上千C++類組成,沒有相當的C++功底和較長時間的學習,很難做到擴展開發。特別是大量的C++類以及它們之間的複雜相互關係,構成了學習的最大攔路虎。事實上,這類開源軟體的開發文檔都不好,如果你不參加相關的付費培訓,估計難以快速系統掌握其數據結構與開發模式。
樂高之所以受到歡迎,是因為我們可以用其基本模塊——最簡單的積木,組合成複雜的東西。而且基本模塊之間的介面足夠簡單。如果基本模塊本身太複雜,或者模塊之間的組裝方式過於複雜,它肯定不會那麼流行。如果以樂高的理念來實現CFD的基本模塊,也許會使得CFD更加具有親和力。
因此簡單,簡單,再簡單,才是最關鍵的。但是我們往往會踏入複雜化的誤區,怎麼回事呢?因為開發者的目的是為了創建一個萬能的CFD軟體。為此,他們不得不建立了一套複雜的數據結構體系。這其中,往往出現過度設計。然而,這個體系往往沒有被很好的組織分層,或者因為他人無法輕鬆的感知出這個體系的層次結構,造成了學習曲線非常陡峭。然而樂高的開發者,並不在乎玩家用樂高磚塊製造什麼具體的東西,他們只提供大量的基本磚塊(當然也有一些針對特別主題的定製磚塊)。
因此,我認為,要設計一個好的基礎CFD庫,需要遵循的一個原則是:簡化設計,不要替應用開發者做決定。我們假設越少,留給應用開發者的自由度越大。比如,如果我們對網格塊數據結構做了過多的設計,那麼就會增加網格塊類型的複雜度與維護負擔,從而限制應用開發者對網格塊類型的擴展的自由度。
推薦閱讀:
※Fluent動網格的經典21個問題
※升力來自於流體的膨脹與壓縮
※流動線性穩定性方程推導那點事兒(一)
※吹紙條,紙條為什麼會上升?