はじめに
波動光学のシミュレーションをGUI操作で実施する場合、
・GUIを通しての構造設定が面倒
・パラメータスイープ設定などをGUI上で行うのがわかりにくい
・データをその都度エクスポートして解析する
作業が煩雑だったりします。
ANSYS LumericalではPython APIが提供されており、それをうまく使うことでそういった手間を大きく削減することができます。
ただPythonの非ユーザーにとっては、スクリプトを書く心理的ハードルが高いようです。
そこで本記事では、生成AIを活用することで、スクリプトを書く作業負担を大幅に減らして、Lumericalを用いた設計・解析を効率化する方法を紹介します。
従来フローとAI活用の違い
従来は、
手動でPythonスクリプトを書く
実行してエラー修正
再実行
というサイクルを回していました。
生成AIを使うと、
自然言語で指示
コードを即生成
軽微な修正のみで実行
という形に変わります。
👉 単なる効率化ではなく、“開発スタイルの変化”が本質です
筆者の印象では2000~3000行程度のコーディングも、上手くいけば3~4時間程度でできてしまう印象です。
Lumerical × 生成AIの構成
基本構成は以下の通りです。
生成AI:コード生成
Python(lumapi):Lumerical制御
FDTD/MODE:シミュレーション実行
生成AIはあくまで「コード生成レイヤ」を担います。
✅ 実践①:コード生成(構造+光源まで)
🔹プロンプト(そのまま掲載)
LumericalのPython API (lumapi)を使って、
シリコン導波路(幅500nm、高さ220nm)のFDTDモデルを作成するコードを書いてください。
光源はTEモード、波長1.55umとしてください。
モニターで透過率を取得できるようにしてください。
🔹生成コード例
import lumapi
# FDTDセッション開始
fdtd = lumapi.FDTD()
# シミュレーション領域
fdtd.addfdtd()
fdtd.set("x span", 10e-6)
fdtd.set("y span", 5e-6)
fdtd.set("z span", 3e-6)
# シリコン導波路
fdtd.addrect()
fdtd.set("name", "waveguide")
fdtd.set("material", "Si (Silicon)")
fdtd.set("x span", 8e-6)
fdtd.set("y span", 500e-9)
fdtd.set("z span", 220e-9)
# 光源(モードソース)
fdtd.addmode()
fdtd.set("name", "input_source")
fdtd.set("injection axis", "x")
fdtd.set("direction", "Forward")
fdtd.set("wavelength start", 1.55e-6)
fdtd.set("wavelength stop", 1.55e-6)
fdtd.set("y span", 1e-6)
fdtd.set("z span", 1e-6)
# モニター(透過)
fdtd.addpower()
fdtd.set("name", "monitor_T")
fdtd.set("monitor type", "2D Z-normal")
fdtd.set("x", 4e-6)
fdtd.set("y span", 2e-6)
fdtd.set("z span", 2e-6)
# 保存
fdtd.save("waveguide_model.fsp")
🔹解説(記事用)
GUI操作を完全にPython化しており、
構造・光源・モニターまで一括生成したプログラムになります。
👉 こういったようにコーディング能力は生成AIの強みなので、
初期モデル構築の時間を大幅削減できます
✅ 実践②:パラメータスイープ
🔹プロンプト
LumericalのPython APIで、
導波路幅を400nm〜600nmまで50nm刻みで変更し、
透過率を計算してCSVに保存するコードを書いてください。
🔹生成コード例
import lumapi
import numpy as np
import csv
# セッション開始
fdtd = lumapi.FDTD()
# ベースモデル読み込み
fdtd.load("waveguide_model.fsp")
widths = np.arange(400e-9, 650e-9, 50e-9)
results = []
for w in widths:
fdtd.select("waveguide")
fdtd.set("y span", w)
fdtd.run()
T = fdtd.getresult("monitor_T", "T")
trans = np.mean(T["T"])
results.append([w, trans])
# CSV保存
with open("sweep_result.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(["Width (m)", "Transmission"])
writer.writerows(results)
🔹解説(記事用)
ここでは
Pythonループで自動スイープするプログラムを作った後に
シミュレーション結果を直接CSV化して保存するプログラムです。
単に、プロンプトで生成AIに投げるだけなのでGUIのSweep機能より柔軟に使えます。
グラフ出力したい場合でも、プロンプト上で指定すれば良いでしょう。
但しmatplotlibやnumpyなどのpythonライブラリーは、あらかじめインストールしておく必要はありますが。。。
まとめ
最後に生成AIとpythonとの組み合わせでシミュレーションを行えるANSYSソフトの一覧をあげておきます。
これらは全てpython上で動かせるので、生成AIに投げるプロンプト設計を上手くやれば統合環境の構築も容易になるでしょう。
※本記事は筆者個人の見解であり、所属組織の公式見解を示すものではありません。
問い合わせフォームのご連絡
問い合わせ
光学シミュレーションソフトの導入や技術相談、
設計解析委託をお考えの方はサイバネットシステムにお問合せください。
光学ソリューションサイトについては以下の公式サイトを参照:
👉 [光学ソリューションサイト(サイバネット)]
光学分野のエンジニアリングサービスについては以下の公式サイトを参照:
👉 [光学エンジニアリングサービス(サイバネット)]
