有限元分析軟件開發的一點想法
分享一點感想.希望借此激發出更多的人的心聲.不管是初生牛犢,還是泰山北斗,都希望大家能夠各抒己見,旁征博引,為國產大型通用有限元軟件的發展出謀 劃策,盡職盡力. 我國有數以千計的人再次從事有限元的工作,其中不乏理論名家大家,可是我們卻始終看不到我們自己的一款大型通用有限元分析軟件.國內的市場基本都被 Ansys一家做大壟斷了.可是令人痛心的是, 我們大部分時間做有限元計算的科研工作者用的都是盜版有限元軟件,尤其是學生,本科生.沒有錢去買那昂貴的商業軟件,可是學校有沒有那么多的資源可以利 用.最終的結果是,我們的科研是基本建立在盜版軟件的基礎上.可想而知,這最終受害的還是我們自己.有誰能保證盜版軟件的質量和可靠性呢?
看到國不少的人在討論我們的cae軟件的窘狀,可是,大部分時間都是在以茶余飯后閑話聊天的形式進行這樣的討論, 少有人進行過較為嚴肅較為系統的考慮. 這里引用得這篇文章雖然不盡完美,但是能看出作者是進行了一番認真的思考的. 我們須要的就是這樣的討論.
[摘文]
CAE(計算機輔助工程)是繼CAD(計算機輔助設計)又一個提升研發水平的工具。目前的CAE軟件幾乎是國外產品的天下,國內的有識之士都很著 急,并大聲疾呼,有院士,也有一些原來用FORTRAN開發過大型計算軟件的前輩,連自然科 學基金會都著急了,想對有關的計算機軟件的技術研究進行支助(見自然科學基金會的2009年公告),但這可能難以改變現狀。自從80年代航空系統組織大量 技術人員開發“哈杰夫”以后,國內的自主研發的系統就再沒“風光”過,即便是小有名氣,大都在SAP5、ADINA的源代碼上修修補補,自己也干過這種事 情,到現在已和國外的距離越來越大,問題出在哪里呢?
CAE的核心是有限單元法,包括有限體積法等,像邊界單元法、無網格法等等,純科學的研究意義很大,用在CAE中很難取得有限元法那樣的效果,因為 CAE 的對象是工程,要考慮用統一的、比較簡便的方法解決工程問題,軟件甚至要傻瓜化,工程師幾乎不用什么基礎知識就能解決工程問題。
CAE的難度有三個。
其一是所謂的前處理,將用戶的模型變成有限元計算所需要的單元、節點、邊界等數據,現在三維設計軟件非常成熟,幾乎所有的三維設計軟件都是用“幾何 框架” 描述,并且幾何框架的描述已經中間化,即所謂的“幾何內核”,這樣的中間件,既有開源的,也有商業的,像ACIS等,都是一幫搞計算幾何的人弄的,將幾何 框架模型轉換為“單元”,有一些成熟的算法,但總的來說是個技術活,比如圓角處理,網格加密等等,這種技術并不被所有的技術人員掌握,搞有限元法的人絕少 在計算幾何方面深鉆過,要學數據結構、圖論、計算幾何等,太復雜了。
其二是解方程。有限元的方程不外是線性代數方程、非線性方程、特征值問題、差分方程,雖然,有限元得出的剛度矩陣是主對角占優、對稱正定,方程有什 么好解 的?實際大有講究,你可以作一個實驗,自己編寫一個方程求解程序,再下載一個BLAS等,編程調用,再用MATLAB計算一下,當然方程的維數要非常大, 比較計算時間,差別就出來了,維數越大,這種差別越大,更遑論現在老外玩的是超大規模并行計算、網格計算、云計算、GPU的方程求解,80年代 初,NASA的一些科學家構思了一種脈動陣列機,干什么用呢?專門用于求解方程,太牛了。解方程的方法,大有講究,這是數學家們的“飯碗”,別人很難想出 比他們更高的招數,什么降條件數呀,異步并行呀,同步并行呀,空間映射呀,還不算針對特定矩陣的特定解法,能用上的全用上,難追呀!
上面兩點都是純數學或者幾何的問題,與有限元法使用關系不大。
第三是本構方程。這是有限元法的物理方面,力學方面。有限元的另一個物理、力學方面表現在連續方程等,CAE面臨的對象多種多樣,有力學、溫度、聲、電磁等等,包括耦合,能用一種統一的方法解決工程這正是有限元方法的魅力所在。
本構方程是描述兩個物理變量的函數關系,比如應力與應變,核心是通過實驗研究,得出函數關系,原則上函數關系中的未知變量要有明確的物理意義,否則價值就不大,并用實驗來檢驗本構關系的正確與準確性,要在有限元中應用,本構關系還要求是顯函數。
工程面臨的物理對象、物理材料是紛繁的,對本構關系的研究構成了固體力學的主要研究內容,也應該是主要研究內容,知道了本構關系,就等于說知道了材 料的 “受載”,但是材料會破壞,何時破壞就屬于“強度”問題了,古典有四個強度理論,還有學者在發展它,最為“時髦”是向材料的微觀、細觀、納米,甚至原子、 分子上靠,最好直接“從頭算”,解薛定諤方程,直接算材料的“命”、計算材料的各種特征、計算材料的演化規律,不過這有些“異想天開”,因為原子的運動服 從統計規律,是隨機運動,想想也是,如果不隨機,就不會有自然界的進化,隨機是進化的基礎。不過科學家還是想弄清楚這些,往極大與極小兩個極端走,極大就 要找尋宇宙中心,極小就要尋求微觀世界的本質。
以上說了三個難度都是數學、力學層面的,實際上,一個CAE軟件還需要很多支撐,在現在這個計算機軟件科學、軟件技術飛速發展的時期,離開計算機技術,主要是軟件技術恐怕是很難在商業上成功。
我看過很多搞有限元方法的人、或者搞數值計算的人編寫的程序,幾乎沒有任何軟件科學,哪怕是軟件技術的基本知識,只會一門某某語言,大多數是 FORTRAN,就開始編寫代碼,這樣搞CAE軟件太難了。即便是大公司,按照軟件工程的方法編寫大型的應用軟件,失敗的項目也不少,投資都打了水漂。軟 件也是一門科學,要高效編寫程序,就要服從軟件科學的規律,編寫有限元軟件乃至于CAE軟件要考慮很多問題,這個團隊必須要軟件工程師參與,甚至要讓軟件 工程師來當“項目經理”,來“領導”項目的“生產”。對于軟件技術具體要考慮如下問題:
1)要嚴格按照軟件工程的思路、方法進行開發、管理;2)要精心設計系統的架構;3)基于何種平臺開發,windows或者linux,java或 者 dotnet等等;4)后處理要考慮,強烈建議直接調用3D引擎,java3d簡單易學,又是基于場景模式,DirectX和OpenGL也不難;5)人 機交互界面是軟件能否易用的基礎;6)腳本很有意思,寫一段代碼,直接交給系統,直接得出結果,中間的環節一概省略,腳本等于要自己定義一種“語言”,現 在解釋性語言的魅力越來越大,自己就編寫過一個計算表達式的解釋器,還能計算復數,很多的函數等,現在將它部署在服務器上,用戶打開網頁,輸入表達式,直 接得到結果,又學了一段時間的JavaCC,不得法,后來放棄了,不過學會了詞法、標記、BNF、語法等計算機知識。7)數據庫一定是要考慮的,對于大量 的數據,它的檢索速度要快得多,把你的所有數據存在數據庫上吧!存文件的方法落后了,有微軟的SQL,也有免費的mySQL。8)數據結構是說用什么樣的 方法表示你的數據,這個概念比較抽象,有些類似OOP,這是整個軟件設計的基礎,還有軟件界的牛人炮制出來“模式設計”的思想,說了一些面向對象設計的基 本原則,但是它非常抽象。9)Web化,現在的趨勢是有業界大佬說“網絡就是軟件”,目地是用戶以后都不要在自己的計算機上安裝軟件了,一切都Web化 了,按月給“我”交錢就行,也不貴。10)并行化的目地是讓從開始計算到計算結束,花費的時間僅可能短,有它的方法,我比較看好異步的Web Service。11)接口問題,一個軟件要考慮與別人的信息交換,我覺得數據庫中數據源的思想非常高明,大家都遵守一個數據接口,不管你如何實現,用戶 直接調用,這就是所謂的異構數據庫,現在有人構思3D的數據源了,搞軟件的大公司都非常好,對某一件事大家都遵守一個規范,就像現在的TD-CDMA,按 照此標準大家都都能夠互相3G了。12)語言問題不好說,java和dotnet都很好,連fortran、matlab都對象化了,關鍵是你的思想與技 巧掌握如何。13)開發隊伍問題,要開發就要組織一個團隊,搞系統設計的,搞計劃的,coder等,人員結構要合理。13)文檔是軟件開發的基本要求,說 的太多了,我看別人的無注釋程序,還不如自己寫,我想很多coder都有這樣的經歷,這就是文檔的重要性。14)軟件要健壯,就要測試,很多coder并 不重視這一點,junit、nunit是好的選擇,還有一些專門的測試軟件。15)計劃管理,make code就像工廠的生產,有計劃有監督有獎有罰,才能保證“產出”,作坊式的生產已經很不和時宜了。還有很多,這些還只是皮毛,不能深論了。
最后說說干這件事的目地,如果不將CAE軟件定位定義在市場上,就只能追求科研價值了,現在CAE的一個大拿在廣宣精益研發的概念,這就是市場引領,一流企業賣概念理念,此謂也。
對于CAE軟件的開發,我們該思考些什么呢?
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















