LLM001 / AI ASSISTED CFD WORKFLOW

ポンチ絵から
YAML、メッシュ、解析へ

やりたいことは「AIにポンチ絵を読み解かせ、YAML仕様を作らせ、そのYAMLからメッシュ作成とOpenFOAM解析設定を生成する」こと。

横方向で章を移動、下方向で章の詳細へ進みます。

CFD解析アニメーション
前段 01

自動化したいのはこういう解析

CFD解析アニメーション

タンク内にポンプが複数あり、流れと温度が絡み合う解析。これをポンチ絵から自動でセットアップできるようにしたい。

↓ 目標とする解析レベル
前段 02

目標とする解析のレベル

温度循環プログラム結果

発熱量・流量・監視点温度が絡む複合解析。設計者がポンチ絵と仕様を渡すだけで、こうした結果を得られるワークフローを目指す。

現状の課題

専門知識と手作業が必要

gmsh・OpenFOAMの操作知識、数十ファイルの設定、境界条件の調整など多くの手作業が発生する。

LLMで目指すこと

ポンチ絵 → 結果を自動化

形状・流量・発熱条件をAIに伝えるだけで、メッシュ生成・解析設定・実行までを自動化する。

01 / 全体像

このプロジェクトで実現したい流れ

ポンチ絵人が描く
曖昧な設計意図
AIがYAML化座標・形状・流量・役割を
構造化
AIが生成器を作るgmsh用・OpenFOAM用の
テンプレートプログラム
プログラムで生成メッシュ、辞書、境界条件を
自動作成
解析・可視化simpleFoam
ParaView

ポイントは、AIが毎回OpenFOAM辞書を直接手書きするのではなく、再利用できる生成プログラムを作ること。

↓ 役割分担

誰が何を担当するか

ポンチ絵を描く 目的を伝える 結果を見て判断する
AI
ポンチ絵を仕様に翻訳 YAML案を作る 生成プログラムを書く エラー原因を整理する
プログラム
YAMLを読む gmshメッシュを作る OpenFOAM辞書を作る
OpenFOAM
gmshToFoam checkMesh simpleFoam post.foamで可視化

なぜYAMLを中心にするのか

読みやすい

設計意図が見える

ポンプ座標、外径、流量、流入/流出の別が、人間にもAIにも読みやすい形で残る。

再生成できる

手修正を減らす

YAMLを変えれば、gmshメッシュとOpenFOAM設定を同じ条件から作り直せる。

拡張しやすい

ケーススタディへ

流量やポンプ位置を変える解析を、将来的に自動化しやすくなる。

02 / 入力

出発点はポンチ絵

ポンチ絵

ポンチ絵には、タンク寸法、ポンプ位置、ポンプ径、流量、流入/流出の意味が含まれている。

↓ これをAIに仕様化させる

AIに作ってもらいたいYAML

tank: size_m: [0.600, 1.000, 0.160] pumps: - id: pumpA patch: pumpA_outlet role: outlet center_m: [0.150, 0.800] outer_diameter_m: 0.070 inner_diameter_m: 0.060 bottom_offset_m: 0.010 top: tankTop flow_L_min: 50.0 - id: pumpB patch: pumpB_inlet role: inlet center_m: [0.450, 0.500] outer_diameter_m: 0.040 inner_diameter_m: 0.030 bottom_offset_m: 0.010 top: tankTop flow_L_min: 50.0

YAMLに落とす情報

形状情報

  • タンク寸法
  • ポンプ中心座標
  • ポンプ外径・内径
  • 底面からの浮き量
  • 上面をタンク上面まで届かせる指定

解析情報

  • 流入か流出か
  • OpenFOAMパッチ名
  • 流量 L/min
  • 水の動粘度
  • ソルバ・乱流モデル
03 / 生成プログラム

AIに作ってもらうのは「変換器」

YAMLを読んで、gmshとOpenFOAMのファイルを生成するプログラムをAIに作らせる。これにより、条件変更時に同じ流れを再利用できる。

gmsh generator

geometry/LLM001_pumpA.py

YAMLからタンクとポンプを作り、CAD差分して LLM001_pumpAB.msh を出す。

OpenFOAM generator

tools/generate_openfoam_from_yaml.py

YAMLから 0/U, 0/p, controlDict などを作る。

↓ gmsh側

メッシュ作成プログラムの考え方

CAD差分

  • タンクをBoxソリッドとして作る。
  • ポンプを外径円柱ソリッドとして作る。
  • 流体領域 = タンク − ポンプA − ポンプB。

境界面分類

  • ポンプA: pumpA_outlet
  • ポンプB: pumpB_inlet
  • 側面: pumpWall
  • タンク壁: topWall など

OpenFOAM設定生成の考え方

role: inlet

pumpB_inlet { type flowRateInletVelocity; volumetricFlowRate constant 0.0008333333333; // 50 L/min value uniform (0 0 0); }

role: outlet

pumpA_outlet { type pressureInletOutletVelocity; value uniform (0 0 0); } // p側は fixedValue 0
04 / ファイル関係

ファイルのつながり

LLM001/ ├── config/ │ └── LLM001.yaml # AIが作る・人が確認する仕様 ├── geometry/ │ ├── LLM001_pumpA.py # AIが作ったgmsh生成プログラム │ └── run_gmsh.sh # gmsh実行入口 ├── tools/ │ ├── config_io.py # YAML読込 │ └── generate_openfoam_from_yaml.py │ # AIが作ったOpenFOAM設定生成器 ├── mesh/ │ └── LLM001_pumpAB.msh # gmsh出力 ├── case/ │ ├── 0/ # U, p, k, omega, nut │ ├── constant/ # 物性・polyMesh │ ├── system/ # controlDict等 │ ├── Allmesh # 変換とcheckMesh │ └── Allrun # simpleFoam実行 ├── docs/ └── logs/
↓ 実行フロー

実行時の流れ

LLM001.yaml仕様
LLM001_pumpA.pygmsh mesh
gmshToFoampolyMesh
generate_openfoam...0/ constant/ system/
simpleFoam解析結果
05 / 手順

メッシュ作成

コマンド

source /usr/lib/openfoam/openfoam2512/etc/bashrc cd LLM001 ./Allmesh

実行される処理

  1. YAMLからgmshメッシュ作成
  2. YAMLからOpenFOAM辞書生成
  3. gmshToFoam
  4. changeDictionary
  5. checkMesh
  6. post.foam作成
↓ 解析実行

解析実行

一括実行

source /usr/lib/openfoam/openfoam2512/etc/bashrc cd LLM001 ./Allrun

解析設定

  • ソルバ: simpleFoam
  • 流体: 水
  • 乱流モデル: kOmegaSST
  • 入口: 流量入口
  • 出口: 圧力出口

結果確認

計算結果デモ

ParaViewで開く

LLM001/case/post.foam

メッシュ、速度ベクトル、流量収支を確認する。結果を見て、必要ならポンチ絵やYAMLへ戻る。

06 / 今後

この仕組みで目指すこと

1

AIがYAML候補を作る

ポンチ絵や文章から、タンク寸法・ポンプ条件をYAMLに落とす。

2

プログラムで確実に生成

YAMLからgmshとOpenFOAM辞書を再現性よく生成する。

3

結果から改善へ戻す

流量収支や可視化結果を見て、YAMLや形状条件を更新する。

↓ 展望

今後の展望

近い目標
  • YAMLスキーマ検証を追加する。
  • 複数ポンプ・複数出口に対応する。
  • checkMeshと流量収支を自動要約する。
  • ParaView画像を自動出力する。
長期目標
  • ポンチ絵からYAMLを自動生成する。
  • 解析結果をAIが読み取り、改善案を出す。
  • 設計パラメータスタディを自動化する。
  • 結果をレポートやスライドへ自動反映する。

まとめ

  • 人はポンチ絵と目的を与える。
  • AIはポンチ絵をYAML仕様へ変換し、生成プログラムも作る。
  • プログラムはYAMLからgmshメッシュとOpenFOAM設定を作る。
  • OpenFOAMで計算し、ParaViewで結果を確認する。
  • 結果を見て、YAMLやポンチ絵へ戻るサイクルを作る。

重要なのは「AIが毎回手作業する」のではなく、「AIが再利用可能な生成ワークフローを作る」こと。