大功率激光器廣泛用于各種領域當中,例如激光切割、焊接、鉆孔等應用中。由于鏡頭材料的體吸收或表面膜層帶來的吸收效應,將導致在光學系統中由于激光能量吸收所產生的影響也顯而易見,大功率激光器系統帶來的激光能量加熱會降低此類光學系統的性能。為了確保焦距穩定性和激光光束的尺寸和質量,有必要對這種效應進行建模。
在本系列的 5 篇文章中,我們將對激光加熱效應進行仿真,包括由于鏡頭材料溫度升高而引起的折射率變化,以及由機械應力和熱彈性效應造成的結構變形。
FEA 分析準備
在本文中,我們將在OpticStudio中打開完整的光機系統,準備記錄光束穿過鏡頭和反射鏡時被吸收的激光功率。隨后,我們使用可以導入到FEA軟件的格式來導出此數據。打開附件中的‘system_NSC_2022.zar’ 文件。
體探測器物體
與 2D 探測器物體(例如矩形探測器、表面探測器、顏色探測器等)不同,體探測器為 3D 物體形式的探測器,探測器將通過像元(體積形式的像素)記錄對應的吸收通量、入射通量以及體吸收通量。為了獲得鏡頭中對應的吸收通量數據,我們將在系統中使用體探測器物體。
當使用體探測器時,我們可以充分利用非序列模式中的嵌套規則,計算鏡頭等物體內部吸收的通量。如果兩個非序列模式物體在空間里重疊,則重疊區域中的光線行為由嵌套規則進行確定。嵌套規則規定:如果光線在空間里的同一位置上照射到一個以上的物體,NSC編輯器中列出的最后一個物體將用于確定該位置上用于與光線相互作用的表面屬性或體屬性。
添加體探測器物體
為了獲得鏡頭吸收的通量,我們將為每個元件添加一個體探測器物體。根據嵌套規則,在NSCE的每個鏡頭前面插入一個略大于相應鏡頭元件的體探測器。#X Pixel、#Y Pixel和#Z Pixel等參數可用于指定每個體探測器物體中的像元總數量。此時,我們應該與FEA工程師進行溝通如何設置該像元數量,這樣有助于確保無需使用過多像元數量的情況下為FEA分析提供足夠高的分辨率設置,以避免進行過多數量的光線追跡。在本例中,我們決定使用適中的像元采樣100x100x100。
根據以下 NSCE 截圖,添加對應的體探測器物體。
為機械元件應用膜層
現在,我們為所有機械元件(NSCE中的14-26號CAD物體)應用反射、吸收和散射屬性,可通過物體屬性...膜層/散射 (Object Properties…Coat/Scatter) 部分進行設置。我們可以針對 Face 0 設置膜層 AL_LASER 用于指定反射和吸收特性,散射則可以通過使用 散射分數=1 的朗伯散射模型進行定義。這些設置通用于 NSCE 中高亮表示的所有對應物體。
物體屬性設置
在所有導入的CAD元件仍處于選中狀態的情況下,我們打開物體屬性……類型(Object Properties…Type)并勾選物體作為探測器(‘Object is A Detector’)選項。這樣就能將這些物體設置為探測器(用于渲染CAD物體的三角形網格被視為像素網格記錄數據),從而能夠記錄物體表面上吸收的通量。
對于被用作探測器的 CAD 元件而言,被用作像素探測面的默認數值可能不足以提供準確記錄數據所需的分辨率。通過修改 物體屬性…CAD…ZUI大邊長(Object Properties…CAD…Maximum edge length)參數為默認值 0,我們可以縮小探測面/像素尺寸(并增加像素數量)。
在本例中,我們將每個CAD元件的ZUI大邊長值設置為0.8mm。
系統選項:非序列模式設置
根據ZUI小相對光線強度(Minimum Relative Ray Intensity)的默認設置,從CAD元件的膜層表面反射的光線在其功率降低至初始功率的0.1%(1e-3)以下時被終止。在我們對這個大功率激光器的分析中,即使功率閾值降低至初始功率相對較小的部分,每條光線所攜帶的能量仍然會導致系統加熱,必須予以考慮。為避免這個閾值所導致的能量損耗,我們將ZUI小相對光線強度(Minimum Relative Ray Intensity)設置為1.0000E-007。
本階段操作的實例文件 'system_NSC_2022_Final.zar’ 可通過點擊原文鏈接下載。
光線追跡和取回吸收數據
在使用如下所示設置運行光線追跡后,吸收的通量數據將存儲在探測器中,并且可通過ZOS-API進行使用和取回。
任何物體作為探測器(‘Object is Detector’)的表面上輻照度都可以在實體(Shaded)模型中直觀地顯示。
而且體探測器內部的吸收通量可以在探測器查看器中進行查看。
ZOS-API 作為一種有助于自動化運行數據導出流程的強大工具。在下一部分中,我們將演示如何使用ZOS-API腳本來取回探測器上存儲的通量數據,并對輸出進行配置,以符合您FEA軟件的輸入要求。
示例中所需的數據格式
在OpticStudio中,不同類型的探測器能夠存儲不同類型的數據。下表總結了我們從FEA分析所使用的每種探測器中抽取的數據類型。
探測器類型 | 數據類型 | 輻射單位 | 能量單位 |
矩形探測器 | 輻射照度 | 瓦/平方米 | 焦耳/平方米 |
瓦/平方厘米 | 焦耳/平方厘米 | ||
瓦/平方毫米 | 焦耳/平方毫米 | ||
瓦/平方英尺 | 焦耳/平方英尺 | ||
瓦/平方英寸 | 焦耳/平方英寸 | ||
輻射強度 | 瓦/球面度 | 焦耳/球面度 | |
輝度 | 瓦/球面度-平方米 | 焦耳/球面度-平方米 | |
體探測器 | 入射通量 | 瓦 | 吸收通量/體積 |
吸收通量 | 瓦 | 焦耳 | |
吸收通量/體積 | 瓦/立方米 | 焦耳/立方米 | |
瓦/立方厘米 | 焦耳/立方厘米 | ||
瓦/立方毫米 | 焦耳/立方毫米 | ||
瓦/立方英尺 | 焦耳/立方英尺 | ||
瓦/立方英寸 | 焦耳/立方英寸 | ||
物體作為探測器 | 入射通量 | 瓦/平方米 | 焦耳/平方米 |
瓦/平方厘米 | 焦耳/平方厘米 | ||
瓦/平方毫米 | 焦耳/平方毫米 | ||
瓦/平方英尺 | 焦耳/平方英尺 | ||
吸收通量 | 瓦/平方英寸 | 焦耳/平方英寸 |
下方表格中總結了可從各種探測器中獲取并用于 FEA 分析的數據類型:
探測器類型 | 像素形狀 | 數據類型 |
輻射學 單位 |
ZOS-API 語句 | |
矩形探測器 | 矩形 | 輻照度 |
瓦/ 平方厘米 |
bool | GetDetectorData(int ObjectNumber, int pixel, int Data(=2), out double Value) |
體探測器 | 矩形體積 | 吸收通量/體積 |
瓦/ 立方厘米 |
bool | GetDetectorData(int ObjectNumber, int pixel, int Data(=2), out double Value) |
物體作為探測器 | 三角形 | 吸收通量 |
瓦/ 平方厘米 |
double | AbsorbedIrradiance[get] |
本例中使用的 FEA 軟件是 Ansys Mechanical,它可以將吸收通量數據作為外部熱源導入,以用于熱模擬。導入數據所需的格式如下:
X Y Z AbsorbedData
X、 Y、Z 是每個像素中心的全局坐標,而 AbsorbedData 是上面列出的數據類型的值。
請注意,當從 “探測器查看器” 窗口檢查吸收通量數據時,針對 “物體作為探測器” 選項數據盡快在 “文本” 選項卡中進行查看。“文本” 選項卡將顯示每個三角形像素的 “通量” 和 “輻照度” 值的文本列表。X、Y 和 Z 值是每個像素中心的局部坐標。在 STOP 分析過程中,最好使用一個統一的全局坐標系。如果要在全局坐標中導出數據,則需要進行適當的坐標轉換。
使用 ZOS-API 導出吸收數據
我們創建了自動運行這個流程,用于取回、格式排版和導出數據的Python腳本,如文章附件 ‘ExportAbsorbedFlux.py’。以下章節內容將解釋該部分代碼的具體意義。
計算旋轉矩陣
首先,我們需要確定系統中每個物體的旋轉矩陣。如果未勾選 “物體屬性…類型…使用全局 XYZ 旋轉順序” 選項,則使用以下公式計算物體的旋轉矩陣,其中 A、B 和 C 是 NSCE 中列出的傾斜 X、Y、Z 角度。
相反,如果勾選了 “使用全局 XYZ 旋轉順序” 選項,則物體的旋轉矩陣取決于:
以上計算將在 rotation_matrix 函數中得到定義:
將局部坐標轉換為全局坐標
將物體局部坐標轉換為全局坐標的公式形式可以表達為如下形式:
其中,g 下標表示全局坐標,o 表示偏移,l 表示局部物體坐標。R11、R12…R33 是物體旋轉矩陣 R 的分量。
以上計算將在 convert_to_global 函數中得到定義:
計算局部坐標并取回吸收通量數值
對于 “物體作為探測器” 選項而言:
局部坐標將通過以下代碼的各鱗甲像素循環形式進行計算:
position_1 = detector.GetVertex(0, 0.0, 0.0, 0.0)
position_2 = detector.GetVertex(1, 0.0, 0.0, 0.0)
position_3 = detector.GetVertex(2, 0.0, 0.0, 0.0)
x_position = (position_1[1] + position_2[1] + position_3[1])/3
y_position = (position_1[2] + position_2[2] + position_3[2])/3
z_position = (position_1[3] + position_2[3] + position_3[3])/3value = detector.AbsorbedIrradiance
position_1、position_2、position_3 代表各三角形像素的三個頂點。
bool GetVertex (int vertexNumber, out double X, out double Y, out double Z)
GetVertex 方法將用于取回指定頂點的 X、Y、Z 坐標值。之后,該三角形中心的坐標值將得到計算。
對于矩形探測器和體探測器而言,局部坐標將通過以下代碼中的矩形像素/矩形體積像素循環中得到計算。
# Detector Rectanglelocal_x = ((j % pixelsX) - ((pixelsX - 1) / 2)) * (widthX / pixelsX)
local_y = (((j // pixelsX) % pixelsX) - ((pixelsY - 1) / 2)) * (widthY / pixelsY)
local_z = 0.0
value = TheNCE.GetDetectorData(i + 1, j + 1, 2, 0.0)[1]
# Detector Volumelocal_x = ((j % voxelsX) - ((voxelsX - 1) / 2)) * (widthX / voxelsX)
local_y = (((j // voxelsX) % voxelsY) - ((voxelsY - 1) / 2)) * (widthY / voxelsY)
local_z = ((j // (voxelsX * voxelsY)) - ((voxelsZ - 1) / 2)) * (widthZ / voxelsZ)
value = TheNCE.GetDetectorData(i + 1, j + 1, 2, 0.0)[1]
對吸收的數據進行逐像素數據取回,其中 i 表示物體序號的循環,j 表示像素序號的循環。參考的本地坐標系位于該物體的中心,在決定如何循環并依據從像素到像素順序獲取數據時,應注意探測器的像素編號。對于每種探測器類型,可以在 OpticStudio 幫助文件條目中查看探測器的像素編號注釋。
將局部坐標轉換為全局坐標并獲取結果
將提前創建空的數據陣列,例如 ‘detectorData’ 將用于存放局部坐標以及探測器數據,‘global_detectorData’ 將用于存放全局坐標以及探測器數據:
detectorData = []
global_detectorData = []
局部數據將作為各探測器像素循環計算的附加項:
detectorData.append([local_x, local_y, local_z, float(value)])
最終,各探測器具有局部坐標的陣列將轉換為具有全局坐標的數據陣列:
detectorData.append([local_x, local_y, local_z, float(value)])
如何使用 Python 代碼
該代碼將結合 OpticStudio 的交互擴展形式 (Interactive Extension) 運行。
首先打開非序列模式鏡頭文件,運行光線追跡,勾選使用偏振(‘Use Polarization’)。
點擊編程……交互式擴展(Click Programming…Interactive Extension),然后在Python IDE 中運行 ExportAbsorbedFlux.py 代碼。
數據將保存為代碼中指定的文件夾下的 txt 文件。在運行代碼的過程中將顯示附加數據的狀態:
結論
我們已經成功仿真了激光光束穿過光學系統時的吸收情況,并生成了吸收通量數據的文件。該數據與完整光機系統的模型相結合,可以為 FEA 工具中的結構分析和熱分析提供輸入。在下一篇文章中,我們將演示如何使用 STAR 模塊獲得結構分析和熱分析的輸出,并導入到 OpticStudio 中。
審核編輯:劉清
-
探測器
+關注
關注
14文章
2642瀏覽量
73039 -
激光器
+關注
關注
17文章
2518瀏覽量
60395 -
CAD
+關注
關注
17文章
1092瀏覽量
72530
原文標題:大功率激光系統的STOP分析4:使用OpticStudio仿真激光吸收
文章出處:【微信號:光電資訊,微信公眾號:光電資訊】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論