第6章 網格剖分模組
gmsh的網格剖分模組集中了幾種1維,2維,3維的網格剖分演算法,他們都能產生適合於有限元的網格:
2維的非結構化演算法產生三角單元或者三角單元與四方形(當使用拼接曲面時)。3維的非結構化演算法產生四面體單元。
3維的結構化演算法(超限或拉伸)預設產生三角單元,但是通過recombine命令,能得到四方形。3維結構化演算法產生四面體,六面體,三菱柱、椎體,取決於曲面網格的型別。
通過使用mesh.subdivisionalgorihm選項,所有的網格都可再細分為完全的四方形或六面體單元。但是,要注意到是,非結構化方法產生的初始網格,經過細化後,單元的質量可能非常差。
6.1 選擇正確的非結構化演算法
gmsh有不同的2維的非結構化演算法和不同3維的非結構化演算法可供選擇。每種演算法有它的優點和缺點。對於所有的2維非結構化演算法,會首先使用分治法產生初始的delaunay網格,包含了所有的點。使用邊交換的方法,調整不符合delaunay特性的邊。之後,可使用3個不同的演算法來產生最終的網格:
1、網格自適應演算法,基於區域性網格調整。這個技巧使用邊交換、分割、疊合:長的邊被分割,短的邊被疊合,如果交換邊後得到更好的網格就交換邊。
2、delaunay演算法。依次對具有最大外接圓的單元,插入新的點在其外接圓心上。然後重新連線網格,使用各向異質的delaunay準則。
3、波前法。
各個演算法特性列表如下:
自動化程度 效能 單元質量
自適應 1 3 2
delaunay 2 1 2
波前 3 2 1
對於非常複雜的曲面,自適應方法是最好的,當單元質量非常重要時,可試試波前法。對於非常大的平面上的網格生成,delaunay演算法是最快的。
對於3維的非結構化演算法:
1、delaunay演算法分成2步,首先,使用h.si的四面體演算法,對模型中的所有體的合集,產生初始的網格,然後,使用2維delaunay演算法的三維版本。
2、波前法,使用j.schoeberl的netgen演算法
delaunay演算法是最自動化和最快的,也是唯一的支援通過區域屬性控制單元大小的演算法。但是,這個演算法有時候會修改表面網格,所以,對於結構和非結構雜交的網格,可能不合適。而在這種情況下,可試試波前法。2種演算法產生的單元質量都是差不多的,單元質量非常重要時,可以使用網格優化器。
6.2 基本和物體的實體
6.3 網格命令
網格模組的命令大多數允許修改網格單元的尺寸,指定結構化網格的引數。實際的網格剖分「動作」(比如,剖分線,剖分面,剖分體)是不同在指令碼檔案中使用的。他們必須在gui介面上或者命令列引數中使用。
6.3.1 指定單元尺寸
有3種方式:
1、如果mesh.characteristiclenghfrompoints是開啟狀態(這也是預設的),你可以簡單的指定期望的網格單元尺寸,在模型的幾何點上(通過點命令:)。
2、如果mesh.characteristiclengthfromcurvature是開啟狀態(非預設的),網格會適應幾何體的曲率。注意,這個特性在gmsh2.5中還是試驗性的。
3、可以指定一般的網格尺寸,通過fields。有各種各樣的field:
6.3.2 結構化網格
.......
LCA的樹鏈剖分實現
這篇本來是要在 樹鏈剖分小節 中寫的,但是我感覺這只是樹鏈剖分的乙個衍生物,所以另開了一篇,如果對樹鏈剖分部分還不是太了解,請看上面的鏈結。計算樹中兩個節點的最近公共祖先,我們一般有爬山法,tarjan離線演算法,或者是將lca轉換成rmq來解,這裡講一講一種新的求lca的演算法,它是基於樹鏈剖分的...
狐假虎威的樹鏈剖分
運算元據結構 線段樹 結束語 最近在做運輸計畫這道題時,發現要用數鏈剖分,於是就打算學學這個玩意兒。其實之前一直以為這個東西是個很複雜的東西,可能 看起來都很長。但是,學了之後,我才發現,這個東西很好懂,而且 之所以很長,也有乙個原因就是它需要使用乙個強大的資料結構 線段樹。線段樹的 其實並不算少,...
樹鏈剖分的學習理解
前言 本文僅為本人學習樹鏈剖分的理解和總結,有誤之處請大佬指點迷津。也有與其他部落格不同或矛盾之處。樹鏈剖分 顧名思義,將樹結構,剖分成鏈狀結構,然後將一條條的鏈拼接成線性結構,然後就可以通過線段樹 樹狀陣列等維護了。說白了就是在樹上,有些值不好維護,通過樹鏈剖分轉化成乙個序列,而序列就好維護了。樹...