
你有沒有想過使用三維成像技術獲得的數據創建網格?這篇文章,我們將講解如何使用 COMSOL Multiphysics? 軟件來實現這一目標,這個主題是對上一篇博客中討論過的不規則形狀模擬主題的擴展。今天我們將討論的過程,一部分已經在為拓撲優化結果設置驗證研究時使用過。這篇文章,我們將對此工作流程進行概括,以適用于通過三維成像技術獲得的數據。
輸入的數據
COMSOL Multiphysics? 支持導入不同格式的數據: txt 文件、Excel 文件、CSV 文件、圖像、DEM 文件、MATLAB? 函數,以及用 C 語言編寫的外部函數。掃描的數據通常以一組橫截面圖像的形式出現,比如接下來我們將要介紹的示例中的數據:人體股骨的一部分。這個模型中的某些數據來自 Visible Human 項目。但是,COMSOL Multiphysics 只支持導入一張圖像生成二維數據。因此,在使用軟件之前,通過以下步驟生成數據文件:手動挑選帶有股骨上半部分的圖像,手動識別包含一根股骨的像素以減少數據量。隨后,將識別出的像素亮度,連同它在空間中的位置一起讀取和寫入一個 txt 文件。圖像中的像素位置用 x 坐標和 y 坐標表示,圖像編號用 z 坐標表示。這些數據適合使用電子表格的格式保存,因為每個像素都是從圖像中讀取并逐一寫入 txt 文件的:
x1 y1 z1 data1
x2 y2 z2 data2
x3 y3 z3 data3
...
此外,還對這些數據進行了清理,以刪除股骨以外的所有信息,并根據股骨的實際尺寸進行了調整。同時為了方便使用,還對數據進行了二值化處理。
用于創建網格的人類股骨的二值化數據的三個切面圖。白色代表數據文件中的亮度值為 1,黑色代表亮度值為 0。
此模型的 MPH 文件可以點擊文末鏈接下載,這里僅對需要采取的步驟做一個大致的描述。在這篇文章的最后,我們將給出兩個包含周圍域的人類股骨的網格,可用于進一步的計算。我們還將討論如何添加其他計算域和劃分表面網格,以便能夠在網格上應用適當的邊界條件。
首先,將數據導入軟件的一個 插值 函數中,并將其命名為 human_femur
。我們將通過兩種可能的工作流程來獲得股骨的網格:
- 一個快速通道,通過這個流程,可以獲得非常粗糙的網格來表示數據,并允許重新劃分網格使粗糙的表面變平坦。
- 2. 一個包含更多步驟的工作流程,使用亥姆霍茲平滑來確保獲得一個平滑的形狀。
工作流程 1:使用網格數據集表示數據,并將表面重新劃分網格作為一種平滑技術
我們先來看更快速的工作流程。在這個示例中,我們將使用 柵格 數據集表示數據,并使用 過濾器 數據集濾除數據來表示股骨。這個過程將產生一個比較大的表面網格,因此使用 自由三角形 操作對不平整的表面進行平滑處理。
設置網格數據集和過濾股骨數據
在這個工作流程中,我們不需要 幾何 節點,甚至不需要模型開發器中的 組件 節點,稍后我們將在添加額外的計算域和創建股骨的計算網格時添加一個組件。在 全局定義 節點下設置 插值 函數,然后直接進入 結果,定義 柵格 數據集。
添加 插值 函數后,直接設置柵格數據集。
COMSOL Multiphysics UI 顯示了模型開發器,突出顯示了網格數據集功能,相應的設置窗口與數據,參數邊界和網格部分展開。
將 柵格 數據集作為一個規則的網格使用,并在這個網格上應用 插值函數。此處,大約一半的圖像分辨率被用作數據集的分辨率。接著,添加一個過濾器 數據集,輸入表達式 human_femur(x,y,z)
,并將 下限 設置為 0.99
。這將創建一個值為 0.99 的等值面,并包含所有超過該值的數據。換句話說,就是創建一個人類股骨的等值面。如果最終想創建一個域,可以使用 過濾器 數據集。在第二種工作流程中,將使用 分割 數據集,你可以在其中定義多個值來創建多個等值面,這最終將產生多個計算域。
由 過濾器 數據集生成的等值面。請注意,由于坐標軸進行了縮放,股骨在 Z 方向上被壓縮。
導入和分割過濾器數據集的網格
將 過濾器 數據集代表的網格導入網格劃分序列中,并重新劃分面網格以平滑粗糙度。通過右擊 數據集 > 過濾器 節點,選擇 創建網格零件 可以完成這個工作流程。
在第二個工作流程中,我們將使用 在新組件中創建網格 選項。選擇創建一個 網格零件,因為稍后將使用這個網格作為構造幾何。這一操作將在 全局定義 下自動設置一個網格零件,并添加一個 導入 節點,用于導入 過濾器 數據集的網格。過濾器 數據集的域單元質量通常較差,所以只導入三角形網格。然后,只要表面網格質量達到要求,將重新生成四面體網格。
在模擬中,經常需要進行特定的邊界分割來應用邊界條件。使用 與平面相交 操作切割平面,或者使用分割操作分割幾何形狀。 你可以通過閱讀在 COMSOL Multiphysics? 中編輯和修復導入的網格,了解相交和分割操作的不同。這里,我們將使用 用球分割 操作來獲得一個大致的圓形邊界。
用 球分割操作(粉紅色邊)分割出一個大致的圓形邊界(用藍色突出顯示),之后在這個邊界上施加一個邊界條件。為了便于觀察,關閉了網格渲染。
重新劃分網格以提高質量和平滑粗糙度
由于單元大小不一,并且有許多長條狀的三角形,導致表面不光滑不適合模擬。因此,在使用之前需要對網格進行重新劃分。使用更大的網格大小重新劃分面網格,也可以平滑形狀。
導入的 過濾器 網格放大圖片。由于網格數據集是六邊形,網格形狀呈明顯的塊狀,包含大三角形、小三角形和長條形三角形。
使用 對面重新劃分網格 操作對面重新劃分網格。為了避免求解網格中的粗糙度,對網格進行均勻化操作,設置一個大于原網格不均勻度的單元大小。具體可以通過將 最大單元大小 和 最小單元大小 設置為 0.005
m 來實現。如下圖所示,現在的表面已經足夠平滑,但仍然有些不均勻。在稍后工作流程中,我們將再次重新劃分邊界網格,以進一步提升不規則面的均勻度。
圖片顯示了重新對表面劃分網格之后的股骨頂部。
如果你正在嘗試對幾乎相交的表面重新劃分網格,或者正在對那些幾乎與自身相交的表面重新劃分網格,可以試試亥姆霍茲平滑方法。
現在,表面網格已經足夠均勻,可以繼續在這個網格上添加額外的幾何體。
添加更多的計算域
股骨域可能是你唯一感興趣的區域,但假設你還希望在股骨周圍再建立一個模擬域或一些螺釘來固定股骨中的裂縫,你會怎么做呢?這可以通過 幾何 序列來實現。首先,在股骨模型上添加一個三維組件。然后,添加 幾何>導入節點,在設置窗口中選擇 網格零件 1。這個節點允許用戶添加和定位新的幾何體,并且應該被標記為 構造幾何,因為我們將只使用股骨的面來定位新的幾何體。一旦確定最終幾何,構造幾何對象就會被移除。你可以看到它是一個構造幾何,因為它的邊是虛線而不是實線。
將股骨作為 構造幾何 對象導入幾何序列,以定位與股骨有關的其他幾何體。
將創建的幾何體在網格劃分序列中與網格相結合。在網格序列中,使用 并集 操作將幾何體或導入的CAD與網格相結合通常是最穩健的方法, 這也是本文接下來要遵循的工作流程。
你可以畫出在仿真過程中所需的任何幾何形狀,或者導入 CAD 設計。使用構造幾何,可以很容易地繪制出所需的幾何形狀。在這個例子中,我們將添加兩個螺釘來加固股骨,但無論是創建還是導入一個或多個幾何對象,原理都相似。螺釘的幾何形狀和股骨的構造幾何如下面的左圖所示。創建完幾何結構,并且已經構建完 形成聯合體,股骨的構造幾何就會從生成的幾何結構中被移除,只剩下螺釘,如下圖中間所示。對于導入的 CAD 設計,在將其與網格結合之前也可以添加 移除細節 或 虛擬操作 ,對幾何體進行簡化。關于如何將幾何體和網格相結合的更詳細的說明,請看查看STL 導入教程系列教程的第二部分。
在同一個 組件 中,轉到 網格 序列。確保添加兩個 導入 節點,一個導入螺釘的幾何結構,另一個 導入 節點從網格部分(下圖右)導入股骨的網格。使用網格 并集 操作將兩個表面網格結合起來,并使用連接實體 節點將螺釘的域連接起來,因為它們被股骨的表面分成了兩部分。
左圖:螺釘的幾何結構與股骨的構造幾何對象。中間:構建 形成聯合體 節點后的螺釘的幾何形狀。右圖:導入到網格劃分序列中的股骨和螺釘的網格。
使用 對面重新劃分網格 節點重新劃分股骨的表面,將 最大單元大小和 最小單元大小 設置為 0.005
m。請確保為 對面重新劃分網格 操作添加一個 固定網格 屬性,并選擇保持螺釘孔邊緣的網格固定(如下方左圖中藍色高亮部分所示)。這樣可以提高螺釘孔周圍網格的單元質量,并能進一步平滑股骨表面。
在保持螺釘孔周圍邊緣固定的情況下,第二次對股骨表面重新劃分網格。
最后,添加一個 自由四面體 網格操作,用四面體單元填充整個域。若當前需要進行物理場分析,可以選擇添加掃掠網格或邊界層網格來優化。在設置和求解模擬時,將使用基于該網格定義的域和邊界。
用高階離散化添加物理場
現在,網格已經構建完成,可隨時進行仿真,如下左圖所示。但是,如果通過高階離散化添加物理場,會發生什么?比如,我們想使用 二次巧湊邊點單元 離散化設置建立一個固體力學仿真。彎曲單元的二階節點將被放置在網格表面的彎曲表示上,類似于有基礎幾何結構時的放置方式。為了查看彎曲單元在網格中的樣子,可以將網格數據集的 幾何形函數 設置為 二次拉格朗日,和將網格繪圖的節點設置為 幾何形函數。二次拉格朗日 繪圖 的設置并不與模型中的任何物理場離散化相耦合,它只用于繪圖。
左圖:股骨和螺釘的體網格圖。白色單元代表螺釘的域,股骨的單元被表達式 x> -0.015 過濾掉了。右圖:在股骨的彎曲邊界上顯示的具有二階節點的最終網格。綠色和黃色代表偏度。
對比生成的網格和導入的數據
可以通過以下方式對比生成的網格如何跟隨數據:添加一個用 柵格 數據集的網格分辨率繪制的 human_femur(x,y,z)
表達式的等值面圖。從下圖可以看出,生成的網格很好地遵循了等值面。
生成的表面網格(灰色)和插值數據 human_femur(x,y,z) 的等值面(藍色)的對比。
工作流程 2:使用亥姆霍茲方程對股骨數據進行平滑處理
簡單來說,在這個工作流程中,我們將添加一個應用股骨數據的規則塊狀域,然后通過求解亥姆霍茲方程對數據進行平滑處理,得到一個光滑的股骨表面網格。我們仍然需要對股骨表面重新劃分網格,但這次只是為了提高網格單元的質量。
定義一個規則域
為了求解亥姆霍茲方程,我們需要定義一個域,可以是長方體、球體或其他一些簡單的適用于股骨數據的幾何形狀,如這篇博客中所述。要確保這個域盡可能的小,這樣就可以使用精細的網格來求解這個域。網格需要足夠精細,以解析你想在表面網格中看到的任何數據中的細節。
定義了導入數據的規則域上的足夠細的六面體網格。
接下來,我們來設置方程,添加一個瞬態研究并進行求解,以獲得我們可以使用的解數據集。
對數據進行亥姆霍茲平滑處理
為了避免數值偽影,并有可能使用較粗的網格,使用濾波的亥姆霍茲偏微分方程(PDE)對插值函數進行低通濾波:
其中,R 是濾波器半徑,近似代表低通濾波器的寬度。添加一個 系數形式偏微分方程 接口,如下圖所示。
系數形式偏微分方程 接口的設置。
這里,我們使用表達式 max((h[1/m])^2,R^2)
來表示擴散系數。COMSOL軟件會對網格中的每個節點使用最大的網格大小 h 和參數R。在這個例子中,局部的網格大小 h 是恒定的,但是如果使用非結構化的四面體網格,h 會變化。請注意,因為所有操作都是在一個由網格(每個單元網格都是線性)表示的幾何結構上進行的,所有的單元離散化階次被都降低到線性單元。然后使用一個穩態求解器計算解。
在六面體網格上繪制的插值函數 human_femur 的切面圖(左)和平滑處理后的解數據(右)。
使用分割數據集過濾股骨
在平滑的解數據中使用一個介于 0
(藍色)和 1
(紅色)之間的值來過濾股骨的表面網格。在這個例子中,假設我們也希望股骨外的區域成為我們模擬的一部分,因此應該選擇添加一個 分割 數據集。如果只對模擬股骨域感興趣,可以使用 過濾 數據集,就像第一個工作流程中那樣。水平值 為 0.6
的 分割 數據集就已經足夠滿足我們的目標了,如下圖所示。
分割 數據集的圖,水平值設置為 0.6
。等值面將模擬域劃分為兩個域,一個是股骨域,一個是股骨周圍的域。
當對水平值滿意時,右擊分割 或 過濾 數據集節點,選擇 在新組件中創建網格。如果需要創建額外的模擬域,請使用 創建網格組件 選項,并按照第一個工作流程的步驟進行。
這將自動設置一個帶有 導入 節點的新組件,用于導入 分割 數據集的網格。清除 導入域單元 復選框,并將 邊界分割 設置為最小值,僅導入表面網格,形成盡可能少的邊界;7 個平面邊界和 1 個股骨邊界。接下來,對這個表面網格進行改進,然后重新創建一個體網格。
導入的 分割 數據集網格。股骨的表面網格包含了大大三角、小三角和長條三角形,其質量需要提升以適用于模擬。為了便于觀察,隱藏了一些邊界。
重新劃分表面網格來提高三角形的質量
使用 對面重新劃分網格 操作對同一網格劃分序列中的表面重新劃分網格。為了得到大小基本相同的三角形,將最大單元大小 和 最小單元大小 都設置為 0.005
m。
重新劃分網格后的股骨和長方體表面。網格大小已經被修改,以生成一個大小基本相同的三角形表面網格。為了便于觀察,隱藏了一些邊界。
現在,我們可以用一個四面體網格來填充這些域。添加的物理場接口將被應用到這個網格所定義的域和邊界上。這樣,我們就有了高質量的體網格,可以用于仿真其他形狀和應用,還可以在域中添加掃掠和邊界層網格,但在這個例子中,四面體網格已經滿足我們的需求了。
左圖:股骨和周圍長方體的體網格。白色的單元代表股骨域,周圍的單元使用表達式 x > 0 過濾。右圖:在股骨的彎曲邊界上顯示二階節點的最終的網格。顏色代表偏度。為了便于觀察,隱藏了一些邊界起來。
對比生成的網格與導入和平滑的數據
在這個工作流程中生成的網格可以與導入的數據等值面 human_femur(x,y,z)
進行對比,該等值面與分割數據集使用的等值面相同,被繪制在原始長方體域的網格上。為了生成一個更接近導入數據的網格,可以在求解亥姆霍茲方程的原始長方體域中使用更細的網格,相應的也可以降低擴散系數。
生成的表面網格(灰色)和插值數據 human_femur(x,y,z)
的等值面(藍色)對比。
結束語
至此,這篇由掃描的數據創建表面網格的文章就結束了。文中對表面網格進行了分割,使用了兩種不同的方法對掃描數據進行了平滑處理,并介紹了如何將網格和幾何結構結合起來。
如果您想要了解文中討論的工作流程的更多細節,請點擊下列按鈕下載 MPH 文件。
更多資源
- 閱讀在 COMSOL Multiphysics? 中編輯和修復導入的網格博客,了解更多關于網格劃分的內容。
- 在 STL 導入系列教程中了解更多關于編輯和重新劃分導入的網格信息。
- 閱讀“如何基于高程數據模擬不規則形狀并構建幾何模型”博客,查看另一個可以創建表面數據的例子。
- 閱讀如何檢查 COMSOL Multiphysics? 中的網格博客,了解檢查網格的三種方法。
文中介紹模型的一些數據來自 Visible Human Project,https://www.nlm.nih.gov/research/visible/visible_human.html,由美國國家醫學圖書館提供。這些數據是截至 2023 年 4 月 21 日的最新數據,已經經過修改,可能無法映 NLM 提供的最新/最準確的數據。NLM 沒有認可 COMSOL 的產品、服務或應用,并聲明對數據的準確性或完整性不作任何明示或暗示的保證,包括對商業性或適用于特定目的的保證。數據的使用者應使 NLM 和美國政府不承擔因數據錯誤而引起的任何責任。對于因使用、誤用或解釋數據中包含或不包含的信息而造成的任何后果,NLM 不承擔任何責任。
MATLAB 是 The MathWorks, Inc. 的注冊商標。
評論 (2)
劉樂
2023-07-16你好,好像教程模型中的txt數據鏈接有誤?點擊后直接返回comsol網站主頁
hao huang
2023-07-21 COMSOL 員工感謝您的提醒,核實后確實是相關文件出現了問題,目前已在修復中。