目录
- 前言
- 一、一些界面上的说明
- 1、关于软边relative edge width
- 2、catalog里器件参数改动
- 3、系统光线分析仪的光线数
- 4、编程手册从哪看以及哪里可以编程
- 5、Multiple Light Source
- 6、多波长与多模式分开显示
- 7、harmonic fields set-manipulations
- 8、detector results显示功率小
- 9、不想显示光场只想要数据结果
- 10、插值方式
- 二、一些功能的发现
- 1、找到焦点
- 2、Modelling level怎么选
- 3、如何看logging
- 4、神奇的Modelling Analyser
- 5、导出bat文件
- 6、多个光源的切换
- 7、编程的API从哪看
- 8、模组的编写
- 9、多彩颜色
- 10、传播算子是怎么选出来的
- 总结
前言
这一篇可能没有什么章法,想着重跟大家分享一下在上海讯技光电本部两日学习的一些个内容,主要还是很多关于软件的常规操作,是由工程师亲自指导了的,可能能够解答大家很多底层的疑惑把。(注:所有操作均在2021版本下完成)
至于很多代码的内容,那当然还是秘密啦!大家如果都是试用版可能也跟我们一样是暂时操作不了编程的部分的。
一、一些界面上的说明
1、关于软边relative edge width
虽然默认都是10%,但是工程师告诉我们这并不是一个很好的值,一般工程中我们可能更期望设置为5%或者1%。这个软边的存在主要是想表明光在透过边缘的时候那种衍射的存在,当然还有就是它能减小软件内核的计算量。当我们把这个值设置到0%时,会发现仿真明显变慢。
2、catalog里器件参数改动
之前我一直认为catalog里面的器件参数都是定死的。没有发现这边左下角也是可以去实现一个编辑操作的。比如这边材料库中的N-BK7_Schott_2015材料(N-BK7是当下普及度最高的高品质光学仪器用光学特种玻璃),它的限制的工作波长范围是可以进行修改的,只不过这样修改把范围改大肯定是有问题的,因为原有的折射率曲线上并没有给出更大范围波段下的折射率。
3、系统光线分析仪的光线数
大家熟知的又一个用到了光线追迹原理的仿真引擎,比单纯的光线追迹引擎要更有趣些,可以看到整个系统的光线传播情况,而不是只能看到探测平面的点列图。在这样的3D显示中,其光线数目也可以在simulation settings中做一个修改。(或者直接在2021版本中点击对应仿真图标右下角的小铅笔)
你可能发现光源的设置界面中也有ray selection。这里显示的光线数是ray tracing结果的光线数
如果是ray tracing system analyser的2D view的光线数在这里显示。
4、编程手册从哪看以及哪里可以编程
软件右上角的问号直接点是help文档,点小箭头下面可以看到有编程参考文档。
(虽然试用版应该操作不了)比如我们现在想编一个光源,我们需要用到programmable light source-spatial parameter-edit。
注意灰色的区域都是改不了的。
添加变量从上面source code隔壁的global parameter添加就好,这样代码里就可以用了。
编好之后在最下面可以检查代码的正确与否。(再具体的细节也暂时是不能多说,咳咳其实确实也是不知道)
如果我们编程的时候发现有两个代码片。比如如下的detector function里面分别对应了等间距采样与非等间距采样,要注意仿真出来的效果也存在对应关系,如果改正了equidistant(等间距采样),就相当于仿真引擎要用经典场追迹,如果改正了non-equidistant(非等间距采样),就相当于仿真引擎要用光线追迹,那如果用场追迹,该怎么办呢,最好是两个代码片都改了(有时候只改等间距采样的代码片也有用,但有时候则会出错,以防万一,两个都改)。
举个例子,我们的programmable detection里面的两个代码里有这样一句,RayTracingResult.ResolveSmartHandlingOfFieldValues();如果非等间距采样里少了这句RayTracingResult.ResolveSmartHandlingOfFieldValues();最终会影响field tracing 的结果图,使得其没有外围一圈衍射,但是如果这时依然用classic field tracing,对结果图是没有影响的,依然会保留外围一圈衍射。
当然如果非等间距少了这句,我们用level 3而不用level 1依然可以得到带有衍射圈的结果。这是我们后面会讲到的为什么总要去选level 3。
但是如果没有经过传输距离(探测器的距离设置),它依然会停留在光线追迹,没有用到FFT,依然会停留在非等间距采样,又没有衍射环了。
再举个例子,我们在下面的代码(非等间距采样)里删掉一些东西。
当我们把这一行在下面这个snippet注掉后,再用level 1会报错,当然用3或者level 2的话就一切正常,这是因为用1的话,还是会涉及到非等间距采样,用level 2和level 3的话就用了FFT,用了等间距采样,所以不会调用下面这个代码片,而是调用上面的snippet,所以不会出错。
5、Multiple Light Source
可以让不同的光源以相干或者非相干的状态同时工作,可以解决下面“二、6”的光源无法同时工作的问题。但是会发现这边要想导入都必须得是catalog里的光源,所以如果自己做了一个光源就应该放到catalog里才能在这边调用。或者也可以直接从catalog这里的接口programmable light source的接口进行customized的光源的制作。
当然上面也说到可以直接制作光源,但这也离不开catalog,需要进入到light sources里的programmable light source(definition type在templates面板下)然后进行相应的编程。
编好之后,你制作的光源会出现在user defined面板下面。
PS:virtualLab做部分相干光的时候都通过模式叠加来作。
6、多波长与多模式分开显示
之前可能大家看到的多波长显示都是二维的,今天看个三维的,用ray tracing system analyser看3d view,在左上角我们可以把wavelengths前面勾掉,一个波长一个波长的看,类似地,多模式分开看也是可以的。比如我们现在用scanning source。进行如下的设定。
还是在左上角,把incoherent mode前面勾掉,就可以一一显示了。
(你可能发现你的颜色比较单调,为了方便显示,我们可以选择将它变成五彩斑斓的颜色,我们在下面会说到颜色显示的问题)
7、harmonic fields set-manipulations
plane wave下设了3个波长,所以现在有3个图。
这时进入manipulations界面会看到2021面板下有很多新的操作。
member harmonic fields这里可以做数据处理。
extract field可以提取出单色光的场。
提取数据阵列后会丢失掉之前的一些场信息。比如把三个场多波长的数据合到一起,这样的转化中会丢失掉颜色信息。
PS:编程的时候还要注意针对不同的数据类型所用的语句可能也会有差异
8、detector results显示功率小
VirtualLab里面光源的功率通常都很小。有一个改大的方法。
比如我们可以plane wave 里面weight做大。
9、不想显示光场只想要数据结果
这样仿真后不显示光场,只显示下面的detector results。
10、插值方式
之前一直可能也是插值方式选不明白,所以多数时候我们软件探测器默认的插值方式都是还不错的。那关于几个常用的插值方式这边也给大家比较看看效果。
通常情况下cubic 6p的效果是相当不错的。
二、一些功能的发现
1、找到焦点
对于一个搭建好的系统来说,找到焦点还是挺必要的。这样可以把探测器放到对应的位置上去,软件中的这个位置可以帮我们找到系统的焦点位置。
2、Modelling level怎么选
在2021版的optical setup中非常贴心的设置了modelling level的几个选择方式。首先需要明确这些levels的选择当然都是在仿真引擎为field tracing的情况下。level 1当然简单粗暴,不考虑所有的衍射,显然这也是和真实情况相差最远的情况,但是计算也会最快;level 2仅考虑了在焦点区域的衍射;level 3则可以看成是考虑了所有的衍射的纯纯的物理光学仿真;另外还有自定义的设置。一般的建议都是在不熟悉系统的情况下首选level 3,虽然其计算量也最大,有时用2代之也可。
如果是特别熟悉系统的,当然用自定义可能更符合需求。这时需要明确一个知识点,等间距采样与非等间距采样同PFT与FFT的对应关系。等间距采样对应FFT,非等间距采样对应PFT。元件尺寸大的时候用PFT和FFT其实差不多,但是FFT的计算量始终是会比较慢的,如果不考虑时间代价,用FFT当然肯定是最好的。
选1、2、3的时候,软件会默认帮忙选好,自定义的部分是灰色的,没有被激活;选自定义的时候可以再手动在simulation settings里去选PFT或者FFT,刚才灰色的区域被激活。
选了自定义后,也可以去到对应元件设置面板的fourier transform中激活自定义设置进行PFT/FFT选取。
但是如果选用的有具体的level而非自定义的话,比如选2的时候只考虑聚焦面附近的衍射,也就是说对于一个简单的透镜聚焦系统来说,从光源到透镜系统之间用的都是PFT,但是探测器面上用的还是FFT,这些软件都负责帮忙选好了,再去元件面板中进行相关的customized设置也是没有用的。
PS:有趣的是当用level 1 的时候,左上角会有field property 和ray property 两种,当用level 3时,因为有强制使用FFT在里面,不会再有这样的两种选择。
3、如何看logging
日志有时候还是挺重要的,能帮我们看到采样点数,看到在每个界面上用了什么算法,你也可以根据日志推测一次仿真在运行到哪一步也即到哪个界面上软件开始算不动了。
我们在软件右侧的property browser-simulation settings-general下面去让我们的logging能detailed的显示出来。
4、神奇的Modelling Analyser
之前也确实是没有使用过这样一个仿真引擎,但是发现它非常有意思,可以观察到一趟仿真下来,软件每一步仿真的结果,而不是只得到最后的结果。
举个例子来说,平面波经过一个透镜的传输中软件在不同元件的界面上会进行这样不同的操作。从X域到K域反复变换。你也可以在logging中去看这样的每一步,不过modelling analyser可以更清晰的展示出每一步的结果而不是简单的记录下来。K域的传输中用的是P传输因子,X域到K域的转换则涉及到选择的是PFT还是FFT。
一共12个分布结果图。
2022新版本里傅里叶变换的采样会更灵活,应该是变成了可以人为去设置采样点数的版本。
5、导出bat文件
export成batch mode file。
导出到一个文件夹中后会有三个文件。
运行bat文件,得到一个文件夹,得到有ca2文件,是探测器的数据文件。用记事本打开bat文件,把这个去掉。
把这个删除再去运行不会再得到子文件夹。直接就在刚才的路径之下再生成新的文件。
如此bat可以和matlab进行交互。
当然这边文件夹中的results.xml文件可以用浏览器打开,里面的结果自然应该同软件里的一致。
6、多个光源的切换
经常会发现在有多个光源的编辑窗的时候,没法让多个光源接着同一个探测器,可以点击tools下的toggle light source实现光源的强制切换。
7、编程的API从哪看
不多说,直接传送门: 了解如何在 .NET 平台上使用 C# 编程语言编写任何应用程序。
8、模组的编写
确实现在这个有点不初学者了,有的朋友可能已经很熟悉软件但还苦于不知道更高端的功能从何探索起。这边可以写C# module。这个模组是一串非常有趣的具有特定功能的程序代码。执行模组可以在更大程度上去帮助我们实现一些操作。下面的模组语句就很直白就是去选择一个我们已经打开了的场文件,没有返回值。
我们先编译,再运行之后,会得到一个弹窗,弹窗里显示的就是有你现在已经打开了的场文件。
我们在给我们刚才选中的场打开一下,并起个新的名字。
有了下面这新的一行,我们可以朝messages 里写一条我们想要的信息。
9、多彩颜色
有时候可能需要更多种色彩的显示,方便效果图的展示等等,你可能需要在这里添加更多样的颜色。或者在下面的edit color table处去编辑你的color tables。
10、传播算子是怎么选出来的
先用菜单栏下的sources搞一个平面波。打开它的propagations-automatic propagation operator。点一下analyze,分析一下使用不同算子会带来怎样的偏差。
发现用到菲涅尔传输算子,这是软件自己算好评判选用的。
但显然在软件界面中操作,是不能四个都不勾选的,但是如果有一个模组的话,我们模组里可以四个都false。(你可能猜到模组很多时候实现的功能软件里可以通过一些界面操作来实现,但是模组又有它的强大之处)
总结
这篇可能不是那种有操作流程的之前的模式了,更多是tips的碎碎念,毕竟是特辑嘛!希望能够或多或少帮到大家。