2020-07-03

Gmsh是一個跨平臺三維有限元網絡生成與可視化軟件。我們可以使用它進行三維有限元網絡的前(建模)后(可視化)處理。期間需要使用到的文件即為其網格文件(后綴為.msh),建模中使用的文件格式為.geo文件,其具體格式請參見Gmsh說明文檔。Gmsh網格文件主要包含對三維網絡中頂點(Nodes)、幾何元素(Elements)、頂點數據(NodeData)、和元素數據(ElementData)的描述。同時還可以包含對幾何元素或物理元素組的定義。Gmsh定義的網絡文件格式分為相對較為簡單的2.0版本和Gmsh4開始使用的4.0版本。本文主要包含對Gmsh說明文檔中兩個版本網絡文件格式部分的翻譯說明,以及簡單的示例文件。本文所設計的網絡文件均為ASCII碼文件,相應的二進制文件格式請參見Gmsh說明文檔。

Gmsh2網格文件格式

文件預覽

我們首先給出一個Gmsh2版本的四方體網格文件(cube.msh),使用Gmsh查看如下所示:

cube mesh display

使用文本編輯器打開cube.msh,內容如下所示:

$MeshFormat
2.2 0 8
$EndMeshFormat
$Nodes
8
1 0.0 0.0 0.0
2 1.0 0.0 0.0
3 1.0 1.0 0.0
4 0.0 1.0 0.0
5 0.0 0.0 1.0
6 1.0 0.0 1.0
7 1.0 1.0 1.0
8 0.0 1.0 1.0
$EndNodes
$Elements
1
1 5 1 10 1 2 3 4 5 6 7 8
$EndElements
$NodeData
1
"node data"
1
0.0
3
0
1
8
1 0.1
2 0.1
3 0.1
4 0.1
5 1.0
6 1.0
7 1.0
8 1.0
$EndNodeData
$ElementData
1
"element data"
1
0.0
3
0
1
1
1 2
$EndElementData

格式說明

  • $MeshFormat$EndMeshFormat關鍵字其間定義了網絡文件的版本(2.2)與必要信息,包括文件類型(對于ASCII碼文件,其值為0)和浮點類型長度值(一般為8)。

  • $Nodes$EndNodes關鍵字內包含網絡文件的頂點信息。第一行為頂點的總個數。其后每一行為頂點的序號和直角坐標,以空格分割。頂點的序號是識別頂點的唯一指標,可以從0或1開始,也可以不連續(但可能會增加電腦內存的開銷)。對于兩個坐標相同但序號不同的頂點,Gmsh將視為兩個獨立的頂點。

  • $Elements$EndElements關鍵字內包含幾何元素信息。第一行為元素的總個數。其后每一行為對單個元素的信息描述,格式為<元素序號> <元素類型> <標簽數> <標簽1> ... <頂點序號列表>

  • <元素序號>為元素的識別標示,可以從0或1開始,也可以不連續(但可能會增加電腦內存的開銷)。

  • <元素類型>為Gmsh預定義用于識別元素類型的一個整數,例如立方體對應代碼為5(其他類型元素的代碼請參見Gmsh說明文檔)。

  • <標簽數>標示其后跟隨的元素標簽的個數。Gmsh預定義元素的第一個標簽為其所屬的物理組,第二個標簽為其所屬的幾何組。示例中四方體有一個標簽,標簽代碼為10。對于更復雜的網格文件我們可以對元素歸類到不同物理或幾何組,Gmsh將使用不同的顏色顯示不同組別,方便我們查看網絡文件。

  • <頂點序號列表>為組成元素的頂點集,對應于$Nodes標簽中對應的頂點序號。注意元素的頂點序列排列順序應符合Gmsh預定義的順序。

  • $NodeData$EndNodeData(可選的)關鍵字內包含對頂點數據集的描述。從上至下依次為字符串標簽的數量與字符串標簽,Gmsh默認使用第一個字符串標簽為數據集的名稱;其下為浮點標簽的個數與浮點標簽,表示該數據集對應的時間;然后為整形標簽個數與整形標簽,分別為數據集的時間序列號(從0開始)、數據集場的分量個數(等于1、3或者9)以及數據點個數。頭信息后,每一行包含<頂點序號> <數據值>

cube node data
  • $ELementData$EndELementData(可選的)關鍵字內包含對元素數據集的描述。其頭信息格式與頂點數據相同,只是其后數據列中的序號為元素的序號。
cube ele data

Gmsh4網格文件格式

文件預覽

我們還是先給出一個Gmsh4版本的四方體網格文件(cube-gmsh4.msh),使用文本編輯器打開cube-gmsh4.msh,內容如下所示:

$MeshFormat
4.0 0 8
$EndMeshFormat
$Entities
8 12 6 1
1 0 0 0 0 0 0 0
2 1 0 0 1 0 0 0
3 1 1 0 1 1 0 0
4 0 1 1 0 1 1 0
5 0 0 1 0 0 1 0
6 1 0 1 1 0 1 0
7 1 1 1 1 1 1 0
8 0 1 1 0 1 1 0
1 0 0 0 1 0 0 0 2 1 -2
2 1 0 0 1 1 0 0 2 2 -3
3 0 1 0 1 1 0 0 2 3 -4
4 0 0 0 0 1 0 0 2 4 -1
5 0 0 1 1 0 1 0 2 5 -6
6 1 0 1 1 1 1 0 2 6 -7
7 0 1 1 1 1 1 0 2 7 -8
8 0 0 1 0 1 1 0 2 8 -5
9 0 0 0 0 0 1 0 2 1 -5
10 1 0 0 1 0 1 0 2 2 -6
11 1 1 0 1 1 1 0 2 3 -7
12 0 1 0 0 1 1 0 2 4 -8
1 0 0 0 1 1 0 0 4 -1 -2 -3 -4
2 0 0 1 1 1 1 0 4 5 6 7 8
3 0 0 0 1 0 1 0 4 -9 1 10 -5
4 1 0 0 1 1 1 0 4 -10 2 11 -6
5 0 1 0 1 1 1 0 4 12 -7 -11 3
6 0 0 0 0 1 1 0 4 9 -8 -12 4
1 0 0 0 1 1 1 0 6 1 2 3 4 5 6
$EndEntities
$Nodes
1 8
1 3 0 8
1 0.0 0.0 0.0
2 1.0 0.0 0.0
3 1.0 1.0 0.0
4 0.0 1.0 0.0
5 0.0 0.0 1.0
6 1.0 0.0 1.0
7 1.0 1.0 1.0
8 0.0 1.0 1.0
$EndNodes
$Elements
1 1
1 3 5 1
1 1 2 3 4 5 6 7 8
$EndElements
$NodeData
1
"node data"
1
0.0
3
0
1
8
1 0.1
2 0.1
3 0.1
4 0.1
5 1.0
6 1.0
7 1.0
8 1.0
$EndNodeData
$ElementData
1
"element data"
1
0.0
3
0
1
1
1 2
$EndElementData

對應Gmsh2的文件格式,可以發現主要存在以下幾點變化:

  • 網絡文件版本號由2.2變為4.0;
  • 增加了$Entities關鍵字;
  • 更改了$Nodes$Elements內格式。

下面我們就后兩點變化進行說明。

格式說明

  • Gmsh4在網絡文件中增加了$Entities$EndEntities關鍵字(不可選)用于說明網絡文件中的實體范圍(超出這個范圍的輸出將不被承認)。實體的空間維度由低向高產生依賴,所以對于一個三維實體范圍我們必須定義實體點與面的范圍定義。下面就其格式做具體說明:
  • 第一行為實體點、線、面和體的個數,對于一個四面體其值分別為8、12、6和1;
  • 實體點的描述,其格式為<序號> <盒子左下底角坐標> <盒子右上頂角坐標> <物理標簽個數> <物理標簽> ...。這個我們舉出了盒子的概念,指的是能夠包含所描述實體的一個四方體的范圍。對于一個點而言,這個盒子的最小范圍即為其坐標位置本身;
  • 實體線的描述,其格式為<序號> <盒子左下底角坐標> <盒子右上頂角坐標> <物理標簽個數> <物理標簽> ... <包含的實體點個數> <實體點序號列表>。相對于實體點,線描述所增加的內容對線構成的描述。即一條直線由其兩個頂點的序號所描述,注意正的序號為起點,負的序號為終點;
  • 實體面的描述,其格式為<序號> <盒子左下底角坐標> <盒子右上頂角坐標> <物理標簽個數> <物理標簽> ... <包含的實體線個數> <實體線序號列表>。注意實體面包含的線序號需要首尾相接,Gmsh默認按照逆時針方向計算面的外法線方向。負的序號標示反向的線;
  • 實體的描述,其格式為<序號> <盒子左下底角坐標> <盒子右上頂角坐標> <物理標簽個數> <物理標簽> ... <包含的實體面個數> <實體面序號列表>。注意面的外法線方向朝向實體外部。
  • Gmsh4在$Nodes中增加了分塊的概念,其具體格式為:
  • 第一行為塊的個數與總的頂點個數,以下為每個塊的內容;
  • 在每個塊中,第一行為塊的序號、塊所屬的空間維度、參數化值(一般為0)和當前塊的頂點數,其后為頂點的序號和空間坐標位置。
  • 相應的,$Elements中也增加了分塊的概念,其具體格式為:
  • 第一行為塊的個數與總的元素個數,以下為每個塊的內容;
  • 在每個塊中,第一行為塊的序號、塊所屬的空間維度、塊的元素類型和當前塊的元素數,其后為元素的序號和組成元素的頂點序號。可以注意到,對于每一個塊,其包含的元素類型應該是一致的。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,179評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,628評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,444評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,948評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,185評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,717評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,794評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,414評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,750評論 2 370