自由辺の検出
自由辺とは
先生、「Free edge detected」って何ですか?
理論と物理
自由辺とは何か
メッシュの「自由辺」というエラーをよく見かけますが、そもそも自由辺とは何ですか? 単にメッシュの端にある辺のことですか?
いいえ、それだけではありません。有限要素法の文脈で「自由辺」とは、2つの隣接する面要素によって共有されていない辺を指します。つまり、その辺に面が1枚しか接続していない状態です。3Dソリッドメッシュでは、要素の辺は原則として共有されないので、この概念は主に2Dシェルメッシュや3Dの表面メッシュに適用されます。
なるほど。では、モデルの物理的なエッジ(例えば板の端)にある辺は、当然1枚の面しか接続していないので、自由辺になるのですか?
その通りです。幾何学的な境界や穴の縁にある辺は「正当な自由辺」です。問題となるのは、モデル内部に意図せず発生した自由辺です。例えば、2枚の板が接合されているはずなのにメッシュがずれて隙間ができ、その境界が自由辺として検出される場合です。これは連続性の破綻を意味し、応力や熱流束が正しく伝達されません。
連続性の破綻とは具体的にどういうことですか? 数式的には何が起きているのですか?
シェル要素の変位連続条件を考えます。隣接する2つの要素e1, e2が辺を共有している場合、その辺上の任意の点で変位と回転が一致する必要があります。つまり、
数値解法と実装
検出アルゴリズムと影響
ソフトウェアはどのようにして自由辺を検出しているのですか? すべての辺をチェックするのですか?
基本的なアルゴリズムは、すべての面要素のすべての辺について、その辺を定義する2つのノード(例えばノードAとB)の組み合わせをキーとしてハッシュマップ(または類似のデータ構造)に登録していきます。登録時に、そのキーが既に存在すればカウンタを増やし、存在しなければ新規登録します。処理後、カウンタが1のキーに対応する辺が「自由辺」としてフラグ立てられます。この処理はO(N)程度で効率的に実行できます。
検出感度について、辺が「接している」と判断される許容値(Tolerance)はどう決まっているのでしょうか? 1e-3 mm くらいですか?
その通りで、これが重要なポイントです。Ansys Meshing では「Pinch Tolerance」、Abaqus/CAE では「Merge Tolerance」というパラメータで制御します。デフォルト値はモデルの全体寸法(バウンディングボックスの対角線長さ)に基づいてスケーリングされることが多いですが、絶対値で言えば例えば 1.0e-5 [m] といったオーダーです。この許容値より離れている辺は「別の辺」、以内なら「同じ辺」としてマージ処理されます。許容値を大きくしすぎると意図しない形状がくっついてしまうので注意が必要です。
自由辺があると、実際の解析結果にはどのような数値的エラーが現れますか?
構造解析では、自由辺の位置で応力が不連続になり、非常に局所的に異常な高応力(例えば降伏応力の10倍以上)が発生したり、逆にゼロになったりします。熱解析では、熱流束が伝わらず、温度分布に不連続な段差が生じます。流体解析(CFD)では、壁面に意図しない自由辺があると、そこが壁面境界条件でないとみなされ、内部浸透境界として扱われて計算が発散する原因になります。
実践ガイド
ワークフローと修正手順
メッシュを生成した後、自由辺チェックはどの順番で行うべきですか? 要素品質チェックの前ですか後ですか?
最優先で行うべきです。メッシュ品質(アスペクト比、スキューなど)は要素形状の問題ですが、自由辺はメッシュの位相的な完全性の問題です。位相に欠陥がある状態で品質を向上させても意味がありません。私のワークフローでは、1. メッシュ生成、2. 自由辺・重複要素などの位相チェック、3. ジオメトリー修正(必要なら)、4. 要素品質チェックと改善、という順序です。
意図しない自由辺が見つかった場合、具体的にどう修正すればいいですか? 手動でノードを移動させるのですか?
手動修正は最終手段です。まず試すべきは以下のステップです。
複数のパートをアセンブリしてメッシュを切る場合、パート間の接触面は意図的に自由辺にすべきではないですか? 後で接触条件を定義するためです。
それは重要な区別です。パート間の接触面は、幾何学的には分離しているため、メッシュ的には自由辺で正しいです。ここでの「エラー」は、メッシュの連続性が期待される単一ボディ内に生じた自由辺を指します。アセンブリの場合、自由辺チェックはパートごとに行い、パート間の境界はチェック対象から除外するか、または「正当な自由辺」として認識する必要があります。Ansysでは「Contact Sizing」で別々にメッシュを切っても、後で「Bonded Contact」を定義すれば連続条件が課されます。
ソフトウェア比較
各ソフトウェアでの対処法
Ansys Workbench と Abaqus/CAE では、自由辺の検出と修正のアプローチに違いはありますか?
はい、ツールの名称とワークフローに違いがあります。
Altair HyperMesh や MSC Patran のような専用プリプロセッサは、この点で強みがあるのでしょうか?
その通りです。HyperMesh の「Tool」パネルにある「edges」サブパネルは、自由辺(free edges)の検出と修正に特化した強力なツールセットです。「Find edges」で自由辺を抽出し、「(un)suppress」で表示を切り替え、「replace」や「merge」で直接修正できます。特に「toggle」コマンドは、選択した辺が自由辺か共有辺かを切り替えることで、メッシュの位相を直接編集でき、柔軟性が高いです。Patran も「Verify」→「Element」→「Boundaries」で同様のチェックが可能です。これらのツールは、複雑な接合部やリペアの難しいインポートメッシュを扱うエキスパートに好まれます。
COMSOL Multiphysics は「自由辺」という概念ではなく、「未結合の境界」のような扱いですか?
COMSOL の用語では「Interior Boundaries」と呼ばれる概念が近いです。デフォルトでは、隣接するドメイン(領域)はメッシュノードを共有し、連続条件が課されます。しかし、意図的に「Form Assembly」を行い、ドメイン間でメッシュを非一致にすると、そのインターフェースは「Interior Boundary」となり、ここに各種の境界条件(連続、熱接触、接触対など)を割り当てられます。COMSOL はメッシュ生成時にCADの位相を非常に重視するため、インポートジオメトリに微小な隙間があると、別々のドメインとして認識され、結果として「Interior Boundary」が多数生成されることがあります。これが他ソフトの「意図しない自由辺」に相当する問題を引き起こします。
トラブルシューティング
よくあるエラーと対策
STLやステップファイルなどの中性フォーマットからメッシュをインポートすると、必ずと言っていいほど自由辺エラーが出ます。これはファイル形式の限界ですか?
ファイル形式の特性です。特にSTLファイルは、もともと面の集合(ファセット)で形状を表現するため、隣接面の辺が厳密に一致している保証がありません。出力時のテッセレーション精度によって、隣接ファセットの辺の長さや節点位置が数ミクロン〜数十ミクロンずれることは日常茶飯事です。この「メッシュジオメトリ」をそのままCAEメッシュとして使うと、ほぼ100%の確率で自由辺が発生します。対策としては、1) 可能な限り元のCAD(CATIA, SolidWorks, Creo のネイティブファイル)からメッシュを生成する、2) STLをインポート後、ジオメトリ修復ツール(ANSYS SCDMの「Surface Repair」、Materialise Magicsなど)で縫合処理を施す、のいずれかが必要です。
メッシュをリファイン(細かく)したら、かえって自由辺が増えてしまいました。なぜですか?
それは、元の粗いメッシュでは許容値内でマージされていた節点のずれが、要素分割によって増幅・顕在化したためです。具体例を挙げます。2枚の面の境界に0.01mmの幾何学的隙間があり、粗メッシュ(要素サイズ10mm)では両面の境界節点が偶然0.01mm以内に収まってマージされました。しかし、メッシュを1mmにリファインすると、各面の節点配置がより正確に幾何形状に追従するため、この0.01mmの隙間が節点位置の違いとして明確に現れ、マージされずに自由辺として検出されます。根本的解決は、前述の通りジオメトリそのものを修復することです。
どうしても修正しきれない自由辺が数本残ってしまいました。この状態で解析を実行すると、必ず失敗しますか?
必ずしも「実行」自体は失敗しませんが、結果の信頼性は著しく損なわれます。特に静的構造解析では、ソルバーはメッシュに欠陥があっても計算を続行します。問題は、その自由辺がどのような位置にあるかです。
「重複要素」や「重複ノード」のエラーと、自由辺は同時に発生することが多いですか?
はい、同じ根本原因(CADの不具合やインポート時の精度損失)から派生する兄弟のようなエラーです。例えば、面が微小に重複して定義されているCADをメッシュ化すると、同じ空間位置に2枚の面メッシュが生成され、これが「重複要素」になります。それらの面の辺は互いに独立しているため、共有されず「自由辺」にもなります。対策も共通で、ジオメトリの修復とノードのマージが基本です。HyperMeshの「Tool」→「edges」にある「equivalence」コマンドは、指定した許容値内の重複ノードを一括マージし、重複要素と自由辺を同時に解消する典型的な操作です。
関連トピック
なった
詳しく
報告