Lumericalのソフトウェアは、Python APIを通じて、データ分析、複雑なワークフローの自動化、最適化、逆設計などのタスクを実行するための強力なツールを提供しています。このAPIは、Lumericalソルバーをクライアントとして扱うスクリプトやプログラムの開発、高性能コンピューティング環境でのパフォーマンスとライセンス利用の最適化に使用できます。
PythonとLumerical APIを組み合わせることで、光学シミュレーションのカスタムワークフローやアプリケーションを開発することが可能になります。例えば、Python APIを使用してLumericalのツールを操作すると、環境間で接続が確立されますが、ワークスペースは共有されません。代わりに、変数が行き来するたびに、getv()とputv()で定義された型変換に従って正確なコピーが作成されます。
以下に、PythonとLumerical APIを使用した光学シミュレーションの一例を示します。
with lumapi.FDTD() as fdtd:
fdtd.addfdtd(dimension="2D", x=0.0e-9, y=0.0e-9, x_span=3.0e-6, y_span=1.0e-6)
fdtd.addgaussian(name='source', x=0., y=-0.4e-6, injection_axis="y", waist_radius_w0=0.2e-6, wavelength_start=0.5e-6, wavelength_stop=0.6e-6)
fdtd.addring(x=0.0e-9, y=0.0e-9, z=0.0e-9, inner_radius=0.1e-6, outer_radius=0.2e-6, index=2.0)
fdtd.addmesh(dx=10.0e-9, dy=10.0e-9, x=0., y=0., x_span=0.4e-6, y_span=0.4e-6)
fdtd.addtime(name="time", x=0.0e-9, y=0.0e-9)
fdtd.addprofile(name="profile", x=0., x_span=3.0e-6, y=0.)
props = OrderedDict([("name", "power"), ("override global monitor settings", True), ("x", 0.),("y", 0.4e-6),("monitor type", "linear x"), ("frequency points", 10.0)])
fdtd.addpower(properties=props)
fdtd.save("fdtd_file.fsp")
fdtd.run()
Ex = fdtd.getdata("profile","Ex")
f = fdtd.getdata("profile","f")
x = fdtd.getdata("profile","x")
このコードは、2次元のFDTDシミュレーションを設定し、ガウス型の光源を追加し、リング構造を追加し、メッシュを追加し、時間モニターとプロファイルモニターを追加し、パワーモニターを追加し、シミュレーションを保存し、実行します。その後、プロファイルモニターから電場成分Ex、周波数f、位置xのデータを取得します。
PythonとLumerical APIの組み合わせは、光学シミュレーションの自動化と最適化に非常に有用であり、これにより研究者はより効率的にシミュレーションを行うことができます。この記事がPythonとLumerical APIの活用に役立つことを願っています。