高出力レーザーは、レーザー溶断、溶接、ドリルなど、さまざまな用途に広く使われています。光学系によるレーザー光吸収の効果は無視できません。このような光学系の性能は、高出力レーザーからの熱によって劣化します。その原因は、レンズ材料によるバルク吸収か、コーティングによる表面吸収のいずれかです。安定した焦点距離とレーザー ビームのサイズと品質を保証するには、こうした熱の効果をモデル化する必要があります。5 つの記事からなる本シリーズでは、レーザーによる加熱の効果をシミュレートします。レンズ材料の温度上昇による屈折率の変化や、機械的応力や熱弾性効果によって生じる構造的な変位の効果を検討します。
Authored by: Julia Zhang, Hui Chen, Steven La Cava & Chris Normanshire
Downloads
STAR モジュールによるSTOP効果の解析
FEA パッケージによる構造解析と熱解析が終了したら、データを一連の単純なテキスト ファイルとしてエクスポートし、STAR モジュールによって OpticStudio に簡単にインポートできます。その後は、OpticStudio の多岐にわたる解析のすべてを利用でき、光学系の光学性能に与える影響を定量化し、把握できます。必要な STAR データ フォーマットの詳細は、OpticStudio ヘルプ ファイルの [STAR] (STAR) タブ] → [FEA データ] (FEA Data) グループ → [FEA データの読み込み] (Load FEA Data) を参照してください。Ansys Mechanical には、適切なフォーマットで自動的にデータを出力する ACT 拡張機能があります。『OpticStudio STAR モジュール : Ansys 向けデータエクスポート用拡張機能プログラム』を参照してください。
OpticStudio での FEA データの読み込みとフィッティング
注 : 以下の手順の実行には、OpticStudio に加えて STAR モジュールのライセンスが必要です。
- はじめに、ダウンロードした記事の添付ファイル Lens-3P_D25.4_2022.zar を開きます。これは、本シリーズの第 1 部で使用した元のシーケンシャル光学系です。これから、FEA ツールで得られた構造および熱解析データを STAR モジュールによって適用し、公称光学性能への影響を評価します。
- FEA データを読み込むには、[STAR] (STAR) → [FEA データ] (FEA Data) → [FEA データの読み込み] (Load FEA Data) をクリックします。データの保存場所に移動し、関連するファイルをすべて選択したら [開く] (Open) をクリックします。FEA のサンプル データは、記事のダウンロードにあります。解析のさまざまなタイムステップにおけるデータが複数のフォルダに保存されています。はじめに、フォルダ FEA_Data_800W_0010s のデータを使用します。
- ドロップダウン メニューにより、構造および熱解析のデータセットを適切な面に割り当てます。[FEA 座標系] (FEA Coordinate System) が 各面に対して [グローバル] (Global) に設定されていることを確認します。次に、データセットがレイアウトに対して適切に位置合わせされていることを確認し、[OK] をクリックしてデータをフィッティングします。
- フィッティングの誤差は、各データセットに対してフィット アセスメント ツールを使用することで確認できます。デフォルトでは、各データセット内の剛体運動 (RBM) が削除されてから、面の変位がフィッティングされます。この処理により、通常はフィッティングの精度が向上しますが、処理の有無はユーザーが自由に設定できます。
- FEA データセットは、面ごとに有効化または無効化できます。それには、[構造解析データ サマリー] (Structural Data Summary) と [熱解析データ サマリー] (Thermal Data Summary) テーブルを使用します。
- STAR データを有効にした状態で、波面収差マップ、スポット ダイアグラム、サグ マップなどの解析ウィンドウを使用することで、FEA データが光学系の性能に与える影響を確認できます。
ZOS-API による FEA データの STAR へのインポートと光学性能の解析
前セクションでは、手動で FEA データを STAR にインポートする操作が極めて簡単であることを示しました。これに代わる方法として、STAR API の機能を使って、このプロセスを自動化することも可能です。この機能は、解析が必要な FEA データセットが複数存在する場合などに特に有効です。このセクションでは、FEA シミュレーションの複数のタイムステップにおける FEA データを、Matlab のスクリプトを使用して読み込む方法を紹介します。このスクリプト TransientAnalysis.m は、記事の添付ファイルのセクションから入手できます。
コードに含まれる関数
コード内には 6 つの関数が作成されています。それぞれについて、簡単に説明します。
ListFiles() : 文字列型の入力引数としてデータ フォルダを指定します。データ フォルダ内のファイル名を読み取り、面番号と変位ファイルであるか温度ファイルであるかを命名規則に基づいて識別します。出力項目は、構造データとフォルダ内のファイルに付けられた連番のファイル番号 (整数型) です。
RemoveAllFEA() : 現在の光学系から、インポート済み FEA データをすべて削除する関数です。各面に対して温度または変位データセットがインポートされているかどうかを確認し、すでにインポートされているデータがあれば、アンロードします。
Surface = TheLDE.GetSurfaceAt(i);
StarData=Surface.STARData;
if StarData.Temperatures.FEAData.AreTemperaturesImported
StarData.Temperatures.FEAData.UnloadData()
fprintf("Remove Temperature Data @ surface %d\n",i)
end
if StarData.Deformations.FEAData.AreDeformationsImported
StarData.Deformations.FEAData.UnloadData()
fprintf("Remove Deformation Data @ surface %d\n",i)
end
FEALoad() : データ フォルダから変位データセットと温度データセットをインポートし、読み込むために使用します。はじめにインポート済みのデータをアンロードしてから、新しい FEA データをインポートおよび適用する必要があります。アンロードせずに新しいデータをインポートすると、期待どおりに結果が更新されません。FEA データセットの座標は、面ごとにグローバルまたはローカルに変換できます。構造解析データのフィッティング前に剛体運動 (RBM) を削除したり、熱解析データの GRIN ステップを設定したりするなど、必要に応じてフィッティングを処理前に設定できます。メソッド ImportDeformations()/ImportTemperatures() は、データをインポートするだけでなく、データのフィッティングも実行するため、フィッティングの設定はこのメソッドよりも前に完了しておく必要があります。
if StarData.Deformations.FEAData.AreDeformationsImported
StarData.Deformations.FEAData.UnloadData() ;
end
StarData.Deformations.SetDataIsLocal;
StarData.Deformations.RBMs.Enable;
StarData.Deformations.FEAData.ImportDeformations(DeformationFilename);
StarData.Deformations.Fits.ApplyDeformations();
if StarData.Temperatures.FEAData.AreTemperaturesImported
StarData.Temperatures.FEAData.UnloadData() ;
end
StarData.Temperatures.SetDataIsGlobal;
StarData.Temperatures.Fits.GRINStep=0.2; StarData.Temperatures.FEAData.ImportTemperatures(TemperatureFilename);
StarData.Temperatures.Fits.ApplyTemperatures();
SpotDiagram() : ZOS-API のサンプル構文 22_seq_spot_diagram に含まれるコード スニペットを使用して、像面におけるスポット ダイアグラムをプロットします。コードには、次のようなステップが含まれます。
バッチ光線追跡ツールを開きます。
raytrace = TheSystem.Tools.OpenBatchRayTrace();
Perform a batch unpolarized ray trace, using normalized pupil coordinates:正規化瞳座標を使用して、非偏光の光線追跡モードを実行します。
normUnPolData = raytrace.CreateNormUnpol((max_rays + 1) * (max_rays + 1),ZOSAPI.Tools.RayTrace.RaysType.Real,nsur);
normUnPolData.ClearData();
for ループを使用して追跡する光線を追加します。
normUnPolData.AddRay(waveNumber, hx, hy_ary(field), px, py, ZOSAPI.Tools.RayTrace.OPDMode.None);
光線追跡を実行し、結果の読み出しを開始します。
raytrace.RunAndWaitForCompletion();
normUnPolData.StartReadingResults();
条件付き while ループにより、光線の追跡結果を読み出します。
[success, rayNumber, errCode, vigCode, x, y, ~, L, M, N, ~, ~, ~, ~, ~] = normUnPolData.ReadNextResult();
WavefrontMap() : 光学系の波面収差マップのデータを取得し、結果をプロットします。コードには、次のようなステップが含まれます。
新しい波面収差マップを作成し、この解析の設定を取得します。
WavefrontMapAnlysis=TheSystem.Analyses.New_WavefrontMap();
WavefrontSettings=WavefrontMapAnlysis.GetSettings();
解析の条件を設定します。
WavefrontSettings.Sampling=ZOSAPI.Analysis.SampleSizes.S_256x256;
WavefrontSettings.Field.SetFieldNumber(1);
WavefrontSettings.ShowAs=ZOSAPI.Analysis.ShowAs.FalseColor;
WavefrontSettings.STAREffects= ZOSAPI.Analysis.Settings.STAREffectsOptions.On;
設定を適用し、解析結果を取得します。
WavefrontMapAnlysis.ApplyAndWaitForCompletion();
WavefrontMap_Results = WavefrontMapAnlysis.GetResults();
2D の結果は DataGrids を使用して取得します。
analysis_data =WavefrontMap_Results.DataGrids(1);
Nx=analysis_data.Nx;
Ny=analysis_data.Ny;
Z=zeros(Nx,Ny);
for x=1:1:Nx
for y=1:1:Ny
Z(x,y)=analysis_data.Values(x,y);
end
end
SagMap() : 現在の光学系のサグ マップ データを取得し、結果をプロットします。コードには、次のようなステップが含まれます。
新しいサグ マップ解析を作成し、この解析の設定を取得します。
SagMapAnlysis=TheSystem.Analyses.New_SurfaceSag();
SagSettings=SagMapAnlysis.GetSettings();
解析の条件を設定します。
SagSettings.Sampling=ZOSAPI.Analysis.SampleSizes_Pow2Plus1_X.S_257x257;
SagSettings.ShowAs=ZOSAPI.Analysis.ShowAs.FalseColor;
SagSettings.Surface.SetSurfaceNumber(2);
設定を適用し、解析結果を取得します。
SagMapAnlysis.ApplyAndWaitForCompletion();
SagMap_Results = SagMapAnlysis.GetResults();
2D の結果は DataGrids を使用して取得します。
analysis_data =SagMap_Results.DataGrids(1);
Nx=analysis_data.Nx;
Ny=analysis_data.Ny;
Z=zeros(Nx,Ny);
for x=1:1:Nx
for y=1:1:Ny
Z(x,y)=analysis_data.Values(x,y);
end
end
作成した関数による光学性能の解析結果の取得
光学系の過渡解析を実行するには、異なるタイムステップにおける、さまざまな面について、FEA ソフトウェアから温度ファイルと変位ファイルを取得します。この例のタイムステップは、10、60、600、1800、3600 秒です
main 関数では、まず光学系から既存の FEA データを削除してから、各タイムステップに対応するフォルダから、温度および変位ファイルを光学系にインポートします。スポット ダイアグラムと波面収差マップの解析を実行して、Matlab で結果をプロットします。
RemoveAllFEA(TheSystem);
[Data,file_num]=ListFiles(Datafolder)
FEALoad(TheSystem,Data);
fig=SagMap(TheSystem,surf_num);
fig=SpotDiagram(TheSystem,[0]);
fig=WavefrontMap(TheSystem,field_num,STARoption);
GIF として保存
各タイムステップ フォルダにある解析結果の図をフレームとした、GIF フォーマットのグラフィック ファイルを保存する関数もあります。
function SaveGif(figure,outputname,i)
Frame=getframe(figure);
nn=frame2im(Frame);
[nn,cm]=rgb2ind(nn,256);
if i==0
imwrite(nn,cm,outputname,'gif','LoopCount',inf,'DelayTime',1.5);
else
imwrite(nn,cm,outputname,'gif','WriteMode','append','DelayTime',1.5);
end
end
for ループと、関数 SaveGif により、過渡解析の結果が得られます。
ZOS-API コードの使用
これは、対話型のコードです。Zemax ライセンス マネージャで STAR のライセンスを有効化する必要があります。
- シーケンシャル レンズ ファイルを開きます。
- [MATLAB] (MATLAB) の [インタラクティブ拡張機能] (Interactive Extension) をクリックして、対話型の接続ボイラプレート コードを生成します。
- [プログラミング] (Programming) → [ZOS-API.NET アプリケーション] (ZOS-API.NET Applications) → [インタラクティブ拡張機能] (Interactive Extension)をクリックします。
- MATLAB で対話型コード TransientAnalysis.m を開き、下図のセクションを適宜変更して、コードをカスタマイズします。
- コードを実行すると、次の GIF ファイルが生成されます。
下図は、公称光学系および 10 秒、60 秒、600 秒、1800 秒、3600 秒のタイムステップにおけるスポット ダイアグラム変化を示した outSpot.gif の例です。
下図は、outWavefront の例です。これは、公称光学系から上記の 5 つのタイムステップにわたる波面収差マップの変化を示す GIF です。
結果と解析
構造解析と熱解析の FEA データセットを両方とも光学系に読み込むと、FEA データが光学性能に与える影響を調べることができます。たとえば、10 秒間レーザーに曝された後の光学系を見てみましょう。下図のスルー フォーカス RMS スポット半径のプロットから、公称光学系は回折限界にあることがわかります。
このプロットに、10 秒間レーザーに曝された後の、熱勾配効果のみを適用したプロットと、構造変位と熱勾配の両方の効果を適用したプロットを重ねることができます。プロットからわかるように、高出力レーザー ビームに 10 秒間曝されることで、光学系の性能は完全に破綻しています。RMS スポット サイズは数ミクロンから、ほぼ 300 ミクロンに増大しています。
さらに、10 秒間レーザーに曝された光学系の像面における軸上主光線の位置を解析すると、著しくシフトしていることに気付きます。REAR オペランドは、軸上主光線の半径位置を返しますが、公称位置から 109 um 移動しました。これは、形成される像の角度偏差を表す、ボアサイト エラー (BSER オペランド) をもたらします。
クイック フォーカスを使用して光学系のフォーカスを再調整すると、像面はほぼ 4 mm シフトして性能が改善します。スポット サイズは小さくなり、波面収差も低減しますが、依然として回折限界には程遠い性能です。しかし、デフォーカスが大きく取り除かれたことで、熱解析および構造解析の波面収差マップへの影響をある程度、詳細に観測できるようになりました。
次に、公称光学系の波面収差と、5 つのタイムステップ、10、60、600、1800、3600 秒の光学系の波面収差をそれぞれ比較してみましょう。
その結果によると、公称光学系から 10 秒のレーザー曝露後で、RMS スポット半径と RMS 波面収差が大幅に増大していることがわかります。この性能劣化は、レーザー加熱による熱弾性効果と熱光学効果によるものです。時間が進むにつれて、熱が光学系全体により均一に分布するようになり、光学系の形状や屈折率分布の変化もより均一/スムーズに変化します。これが、曝露時間が延びたときに、スポット サイズと RMS 波面収差が小さくなる効果に寄与していると思われます。
STAR モジュールは、システム ビューアでレンズ体積内の屈折利率勾配分布を表示するツールも提供します。下図に、5 つのタイムステップ、10、60、600、1800、3600 秒における屈折率勾配分布を示します。
この光学系では、熱の効果によってフォーカス スポット サイズが著しく大きくなり、光学系の効率を劣化させています。この効果は、光学コーティングをより透過率の高いものに変更するか、冷却効果を改善するために光学系の筐体を変更することなどで軽減可能と思われます。OpticStudio、OpticsBuilder、STAR モジュールによって実現されるワークフローは、このような改良設計の評価を円滑化し、最適解に達するまでの迅速な反復設計を可能にします。
まとめ
この記事では、OpticStudio STAR モジュールを使用して、構造、熱、光学性能の解析を行うワークフローを最初から最後まで通して紹介しました。起点となる最適化されたシーケンシャル光学系を OpticsBuilder にエクスポートして光学機械設計を行った後、再び OpticStudio のノンシーケンシャル モードにインポートして、ディテクタ (体積) を使用した光線追跡によって、レーザー加熱による各部品の吸収光束を測定しました。その結果を、OpticStudio ノンシーケンシャル モードからエクスポートし、FEA 解析のために FEA エンジニアと共有しました。FEA 解析が完了したら、STAR モジュールによって構造解析と熱解析の FEA データを OpticStudio のシーケンシャル モードに戻し、レーザー加熱による性能劣化を解析しました。
OpticStudio の STAR モジュールは、FEA の結果を OpticStudio に直接組み込む新しい機能を提供します。これによって、レーザー加熱による熱および構造変位の双方がもたらす影響を、より包括的に検討できます。
Zemax のツール スイート、OpticStudio、OpticsBuilder、STAR モジュールを組み合わせることで、設計チームは FEA データをシームレスに光学設計や光学機械設計のワークフローに統合できます。さらに、STAR API は、これらプロセスのすべてを効率化、自動化するときに威力を発揮します。
コメント
記事コメントは受け付けていません。