ログイン    検索  



新しいトピックを投稿する トピックへ返信する  [ 5 件の記事 ] 
作成者 メッセージ
 記事の件名: 最適化オペランドを自分で作成する方法
 投稿記事 Posted: 2009年7月01日(水) 12:55 
管理人

登録日時: 2008年12月02日(火) 10:33
記事: 119
<はじめに>

ZEMAXには300以上の最適化オペランドが内蔵されていますが、それでも既存のオペランドでは計算できない値を返したり最適化したりしたい、というケースがあります。
そのため、ZEMAXでは柔軟なユーザー定義のプログラムを用意しており、メリットファンクションエディタ(MFE)にてオペランドを使って計算したデータを定義することができます。

このデータはZEMAXとは関係なく計算されたものでも構いませんし、例えば様々なファンクションを通じてZEMAXですでに計算、出力したにもかかわらず最適化オペランドでは不可能なものでも構いません。

どちらの場合でも、計算するデータの定義には以下のふたつの方法があります。

1.ZPLマクロを利用する方法
2.外部から定義、コンパイルされたプログラムを利用する方法

ZPLマクロは、プログラミングが容易ですぐに実行でき、ZEMAXへの組み込みもよいため、プログラミングの経験があまりなくても問題ありません。
その上、ZPLM最適化オペランドはメリットファンクションでZPLマクロを呼び出すのにも利用できます。

このトピックでは、マクロを活用して値を計算しメリットファンクションへ返す方法を説明します。
これによりZPLMオペランドを通じて最適化のターゲットにすることも可能です。
ZPLMオペランドの利用法の詳細はZEMAXユーザーズガイド第14章の「User defined operands/ユーザー定義のオペランド」に記載されています。

このトピックの最後に添付されているのは、クック・トリプレットのサンプルファイルで、ZPLMオペランドの柔軟性の実演に使います。
(ZEMAXのファイルから、Samples>Sequential>Objectivesのフォルダでも確認できます。)
まずはこのファイルをダウンロードし、ZEMAXにて開いてください。


トップへ 
   
 
 記事の件名: 最適化オペランドを自分で作成する方法
 投稿記事 Posted: 2009年7月01日(水) 13:02 
管理人

登録日時: 2008年12月02日(火) 10:33
記事: 119
<ZPLMオペランドを使ってマクロで計算した値を返す方法>

もしマクロの作成、編集、保存、そして実行にあまり慣れていない場合は、この演習の前に以下のフォーラム記事を読んでください。
「ZPLでキーボードとマウスの動きをオートメーション化する方法」
http://www.prolinx.co.jp/zemaxforum/viewtopic.php?f=23&t=537&sid=069770c0bcf2240c9435943aad0a9534

ここでは特定の実効Fナンバーを計算し、最適化することとします。
もちろん、ZEMAXにはこれを実行するためのあらかじめプログラミングされたオペランド(WFNO)がありますが、実証のためにここではこのオペランドは使えないこととします。
その代わりに、マクロでこの値を計算し、その計算した値をメリットファンクションに返します。
そして目的のターゲットを最適化します。
ZEMAXで定義されているように、実効Fナンバーはnが像空間の屈折率で、θが像空間の実マージナル光線角の時、以下のように求められます。

添付ファイル:
Working%20Fnumber.gif
Working%20Fnumber.gif [ 595 バイト | 表示回数: 1335 回 ]


この関係性を踏まえ、マクロ内で実マージナル光線を追跡し、実効Fナンバーを計算します。

添付ファイル:
new%20macro%20code.gif
new%20macro%20code.gif [ 4.42 KiB | 表示回数: 1336 回 ]


OPRETURNキーワードの使用に留意してください。
このキーワードはグローバルアレイの0ポジションで得られる“X”の値を保存します。
これはグローバルアレイの位置番号で、メリットファンクションエディタでZPLMオペランドの“Dat#”欄に入力されます。

添付ファイル:
Dat%20Number%20in%20MFE.gif
Dat%20Number%20in%20MFE.gif [ 7.74 KiB | 表示回数: 1336 回 ]


上図の“Mac#”はマクロ番号に一致します。
ZPLMオペランドで呼び出す目的で作成された各マクロには特定のファイル名“ZPLxx.ZPL”をつける必要があります。
マクロ番号は0から99までの任意の番号です。
よって、ZPL17.ZPLは有効なファイル名であり、メリットファンクションエディタの適切なセルに17の“Mac#”を特定することで実行されます。

この例では、マクロをZPL10.ZPLと名付け、適切なディレクトリに保存します。
メリットファンクションエディタでは、ZPLMオペランドを入力し、”Mac#”と”Dat#”をそれぞれ10と1、と入力します。

添付ファイル:
mac%20and%20dat%20numbers%20together.gif
mac%20and%20dat%20numbers%20together.gif [ 7.67 KiB | 表示回数: 1335 回 ]


マクロを実行して抽出した値を返し、メリットファンクションエディタをアップデートします。

添付ファイル:
Value%20reteurned%20to%20ZPLM%20operand.gif
Value%20reteurned%20to%20ZPLM%20operand.gif [ 7.86 KiB | 表示回数: 1333 回 ]


先ほど計算して返した実効Fナンバーは4.9782です。
ここでこの値が正しいかどうかを確かめてみましょう。
WFNOオペランド(内蔵されている実効Fナンバーの計算)を入力し、メリットファンクションエディタをアップデートしてください。
理想的な値が求められました。

添付ファイル:
ZPLm%20and%20WFNO.gif
ZPLm%20and%20WFNO.gif [ 9.02 KiB | 表示回数: 1330 回 ]


このテクニックは一度の呼び出しで複数の値をマクロに戻すのに使われ、このマクロは最適化やより詳細な解析のためにメリットファンクションエディタへ値を単に報告する目的で使われます。
(先ほども触れたZEMAXユーザーズガイド第14章の「User defined operands/ユーザー定義のオペランド」にこの詳細が記載されています。)
ZPLMは驚くべきスピードと柔軟性で数ある最適化の内蔵オペランドではまだ対応できない値を返し、最適化を行います。


トップへ 
   
 
 記事の件名: 最適化オペランドを自分で作成する方法
 投稿記事 Posted: 2009年7月01日(水) 13:13 
管理人

登録日時: 2008年12月02日(火) 10:33
記事: 119
<ユーザー定義オペランドによってメリットファンクションの実行スピードは落ちるか>

メリットファンクションエディタでユーザー定義オペランドを使う際、計算時間にどれほどの影響が出るのかと考える方もいるかと思います。
これは本当にマクロで行う計算の複雑度によりますが、一般的に最適化中のマクロの実行は極めて高速です。
これを実証するために、クック・トリプレットの最適化を2度行います。
1度目はZPLMマクロと先ほど構築したマクロを使い、2度目はあらかじめプログラミングされたWFNOオペランドを使います。

最初のケースでは、ZPLMオペランドのターゲットを5にし、Weightを1にします。
WFNOオペランドを所定の位置に残しても構いませんが、Weightはゼロにしてください。
ディフォルトメリットファンクションの設定を以下のように構成してください。

添付ファイル:
Default%20Merit%20Function.gif
Default%20Merit%20Function.gif [ 10.11 KiB | 表示回数: 1325 回 ]


DLS最適化を実行してください。おおよその所要時間は4秒です。

添付ファイル:
Optimization%20time%20with%20ZPLM.gif
Optimization%20time%20with%20ZPLM.gif [ 7.84 KiB | 表示回数: 1329 回 ]


F3キーを押して最適化による変更を元に戻してください。
ZPLMオペランドのWeightをゼロに変え、WFNOオペランドのターゲットを5、Weightを1に設定してください。
そして、再度最適化を実行します。

添付ファイル:
optimization%20time%20with%20WFNO%20operand.gif
optimization%20time%20with%20WFNO%20operand.gif [ 7.87 KiB | 表示回数: 1324 回 ]


内蔵のオペランドでの所要時間はおおよそ3.6秒です。
これらふたつのオペランドでの所要時間の差は約0.5秒です。
このように、ユーザー定義のマクロを呼び出すケースや外部でコンパイルされたプログラムを呼び出すケースであっても、ZEMAXはかなり効率的に最適化を行います。


トップへ 
   
 
 記事の件名: 最適化オペランドを自分で作成する方法
 投稿記事 Posted: 2009年7月01日(水) 13:14 
管理人

登録日時: 2008年12月02日(火) 10:33
記事: 119
<まとめと参考資料>

内臓の最適化オペランドが必要なデータの返しや最適化に対応しない場合があります。
ZPLMオペランドとユーザー定義オペランドの柔軟性で、ユーザー定義のマクロやプログラムからのデータの計算や抽出、そしてメリットファンクションエディタへの返しが可能です。
ふたつの解決策のうちより簡単なマクロはZEMAX内部に良く融合されているため、プログラミング経験はほとんど必要ありません。

参考資料
ZEMAXユーザーズガイド/ZEMAX Development Corporation


添付ファイル:
Cooke_40_degree_field.zip [1.77 KiB]
ダウンロード回数: 58 回
トップへ 
   
 
 記事の件名: Re: 最適化オペランドを自分で作成する方法
 投稿記事 Posted: 2009年7月03日(金) 10:33 
管理人

登録日時: 2008年8月01日(金) 16:40
記事: 586
上記例は軸上物点からのマージナル光線を使って実効Fナンバーを計算しています。
しかし、軸外物点や回転対称でない光学系に対する実効Fナンバーは、ZEMAXでは下記のように定義されていますのでご注意ください。
添付ファイル:
Outlook.jpg
Outlook.jpg [ 36.48 KiB | 表示回数: 1274 回 ]


トップへ 
   
 
期間内表示:  ソート  
 
新しいトピックを投稿する トピックへ返信する  [ 5 件の記事 ] 


 
トピック投稿: 不可
返信投稿: 不可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
cron