光源から遠い位置にディテクタがある場合、ディテクタに到達する光線が少なくなります。光線本数を増やすと、ディテクタに到達する光線は増えますが、解析時間が長くなります。効率よく解析をするには、どのようにすれば良いでしょうか?
方法としては以下の2つが考えられます。
・環オブジェクトなどで、ディテクタに到達していない不要な光線を遮蔽する
・光源にLambertian_Overfill.dllを使用して、光源から出射する光線を限定する
以下の光源とレンズとディテクタを設置した光学系で検証してみます。
ディテクタは光源の1m先にあり、サイズは2×2mmです。
解析光線数1000万本で光線追跡を実行します。
後で光線を確認するために、光線追跡の際に「光線を保存」にチェックを入れて、光線を保存しておきます。
結果は以下となります。
ディテクタに到達している光線は368本しかありません。
次にディテクタに到達している光線を確認します。
レイアウトの「光線データベース」に先程、保存した光線を選択し、「フィルタ」にH3と入力します。
「フィルタ」にH3と入力することで、レイアウトにオブジェクト3(ディテクタ)に到達する光線のみを表示させることができます。
フィルタ文字列については、以下のヘルプファイルをご参照ください。
光源とレンズ部分のレイアウトは以下のようになります。
光源から出ている光線を確認すると、一部の光線のみしかディテクタに到達していないことが分かります。
以下のように環オブジェクトを光源の前に設置します。
中央のディテクタに到達している光線が出射している部分だけ、穴の開いた形状となっています。
材質はAbsorbとしているので、穴の開いた箇所から出射する光線以外は、環オブジェクトで吸収されることになります。
解析光線数を1億本に増やして、環オブジェクトの有無で解析時間を比較してみます。
環オブジェクト無しの場合の結果は以下です。
実行時間は約39秒です。
以下は環オブジェクト有りの場合の結果です。
実行時間は約22秒です。
環オブジェクトでディテクタに到達していない光線を遮蔽することで、実行時間が短くなっていることが確認できます。
しかし、この方法は光線の分割、散乱を使用していない場合、効果はありません。
次に、光源にLambertian_Overfill.dllを使用する方法です。
光源として、光源(DLL)を使用し、データファイルでLambertian_Overfill.dllを選択します。
Lambertian_Overfill.dllの詳細は、以下のヘルプファイルをご参照ください。
先程のディテクタに到達している光線を参考にしながら、光源(DLL)のパラメータを設定します。
そうすると、以下のように出射する光源を設定することができます。
解析光線数1000万本で光線追跡を実行した結果が、以下となります。
当初の光線追跡結果では、ディテクタに到達した光線数は368本でしたが、50万本程になっています。
Lambertian_Overfill.dllを使用することで、解析光線数を増やさなくても効率よくシミュレーションが実行できます。
参考のため、今回使用したサンプルファイルを添付します(ファイルサイズが大きくなるため、ZRDファイルは含まれていません)。
Reply
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.