光学薄膜設計ソフトの設計 その1 方針 [考え中 - 光学薄膜設計]
前回は前置きだけで終わってしまった。具体的に進めることにする。
これまで、僕は光学薄膜を設計することはあまりなかった。せいぜいマジェンタの反射防止にMgF2が使えないのでどうしよう、とか言うことぐらいで何十層もある反射膜なんか知らないしこれからも設計することはない。
だからこれまではMathematicaで必要なものを記述して、最適化が必要なときは適当にメリット関数を書いて(波長何ポイントかの反射率の単純な和とかの本当に適当なやつ)MamthematicaのFindRoot[]やFindMinimum[]関数を使っていた。こんなもんでも5〜6層くらいまでなら十分使い物になる。もちろんちゃんと結果のわかっている何かと答え合わせしておかなければいけないけど。
Mathematicaでは教科書そのままの解析的な表現を書けば良いので簡単で記述量も少なくデバグもほとんど必要ないくらいで、その上FindMinimum[]なんかも使えてしかもそのままグラフに表示できる、ということで非常に楽でありがたい。よその会社の人でExcelに書いている人がいた。最適化なんかかえって大変だと思うけど、まあそういうのもありでしょ。
しかしMathematicaの場合、層数で5〜6層くらいまで、constraintする波長もやはり5〜6点くらいまでが限界で、それ以上になるとMathematicaでは時間がかかりすぎてしまう。ときどき帰ってこないMathematicaのプロンプトを待ってて「この待ち時間の間にちょっとでも数値計算が速くなるような式に変形しておいた方がよかったかなあ。でもデバグ面倒だしなあ」なんてぼーっと考えてしまった。
ということで、本来なら20年前に手がけておくべきだった光学薄膜設計ソフトの実装を始めることにする。この歳なので目的の最上位は当然
全体は大まかに分けて
- 薄膜光学計算エンジン
- 最適化
- 入力用のUser Interface
- 出力用のグラフィック表現
- 材料データベース
である。
計算エンジンは今回のキモになる部分で、どれだけシンプルに記述できるか、がポイントになる。それと今回せっかくなので、あるお勉強もかねてここはObjective-Cを使うことにする。最適化はとりあえずgslのMultidimensional MinimizationやNonlinear Least-Squares Fittingをまるまるそのまま使うことを前提にする。そのままではひょっとするとconstraintsなんかの処理に問題が出るかもしれないけど、さすがに最適化ルーチンを自前で書くのは大変。うまく行けばSimulated Annealingなんかも使ってみたい。
入力用のUIは面倒なので、NSTableViewで設定できるようにしておく程度にする。出力用は今別途進めているプロットライブラリが完成すれば(いつのことだよ)組み込むことにする。
材料データベースは商用のソフトでは充実してるが、これをちゃんと作るのはすごく大変なので、教科書に載ってる程度のものだけにして枠組みだけ作っておく。MySQLとかを使うのが簡単なんだろうけどなんか大袈裟だし、材料のデータをどう一般表現するか、という結構重い問題もある。これはどうするか、あとから考えることにする。
コメント 0