Coreform IGA for Abaqus
Coreform公式ドキュメントを基にした日本語版です。技術仕様・対応状況の最終的な基準は公式英語版です。

穴あき薄板の応力集中

1 説明

この問題では、一様な軸方向引張を受ける薄い鋼板の応力集中を調べます。比較には Roark の 『Formulas for Stress and Strain』Table 17.1, case 7a の応力集中係数を用います。 [1].

2 Abaqus/CAE でのワークフロー

2.1 モデル定義

  1. 新しい model database を作成し、既定モデルの名前を PWH-Kt

  2. に変更します。続いて model attributes を編集し、 Description(説明) 欄に使用する整合単位系を記述します。このモデルでは IPS 整合単位系を使用します。次の内容を入力することを推奨します。

    # CONSISTENT UNIT SYSTEM: IPS
    ## Fundamental Units
    Length: in
    Mass: slinch = ( lbf * s^2 ) / in
    Time: s
    ## Derived Units
    Mass Density: slinch / in^3
    Force: lbf
    Pressure: lbf / in^2

2.2 Part モジュール

次の Create Part(Partを作成) アイコン をクリックして Create Part(Partを作成) ダイアログを開き、次の名前で新しい Part を作成します。 Plateダイアログの各パラメータ値が、下表および図と同じ設定になっていることを確認してください。

Parameter(パラメータ) 値
Modeling Space(モデリング空間) 3D
型 Deformable
Base Feature Shape(基本形状) Solid
Base Feature Type(基本フィーチャー種別) Extrusion
Approximate size(概算サイズ) 20

これらの値を入力したら、 Continue ボタンをクリックして Sketch に進みます。

まず原点に vertex を作成します。 Create Isolated Point(孤立点を作成) アイコン をクリックし、 0,0 を viewport 左下の入力欄に入力して、キーボードの Enter を押します。

次に Add Constraint(拘束を追加) アイコン をクリックして Add Constraint(拘束を追加) ダイアログを開き、図に示す Fixed(固定) を選択します。

viewport に固定拘束の対象 entity を選択するよう表示されます。先ほど作成した vertex を選び、 Done(完了) をクリックします。vertex の横に固定拘束を示す注記が表示されます。

次に Create Lines: Rectangle (4 Lines)(長方形を4線で作成) アイコン を選び、viewport 上で始点の角と終点の角をクリックします。座標は後で寸法と拘束により指定するため、この段階では厳密でなくて構いません。

再び Add Constraints(拘束を追加) ダイアログを開き、 Equal distance(等距離) を選択します。viewport から次の対象を選ぶよう求められます。

  1. 1本目の line(または vertex)
  2. 2本目の line(または vertex)
  3. 選択した2本の line から等距離に配置する vertex

選択対象と推奨する選択順序を次図に示します。

選択すると、2本の line が vertex から等距離になるよう長方形が更新されます。

続いてもう1つ等距離拘束を設定し、今度は長方形の2本の水平 line を選択します。

長方形が再び更新されます。

次に Add Dimension(寸法を追加) アイコン をクリックします。viewport から寸法を付ける幾何 entity を選択するよう求められるので、垂直 line の1本を選び、 5 を viewport の入力欄へ入力し、続いて Done(完了).

この Add Dimension(寸法を追加) tool はそのまま有効なはずです。有効でない場合は Add Dimension(寸法を追加) アイコンを再度クリックします。次に水平 line の1本を選び、寸法値 10 を設定します。長方形の curve 色が黄色から緑に変われば、完全拘束されています。

次に Create Circle: Center and Perimeter(中心と円周点で円を作成) アイコン を選択します。viewport で円の中心点を選ぶよう求められるので、Sketch 開始時に作成した vertex をクリックします。これにより円の中心と vertex の coincident 拘束が自動設定されます。次に円周上の点を選ぶよう求められますが、後の手順で拘束するため正確な位置でなくて構いません。

必須ではありませんが、円周点を y 軸上に拘束します。そのため、 Create Construction: Oblique Line Thru 2 Points アイコン をクリックしたまま保持して追加 option を表示し、 Create Construction: Vertical Line Thru Point アイコン を選択して、Sketch 開始時に作成した同じ vertex をクリックします。

次に再び Add Constraint(拘束を追加) ダイアログを開き、 Coincident(一致) を選択します。viewport の指示に従い、円周点と垂直 construction line を coincident 拘束の2 entity として選択します。

円周点が垂直 line 上へスナップします。

次に再び Add Dimension(寸法を追加) アイコンをクリックし、円を選択して半径寸法を設定します。半径値として 1 を入力します。

これで Sketch は完全に定義・拘束され、完成です。次に viewport の入力欄にある Done(完了) の横のボタンをクリックします。 Sketch the section for the solid extrusionこの表示が見つからない場合は、 Cancel アイコン を順に確認して表示させてください。

次に Edit Base Extrusion(基本押し出しを編集) ダイアログが表示され、押し出し深さを入力するよう求められます。値は 0.1とします。入力後、 OK ボタンをクリックします。

をクリックします。viewport に次図のような solid geometry が表示されます。

以上で Part モジュールの作業は完了です。

2.3 Property モジュール

次の Create Material(材料を作成) アイコン をクリックして Create Material(材料を作成) ダイアログを開き、 Steelという名前の新しい材料を作成します。静解析なので質量密度は不要ですが、下表の等方弾性定数を指定します。値は次の Edit Material(材料を編集) 画面例にも示されています。

Material Property(材料特性) 値 Units(単位)
Young’s Modulus(ヤング率) \(30 \times 10^6\) \(\text{lbf}/\text{in}^2\)
Poisson’s Ratio(ポアソン比) \(0.29\) –

値を入力したら、 OK ボタンをクリックします。

次に Create Section(Sectionを作成) アイコン をクリックして Create Section(Sectionを作成) ダイアログを開き、 Section-Solid-Steelという名前の新しい section を作成します。section category は Solid で、 型 、type は Homogeneousに設定します。次図を参照してください。

値を入力したら、 Continue ボタンをクリックします。

続く Edit Section(Sectionを編集) ダイアログで、 Steel Material 選択欄から作成した材料を選びます。 その後

Assign Section(Sectionを割り当て) OK ボタンをクリックします。

次に をクリックし、 アイコン を Part 全体へ割り当てます。viewport で region を選択するよう求められ、選択 region に named set を作成することもできます。この set には Section-Solid-Steel という名前を推奨しますが、別名でも構いません。また WholePartCreate set を解除して set を作成しなくても構いません。 続く1.

続く Edit Section Assignment(Section Assignmentを編集) ダイアログで、 Section-Solid-Steel ダイアログの Section その後

Assign Section(Sectionを割り当て) OK 欄を確認してボタンを確定します。Part が緑色になれば section が正しく割り当てられています。

以上で Property モジュールの作業は完了です。

2.4 Assembly モジュール

次の Create Instance(Instanceを作成) アイコン をクリックして Create Instance(Instanceを作成) ダイアログを開いて新しい instance を作成します。assembly に配置する entity として Plate Part を選択し、既定の Dependent (mesh on part) を Instance Type オプション付きで実行されます。

Assign Section(Sectionを割り当て) OK に設定したまま作成ボタンを押します。viewport に青色の Part instance が表示されます。

以上で Assembly モジュールの作業は完了です。

2.5 Step モジュール

2.5.1 Step を定義する

次の Create Step(Stepを作成) アイコン をクリックして Create Step(Stepを作成) ダイアログを開いて新しい Step を作成します。名前を Apply-Roark-Conditionsとし、 General procedure category が選ばれていることを確認して、 Static, General を手続き一覧から選択します。次図を参照してください。

次に Continue ボタンをクリックすると Edit Step(Stepを編集) ダイアログが表示されます。既定設定のままで構いません。主な設定は、(擬似)時間 period が 1.0、小変形仮定(Nlgeom=off)を使用し、 Other tab では direct equation solver を使用する設定です。説明文は任意で、入力しなくても構いません。

Assign Section(Sectionを割り当て) OK 確定ボタンを押して Step の作成を完了します。 Step Manager アイコン を、 Create Step(Stepを作成) アイコン右側から開くと、新しい Step の横に緑のチェックマーク()が表示されます。次図を参照してください。

2.5.2 Field output を定義する

現在、Coreform IGA for Abaqusがフィールド出力としてサポートするのは変位(U)、応力(S)、相当塑性ひずみ(PEEQ)です。また現時点では、対応するすべての解析でこれらを常に出力するよう固定されています。将来はより柔軟に設定できるよう改善予定ですが、現状では field output を変更しないことを推奨します。

2.5.3 History output を定義する

この例題では Abaqus の history-output request は不要です。次節で定義する Coreform IGA line Probe が、後処理に使用する応力分布を記録します。

2.5.4 Coreform IGA Probe を定義する

Coreform IGA for Abaqus の強力な機能の1つが Coreform IGA Probe です。通常の Probe や history output は node や quadrature point の位置(疎な場合があります)でしか結果を得られなかったり、出力ファイルに保存済みの結果に対してしか使えなかったりします。これに対して Coreform IGA Probe は、任意位置でさまざまな結果を照会できます。2 これらの値は解析中に高精度で計算されます。3現在 Coreform IGA for Abaqus には3種類の Probe があります。

  • Point Probe: 1つの (X,Y,Z) 位置に配置する Probe。
  • Multipoint Probe: 複数の (X,Y,Z) 位置に配置する Probe。
  • Line Probe: 2つの (X,Y,Z) 位置で指定した line 上に、等間隔で並ぶ複数の点を配置する Probe。

この例題では Line Probe Line Probe を板厚中央面に作成します。始点は穴の半径位置(Y軸上)とし、Y軸方向に板外表面まで延ばします。Coreform IGA Probe を作成するには Create Coreform IGA Probes アイコン をクリックし、下表と図に示す parameter-value pair を設定します。

Parameter(パラメータ) 値
名前 Probe-Stress-Profile
Probe Type(Probe種別) Line Probe
Instance Plate-1
Start(始点) (X, Y, Z) (0, 1, 0.05)
End(終点) (X, Y, Z) (0, 2.5, 0.05)
Num Points(点数) 100

Assign Section(Sectionを割り当て) OK 確定ボタンを押して Coreform IGA Probe の作成を完了します。

以上で Step モジュールの作業は完了です。

2.6 Interaction モジュール

この問題では interaction を使用しないため、このモジュールはスキップできます。

以上で Interaction モジュールの作業は完了です。

2.7 Load モジュール

この問題では X-minimum surface に pinned displacement boundary condition4を設定します。また X-maximum surface には小さな一様負圧5を与えます。圧力ベクトルはジオメトリ内部から外向きとし、板に引張を生じさせます。

2.7.1 Pinned displacement boundary condition

次の Create Boundary Condition(境界条件を作成) アイコン をクリックして Create Boundary Condition(境界条件を作成) ダイアログを開き、名前 Hold-XMinで新しい boundary condition を作成します。 Step 選択欄では、作成済みの Apply-Roark-Conditions Step が選択されていることを確認し、category に Mechanical を、type に Symmetry/Antisymmetry/Encastre を選択します。

Assign Section(Sectionを割り当て) Continue ボタンをクリックします。

viewport で boundary condition の region を選択するよう求められます。前述の X-minimum surface を選択します。set 名として XMin.

Assign Section(Sectionを割り当て) Done(完了) ボタンをクリックします。

を推奨します。続く Edit Boundary Condition(境界条件を編集) ダイアログで、 ダイアログで PINNED

Assign Section(Sectionを割り当て) OK を選択し、surface の displacement を0に拘束します。 確定ボタンを押して boundary condition の作成を完了します。 アイコン を、 Create Boundary Condition(境界条件を作成) Boundary Condition Manager アイコンを開くと、新しい boundary condition の横に緑のチェックマーク()が表示されます。次図を参照してください。

)が表示されます。また viewport には、拘束された surface と degree of freedom(DOF)を示す boundary condition の表示が現れます。

2.7.2 Pressure load condition

次の Create Load Condition(荷重条件を作成) アイコン をクリックして Create Load Condition(荷重条件を作成) ダイアログを開き、名前 Pull-XMaxで新しい boundary condition を作成します。 Step 選択欄では、作成済みの Apply-Roark-Conditions Step が選択されていることを確認し、category に Mechanical を、type に Pressure を選択します。

Assign Section(Sectionを割り当て) Continue ボタンをクリックします。

で新しい load condition を作成します。viewport で region を選択するよう求められるので、前述の X-maximum surface を選択します。set 名として XMax.

Assign Section(Sectionを割り当て) Done(完了) ボタンをクリックします。

を推奨します。続く を推奨します。続く Edit Load(荷重を編集) ダイアログで、下表と図に示す parameter-value pair を設定します。

Parameter(パラメータ) 値
Distribution(分布) Uniform
Magnitude(大きさ) -1e-6
Amplitude (Ramp)

Assign Section(Sectionを割り当て) OK 確定ボタンを押して load condition の作成を完了します。

viewport には、先ほどの boundary condition に加えて pressure load condition が表示されます。圧力を表す vector が surface から外向き(+X方向)であることを確認してください。surface 内向き(-X方向)なら、Magnitude 欄の - 符号を付け忘れている可能性があります。

以上で Load モジュールの作業は完了です。

2.8 Mesh モジュール

Coreform IGA Mesh を作成するため、 Part を viewport 上部の active Object として選択します。

viewport に黄色で plate geometry が表示されます。

次に再び Create Coreform IGA Meshes アイコン を task pane から開きます。

を推奨します。続く Create Coreform IGA Mesh ダイアログで、下表と図に示す parameter-value pair を設定します。

Parameter(パラメータ) 値
Mesh Type(Mesh種別) Immersed Rectilinear
Element Size(要素サイズ) (0.3, 0.3, 0.1)
Degree(次数) 2
Continuity Mode(連続性モード) Smooth

設定後、確定ボタンをクリックします。 OK ボタンをクリックします。

plate geometry を包む赤い Mesh が表示されます。

この Mesh の表示/非表示は Show Native Mesh アイコン .

で切り替えられます。以上で Mesh モジュールの作業は完了です。

2.9 Job モジュール

Coreform IGA for Abaqus 解析を作成・実行するには Create Coreform IGA Job アイコン をクリックし、ダイアログに名前 Job-PWH-Kt を入力して確定します。 Continue ボタンをクリックします。

を推奨します。続く Edit Job - Coreform IGA for Abaqus ダイアログで正しい Coreform IGA Mesh executable が選択されていることを確認します。さらに Coreform IGA Mesh と Abaqus solver それぞれに使用する CPU 数を設定できます。両者は同数である必要はありません。この解析は小規模なので、どちらも1 CPUで十分です。

Assign Section(Sectionを割り当て) OK ボタンをクリックします。

次に再び Coreform IGA Job Manager アイコンをクリックして Coreform IGA for Abaqus Job Managerを開き、作成した Job を選択して Submit をクリックして実行します。

Job が正常に実行されると、Abaqus/CAE の Message Area に次のメッセージが表示されます。

Job Job-PWH-Kt: Analysis Input File Processor completed successfully.
Job Job-PWH-Kt: Abaqus/Standard completed successfully.
Job Job-PWH-Kt completed successfully.

以上で Job モジュールの作業は完了です。

2.10 Visualization モジュール

Coreform IGA for Abaqus は次の結果成果物を書き出します。

  • <job-name>.odb は標準の Abaqus output database です。user element を表す node と、IGA model に boundary condition や load を適用するための三角形化 SFM3D3 surface element が含まれます。
  • <job-name>_iga.odb には、proxy visualization mesh へ写像した result field が格納されます。trim されていない cell は線形 C3D8 hexahedron、trim された cell は線形 C3D4 tetrahedron で表されます。
  • <job-name>_iga_results.sql には native IGA result data が格納されます。Coreform IGA にはこのファイルを ParaView で読む alpha 機能があります。詳細は workflow overview.
  • probe_data.json を参照してください。別の成果物には solver が評価した Coreform IGA Probe の履歴が格納されます。

Job が正常完了したら、解析で生成された2つの ODB file を開きます。

2.10.1 Abaqus ODB file を扱う

Abaqus ODB file を表示すると、 XMin と XMax set を定義した位置に2つの triangle mesh と、多数の ✕ user element marker が表示されます。

次に Create Display Group アイコン をクリックして Create Display Group ダイアログを開き、 RNODE3D 対象の element type を選択して Remove(削除) アイコン をクリックし、user-element marker を表示対象から除外します。

その後 Dismiss(閉じる) をクリックしてダイアログを閉じます。

表示されている surface は、boundary condition と load condition で選択した surface に対応します。

2.10.2 IGA ODB file を扱う

IGA ODB file に切り替えると、Abaqus/CAE が user element の直接可視化をサポートしていないことへの代替として、解形状を近似する output mesh が表示されます。trim されていない element は C3D8 element で、trim された element は C3D4 element でメッシュ化されています。

応力集中の評価で着目する応力不変量である最大主応力の contour plot を作成できます。task pane の Plot Contours on Deformed Shape アイコン をクリックし、続いて toolbar の Field Output Dialog を開きます。 Field Output ダイアログで S を Output Variable と として選択し、Invariant に を Max. Principal を指定します。次図を参照してください。

Assign Section(Sectionを割り当て) OK ボタンをクリックします。

viewport には output mesh とともに、最大主応力で色付けされた解析結果が表示されます。またモデル内の最大主応力値を示す legend も表示されます。

Abaqus/CAE の Probe 機能も利用できます。応力集中が予想される位置を見やすい方向へ view を調整し、 Probe values アイコン を task pane から開きます。

を推奨します。続く をクリックします。 Probe Values ダイアログで Nodes を Probe 欄から選択します。次に viewport で、予想される最大応力位置に最も近い node を選択します。

すると をクリックします。 ダイアログ内に、その node に対応する最大主応力を示す行が追加されます。

最後に、 probe_data.json file を Python から Kernel Command Line Interface で開き、応力成分を取得して最大主応力を計算することもできます。現在の Probe schema では、sample は寄与する IGA part または leaf ごとにグループ化されています。 source_location_indices の値は、それぞれの group 内 sample を、要求した line-Probe location へ対応付けます。以下の script は final frame の全 sample を集め、その順序を復元し、境界で複数の leaf が寄与する場合は複数の値を保持します。

import json
import os

import numpy as np

job_dir = r"C:\Users\Owner\Documents\AbaqusTemp\CoreformIGA\ExampleProblems\PWH-Kt\JobDir"
probe_filename = os.path.join(job_dir, "probe_data.json")
with open(probe_filename) as probe_file:
    probe_data = json.load(probe_file)

stress_probe = probe_data[
    "Apply-Roark-Conditions"
]["history"]["Probe-Stress-Profile"]
components = ("XX", "YY", "ZZ", "XY", "XZ", "YZ")
samples = []

for group in stress_probe["part_groups"]:
    source_indices = group["source_location_indices"]
    locations = group["locations"]
    stress = group["Stress"]
    component_values = [stress[name][-1] for name in components]
    expected_count = len(source_indices)
    if len(locations) != expected_count or any(
        len(values) != expected_count for values in component_values
    ):
        raise ValueError("probe locations and final stress values are misaligned")

    for slot, (source_index, location) in enumerate(
        zip(source_indices, locations)
    ):
        sxx, syy, szz, sxy, sxz, syz = (
            values[slot] for values in component_values
        )
        stress_tensor = np.array([
            [sxx, sxy, sxz],
            [sxy, syy, syz],
            [sxz, syz, szz],
        ])
        max_principal = np.linalg.eigvalsh(stress_tensor)[-1]
        samples.append((
            source_index,
            group.get("part_id", -1),
            location,
            max_principal,
        ))

if not samples:
    raise ValueError("probe contains no final-frame stress samples")

samples.sort(key=lambda sample: (sample[0], sample[1]))
source_indices = np.asarray([sample[0] for sample in samples])
xyz = np.asarray([sample[2] for sample in samples], dtype=float)
s_max = np.asarray([sample[3] for sample in samples], dtype=float)
hole_edge_values = s_max[source_indices == 0]
if not hole_edge_values.size:
    raise ValueError("probe has no sample at requested source location 0")
hole_edge_stress = np.max(hole_edge_values)
print("Maximum principal stress at the hole edge:", hole_edge_stress)

受け入れ値となる最大主応力は、Roark Table 17.1, case 7a の net-section stress-concentration factor を用いて計算します。 [1]ここで \(D\) は板幅、 \(r\) は穴半径、 \(t\) は板厚、 \(P\) は作用圧力の大きさ、 \(A = Dt\) は荷重端面積です。

\[ K_t = 3.00 - 3.13\left(\frac{2r}{D}\right) + 3.66\left(\frac{2r}{D}\right)^2 - 1.53\left(\frac{2r}{D}\right)^3 \]

\[ \sigma_\text{nom} = \frac{F}{t\left(D - 2r\right)} = \frac{PA}{t\left(D - 2r\right)} \]

\[ \sigma_\text{max} = K_t \, \sigma_\text{nom} \]

この例題の寸法と荷重を代入すると、 \(2r/D = 0.4\), \(K_t = 2.23568\), \(F = 5.0000 \times 10^{-7}\,\text{lbf}\), \(\sigma_\text{nom} = 1.6667 \times 10^{-6}\,\text{lbf}/\text{in}^2\)、 \(\sigma_\text{max} = 3.7261 \times 10^{-6}\,\text{lbf}/\text{in}^2\).

以下では、この解析解による計算値と、本手順で得られた数値解析の観測値を比較します。

表1: 本手順で得られた観測値と、Roark の受け入れ値との比較。
方法 最大主応力 [lbf/in²] Roark との差
Roark(受け入れ値) \(3.7261 \times 10^{-6}\) —
Proxy ODB nodal probe \(3.3292 \times 10^{-6}\) \(-10.7\%\)
IGA solver probe \(3.4031 \times 10^{-6}\) \(-8.7\%\)
注記

ドキュメントに記載される数値は、ワークフロー説明に用いる静的な Abaqus/CAE screenshot より頻繁に更新される場合があります。そのため、報告値と screenshot に表示された値の間に小さな差が生じることがあります。自身の解析では、上記の後処理コードを、実行によって生成された probe_data.json に対して使用してください。

Probe に沿った最大主応力は、 XYData object を次のように作成して plot することもできます。

session.XYData(
    name="S_max_vs_Y",
    data=tuple(map(tuple, np.column_stack((xyz[:, 1], s_max)))),
    xValuesLabel="Y position",
    yValuesLabel="Maximum principal stress",
)

次に XY Data Manager アイコンをクリックして XY Data Manager ダイアログを開き、作成した S_max_vs_Y data を選択して Plot ボタンをクリックします。

をクリックします。viewport に、次図と同様の Probe の line plot が表示されます。

以上で Visualization モジュールの作業は完了です。

参考文献

[1]
W. C. Young, R. G. Budynas, and A. M. Sadegh, Roark’s Formulas for Stress and Strain, 8th ed. New York: McGraw-Hill, 2011.

脚注

  1. Abaqus/CAE は .inp file を書き出す際、内部生成名を持つ set を作成します。↩︎

  2. 現在のCoreform IGA Probeでは、プローブする変数をユーザーが選択することはできません。現時点では変位(U)、応力テンソル(S)、相当塑性ひずみ(PEEQ)が解析で利用可能な場合に、これらを取得するよう固定されています。↩︎

  3. 具体的には、各 Probe location は追加の quadrature point(integration point)として実装されますが、assembly routine では重み0が割り当てられます。したがって、stress などの element variable と同じ方法でこれらの点の解値を計算できますが、assembled linear system には寄与しません。そのため locking などの潜在的な数値問題を回避できます。↩︎

  4. X軸に垂直な surface のうち、次に最も近いものです。 \(x = -\infty\).↩︎

  5. X軸に垂直な surface のうち、次に最も近いものです。 \(x = +\infty\).↩︎