Ansys Zemax | 大功率激光系统的 STOP 分析(四)

大功率激光器广泛用于各种领域当中,例如激光切割、焊接、钻孔等应用中。由于镜头材料的体吸收或表面膜层带来的吸收效应,将导致在光学系统中由于激光能量吸收所产生的影响也显而易见,大功率激光器系统带来的激光能量加热会降低此类光学系统的性能。为了确保焦距稳定性和激光光束的尺寸和质量,有必要对这种效应进行建模。在本系列的 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…最大边长(Object Properties…CAD…Maximum edge length)参数为默认值 0,我们可以缩小探测面/像素尺寸(并增加像素数量)。


在本例中,我们将每个CAD元件的最大边长值设置为0.8mm。

系统选项:非序列模式设置

根据最小相对光线强度(Minimum Relative Ray Intensity)的默认设置,从 CAD 元件的膜层表面反射的光线在其功率降低至初始功率的0.1%(1e-3)以下时被终止。在我们对这个大功率激光器的分析中,即使功率阈值降低至初始功率相对较小的部分,每条光线所携带的能量仍然会导致系统加热,必须予以考虑。为避免这个阈值所导致的能量损耗,我们将最小相对光线强度(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 分析的数据类型:


本例中使用的 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 函数中得到定义:


计算局部坐标并取回吸收通量数值

对于 “物体作为探测器” 选项而言:

局部坐标将通过以下代码的各鳞甲像素循环形式进行计算:

detector.CurrentFace = j
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])/3y_position = (position_1[2] + position_2[2] + position_3[2])/3z_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) 运行。

1.首先打开非序列模式镜头文件,运行光线追迹,勾选使用偏振(‘Use      Polarization’)。

2.点击编程……交互式扩展(Click Programming…Interactive      Extension),然后在 Python IDE 中运行 ExportAbsorbedFlux.py 代码。

3.数据将保存为代码中指定的文件夹下的 txt 文件。在运行代码的过程中将显示附加数据的状态:


结论

我们已经成功仿真了激光光束穿过光学系统时的吸收情况,并生成了吸收通量数据的文件。该数据与完整光机系统的模型相结合,可以为 FEA 工具中的结构分析和热分析提供输入。在下一篇文章中,我们将演示如何使用 STAR 模块获得结构分析和热分析的输出,并导入到 OpticStudio 中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/69439.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

禾赛科技Q2营收交付双新高,国产激光雷达从量变到质变

随着2022年激光雷达元年、2023年城市智能辅助驾驶(NOA)元年相继到来,激光雷达产业迎来爆发期。 今年以来,自动驾驶公司、汽车制造商以及移动出行公司等各路人马积极推动城市级别的智能辅助驾驶全面落地,北京、上海、深…

Python源码05:使用Pyecharts画词云图图

**Pyecharts是一个用于生成 Echarts 图表的 Python 库。Echarts 是一个基于 JavaScript 的数据可视化库,提供了丰富的图表类型和交互功能。**通过 Pyecharts,你可以使用 Python 代码生成各种类型的 Echarts 图表,例如折线图、柱状图、饼图、散…

小游戏扫雷实现教学(详解)

目录 【前言】 一、模块化程序设计(多文件编程)介绍 1.概述 2.传统编程的方式 3.模块化程序设计的方法 二、扫雷代码设计思路 三、扫雷代码设计 1.创建菜单函数 2.实现9x9扫雷 3.初始化棋盘 4.打印棋盘 5.随机布置雷的位置 6.排查雷的信息 7.回…

大语言模型:LLM的概念是个啥?

一、说明 大语言模型(维基:LLM- large language model)是以大尺寸为特征的语言模型。它们的规模是由人工智能加速器实现的,人工智能加速器能够处理大量文本数据,这些数据大部分是从互联网上抓取的。 [1]所构建的人工神…

4 招搞定 Java List 排序

在开发 ERP 或电商系统中,经常会遇到内容加密,生成签名,展示页面列表等功能场景,这个时候我们需要在 Java 程序中对 List 集合进行排序操作。 排序的常见方法有以下 4 种: 1. 使用 Comparable 进行排序; 2. 使用 Com…

CSS自学框架之表单

首先我们看一下表单样式,下面共有5张截图 一、CSS代码 /*表单*/fieldset{border: none;margin-bottom: 2em;}fieldset > *{ margin-bottom: 1em }fieldset:last-child{ margin-bottom: 0 }fieldset legend{ margin: 0 0 1em }/* legend标签是CSS中用于定义…

jvm——垃圾回收机制(GC)详解

开始之前有几个GC的基本问题 什么是GC? GC 是 garbage collection 的缩写,意思是垃圾回收——把内存(特别是堆内存)中不再使用的空间释放掉;清理不再使用的对象。 为什么要GC? 堆内存是各个线程共享的空间…

android wifi扫描 framework层修改扫描间隔

frameworks/opt/net/wifi/service/java/com/android/server/wifi/ScanRequestProxy.java 这个也就是说前台应用可以在120s(2分钟) 扫描 4 次 * a) Each foreground app can request a max of* {link #SCAN_REQUEST_THROTTLE_MAX_IN_TIME_WINDOW_FG_APPS} scan every* {l…

辽宁线上3D三维虚拟工厂生产仿真系统应用场景及优势

工厂虚拟仿真是一种基于计算机技术和虚拟现实技术的数字化解决方案,它可以通过模拟工厂中的设备、流程和操作,来为工程师和操作人员提供了一个沉浸式的虚拟环境,帮助他们更好地了解和优化工厂生产过程。 工厂VR三维可视化技术为工业生产提供了…

ios swift alert 自定义弹框 点击半透明部分弹框消失

文章目录 1.BaseAlertVC2.BindFrameNumAlertVC 1.BaseAlertVC import UIKitclass BaseAlertVC: GLBaseViewController {let centerView UIView()override func viewDidLoad() {super.viewDidLoad()view.backgroundColor UIColor(displayP3Red: 0, green: 0, blue: 0, alpha:…

Spring相关面试题

👏作者简介:大家好,我是爱写博客的嗯哼,爱好Java的小菜鸟 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦 📝个人博客:敬请期待 📕系列…

拒绝摆烂!C语言练习打卡第二天

🔥博客主页:小王又困了 📚系列专栏:每日一练 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、选择题 📝1.第一题 📝2.第二题 📝…