區別于其他行業的軟件開發,CAE軟件的研發有其特殊性,這里的CAE軟件主要指使用有限元/有限差分/有限體積等數值計算方法進行仿真的軟件,其中包含了前處理器,后處理器,求解器以及相關模塊,求解領域包括但不僅限于靜力,動力,流體,電磁,聲,熱,光等。
中國在數值計算方法很早就有比較突出的成果,以馮康為代表的老一代數學家在有限元理論方面的研究處于世界領先地位,在工程應用方面也取得了相當的成功。只可惜由于種種客觀原因的限制(主要是計算機在中國發展的限制以及投入不足),中國的CAE軟件沒能取得長足的發展。也導致了目前中國CAE軟件市場被國外軟件一統天下的局面。
長期從事CAE軟件的管理研發工作,本文想從幾個方面探討一下CAE軟件研發的一些相關話題。
1. 中國有無研發大型通用CAE軟件的必要性。
2. 中國自主研發CAE軟件的出路是什么
3. CAE軟件架構設計
4. CAE軟件研發管理
5. CAE軟件的核心技術和風險
1. 中國有無研發大型通用CAE軟件的必要性。
這是個老生常談的話題,每逢開各種學術會議,最后總會得出結論:發展國產通用CAE軟件是當務之急云云,開完會后不了了之。殊不知通用CAE軟件研發涉及到的范圍相當廣,需要從技術,資金投入,開發周期,人才儲備,市場應用,項目支撐等各個方面做好調研。開發一款優秀的通用CAE軟件絕不是買個求解器,做一個前處理器,算兩個case就能成氣候的。Ansys,Nastran,Abaqus 發展了幾十年,在研發方面投入巨資,不僅自己做開發,還收購了相當多優秀的CAE公司,將產品應用到無數的實際工程中,一步一個腳印才逐步發展到現在的水平的。
個人以為開發國產通用CAE軟件雖然是個美好的愿望,在中國目前的環境下,不切實際(國家連OS研發都不愿意投入,CAE更不用講了)。退一萬步講,即使能開發出來一個像樣的產品出來,結局也能想到:基本上是被國外的產品直接拍死,只能做做科研或者給高校使用。
2. 中國自主研發CAE軟件的出路是什么
既然沒必要開發大型通用CAE軟件,那國產CAE軟件研發的出路在哪里呢?
既然通用的道路走不通,那就走專業化的道路。使用CAE軟件的目的不外乎兩點:優化和驗證設計,縮短產品上市周期。在這個過程中,用戶最耗時的部分是 幾何模型和有限元模型的建立以及模型的優化。如果能針對這個部分做一些專業定制的開發,將會給客戶帶來很大的價值。試想,對一艘船進行仿真,建立整船的幾何到建立有限元模型需要1個月。分析的工況有20個,這些要全部手工建立,仿真結束后要自己生成報告。如果能開發出一款專業的船舶建模軟件,用戶通過輸入參數就能很快建立幾何模型,而且可以從模板庫直接取船舶的部件,考慮到船舶分析的一些特殊情況,比如大量使用shell和梁,桿單元,能夠幫助用戶快速建立好有限元模型,同時把常用的工況也做成模板,求解可以調用公認標準求解器,也可以調用針對船舶開發的專業求解器,仿真結束后把結果輸出為用戶想要的報告格式。可能3天就能完成整個仿真流程。這樣可以大大減少用戶的工作量。尤其對于精密制造業比如飛機,發動機,芯片等,效率就是王道。
3. CAE軟件架構設計
略,以后通過UML圖的
狀態圖
用例圖 活動圖等來描述一般CAE軟件的架構和設計
4. CAE軟件研發管理
CAE軟件各個功能相對獨立,因此很容易模塊化,但是集成后各個模塊之間耦合度很高。
曾經調試過一個case,仿真出現錯誤,從求解器開始debug,經過Mesh,FEM模型,CAD模型,最后找到問題的原因是CAD單位問題,也有過從求解器debug開始到CAD再又回來,最終問題定位到Mesh上。
人員配置:
不同于常規軟件研發,CAE軟件研發對研發人員背景有較高要求,需要理解CAE里很多概念。
對于一款常規的專業CAE軟件,參考開發人員配置:
1> 系統架構師(1名)
系架構師主要負責 與應用工程師和客戶工程師溝通,進行需求分析,技術選型,概要設計,模塊設計,數據結構設計,保證產品按預計進度開發,以及軟件仿真流程正確運行。這就要求系統架構師不僅需要有豐富的研發,架構設計經驗,而且要對CAE行業有較深刻的理解。
2>前處理開發(2-3名)
前處理開發主要負責 將CAD模型轉化為有限元模型,這個過程中主要是對CAD模型(按照各個行業需求,模板等,快速生成CAD模型)和有限元模型(有限元單元自動設置,網格密度優化,邊界自動識別設置等)進行編輯,以及可視化。這塊的操作需要
應用工程師的大力協助,因為這塊是最需要專業知識的地方。也是對圖形學要求最多的地方。
3>CAD開發(1名,可選)
CAD通常需要一個CAD內核,主要是建立和編輯幾何模型(三維),可以用開源OCC,也可以用商業ACIS/Parasolid,也可以自主開發,看實際需求。
4>GUI/常用功能(若干)
主要是進行各種界面,以及常用功能進行設計和實現,比如工程文件設計,打開,保存。這塊實際上和前處理會有很多重疊的地方。
5> 求解器開發人員(1-2名 ,可選)
不多說,核心開發。一名開發求解器,一名輔助做benchmark,也需要應用工程師的支持
畫外音:如果有一個厲害的求解器就夠了,如LS-Dyna和powerflow,各種前后處理器會圍著團團轉
6>后處理開發(1名,可選)
輔助:
1>應用工程師
2>客戶工程師
應用工程師主要負責和系統架構師,客戶工程師溝通,講實際工程需求和客戶需求轉化為實際可開發需求。可以這樣說:應用工程師是整個團隊的軍師。
敏捷開發可以應用到CAE的研發管理中,早期做原型時,可以一個月作為一個Sprint,半年左右完成原型,以后逐步縮減Sprint時間,轉為迭代開發。敏捷開發的思路比較清晰,做法也很明確,可以根據實際需要進行運用。
5. CAE軟件的核心技術和風險
目前自主研發CAE軟件并沒有太多的技術障礙,通常認為的技術障礙,比如CAD內核,網格,甚至求解器都可以購買商業庫。個人認為CAE軟件的核心技術在于:
給用戶提供一整套問題的解決方案,幫助用戶快速解決實際工程問題,尤其在通用CAE軟件解決不了或者解決起來很費勁的的領域,軟件在這個過程甚至可以只起輔助作用。當然從長遠來,所有的基礎開發都不可避免。
在國外尤其是美國,CAE軟件研發的生態環境比較完善,高校,各種科研機構,公司,技術人員都能從CAE研發中獲得穩定長期的利益,包括開源產品,這也是為什么CAE軟件產品能在國外蓬勃發展。
開發專業CAE軟件的目的是提高分析效率,但是如果提高的效率的程度不能中和產品研發的成本,就會存在商業上的風險,這是做需求分析時必須要考慮到的。
這里的CAE是廣義的,包含了傳統意義上的 CAD/CFD/EDA/CAE/CAPP等
本文的設計主要覆蓋軟件工程流程中的
概要設計和詳細設計。因為客觀原因,CAE軟件與軟件標準開發流程有所不同,設計文檔更傾向基于可快速實現的
原型開發。
設計中并不強調某一模塊的功能,也不追求某一方面的性能效率,而是基于軟件工程,著重搭建一個通用性,可靠性,穩定性,擴展性,可測試性,維護性優秀的CAE軟件平臺。基于此平臺,既可以開發大型通用有限元軟件,也可以快速開發出行業CAE軟件產品。
第一部分:模塊劃分
根據功能分以下幾大
模塊:
1. 輸入輸出(Input/Output或 I/O)
2. 幾何
3. 有限元模型
4. 后處理器
5. 求解器
6. 圖形
------------------------------------------------------
7. 公共模塊
8. 高性能計算(HPC)
9. 參數優化設計
用例圖(略)
第二部分:詳細設計
1. 輸入輸出模塊(Input/Output)
1.1.文件的讀入與寫出。文件類型包括:
1>. 軟件自定義的工程文件
2>. 標準的CAD文件(DWG/Step/IGS/SAT/X_T/STL/Model/等)
3>. 標準有限元模型文件(bdf/cdb/inp/k/NEU/ModelFlow/I-deas/Ansa/Mar/Admin等)
4>. 標準的行業CAD文件 (制衣CAD格式,PCB板CAD格式等)
需要說明的是第四種文件,該文件的格式數據通常包含了幾何描述信息和屬性,幾何描述信息是指無幾何的拓撲信息(比如一個長方體,幾何描述信息是用初始點坐標和長,寬,高四個參數來表示,而沒有實際的點線面體拓撲信息),讀入該類文件后,需要用CAD內核重新建立模型。
類圖
1.2. 外部接口
通常CAE軟件能夠供其他軟件調用,或者作為其中一個模塊,也能夠實現參數化命令行調用。

2. 幾何模塊(Geometry)
這里的幾何指廣義上的CAD,包含了幾何的創建,編輯,管理等。一般的商業CAE軟件提供了CAD功能,都比較簡單。對于復雜的實際工程,很少在CAE軟件中建模,而是在專業CAD軟件(Catia/UG/ProE/Inventor等)或者行業CAD軟件中建立幾何模型,然后導入到CAE軟件中。所以CAD不是CAE軟件的重點,但是好的CAD模塊能提高
CAE仿真的效率,避免外部CAD數據與CAE接口之間的損耗(最典型的就是CAD數據修補)。CAD建模本身也是一項技術含量很高的工作(參數建模,約束建模),而且Catia/UG/ProE/Inventor這些產品在CAD方面已經做的非常好了。CAD與解方程組數值算法一樣,也是基礎性學科領域。
這里不涉及通用的CAD建模,重點在建立CAD模板。所謂的模板是指可反復使用,用戶輸入參數或者導入模板參數文件,即可建立所需的CAD模型,不需要用戶手工去生成。(比如用戶定義了一架飛機模型參數,參數可以保存為文件,生成實體幾何后,修改機翼長度的參數,可再次生成模型而不用做其他修改)。這也是專業CAD軟件的優勢所在。
CAD建模,首先需要內核,目前商業的3D CAD內核有Parasolid和ACIS,Granite,開源的OCC,國內的CAD內核有廣聯達的GGP等。
3. 有限元模型(FE Model)
3.1. 單元
面向對象方法很適合構造有限元中的單元,ElementType為所有單元的基類。主要方法有:點的集合,材料,分析類型,階次。根據單元的空間維數將單元劃分為 0/1/2/3D單元。如需擴充新單元類型,在相應的單元類型上派生即可。
3.2. CAD和CAD屬性(邊界條件)
這里邊界條件泛指任何在幾何(點,線,面,體)上的屬性(位移/荷載/溫度/吸收邊界/約束。。。)

CYCAD_Controller 負責獲得幾何數據和附加在幾何上的屬性(邊界條件)。CYCAD_Data存儲幾何數據,CYCAD_Attribute存儲與幾何對應的屬性。CYCAD_Engine是CAD內核的接口,通過接口也可以調用自己開發CAD內核。基于該結構,實現了CAD與MESH的解耦,對于已經有的CAD/Mesh接口,能實現最小限度的修改。
3.3. 網格劃分

從名稱可以看出采用了Factory和Facade模式,CYMesh_Facade負責與外部的接口,主要是設置1. CAD數據,2. CAD屬性(材料,荷載,溫度,邊界等),3.網格劃分參數和策略。Controller主要負責Mesh流程,CYMesh_Engine 是執行Mesh引擎的接口,可以根據實際需要選用網格引擎,以上選取了Gmsh,NetGen,Distene,VKI等,在此結構上,開發人員可以方便的對網格劃分流程和網格引擎進行擴展。
3.4.網格屬性
網格劃分完成后,通常做法是把網格數據保存為規定的文件格式以供求解器調用。也有直接在內存中供求解器調用的,雖然提高了效率,但是不利于調試。對于自主開發的求解器,可以把網格導出為Ansys/Nastran等求解器的格式,以方便做Benchmark。
網格的數據包含了如下信息:
1. 節點信息: 索引和坐標(Vertex)
2. 邊信息:索引和點索引(Edge)
3. 面片信息:索引和邊索引(Face)
4. 單元信息:索引和節點索引(Element)
通常以上信息只需得到 點和單元的信息,其它都可以求出。
5. 屬性標簽:加在幾何上的屬性會分配在相應的網格單元或者節點上。(邊界條件/荷載/材料 等)
網格活動圖:
說明:
1. Mesh Data為 網格數據
2. Validate Mesh quality 驗證網格的質量,網格質量指單元的形狀的好壞,有通用的公式計算(比如最大角度,長寬比,Aspect ratio/Skew 等)。網格質量的好壞直接影響到求解精度
3. Output to Mesh file導出為網格文件
4. Run Solver 調用求解器
5. Need refine:根據求解器反饋的結果和預定義的收斂準則,判斷是否需要加密網格
6. Refine Mesh: 加密網格
4. 后處理
后處理是對仿真結果的處理,包括可視化,歸納分析,導出報告,與實驗數據對比等。技術上來講沒有太多瓶頸,主要是數據的組織,再就是大數據顯示的效率。
3.1. 可視化主要包括等值線,云圖,XYplot,動畫等,
3.2. 歸納分析,是指對仿真的原始數據進行加工,得到所需要的參數,比如VonMises應力,S參數等。
3.3. 與實驗數據對比,這個也是以后CAE仿真的一個發展方向:即如何將仿真得出的數據與實驗數據,保證仿真數據具有實際參考價值。
后處理主要用到
圖形顯示模塊。
目前市場上比較通用的商業后處理器:Ensight,HyperView,Femap。
5. 求解器
求解器核心是求解偏微分方程(PDE),有限差分/有限元/有限體積等數值方法二三十年前就已經很成熟,功能上沒有太多難點。開發求解器主要在穩定性,擴展性,效率以及定制化等方面還有很多改進余地。開發求解器面臨的主要問題是非技術問題,就跟鍵盤布局一樣,大家用習慣了,再出來新的除非特別優秀或者有足夠多的亮點,否則用戶很難認可。拿求解器Radioss來說,Altair聲稱兼容Nastran,但是行業認可度并不高。另一個例子是Comsol,Comsol在求解器,前后處理上并無太多亮點,但打出了多物理場的旗號,并且在多物理場建模方面也確實提供了一些便利。

求解器涉及的領域有結構,電磁,熱,聲,光,流體等領域,可參考附件。
6. 圖形
該模塊包括以下幾部分:
1. 幾何模型,有限元模型,結果的可視化
2. 幾何有限元模型的圖形化編輯
3 GUI設計
1. 幾何模型,有限元模型,結果的可視化
可視化開發工具首選OpengGL,使用OpenGL需要較深的圖形學功底。目前絕大部分可視化工具都是基于OpengL。也有些公司在OpengGL之上做了封裝,提供了更高層次的調用接口。
開源可視化工具VTK,ParaView。
也有提供商業可視化工具的(VKI/HOOPS/Gravies/),價格不便宜。
2. 幾何/有限元模型的圖形化編輯
涉及到編輯幾何,編輯網格。允許用戶通過鼠標,輸入等方式編輯幾何和網格,支持更復雜的功能(比如裝配體的網格組合)
CAE軟件通常采用卡片式編輯,即在一個ListView中按Index顯示所有內容,提供編輯,刪除,添加等,在新的窗口中實現功能。
3. GUI
圖形化用戶接口開發工具有MFC,QT,WPF等。最近十年QT的發展已有超過MFC的勢頭。作為GUI開發工具,QT具有使用簡單,不依賴平臺,開發資源豐富等特點,可作為開發的首選。
因為GUI涉及到軟件的每個部分,同樣,為了建立兼容的CAE開發平臺,在開發之初最好能確定GUI工具,以后就不再改動。
7. 公共模塊
公共模塊沒有太多核心技術,實現也沒有難點,但在CAE開發中相當重要,尤其到開發的中后期,公共模塊的重要性更加突出。一個好的公共模塊能大大提高開發測試效率。

公共庫主要包括 字符操作,數值計算,基本數據結構,錯誤返回代碼定義,圖形算法,常用算法,矩陣類等。
CYMatrix_Operator是定義的一個中間矩陣類,主要是統一矩陣操作的接口。考慮到求解器用的矩陣庫各不相同,通過此接口可以統一,但性能上會有所降低。
8. HPC(High performance computation)
參考 FEM之求解器加速---HPC簡介
9. 參數優化設計
參考
FEM之優化算法
總結:
1. 本文只是一個初步的架構設計,其中有很多細節很難用文檔來描述。
2. 設計中參考了如下軟件:
ANSA/Catia/SolidWork/Patran/Nastran/Ansys/Abaqus/HyperWork/HFSS/FEMAP/LMS/ADMIN/Comsol/Cubit/SimLab
寫文本的目的只想說明,不管是開發大型通用CAE軟件,還是行業的CAE軟件,在技術上都是可行的。
還是那句話:在國內開發一個Ansys/Nastran 量級的CAE產品,任重而道遠~