Gmshメッシュ生成

カテゴリ: オープンソースCAE | 2026-10-02 改稿
CAE visualization for gmsh meshing theory - technical simulation diagram
Gmshメッシュ生成

理論:Gmshでのメッシュの作り方

概要

🙋

Gmshは無料のメッシャーですが、商用のプリプロセッサと比べて何ができるのですか?

🎓

形状の取り込み、要素寸法の制御、物理グループの定義、さまざまな形式での出力まで、メッシュ作成に必要なことはひと通りできる。Gmshは形状カーネルにOpenCASCADEを使うので、STEPやIGESのCADを読み込んだり、ブーリアン演算で形を作ったりできる。要素寸法は、点ごとの指定に加えて「サイズ場」で距離や曲率に応じて変えられ、境界層(BoundaryLayer場)や構造格子(Transfinite)も作れる。最大の特徴は、すべての操作をスクリプト(.geo)やPythonのAPIで書ける点で、寸法を変えたパラメータスタディや、最適化の中でのメッシュの自動作り直しに向いている。一方、アセンブリ部品の接触面の整合や、大規模な六面体メッシュの自動生成は商用ツールのほうが楽なことが多い。

要素数の見積もり

$$ N \approx \int_A \frac{dA}{\tfrac{\sqrt{3}}{4}\,h(\mathbf{x})^2},\qquad h(d) = h_{\min} + (h_{\max}-h_{\min})\,\frac{d - d_{\min}}{d_{\max} - d_{\min}}\quad (d_{\min} \le d \le d_{\max}) $$

h は要素寸法、A は面積、d は穴の縁などからの距離。正三角形に近い要素を仮定した見積もりで、Threshold場はd_min〜d_maxの間で寸法を直線的に変える。

Coffee Break よもやま話

1997年から続くメッシャー

Gmshは1997年ごろ、ベルギーのChristophe GeuzaineとJean-François Remacleが、自分たちの研究のために作り始めた。今もルーヴァン大学やリエージュ大学を中心に開発が続き、GPLライセンスで公開されている。名前の「G」は特に意味を決めていないとされ、本人たちは「どう読んでもよい」としている。研究用に始まったソフトが、今では多くのオープンソースのソルバーの標準的な入口になっている。

計算例

要素数は正三角形の面積を使った数値積分による見積もりで、Gmsh生成メッシュの実測数ではない。穴の周囲の細かさが同じでも応力精度は保証されず、粗細の遷移、曲面近似、要素品質と収束を確認する。

例:100 mm角の板、中央に直径10 mmの穴(2次元、三角形要素)

メッシュの作り方要素寸法要素数(見積もり)全体0.5 mmとの比
全体を一様に細かく0.5 mm≈ 91,650100%
全体を一様に粗く5 mm≈ 9171.0%
サイズ場(穴の縁0.5 mm→20 mm先で5 mm)0.5〜5 mm≈ 1,7251.9%

サイズ場を使うと、穴の周りには一様0.5 mmと同じく63個の要素が並び、応力集中を捉える細かさを保ったまま、要素数は約50分の1になる。3次元では寸法を半分にすると要素数は8倍になるので、サイズ場の効果はさらに大きい。

🙋

サイズ場を設定したのに、穴の周りが細かくなりません。何が足りないのでしょうか?

🎓

よくある原因は3つある。1つ目は、背景場(Background Field)に指定していないこと。Fieldを定義しただけでは使われず、Background Field = n のようにどの場を使うかを指定する必要がある。2つ目は、ほかの寸法の指定が優先していること。点に指定した寸法(MeshSize)や、曲率による寸法、境界からの寸法の伝播が組み合わさるので、Mesh.MeshSizeFromPoints、Mesh.MeshSizeFromCurvature、Mesh.MeshSizeExtendFromBoundary を0にして、場だけで決まるようにすると意図どおりになりやすい。3つ目はDistance場の対象の指定ミスで、穴の曲線の番号が形状の変更で変わっていることがある。OpenCASCADEで形状を作ると番号が付け替わるので、番号を直接書かず、境界ボックスなどで取得する書き方にしておくと、形状を変えても壊れない。

始め方の流れ

  1. Gmshを導入し、GUIで簡単な形状を作ってメッシュを切り、.geoに保存して中身を読む。
  2. STEPを読み込み、物理グループで境界条件の面と材料の領域に名前を付ける。
  3. DistanceとThresholdのサイズ場で、応力集中部だけを細かくする。
  4. ソルバーに合う形式で出力し、要素数と品質(Gamma、SICN)を確かめる。
  5. Python APIで寸法を変数にし、パラメータを変えてメッシュを自動で作り直す。
Coffee Break よもやま話

「物理グループを付けたら面が消えた」

Gmshで初めて物理グループを使うと、出力したメッシュから一部の要素が消えて驚くことがある。Gmshは、物理グループが1つもなければすべての要素を出力し、1つでもあれば物理グループに属する要素だけを出力する決まりだからだ。境界条件用に面のグループだけを作ると、体積要素が出力されずに空のメッシュになる。体積(3次元なら全ボディ)にも必ず物理グループを付けるか、Mesh.SaveAll = 1 ですべて出力する設定にしておこう。

よくある間違い

間違いと対策

間違い起きること対策
背景場を指定しないサイズ場が効かないBackground Fieldを設定
面だけ物理グループ体積要素が出力されない体積にも付ける
番号を直接書く形状変更で壊れる境界ボックス等で取得
出力形式の不一致ソルバーで読めない形式とバージョンを確認
2次要素の中間節点曲面からずれる高次メッシュの最適化
🙋

関連する内容も知りたいです。

よくある質問

Gmshとは何ですか?

ベルギーのルーヴァン大学などの研究者が開発するオープンソースの有限要素メッシュ生成ソフトです。CAD形状(OpenCASCADEで読み込むSTEPなど)を読み込み、2次元・3次元の三角形・四角形・四面体・六面体のメッシュを作ります。.geoファイルのスクリプトやPython・C++のAPIで操作でき、CalculiX・Code_Aster・Elmer・FEniCS・OpenFOAMなど多くのソルバーにメッシュを渡せます。

必要な所だけメッシュを細かくするには?

サイズ場(Mesh Field)を使います。Distance場で穴の縁などからの距離を求め、Threshold場で「距離0では0.5 mm、20 mm離れたら5 mm」のように距離に応じて要素寸法を変えます。100 mm角の穴あき板では、全体0.5 mmの約9万2千要素に対して、この方法なら約1,700要素で、穴の周りには同じ細かさの要素が63個並びます。

ソルバーに渡すとき気をつけることは?

物理グループ(Physical Group)を付けることです。Gmshは物理グループが1つでもあると、属するものだけを出力します。境界条件をかける面や材料ごとの領域に名前付きの物理グループを付け、出力形式(.msh のバージョンや .inp・.unv など)をソルバーに合わせます。2次要素を使うときは、曲がった境界に中間節点が乗っているかも確かめます。

参考資料・検算の位置づけ

掲載値は本文の仮定に基づく教育用の参考計算。資料は理論・設定の参照先であり、本記事の数値を各ソフトで再現した証明ではない。設計・製造の判断には対象条件での検証が必要。

関連する分野

構造解析流体解析熱解析
この記事の評価
ご回答ありがとうございます!
参考に
なった
もっと
詳しく
誤りを
報告
参考になった
0
もっと詳しく
0
誤りを報告
0