シェル厚さゼロエラー
概要
先生! 今日はシェル厚さゼロエラーの話なんですよね? どんなものなんですか?
理論と物理
シェル要素の厚さの定義と役割
「シェル厚さゼロエラー」というのを見かけました。シェル要素の「厚さ」って、具体的に何を定義しているパラメータなんですか?
良い質問だ。シェル要素の厚さは、中面で定義された幾何に「肉厚」を与えるパラメータだ。例えば、板厚1.2mmの鋼板をモデル化する場合、中面サーフェスを定義し、その要素プロパティに厚さ1.2mmを割り当てる。この厚さがゼロまたは未定義だと、断面二次モーメントや断面係数が計算できず、剛性マトリクスが特異になる。具体的には、曲げ剛性は厚さの3乗に比例する
厚さは材料のヤング率や密度とどう関係するんですか? 厚さゼロでも、材料自体の特性は定義されているはずでは?
関係は密接だ。シェル要素の単位面積あたりの面内剛性(膜剛性)は
「厚さ」の入力ミス以外で、理論的に厚さがゼロと見なされてしまうケースはありますか?
ある。代表的なのは「シェルオフセット」の設定だ。シェルの中面から、応力評価面までの距離をオフセットと呼ぶ。Abaqusの*SHELL SECTIONでOFFSETパラメータを誤って定義すると、実効的な肉厚が計算から抜け落ち、等価的な厚さゼロ状態を生むことがある。また、プリプロセッサで厚さを「変数」として定義し、その変数がゼロに評価される場合も該当する。
数値解法と実装
剛性マトリクス生成とエラー検出プロセス
ソルバーは具体的にどの計算ステップで「厚さゼロ」を検出してエラーを出すんですか?
要素剛性マトリクスを生成する「要素行列ルーチン」内だ。シェル要素の剛性マトリクス
厚さに非常に小さい正の値、例えば1e-12を入れたらエラーは出ませんか? 理論的にはゼロではないけど。
エラーは出ないかもしれないが、数値的に不安定で結果は無意味だ。先程の曲げ剛性の式
厚さが要素ごとに異なる「可変厚さシェル」の場合、一部の要素だけ厚さゼロだとどうなりますか?
その要素の剛性マトリクス生成時にエラーが発生し、解析は中断される。Ansys Workbenchで「Shell Thickness」を「Tabular Data」でノードごとに定義する場合、入力漏れやゼロ値があるとエラーになる。NastranのPSHELLプロパティカードでは、T(デフォルト厚さ)フィールドが必須で、ここが空白やゼロだと実行前にエラー検出される。局所的な厚さゼロは、現実の構造には存在しないから、モデリングミスとして早期に検出される仕組みだ。
実践ガイド
エラーを未然に防ぐモデリング手順
このエラーを防ぐための、具体的なモデリング時のチェックリストはありますか?
もちろんある。実務では以下の順で確認する。
複数の板厚部品がアセンブリされたモデルで、うっかり厚さを付け忘れるミスが多いです。効率的な見落とし検出方法は?
プリプロセッサのフィルタリング機能を使う。例えば、HyperMeshでは「Entity State」ブラウザで「Properties」を選び、厚さが未定義(Unspecified)のコンポーネントを一覧表示できる。Ansys Mechanicalでは「Worksheet」ビューを開き、「Geometry」→「Thickness」列でソートし、0や空白の行を探す。また、解析実行前の「Model Check」機能(Abaqus/CAEやFemapに搭載)を必ず実行すると、厚さ未定義を含む一般的な設定ミスをレポートしてくれる。
厚さを後から一括で変更する必要が出た時、安全に更新する方法は?
「パラメータ管理」機能を使うのがベストプラクティスだ。Siemens NX SimcenterやAnsys Workbenchでは、厚さを「設計パラメータ」として定義できる。例えば、`t_bracket = 2.5 [mm]` と定義し、このパラメータをシェルプロパティにリンクさせる。後で設計変更があれば、パラメータテーブルで `t_bracket` の値を一括変更するだけで、全ての関連するプロパティが更新される。これにより、手動入力による打ち間違い(0を入れるなど)を防げる。
ソフトウェア比較
主要ソフトウェアにおけるエラーメッセージと設定箇所
Ansys、Abaqus、Nastranで、このエラーが出た時のメッセージはどう違いますか?
それぞれ特徴がある。
厚さを設定するためのGUI画面や入力項目は、ソフトごとにどこが違うんでしょう?
大きく分かれる。
COMSOL Multiphysicsのように「シェル」と「プレート」を明確に分けているソフトもありますか?
COMSOLは「Shell」インターフェースで膜と曲げの両方を扱い、厚さは物理場の設定で定義する。一方、AnsysやAbaqusでは、「Shell」要素自体が膜と曲げの剛性を内包する単一の要素タイプとして扱われることが多い。ただし、Abaqusには「Membrane」要素(厚さは必要だが曲げ剛性なし)や「Surface」要素(厚さ概念なし)もあり、用途で使い分ける。重要なのは、どの物理インターフェースや要素タイプを選んだかで、厚さの必須/不要が決まる点だ。COMSOLで「Shell」を選んでおきながら厚さをゼロにすると、同様のエラーが発生する。
トラブルシューティング
エラー発生時の具体的な調査手順
「Zero thickness」エラーメッセージが出た時、最初に何を確認すべきですか?
まず、エラーメッセージに記載されている**要素番号**または**プロパティID**を特定せよ。例えば、`Error: Zero thickness for shell element 10532` なら、要素10532が属するコンポーネントまたはプロパティをプリプロセッサで探す。そのプロパティの厚さ設定を開き、値が入力されているか確認する。入力されていても、その値が「0」「1E-3」(単位系ミスで実質0)「負の値」になっていないかチェックする。
プロパティには正の厚さが定義されているのにエラーが出る場合、次に疑うべきポイントは?
「**継承関係**」と「**メッシュ依存の厚さ定義**」だ。親コンポーネントに厚さを定義しても、子のジオメトリに別のプロパティ(デフォルトや未定義)が割り当てられていることがある。また、HyperMeshの「Card Edit」などで、要素ごとに厚さを上書きする設定(例えばPSHELLのT1, T2, T3, T4フィールド)があり、そこでゼロが入力されている可能性がある。要素ごとの厚さを可視化する機能(ほとんどのプリプロセッサにある)を使って、問題の要素周辺の厚さ分布を色コンターで確認するのが早い。
入力ファイル(.inp, .bdf)を直接編集する場合、どの行を重点的にチェックすればいいですか?
エラーが出た要素番号(EID)から逆引きする。まず、要素カード(Abaqusなら`*ELEMENT`、Nastranなら`CQUAD4`や`CTRIA3`)を探し、その要素が参照するプロパティID(PID)を確認する。次に、そのPIDに対応するプロパティカード(`*SHELL SECTION` や `PSHELL`)をファイル内で検索する。そのカード内の厚さパラメータ(`*SHELL SECTION`の直後の数値、`PSHELL`のTフィールド)を確認する。スクリプト(Python, awk)でPIDごとの最小厚さを抽出するのも有効だ。
全ての厚さ設定を確認したがゼロは見当たらない。それでもエラーが出る、最後の可能性は?
「**プリプロセッサのバグ**」または「**単位系の不整合によるアンダーフロー**」が考えられる。例えば、ジオメトリの単位がメートル、材料プロパティの単位がN/mm^2 (MPa) の混在系で、厚さに0.001 [m] (=1mm) を入力したつもりでも、ある変換ルーチンでこの値が0に丸められてしまう可能性がある。対策としては、モデル全体を一貫した単位系(SIならm, Pa, kg)に統一し、厚さを0.001ではなく1.0e-3と指数表記で明示的に入力してみる。それでもダメなら、当該要素を含む小さなテストモデルを新規作成し、問題を再現・孤立化させる。
関連トピック
なった
詳しく
報告