非構造格子
非構造格子の理論基礎
概要
先生、非構造格子って何がそんなに便利なんですか?
非構造格子(unstructured mesh)は、セルの接続関係を明示的にテーブルとして保持する格子だ。四面体(tet)、六面体(hex)、三角柱(prism/wedge)、ピラミッドなど、異なるセル形状を自由に混在できる。最大の利点は、複雑な3D形状に対して自動でメッシュ生成できることだよ。
CADモデルを放り込めば勝手にメッシュができるってことですか?
ほぼその通り。Fluent Meshing、STAR-CCM+、snappyHexMeshなど、現代のCFDメッシャーはSTLサーフェスを入力するだけで体積メッシュまで自動生成できる。これが産業界で非構造格子が圧倒的に普及した理由だ。
Delaunay三角形分割
自動メッシュ生成のアルゴリズムってどうなっているんですか?
最も基本的なのがDelaunay三角形分割だ。与えられた点群に対して、各三角形の外接円内に他の点が含まれないように三角形を構成する。
Delaunay条件を数式で書くと、三角形 $T$ の外接円 $C(T)$ に対して
この条件を満たすと、三角形のうち最小角が最大化される。つまり、できるだけ「正三角形に近い」メッシュが得られる。
3Dだとどうなりますか?
3DではDelaunay四面体分割になる。外接円が外接球に置き換わる。ただし3Dでは2Dほど品質保証が効かず、スリバー四面体(扁平な四面体)が発生しやすい。スリバー除去が3D自動メッシュ生成の重要課題なんだ。
Advancing Front法
もう一つの主要なアルゴリズムがAdvancing Front法だ。境界面から内部に向かって要素を「押し出して」いく。
1. 境界面のサーフェスメッシュを「フロント」として初期化
2. フロント上の面を一つ選び、新しい点を生成して要素を作る
3. フロントを更新(古い面を削除、新しい面を追加)
4. フロントが消滅するまで繰り返す
Delaunay法との違いは何ですか?
Advancing Front法は境界適合性が高く、境界近傍のメッシュ品質が良い傾向がある。一方、Delaunay法はロバスト性が高く、実装が容易。実際のツールでは両者を組み合わせたハイブリッドアルゴリズムが使われることが多い。
有限体積法との関係
非構造格子上でNavier-Stokes方程式をどう離散化するんですか?
有限体積法(FVM)を使う。各セルで保存則を積分形で適用する。
セル面を通過するフラックス $\mathbf{F} \cdot d\mathbf{S}$ を数値的に評価する。構造格子と違って格子が不規則なので、セル中心間の勾配再構築にGauss-Green法や最小二乗法を使う必要がある。
精度的にはどうなんですか?
非構造格子上の有限体積法は、基本的に2次精度が標準だ。セル中心の値と勾配から面での値を線形補間するため。格子の非直交性が大きいと、非直交補正項が必要になり、収束性と精度の両方に影響する。
非構造格子CFDの歴史——1987年のJameson-Baker論文が切り開いた時代
非構造格子(Unstructured Mesh)を使ったCFDの実用化は、Antony Jamesonと共同研究者が1987年に「Euler方程式の非構造三角形格子有限体積法」を発表したことで加速した。それ以前の航空CFDは構造格子(Structured Mesh)が主流で、複雑形状の格子生成に専門家が数ヶ月を費やしていた。Jamesonらの手法は形状の複雑さに依存しないメッシュ生成を可能にし、「CFDの民主化」を進める技術的転換点となった。1990年代のコンピュータ高速化と合わせて非構造格子CFDが急速に普及し、現代の主要CFDソルバー(Fluent、OpenFOAM、SU2等)はすべて非構造格子を基本アーキテクチャとして採用している。
非構造格子の数値計算手法
セル形状の比較
四面体、六面体、プリズム…色々ありますけど、それぞれどう違うんですか?
CFDで使われる主要なセル形状を比較しよう。
| セル形状 | 面数 | 隣接セル数 | 精度 | 自動生成容易さ |
|---|---|---|---|---|
| 四面体(Tet) | 4 | 4 | 低〜中(数値拡散大) | 非常に容易 |
| 六面体(Hex) | 6 | 6 | 高(数値拡散小) | 困難(構造格子必要) |
| 三角柱(Prism) | 5 | 5 | 中〜高 | 境界層で自動生成可 |
| ピラミッド(Pyramid) | 5 | 5 | 中 | hex/tet接続用 |
| ポリヘドラル | 多数 | 多数 | 中〜高 | tetからの変換 |
四面体は数値拡散が大きいってどういうことですか?
四面体は面数が少ないため、セル中心から各面への方向ベクトルの多様性が低い。これにより勾配の近似精度が落ち、斜め方向のフラックス評価で数値拡散が増大する。同じセル数なら六面体の方が2〜3倍精度が高いことが多い。
勾配再構築手法
非構造格子では勾配の計算が特別なんですよね?
その通り。3つの主要な手法がある。
Green-Gauss法
セル面での値 $\phi_f$ から勾配を算出する。面値の評価方法によりcell-based法とnode-based法がある。
最小二乗法(Least-Squares)
近傍セルとの差分から最小二乗の意味で最良の勾配を求める。歪んだメッシュでもロバストだ。
Fluentではどれを使うべきですか?
Fluent Meshing生成のメッシュでは、Green-Gauss Node-BasedまたはLeast-Squaresが推奨される。四面体メッシュではLeast-Squaresの方が安定することが多い。
非直交補正
非直交性ってCFDにどう影響しますか?
有限体積法では拡散項のフラックスを計算する際、セル中心間のベクトル $\mathbf{d}$ と面法線ベクトル $\mathbf{S}$ が平行(直交格子)であれば単純だが、非直交の場合は補正項が必要になる。
第2項が非直交補正項で、これを陽的に扱うと収束性が悪化し、格子の非直交度が70度を超えると発散のリスクが高まる。OpenFOAMでは nonOrthogonalCorrectors パラメータでこの補正の反復回数を設定する。
70度が目安なんですね。
そうだ。一般的なガイドラインとして、非直交度は70度以下、理想は40度以下に抑えたい。特にOpenFOAMのような分離型ソルバーでは非直交性に敏感だ。
Delaunay三角分割——非構造格子生成の数学的基礎と品質制御
非構造三角形・四面体メッシュの自動生成の基礎となる「Delaunay三角分割」は、「外接円の内部に他の点を含まない」という最適性条件を満たす三角分割だ。この性質により生成される三角形の最小角が最大化され、CFDで問題になる細長い要素(スキューネス大)が自動的に抑制される。1934年にBoris Delaunayが提案した数学的概念が、50年後のコンピュータ時代にメッシュ生成アルゴリズムとして再発見され、現代の非構造格子生成ソフトウェアのコアとなっている。境界上で要素サイズを制御する「制約付きDelaunay法」と、メッシュ品質改善のためのPoint Insertionを組み合わせた手法が現代のTetGen、netgen、TetMeshGCなどの基幹アルゴリズムだ。
非構造格子の実務適用
実践ワークフロー
非構造格子でCFDをやるときの手順を教えてください。
一般的なワークフローはこうだ。
1. サーフェスメッシュの生成: CADからSTL/STEP出力 → サーフェスのリメッシュ
2. サイズ関数の設定: 壁面第1層厚さ、最大セルサイズ、成長率を定義
3. 境界層メッシュの挿入: プリズム層(inflation layer)を壁面に追加
4. 体積メッシュの生成: tet/hex-dominant/polyで充填
5. 品質チェックと修正: スキューネス、非直交性等を確認
サーフェスメッシュの重要性
サーフェスメッシュって体積メッシュに比べて軽視されがちですが…
実はサーフェスメッシュの品質が体積メッシュ全体の品質を決定的に左右する。CADから直接取得したSTLは三角形のアスペクト比が悪かったり、隙間や重複面があったりすることが多い。
サーフェス品質の目安として:
- スキューネス: 0.8以下(0.95超は致命的)
- 最小角度: 15度以上
- 面積比(隣接三角形): 5:1以下
Fluent Meshing
Fluent Meshingの使い方のポイントは?
Fluent Meshingではワークフローが自動化されている。ポイントを押さえよう。
- Import Geometry: SpaceClaim/DM経由がトラブルが少ない
- Add Local Sizing: 注目領域にはBody of Influence (BOI) を活用
- Generate Surface Mesh: Min Size / Max Size / Growth Rate で制御
- Add Boundary Layers: First Height + Growth Rate + Number of Layers
- Generate Volume Mesh: Poly-Hexcoreが現在のベストプラクティス
snappyHexMesh(OpenFOAM)
snappyHexMeshの設定のコツは?
snappyHexMeshはSTLサーフェスからhex-dominantメッシュを自動生成する。重要なパラメータを挙げよう。
| パラメータ | 推奨値 | 説明 |
|---|---|---|
| castellatedMeshControls.maxLocalCells | 1000000 | ローカル最大セル数 |
| castellatedMeshControls.resolveFeatureAngle | 30 | 特徴辺の検出角度 |
| snapControls.nSmoothPatch | 3 | スナップ時の平滑化回数 |
| addLayersControls.nSurfaceLayers | 5-20 | 境界層の層数 |
| addLayersControls.expansionRatio | 1.2 | 境界層の成長比 |
| addLayersControls.firstLayerThickness | y+から算出 | 第1層の相対/絶対厚さ |
snappyHexMeshでよく失敗するポイントは?
境界層の挿入(addLayers)が最も失敗しやすい。凹角部やエッジ付近でプリズム層がセルフインターセクションを起こす。featureAngle、nRelaxIter、minMedialAxisAngle を調整しながら試行錯誤が必要になることが多い。
複雑水路のCFDメッシュ生成——下水処理場の流路非構造格子化と品質管理
下水処理場の沈殿池・消毒槽などは複雑な曲面と構造物が混在する水処理施設だ。CFDによる流速分布・滞留時間分布(RTD: Residence Time Distribution)の解析は処理効率改善のために重要で、非構造四面体+プリズム層のハイブリッドメッシュが標準手法として使われる。実務上の課題は「水中障壁(Baffle)の薄い壁体のメッシュ化」だ——厚さ数cmの薄板を挟んで両側にプリズム層を生成すると、薄板部分でセルが干渉する「Pinch Point」問題が頻発する。対策は薄板を「Zero-Thickness Wall(面要素)」として扱うか、薄板の幅を少なくとも4セル以上確保するメッシュ設計の見直しだ。環境省の水処理CFDガイドラインではメッシュ品質(スキューネス<0.85)の確認手順が明記されており、設計者の必読事項となっている。
非構造格子のソフトウェア比較
非構造格子生成ツールの比較
非構造格子を作れるツールの違いを教えてください。
主要ツールを比較しよう。
| ツール | 主要セルタイプ | 境界層 | 自動化度 | 特徴 |
|---|---|---|---|---|
| Fluent Meshing | Poly-Hexcore | Prism | 非常に高い | Fluentとシームレス統合 |
| STAR-CCM+ | Polyhedral/Trimmer | Prism | 非常に高い | CAD取込〜解析まで一体型 |
| snappyHexMesh | Hex-dominant | Prism | 高い(CLI) | 無償、スクリプト自動化に最適 |
| cfMesh | Hex-dominant | Prism | 高い(CLI) | OpenFOAM用、snappyの代替 |
| Pointwise | Tet/Hex/Prism | T-Rex | 中(GUI) | 高品質重視 |
| ANSA (BETA CAE) | 任意 | 任意 | 高い | 自動車業界で広く使用 |
Fluent Meshing
Fluent Meshingの「Poly-Hexcore」って何がいいんですか?
Poly-Hexcoreは、内部を直交六面体(octree hex)で埋め、壁面付近をポリヘドラルセルで接続する手法だ。六面体の精度・効率とポリヘドラルの柔軟性を両立できる。2020年頃からAnsysが強力に推進しており、tet-only時代と比べてセル数が半分以下、精度は同等以上という結果が報告されている。
STAR-CCM+
STAR-CCM+はどういう強みがありますか?
STAR-CCM+はCD-adapcoが開発し、2016年にSiemensが買収した。最大の特徴はポリヘドラルメッシュの先駆者であること。CADインポートから解析・後処理まで完全に統合されたワークフローで、特に自動車・航空宇宙分野で強い。Trimmer(直交格子ベース)メッシュも人気が高い。
snappyHexMesh vs cfMesh
OpenFOAMユーザーにとって、snappyHexMeshとcfMeshはどう違いますか?
snappyHexMeshはOpenFOAM標準で情報が多いが、境界層挿入が不安定なことがある。cfMeshはCreative Fields社が開発した代替ツールで、境界層生成がよりロバストだと評判だ。ただし、cfMeshはOpenFOAMのバージョン追従がやや遅れる傾向がある。
選定の指針
結局どれを選べばいいですか?
非構造格子生成ツール徹底比較——Gmsh vs TetGen vs ANSYS Meshing
非構造メッシュ生成ツールを機能で比較すると:Gmsh(オープンソース)はPython/APIでの完全自動化が可能で、スクリプトベースのワークフローに向く。品質指標の制御もGeo/Meshingオプションで細かく設定でき、研究用途では世界中で使われている。TetGen(柏氏のアルゴリズム)は最高品質の制約付きDelaunay四面体化で知られ、有限要素解析(FEA)との連携が得意。ANSYS Meshingは複雑なCADのインポートから自動メッシュ生成まで一貫したワークフローが強みで、Faultトレランス(形状のギャップや穴を自動修復)が優秀。産業現場では「ANSYS Meshingで素早く作成→品質チェック→問題箇所のみGmshで手動補完」という現実的な組み合わせが多く報告されている。
非構造格子の先端研究
先端トピック
非構造格子の分野で最近の注目技術は何ですか?
いくつか重要な動向がある。
Octreeベースメッシュの台頭
近年、octree(八分木)ベースのメッシュ生成が急速に普及している。snappyHexMesh、Fluent MeshingのPoly-Hexcore、STAR-CCM+のTrimmerはいずれもoctreeベースだ。
octreeの利点は:
- 背景格子の生成が $O(n \log n)$ と高速
- 等方的なセルが自然に得られ、数値拡散が小さい
- 並列分散が容易
octreeの弱点はありますか?
隣接セル間のサイズ比が2:1に跳ぶ(hanging node)のが問題になることがある。これをどう処理するかがツールごとの差別化ポイントだ。ポリヘドラル化で滑らかに遷移させるアプローチが主流になっている。
機械学習によるメッシュ生成
AIでメッシュ生成ができるようになりますか?
現在研究が進んでいるのは主に2つの方向だ。
1. サイズ関数の自動最適化: 過去の解析結果から、どこを細かくすべきか学習する
2. CAD形状からのメッシュパラメータ推定: 形状特徴からメッシュ設定を推薦するMLモデル
まだ「AIがメッシュを切る」段階ではないが、「AIがメッシュ設定を提案する」ことは実用化されつつある。Ansys Discovery LiveやSimcenter HEEDS等がその方向を模索している。
メッシュフリー手法の進展
メッシュを使わない手法って将来的に主流になりますか?
SPH(Smoothed Particle Hydrodynamics)やLBM(Lattice Boltzmann Method)など、従来のメッシュ概念を必要としない手法は進歩している。特にLBMはProLBやPowerFLOWのように商用化も進んでいる。
ただし、壁面境界層の精密な解像が必要な問題(翼の空力、熱交換器など)では、メッシュベースのFVMが依然として精度・効率で優位だ。メッシュフリーは自由表面流れや大変形を伴う問題で補完的な役割を果たすと考えるのが現時点での妥当な見方だろう。
非構造格子のトラブル対応
トラブルシューティング
非構造格子でよくあるトラブルを教えてください。
頻出問題を整理しよう。
1. スキューネスが高すぎる
症状: メッシュ品質レポートでスキューネス > 0.95 のセルが存在。Fluentで "Negative cell volume" や発散。
対策:
- サーフェスメッシュの品質を先に改善する(根本原因であることが多い)
- CADの微小フィーチャー(スリバー面、短辺)をDefeaturing
- ローカルサイズ設定で問題領域のセルサイズを小さくする
- tetメッシュならimprove機能でスムージング
2. 境界層メッシュの挿入失敗
プリズム層が入らなくて困ることが多いです。
よくある原因と対策:
| 原因 | 対策 |
|---|---|
| 鋭角コーナーでプリズム同士が衝突 | 角部のサーフェスサイズを小さくする |
| 隙間が狭すぎてプリズムが入らない | 層数を減らすか、第1層を薄くする |
| サーフェスメッシュの品質不良 | リメッシュして三角形品質を改善 |
| 接触面の処理不足 | Non-conformal interfaceに変更 |
Fluent Meshingでは Last Ratio オプションでプリズム層が入り切らない部分の処理を制御できる。STAR-CCM+では Stop Distance でプリズム成長の打ち切りを設定する。
3. 格子生成がメモリ不足で失敗
症状: メッシュ生成中にメモリ不足(Out of Memory)で異常終了。
対策:
- サーフェスメッシュのサイズを確認。不要な微小セルが大量発生していないか
- 最大セルサイズと最小セルサイズの比が過大でないか確認(100:1程度が実用的上限)
- 並列メッシュ生成を利用(Fluent Meshing、snappyHexMeshは並列対応)
- 64bit環境で十分なメモリを確保(1億セルで約16-32GB目安)
4. ソルバーで発散する
メッシュは生成できたのにソルバーが発散します。
メッシュ品質に起因する発散の診断手順はこうだ。
1. 最悪セルの確認: FluentならReport Quality、OpenFOAMならcheckMeshで最悪値を把握
2. 問題セルの位置特定: 発散が始まる場所と品質最悪セルの位置を照合
3. スキューネス > 0.9のセルがあれば: そこが発散の原因の可能性大
4. 非直交度 > 70度なら: OpenFOAMでnonOrthogonalCorrectors を2〜3に増やす
5. 体積変化率が急激なら: smoothing / refinementの調整
「メッシュが悪い」と言われても、具体的にどこをどう直せばいいか分からないことが多いんですが…
まずcheckMesh(OpenFOAM)やMesh Quality Report(Fluent)の出力をちゃんと読むことだ。最悪品質のセルがどこにあるかを特定し、その近傍のサーフェスメッシュやサイズ設定を局所的に改善する。全体のリメッシュは最後の手段だよ。
非構造格子で壁面近傍の急勾配解が発振する——第1プリズム層の品質不良
非構造格子の壁面近傍で「局所的な速度・温度の不自然な振動(Oscillation)」が生じる場合、プリズム層(Prismatic Layer)の品質が原因であることが多い。典型的な問題:①プリズム層の伸縮率(Growth Ratio)が大きすぎる(>1.5)と、層間のセルサイズ急変で数値散逸が局所的に増大する。②プリズム層からバルクの四面体への遷移部分でセルの向きが急変(高スキューネス)すると局所的な数値安定性が悪化する。③プリズム層の厚さが凸面の曲率半径の10%を超えると、外側の層が内側より大きくなりプリズムが「膨らんで」隣接セルと干渉する。解析前に壁面近傍のプリズム層の品質確認(非直交性<60°、スキューネス<0.7)を行うことが診断の第一歩だ。
関連トピック
なった
詳しく
報告