8日目の記事として書かれたものです。概要この記事は具体的には以下の要素から成り立っている。叩く(シミュレーションを実行させる)方法の紹介Lumericalが提供しているサンプルコードの雑さの紹介その雑さで苦しんだことによる僕のキレはじめにまず最初に言っておくとこの記事を読んでうれしい人はこの世界にほとんどいないと思う。いうのはFDTD法によって電磁界解析を行うことができるシミュレーションソフトなのだけれどかなり良いお値段がする。このソフトを使っている人は「恵まれているんだなあ」と、予算を取ってくれる指導教員の先生に感謝しよう。このソフトはGUIがかなり充実しており、スクリプトを使わずとも様々なシミュレーションを簡単に*1行うことができる。パラメータを変化させて最適化するといったこともデフォルトの機能として備わっている。細かい条件を変化させて何度もシミュレーションを行いたいという場合にはスクリプトからの実行が便利である。Lumericalも専用のスクリプトエディターで編集したスクリプトを実行することでシミュレーションを行うことができる。人によっては異なった条件で何度もシミュレーションを実行したかったり、より複雑な最適化を実行したかったりするかもしれない。扱うためのコマンドなどが用意されている。この記事はMATLABからLumericalを動かしたいという人に向けた記事である(日本語を読めるそんな人がどれだけいるんだろうか)。Lumericalを知らない人にも読んでもらえるように、必要な情報は逐一補足する。do?サンプルファイルをダウンロードなにはともあれまずはサンプルコードをダウンロードしよう。ページからダウンロードできる。変数を送りあったりするのも今回は無しで。必要最低限の箇所をサンプルから抽出すると以下のようになる。sessionappclose(h);ここでsim_file_name=('grating_coupler_2D_Matlab_Optimization.fsp');となっている。させればシミュレーションが実行される。不要である)(元のファイル名が長過ぎるので変更した)。ディレクトリ名も一応それらしく変更しておこう。sessionappclose(h);となる。MATLABの検索パスにLumericalの持っているMATLAB向けのAPIがある場所を追加している。名前を、それぞれ文字列で定義している。Lumericalを立ち上げる。Lumericalに読み込ませる命令文の全てを文字列として、繋げて代入する。Lumericalに送って実行させる。いうわけでMATLABからこのサンプルコードを実行すれば、Lumericalが立ち上がり自動的にシミュレーションが開始されるはず。開始されません(キレ)。配布されてるサンプルコードをそのままコピーしても正しく実行されないことは稀によくあると一般に知られている。ここではLumericalは立ち上がるものの、そのLumericalがエラーを吐いて止まっていると思う。argumentとなっている。関数は文字列を引数とするということである。すると、Syntaxの欄にcd("directly");とある。Lumericalでは文字列はシングルクォーテーションではなくダブルクォーテーションでくくる必要があるのだ。中身を読むのはあくまでLumericalであるということだ。中身はLumericalの文法で書かれる必要がある。以上を踏まえた上で先のサンプルコードが何をしているかを見直してみる。'sim_file_name;');よってLumerical側で最初に実行されるのはおそらく次の命令文になるだろう。'sim_file_name;');と修正すれば良さそうである。世界はそう甘くはない。先と同様にLumericalが立ち上がった後にエラーメッセージが出て止まっていると思う。cdとなっていると思う。いうところまでは確認できたが肝心のディレクトリがおかしいということになる。ここで試しにMATLABで次のようにしてみる。'word_ha_kami'当然といえば当然である。'cd("sim_file_path");sim_file_name;'という文字列がLumericalに送られてしまう。使わずに直接パスを入力することでこれは解決できるが、パスが変わるたびにいちいちこの部分を変更するのは無理なのでやはり変数を使いたい。そのためには変数部分だけシングルクォーテーションから出してやればよいので、次のようにする必要がある。sim_file_name,';');キモい。'cd("C:\Users\Mitchy-w\Desktop\Mitchy-W\Lumerical");hemi;'となる。何はともあれこれで全て解決しただろうということで実行してみる。動いた!!(動かなかったらごめん)結局、全ての修正を終えたコードがこれ。Files/Lumerical/FDTD/scriptsと表示される。そもそもこんなディレクトリが存在しないことはさておき、ここで表示されるパスはスラッシュで区切られている。Lumericalはバックスラッシュで区切られていてもスラッシュで区切られていてもパスとして認識してくれるらしい。わからない気の使い方だ。読み込んで処理するというのが基本。行列演算が貧弱なので全くオススメしない。data_name);matlabload("file_name.mat");基本的にこの二つのコマンドで完結する。