工業(yè)軟件里有很多開源軟件,,有些是學(xué)習(xí)的好材料,有些可以當(dāng)作第三方組件用于開發(fā),。 早期因?yàn)轫?xiàng)目工作需要以及興趣,,把市面上的絕大多數(shù)開源軟件都摸過一遍,有些一直長期在使用,,包括幾何內(nèi)核,,圖形渲染,各種物理場有限元,,多物理場,,時域有限差分,邊界元,,線性方程組求解,,顯式動力學(xué),格子玻爾茲曼,,離散元,。因?yàn)檐浖^多,名字就不一一例舉了,。 面對紛繁的開源軟件,,如何快速入門,減少試錯成本,,選擇適合的一兩款,,本文介紹筆者的一些經(jīng)驗(yàn)。 1. 相當(dāng)一部分開源軟件使用CMAKE,,所以要熟悉CAMKE的使用,,很多可以直接生成VS工程項(xiàng)目,,方便看代碼和調(diào)試。 2. 從軟件工程角度看,,非C++項(xiàng)目商業(yè)意義不大,。相同功能的實(shí)現(xiàn)如果同時有Fortran和C++版本,優(yōu)先考慮C++,。很多優(yōu)秀的算法底層使用Fortran,,比如商業(yè)版本的NLPQL,被封裝當(dāng)做庫使用,,一些線性方程組解法同時提供了Fortran和C++接口,。 3. 學(xué)習(xí)使用過程中由簡到難,由淺入深,。面對一個新的項(xiàng)目,,如果一開始折騰時間過長,而沒有所成就,,挫敗感是很強(qiáng)的,。開源軟件通常配置都比較復(fù)雜,坑也較多,,很容易出現(xiàn)錯誤,,一開始從最簡單的做起,耐心調(diào)試研究,,一個坑一個坑填平,。 4. 有些開源軟件只支持Linux,沒有Windows版本,。比如OpenFOAM,,MEEP等,增加了學(xué)習(xí)研究難度,。WIndows和VS提供了一些變通的訪問Linux方法,,可以多研究,另外Docker也能幫上忙,。 5. 在開源軟件基礎(chǔ)上開發(fā)新功能,,是提高水平的有效途徑,有些開源工程放在類似github上,,可以自己拉分支,,增加新功能,幫忙改進(jìn)項(xiàng)目,。 6. 開源的文檔除了少數(shù)寫的比較詳細(xì)外,,大部分都比較差,優(yōu)先看幫助文檔,再看文檔提供的參考論文和書籍,,能幫助理解源碼,。最典型的就是用Java寫的顯式動力學(xué)開源軟件Impact,其主要參考書籍《連續(xù)體和結(jié)構(gòu)的非線性有限元》,,通讀此書即可寫出能運(yùn)行的代碼。 7. 對于一些重量級的開源軟件比如VTK,,OCC,,OpenFOAM,CodeAster等,,一定要靜下心來閱讀文檔,。通常這些文檔比較全面,從理論到實(shí)際案例都講得比較清楚,,可以反復(fù)看,。 8. 一些跨平臺的開源軟件需要交叉編譯,要求比較熟悉Windows/Linux環(huán)境和一些編譯器原理,,沒有相關(guān)經(jīng)驗(yàn)慎碰,。 9. 有些研究性質(zhì)的開源軟件,沒有生態(tài)圈,,常年沒有維護(hù)更新,,還有些代碼閱讀起來非常費(fèi)勁(比如一個函數(shù)幾十個甚至上百個參數(shù)),這類開源軟件上不用花太多時間,,除非是唯一的老古董,,天體仿真軟件里碰到過。 暫時寫這么多,,朋友們在使用開源軟件過程中有什么問題,,可以留言,后續(xù)根據(jù)反饋再更新,。 |
|