如何設(shè)計(jì)一個基于Web的有限元分析平臺

本文原發(fā)于我的博客 https://ahuangsnail.com/posts/43

webgl逐漸成熟,普通計(jì)算機(jī)甚至移動設(shè)備的瀏覽器足夠渲染十幾萬的三角形。所以完全可以利用支持WEBGL的瀏覽器構(gòu)建一個有限元分析的前后處理器。這兩天思考了一下技術(shù)路線。后續(xù)將會簡單的實(shí)現(xiàn)一個包含有限元建模、計(jì)算、模型管理等功能的Web系統(tǒng)。

下圖是一個幾何模型的網(wǎng)格,沒有顯示網(wǎng)格線。面數(shù)大約2萬多,旋轉(zhuǎn)幾乎無延遲。采用babylonjs庫。

feamesh.png

目前已經(jīng)有許多在線CAD軟件解決方案,比如onshape,CAD系統(tǒng)可以將所有幾何數(shù)據(jù)信息存儲在WEB瀏覽器客戶端,但CAE不能像CAD那樣,將所有的有限元數(shù)據(jù)都放在客戶端,主要原因是數(shù)據(jù)太多,特別是三維有限元模型。

首先網(wǎng)格數(shù)據(jù)的存儲和傳輸肯定是用二進(jìn)制,目的是減少數(shù)據(jù)大小,目前32位整數(shù)和32位浮點(diǎn)數(shù)足夠用于常用的有限元網(wǎng)格存儲,整數(shù)通常用于存儲節(jié)點(diǎn)編號或者單元編號,32位無符號整數(shù)可以表達(dá)的范圍是0~2^32-1 大約40億,通常一個有限元網(wǎng)格肯定不會有這么多節(jié)點(diǎn)。而數(shù)值計(jì)算中的浮點(diǎn)數(shù)通常也是32位浮點(diǎn)數(shù)。

所以先約定整數(shù)應(yīng)當(dāng)按照int32存儲,浮點(diǎn)數(shù)按照float32存儲。

假設(shè)一個有限元模型節(jié)點(diǎn)數(shù)50萬,二階四面體單元,單元數(shù)大概25萬。

一個節(jié)點(diǎn)最少要存節(jié)點(diǎn)號和坐標(biāo)的信息,節(jié)點(diǎn)號為一個int32,坐標(biāo)為3個float32,那么一個節(jié)點(diǎn)所需要的存儲空間最少是 4+4*3=20 byte, 50萬節(jié)點(diǎn)需要 500000*20 byte 大概需要 9M 的數(shù)據(jù)。

每個單元至少要存儲一個單元號和10個節(jié)點(diǎn)號,11個均為int32,則一個單元為4*11=44 byte,25萬個單元需要 250000*44 byte 大概需要 10M 的數(shù)據(jù)。

即最少要從服務(wù)端傳遞20M的數(shù)據(jù)給瀏覽器,傳輸一個最基本有限元模型網(wǎng)格信息,這還沒要包括節(jié)點(diǎn)數(shù)據(jù)的值,單元類型,材料等信息。

所以服務(wù)端直接將用于計(jì)算有限元網(wǎng)格傳輸?shù)娇蛻舳耸遣滑F(xiàn)實(shí)的。從而引入了一個需要解決的技術(shù)問題,有限元網(wǎng)格用于現(xiàn)實(shí)的輕量化,即如何從一個有限元網(wǎng)格模型中提取用于渲染的最少數(shù)據(jù)。

當(dāng)然,三維數(shù)據(jù)輕量化目前已經(jīng)有一些工業(yè)實(shí)現(xiàn),比如西門子UG的JT格式,最早用于三維幾何模型的輕量化現(xiàn)實(shí),后來發(fā)展到有限元模型數(shù)據(jù)中,https://en.wikipedia.org/wiki/JT_(visualization_format)

還有基于vtk推出的vtp格式,vtk是一個開源的數(shù)據(jù)可視化格式,更是提供了一個用于現(xiàn)實(shí)vtp格式的javascript庫,vtk.js,https://www.vtk.org/

不論采用那種輕量化格式,都要解決如何將數(shù)據(jù)從服務(wù)端傳遞到客戶端。這個問題的將單獨(dú)寫一篇討論起技術(shù)方案。

第二個需要展開討論的是服務(wù)端如何保存一個有限元模型數(shù)據(jù),即數(shù)據(jù)持久化,好在有許多有限元商業(yè)軟件可以用作參考,雖然無法獲知其內(nèi)部如何存儲一個有限元模型,但可以從其輸入輸出格式,來推斷如何保存一個有限元模型。具體技術(shù)方案實(shí)現(xiàn)也將單獨(dú)展開。

第三個是一個有限元模型需要提供哪些用于數(shù)據(jù)可視化的操作,比如查詢某個節(jié)點(diǎn)的數(shù)值,要有clip操作,甚至可以有比較的功能,當(dāng)然這都是在有限元網(wǎng)格數(shù)據(jù)的基礎(chǔ)上拓展,同時服務(wù)端需要將有限元模型轉(zhuǎn)換為一個用于輕量化顯示的模型。這會是整個系統(tǒng)的最主要模塊,即有限元數(shù)據(jù)的操作。

第四個是需要實(shí)現(xiàn)解析現(xiàn)有的有限元輸入格式,有限元格式通常包含兩種,一種是待計(jì)算的輸入模型,會包含網(wǎng)格數(shù)據(jù)、載荷、邊界等,通常會是一個文本格式,比如abaqus的inp,ansys的cdb,nastran的bdf。一種是計(jì)算結(jié)果數(shù)據(jù),會包含網(wǎng)格數(shù)據(jù)、節(jié)點(diǎn)解、單元解,通常會是一個二進(jìn)制格式,比如abaqus的odb,ansys的rst,nastran的op2。如果想作為一個有限元項(xiàng)目的管理平臺,應(yīng)當(dāng)支持商業(yè)有限元軟件的模型的導(dǎo)入導(dǎo)出。

第五個是要實(shí)現(xiàn)幾何模型的網(wǎng)格劃分,提交求解,幾何模型的網(wǎng)格劃分可以采用gmsh,有限元求解可以采用一些開源求解器,比如getdb,Code_Aster,CalculiX等等。這里有一個有限元軟件的列表https://en.wikipedia.org/wiki/List_of_finite_element_software_packages

后續(xù)對這些技術(shù)點(diǎn)一一展開討論。

登錄后免費(fèi)查看全文
立即登錄
App下載
技術(shù)鄰APP
工程師必備
  • 項(xiàng)目客服
  • 培訓(xùn)客服
  • 平臺客服

TOP

1