5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Codexで2D線形FEMアプリを作ってみた

5
Posted at

Codexで2D線形FEMアプリを作ってみた

この記事のポイント

Codexに「作りたいCAEアプリの範囲」を小さく、具体的に伝えることで、2D線形静解析ソルバ、GUI、サンプルモデル作成までを一気通貫で作りました。

今回のポイントは次の通りです。

  • 解析は線形静解析だけに限定する
  • 要素は2Dの三角形/四角形だけにする
  • 入力はカード型のテキストデッキにする
  • 出力は節点変位、要素応力、支持反力のテキストにする
  • 100節点程度の軽いサンプルを作らせる
  • GUI、README、テストまで段階的に追加する

標準Pythonだけで動く、実験用の小さな2D線形有限要素法アプリです。

注意: 学習・プロトタイプ用途の最小実装です。実務CAEソルバの代替ではありません。

Codexに投げたプロンプトの概要

最初の指示は、次のような形です。

カード型入力デッキを読み込む、構造解析のシミュレータアプリを作ってください。
線形静解析だけでよいです。必要最低限のシンプルな機能で構いません。

入力:
- 節点
- 要素
- 材料
- 境界条件
- 荷重

出力:
- 各節点の変位
- 各要素の応力
- 支持反力

100節点くらいの軽いサンプル入力も作ってください。

その後、最終版に向けて次のような追加指示を出しました。

簡単なGUIアプリも作ってください。
macOSでダブルクリック起動できるアプリにしてください。
公開しやすいように、固有製品名や特定製品を連想させる用語は使わないでください。
入力モデルと解析後モデルを1枚の画像として可視化してください。
解析後の変形イメージを元にアプリアイコンも設定してください。
README内の環境依存パスはマスクしてください。
投稿用に、実行イメージ、サンプルデータ、理論値比較をMarkdownまとめてください。
公開用リポジトリを作成し、実行に関係ないファイルは除外してください。

曖昧に「CAEを作って」ではなく、解析範囲、入力、出力、サンプルサイズ、公開時の方針、公開形態まで指定すると、Codexの作業が安定しました。

GitHub公開版

公開したリポジトリはこちらです。

GitHub公開版には、実行に必要なアプリ本体、ソースコード、README、サンプルデータ、テストだけを含めています。

simple-linear-fea/
├── Simple Linear FEA.app
├── Open Simple Linear FEA.command
├── README.md
├── simple_linear_fea.py
├── simple_linear_fea_ui.py
├── examples/
│   ├── cantilever_plate_100_nodes.deck
│   └── cantilever_plate_100_nodes.out.txt
└── tests/
    └── test_basic.py

主なファイルは次の通りです。

  • simple_linear_fea.py: 2D線形静解析ソルバ本体
  • simple_linear_fea_ui.py: Tkinterベースの簡易GUI
  • Simple Linear FEA.app: macOSでダブルクリック起動するアプリバンドル
  • Open Simple Linear FEA.command: ターミナル経由の補助起動ファイル
  • examples/cantilever_plate_100_nodes.deck: 100節点サンプル入力
  • examples/cantilever_plate_100_nodes.out.txt: サンプル解析結果
  • tests/test_basic.py: サンプルモデルのテスト

対応範囲

今回の実装範囲はかなり絞っています。

項目 内容
解析 2D平面応力、微小変形、線形静解析
自由度 各節点 UX, UY
要素 CQUAD4, CTRIA3
材料/特性 MAT1, PSHELL
境界条件 SPC, SPC1
荷重 FORCE
ソルバ 標準Pythonのみ、密行列のガウス消去
GUI Tkinter

回転自由度、シェル曲げ、ソリッド、座標変換、非線形解析、固有値解析、動解析などは対象外です。

最終版のアプリ画面

起動直後の画面です。Load Sample で同梱サンプルを読み込み、Run Analysis で解析し、Result タブで結果を確認して、Save Result... でテキスト保存できます。

image.png

UIは最小限のボタンと3つのタブだけにしました。

  • Input: 入力デッキの内容、または起動直後の使い方
  • Summary: 読み込んだモデルの節点数、要素数、荷重数など
  • Result: 解析結果テキスト

image.png

image.png

image.png

入力モデルと解析後モデルの可視化

入力デッキの元メッシュと、解析結果から得た変形後メッシュを1枚の画像イメージにまとめました。右側は要素のvon Mises応力で色付けしています。変形は見やすくするため自動倍率で拡大しています。

image.png

注意: この画像は説明素材で、アプリに可視化機能は含みません。

サンプル入力データ

サンプルは、長さ9m、高さ3m、厚さ0.1mの2D片持ち板です。左端を固定し、右端10節点へ合計10,000Nの下向き荷重を分配しています。

サンプルは examples/cantilever_plate_100_nodes.deck にあります。ここでは主要部分だけ抜粋します。

$ Simple Linear FEA sample: 2D cantilever plate, 100 GRID / 81 CQUAD4
$ Supported by simple_linear_fea.py. Units are SI-like: m, N, Pa.
BEGIN
MAT1,1,2.10E11,,0.30
PSHELL,1,1,0.10
GRID,1,,0.000000,0.000000,0.0
GRID,2,,1.000000,0.000000,0.0
GRID,3,,2.000000,0.000000,0.0
...
GRID,99,,8.000000,3.000000,0.0
GRID,100,,9.000000,3.000000,0.0
CQUAD4,1,1,1,2,12,11
CQUAD4,2,1,2,3,13,12
...
CQUAD4,80,1,88,89,99,98
CQUAD4,81,1,89,90,100,99
SPC1,1,12,1,11,21,31,41,51,61,71,81,91
FORCE,1,10,0,1000.000000,0.0,-1.0,0.0
FORCE,1,20,0,1000.000000,0.0,-1.0,0.0
...
FORCE,1,90,0,1000.000000,0.0,-1.0,0.0
FORCE,1,100,0,1000.000000,0.0,-1.0,0.0
ENDDATA

サンプル出力データ

出力はテキストです。節点変位、要素重心応力、支持反力を出しています。

SIMPLE LINEAR FEA RESULT
========================
INPUT: cantilever_plate_100_nodes.deck
ANALYSIS: 2D plane stress, small displacement, linear static
NODES: 100
ELEMENTS: 81
MATERIALS: 1
PROPERTIES: 1
FORCES: 10
CONSTRAINED DOFS: 20

NODAL DISPLACEMENTS
-------------------
    GRID               UX               UY             UMAG
       1   0.00000000e+00   0.00000000e+00   0.00000000e+00
      10  -1.23749814e-05  -5.30028629e-05   5.44283350e-05
      50  -1.33612009e-06  -5.28232527e-05   5.28401480e-05
     100   1.23749814e-05  -5.30028629e-05   5.44283350e-05

ELEMENT CENTROID STRESSES
-------------------------
     EID     TYPE               SX               SY              TXY        VON_MISES
       1   CQUAD4  -4.96438622e+05  -6.62163068e+04  -3.80641538e+04   4.71497839e+05
      81   CQUAD4   3.08702360e+04  -1.20258004e+04  -1.34279190e+04   4.48303208e+04

SUPPORT REACTIONS
-----------------
    GRID      DOF         REACTION
       1       UY   5.51906303e+03
      91       UY   5.51906303e+03

理論値との比較

2D平面応力モデルなので厳密な梁理論そのものではありませんが、片持ち梁として近似し、結果のオーダーを確認しました。

モデル条件

項目
長さ L 9.0 m
高さ H 3.0 m
厚さ t 0.10 m
ヤング率 E 2.10e11 Pa
合計荷重 P 10,000 N
断面二次モーメント I = tH^3/12 0.225 m^4

先端たわみ

片持ち梁の先端集中荷重の式を使います。

delta = P L^3 / (3 E I)

理論値:

delta = 10000 * 9^3 / (3 * 2.10e11 * 0.225)
      = 5.142857e-05 m

解析結果では、右端10節点の UY 絶対値平均は次の通りでした。

FEA average tip |UY| = 5.290548e-05 m

比較:

項目
梁理論 先端たわみ 5.142857e-05 m
FEA 右端平均たわみ 5.290548e-05 m
差分 +2.87 %
FEA 右端最大たわみ 5.300286e-05 m
最大値ベース差分 +3.06 %

このくらいの粗いメッシュ、2D平面応力、右端分布荷重の条件で、数%程度の差に収まっています。

固定端近傍の曲げ応力

固定端直近の外側要素の重心位置で、梁理論の曲げ応力と比較しました。

重心位置は、おおよそ x = 0.5 m、中立軸からの距離 y = 1.333333 m です。

M = P (L - x)
sigma = M y / I

理論値:

M = 10000 * (9.0 - 0.5) = 85000 N m
sigma = 85000 * 1.333333 / 0.225
      = 5.037037e+05 Pa

解析結果:

max |SX| = 4.964386e+05 Pa

比較:

項目
梁理論 曲げ応力 5.037037e+05 Pa
FEA 最大 ` SX
差分 -1.44 %
FEA 最大von Mises応力 4.714978e+05 Pa

固定端近傍の曲げ応力も、簡易実装としては妥当な値になりました。

反力チェック

荷重合計は下向き10,000Nです。支持反力を合計すると次のようになりました。

項目
UX 反力合計 3.64e-12 N
UY 反力合計 9,999.999994 N

力の釣り合いもほぼ取れています。

Codexに任せたこと

Codexには以下を順番に頼みました。

  1. 標準Pythonのみの2D線形静解析ソルバ
  2. 100節点の片持ち板サンプル入力
  3. Tkinter GUI
  4. macOSの起動用 .app
  5. 起動直後に使い方が分かる画面
  6. 入力モデルと解析結果の可視化画像
  7. 解析後メッシュを元にしたアプリアイコン
  8. README内の環境依存パスのマスク
  9. 公開用リポジトリの作成と不要ファイル除外
  10. テストと全文検索による公開前チェック

このように、実装、GUI化、配布形態、検証、ドキュメント化、公開まで1つの流れで進められました。

まとめ

CodexでCAEアプリを作るときは、最初に「どこまで作るか」を狭く決めるのが重要でした。

今回うまくいった指示のポイントは次の通りです。

  • 解析対象を線形静解析だけに絞る
  • 入力カード、出力項目、要素種別を明示する
  • 100節点程度の軽いサンプルを指定する
  • GUI、アプリ化、可視化、比較検証を段階的に追加する
  • アプリアイコンなど配布時の見た目も、解析結果から派生させる
  • 公開前提なら命名、README、除外ファイル、表現もレビューさせる

「まず最小の解析器を作り、サンプルで動かし、GUIを足し、理論値で妥当性確認して、最後にGitHub公開用に整理する」という流れなら、Codex上でも短時間でCAEアプリのプロトタイプを作れます。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?